Виды отношений между классами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Виды отношений между классами



 

Ассоциация представляет смысловую связь между сущностями(объектами),создаваемыми на основе классов. Ассоциация (association) определяется некото-рой связью между классами. Когда в системе создаются представители ассоции-рованных классов, они связываются так, как определяет данная ассоциация.

 

Ассоциации между классами разрабатываются в процессе так называемого семантического моделирования:моделирования структуры данных исходя изих смысла. Для этого полезно использовать ER-диаграммы (Entity – Relationship: Сущность – Связь).

 

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

 

Основными понятиями, используемыми при построении ER-диаграмм, яв-ляются:

 

1. Сущность –класс однотипных объектов,информация о которыхдолжна быть учтена в модели. Сущность в рамках ООП представляется классом.

 

2. Экземпляр сущности –объект,создаваемый на основе класса.

 

3. Атрибут сущности –именованная характеристика.В ООП–инфор-мационный член класса

4. Ключ сущности –совокупность атрибутов,однозначно определяющихобъект.

 

5. Связь –ассоциация между сущностями.

 

Типы связей:

 

− один к одному

− один ко многим

 

− многие ко многим

 

Пример связи: группа – студенты. Связь может иметь одну из двух модаль-ностей:

 

− может (может быть, а может и не быть)

 

− должен

 

При разработке ER-модели определяется следующая информация:

 

− Список сущностей

− Список атрибутов

 

− Описание связей

 

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

 

Наследование –отношение между классами,при котором один класс по-вторяет структуру и поведение другого класса (одиночное наследование) или других (множественное наследование) классов.

 

Класс, поведение и структура которого наследуется, называется базовым (родительским) классом, а класс, который наследует – производным классом.

 

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

 

class z: public y{... };

 

Агрегация –это отношение между классами типа целое/часть.Агрегируе-мый класс в той или иной форме является частью агрегата. Объект класса-агрегата может хранить объект агрегируемого класса, или хранить ссылку (указатель) на него.

 

Пример:

 

class node {...};//агрегируемый класс,описывающий// вершину дерева

 

class tree { // класс-агрегат, описывающий дерево.

 

node* root; // единственным информационным членом

 

// является указатель на выделенную

// вершину – корень дерева

 

public:

 

tree(){root = 0;}

 

...

 

};

 

Композиция является специальным видом агрегирования(так называемоесильное агрегирование). Композиция объектов заключается в использовании объектов типов разработанных классов в качестве информационных членов при описании других классов.

 

Пример:

 

class point{ int x,y;

public:

 

point(){...}

 

point(int x1, int y1){...}

 

...

 

};

 

class z1{point p; int z;

 

public:

 

z1(int z2){... }

 

...

 

};

 

z1* z3 = new z1(1);

 

Использование –отношение между классами,при котором один класс всвоей реализации использует в той или иной форме реализацию объектов другого класса.

 

Использование одним классом объектов другого класса может проявляться одним из следующих образов:

 

• Имя одного класса используется в профиле метода другого класса

 

• В теле метода одного класса создаётся локальный объект другого класса

 

• Метод одного класса обращается к методу другого класса (не совсем частный случай предыдущего способа использования, так как при вы-зове статических членов классов локальный объект не создаётся).

 

 

Одиночное наследование

 

Правила наследования

 

Наследование является одним из трех основных механизмов ООЯП. В ре-зультате использования механизма наследования осуществляется формирование иерархических связей между описываемыми типами. Тип-наследник уточняет базовый тип.

 

Прототип объявления типа-наследника:

 

 

Пример:

 

struct A { int x,y;

 

};

 

struct B: A { int z;

 

};

 

A a1;

 

B b1; b1.x = 1; b1.y = 2; b1.z = 3; a1 = b1;

 

Объект типа B наследует свойства объекта типа A.

 

Таким образом, объект типа-наследника содержит внутри себя члены ба-зового типа:

 

 

При наследовании наследуются не только информационные члены, но и методы.

Не наследуются:

ƒ Конструкторы

ƒ Деструктор

 

ƒ Операция присваивания

 

Как уже было описано, единственный способ использования конструктора базового класса – список инициализации. Он записывается при описании кон-структора производного класса:

 

И мя _ производ     : Имя _ базового       {...}  
  формальные   фактические  
ного _ класса   парамет ры класса с парам   параметры    
                   

 

При создании объекта производного типа B сначала будет вызван конст-руктор базового типа A. При этом если конструктору базового типа нужны па-

раметры, то его необходимо вызывать явно в списке инициализации. Затем будет вызван конструктор производного типа B.

 

Деструкторы вызываются в обратном порядке. При разрушении объекта производного типа сначала будет вызван деструктор этого типа, а затем дест-руктор базового типа.

Допустимо присвоение объекту базового типа объекта производного типа. При этом объекту базового типа будет присвоена та часть объекта производного типа, которая структурно совпадает с базовым типом.

 

10.2. Преобразования указателей.

 

Безопасным приведением является приведение указателя на объект ти-па-наследника к указателю на объект базового типа.

 

Пусть A и B – типы из предыдущего примера. Тогда

 

A a1; A* pa;

B b1; B* pb; pb = &b1;

 

pa = pb; // Указателю pa присваивается адрес объекта

 

// b. Т.к. указатель pa описан как указатель

 

// на объект типа A, то с его помощью видна

 

// только та часть объекта b, которая

// структурно соответствует типу A.

 

pa = & a1;

pb = (B*)pa; // Допустимое, но небезопасное явное

 

// преобразование указателя на объект

// базового типа к указателю на объект

// производного типа. Через указатель на

 

// объект типа B можно обращаться к

// информации, которая присутствует в

// типе В. Однако, в структуре объекта a1

 

// базового типа A отсутствуют

// дополнительные члены производного

// типа.

// pb -> z; // Ошибочное обращение к таким членам после

 

// указанного преобразования (ошибка во

// время исполнения программы).

 



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 420; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.12.222 (0.023 с.)