Основные принципы ООП

Пр.2.4

Пр.2.3

Методы (правила).

Пр.2.2

Иерархия классов.

Класс может наследовать компоненты из другого класса. Наследующий дочерний класс – потомок, а наследуемый – предок. Процедура наследования относится только к классам, но не к объектам. Потомки содержат все методы и поля предков.

При создании нового класса описываются только новые поля и методы. Если в родительском классе поле изменено, то у потомков тоже это поле изменено. Ни у одного потомка не должно быть полей, имена которых такие же как у любого из предков. А имена методов могут совпадать.

При наследовании классов важную роль играет статус доступа (статус внешней видимости) компонентов. Для любого класса все его компоненты лежат в области его действия. Тем самым любая принадлежащая классу функция может использовать любые компонентные данные и вызывать любые принадлежащие классу функции. Вне класса в общем случае доступны только те его компоненты, которые имеют статус public.

В иерархии классов соглашение относительно доступности компонентов класса следующее.

· Собственные (private) методы и данные доступны только внутри того класса, где они определены.

· Защищенные (protected) компоненты доступны внутри класса, в котором они определены, и дополнительно доступны во всех производных классах.

· Общедоступные (public) компоненты класса видимы из любой точки программы, т.е. являются глобальными.

class B { protected: int t;

public: char u;

};

class E: B {... }; // t, и наследуются как private

class S: B {... }; // t, и наследуются как public

Явно изменить умалчиваемый статус доступа при наследовании можно с помощью спецификаторов доступа - private, protected и public. Эти спецификаторы доступа указываются в описании производного класса непосредственно перед нужными именами базовых классов. Если класс B определен так, как показано выше, то можно ввести следующие производные классы:

class M: protected B {... }; // t, и наследуется как protected

class P: public B {... }; // t - protected, u - public

class D: private B {... }; // t, u наследуется как private

struct F: private B {... }; // t, u наследуется как private

struct G: public B {... }; t - protected, u - public

class tPoint {

int x, y;

}

class tColorPoint: tPoint { – принцип наследования

unsigned char color;

}

Не допускается прямое обращение к полям. Принцип наследования является основным отличием ООП от структурного программирования.

Наследование одного класса от другого может продолжаться бесконечно, таким образом образуется иерархия классов.

Фигура
квадрат
Окр -ть
эллипс
Прямоуг.
Построим другую иерархию:

tlocation

Цв.точка
tPoint

tEllipse tRect

Иерархия строится от общего к частному (координаты точки x, y, центр фигуры). Верхние классы иерархии обычно не имеют объектов – их называют абстрактные.

ООП исключает прямое обращение к полям. Для работы с полями используют методы.

Метод – процедура или функция объявленная внутри класса.

Внутри класса только заголовок метода. Тело метода можно описывать сразу после описания своего класса или после описания всех классов (предпочтительнее). Классы и их методы имеют общую область действия в памяти, поэтому имена формальных параметров метода и имена полей не должны совпадать.

class tlocation {

инкап- public:

int x, y;

суляция void Init (int Init X, Init Y);

};

class tPoint: public: tlocation {

int color;

};

void tlocation:: Init(int Init X, Init Y)

{

x=Init X;

y=Init Y;

};

Main() {

tPoint p;

p.Init(23,56);

p.color= 14;

class tlocation {

public:

int x, y;

void Init (int Init X, Init Y);

};

void tlocation:: Init(int Init X, Init Y)

{

x=Init X;

y=Init Y;

};

class tPoint public: tlocation {

int color;

void Init (int Init X, Init Y, col);

};

void tPoint:: Init(int Init X, Init Y, col)

{ x= Init X; tlocation::Init(Init X, Init Y);

y= init Y;

color=col;

}

Begin

p.Init(23,56,11);

end;

При описании метода указывается <имя класса>::<имя метода> при вызове метода указывается <имя объекта>.<имя метода>. В этом примере – перекрытие метода Init.(подавление). Метод Init класса tPoint перекрывает или подавляет одноимённый метод родительского класса.

Порядок вызова методов.

Сначала компилятор ищет данный метод в классе, к которому принадлежит вызывающий объект, если не находит, то ищет метод в родительском классе и далее вверх по иерархии. Если метод не найден, то выдаёт сообщение об ошибке.

1. Инкапсуляция

2. Наследование

3. Полиморфизм

1. Инкапсуляция – объединение полей записи с процедурами и функциями, работающих с полями этих записей, которое формирует новый тип объекта.

2. Наследование – создание иерархии классов для того, чтобы поля данных и методы предков автоматически были полями данных и методами потомков. Наследование полей и методов различны.

3. Полиморфизм – присвоение определённому действию одного имени, которое затем совместно используется по всей иерархии класса (сверху вниз), причем каждый класс иерархии выполняет характерным именно для него способом.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: