Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная работа 1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
101 Кб
Скачать
☆

2 Понятие объекта

Объект – структурированная переменная, содержащая всю информацию о некотором физическом предмете или реализуемом в программе понятии, т.е. это некоторая сущность, имеющая четко выраженные границы [1-3].

Объект может быть реальным или абстрактным.

Каждый объект характеризуется тремя составляющими:

1. Состояние.

2. Поведение.

3. Индивидуальность.

Объект – набор свойств. Объект описывается некоторым набором свойств (статических) и набором значений, как правило динамических. Набор значений динамический, если он меняется. Например: Студент (имя, возраст, рост, вес).

Объекты, взаимодействуя друг с другом, могут выполнять различные операции друг над другом.

  1. Модификатор (операция, изменяющая свойства объекта).

  2. Селектор (операция, позволяющая читать значение свойств объекта).

  3. Итератор (операция, позволяющая получать последовательный доступ к свойствам объекта).

  4. Конструктор (операция, создающая объект).

  5. Деструктор (операция, разрушающая объект).

Индивидуальность – набор свойств объекта, который позволяет определить уникальный объект (экземпляр объекта), т.е. это то, что отличает один объект от другого. Существует также такое понятие как тождественность. Два объекта тождественны друг другу, если они имеют одинаковые имена или же одинаковый набор свойств их значений.

Отношения между объектами.

1. Воздействие: Один объект может выполнять операции над другим объектом. Например: В объекте " утюг " существует второй объект - датчик температуры, который может включать и выключать температуру, тем самым выполняет воздействие.

Если объекты находятся в отношении воздействия, они могут относиться к одной из трех категорий:

  1. объекты, которые воздействуют сами и не поддаются воздействию со стороны других объектов.

  2. объекты, которые только выполняют некоторые операции, они являются исполнителями.

  3. объекты, выполняющие воздействие и сами подвергающиеся воздействию.

2. Включение: Объекты могут быть составной частью других объектов.

3 Понятие класса

Когда мы описывали технологию ООП, мы говорили, что, класс (базовое понятие этой технологии) объединяет в себе данные (структурированная переменная) и методы (функции) [1-3].

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

Как правило, имеет место иерархия классов, а технология ООП иначе может быть названа как программирование "от класса к классу".

Как выше сказано, класс - базовое понятие этой технологии объединяет в себе данные и методы.

Класс можно также охарактеризовать так: Класс - описание множества объектов и выполняемых над ними действий.

Класс описывается (декларируется) следующим образом:

тип_класса имя_класса {поля, методы};

Class New_class {……описание членов класса………..};

Тип класса может быть задан одним из 3-х атрибутов: class, struct, union. Имя класса становится идентификатором нового типа данных. Поля определяются с помощью базовых типов, методы записываются как обычные функции.

Например: в данном случае класс имеет имя Book и поля: название, автор, цена:

Отношения между классами:

1. Разновидность (роза является разновидностью цветов).

2. Составная часть (Класс определяет часть другого класса).

3. Отношение ассоциативности (Розы и гвоздики являются украшением стола).

4. Наследование. Одно из базовых понятий ООП.

Если имеется иерархия классов, то подкласс может использовать свойства и методы своего родительского класса, причем наследование осуществляется по всей иерархии класса; Наследование в иерархии классов может отображаться и в виде дерева, и в виде более общего направленного ациклического графа. Допускается множественное наследование - возможность для некоторого класса наследовать компоненты нескольких никак не связанных между собой базовых классов.

Если класс D наследует структуру и поведение класса В, то класс В называют базовым, а класс D - производным.

В иерархической структуре такое наследование изображается стрелкой, идущей от класса D к классу В ( D->В ). Причем не следует думать, что синонимы слов базовый, производный несут другую смысловую нагрузку, т.е. Базовый класс (base) так же можно назвать суперклассом (superclass), родителем (parent), предшественником.

Класс D называют: производным, подклассом, ребенком, потомком.

Существует такое понятие как метакласс. Метакласс - описывает множество классов;

Интерфейсная часть описания классов может быть трех типов.

Доступ к наследуемым компонентам.

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

Варианты наследования прав доступа приведены в таблице 1.1.

Таблица 1.1 – Варианты наследования прав доступа

Доступ в базовом классе

Модификатор доступа

Унаследованные права доступа

private

private

Не доступен

protected

private

private

public

private

private

private

public

Не доступен

protected

public

protected

public

public

public

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

Protected - Защищенная часть класса. Она доступна только для объектов данного класса или для объектов порожденных классов.

Protected - Личная или обособленная часть . Доступна только для объектов данного класса.

Свойство protected аналогично свойству private, но доступ к такому компоненту возможен как через интерфейс базового класса, так и через интерфейс производного. По умолчанию для базового класса типа class в качестве модификатора доступа используется private, для класса struct - public.

Пример программы.

Класс Node задает тип данных, которым является элемент одностороннего списка; класс List является базовым, класс Stack -производным это обозначается так: (List<- Stack), а описывается так:

StructNode

{

Int elem;

Node *next,

Node (int el, Node *ptr)

{

elem=el;

next=ptr;

}

};

class List

{

protected:

Node *head;

public:

List() {head=0;}

List(int a) {head=new Node(a,0),}

Void Show(void);

~List();

};

class Stack: public List

{

public:

Stack (int el): List(el){};

void Push(int);

intPop();

};

Унаследованная переменная head может быть использована в теле функций Push и Pop, но в программе она доступна только через интерфейс классов - функции Push, Pop, Show.

Отметим следующий момент: если производный класс был унаследован из базового с модификатором public, то указатель на базовый класс можно использовать и как указатель на производный класс без какого-либо преобразования типов:

указатель_на_ базовый = указатель_на_производный;

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

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