Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Zaochniki / 07_relation

.pdf
Скачиваний:
6
Добавлен:
13.02.2016
Размер:
313.92 Кб
Скачать

Отношения между

объектами

и реализация отношений средствами C++

Отношения в терминах ООА

Наиболее часто используемые отношения между объектами (1)

Содержит:

автомобиль содержит двигатель;

студент содержит фамилию, номер зачетки; список содержит элементы списка.

Использует:

водитель управляет машиной;

деканат принимает студента; окно рисует эллипс.

Отношения в терминах ООА

Наиболее часто используемые отношения между объектами (2)

Является разновидностью:

стриж является разновидностью птицы;

велосипед является разновидностью транспорта; квадрат есть геометрическая фигура.

Реализован посредством:

квадрат реализован с помощью прямоугольника;

танк сделан из трактора; стек реализован посредством списка.

Отношение Содержит

Реализация отношения Содержит в C++ (1)

Отношение Содержит реализуется посредством

вложения

Пример: студент содержит фамилию, номер зачетки .

c l a s s Student {

p u b l i c :

// . . .

const char getName ( ) const { r e t u r n name ; } ;

p r i v a t e :

char

name ;

i n t

nz ;

} ;

 

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

Отношение Содержит

Реализация отношения Содержит в C++(2)

Пример: автомобиль содержит двигатель .

c l a s s Car {

p u b l i c :

Car ( const char mark ) ;

~Car ( ) ;

// . . .

bool on ( ) { r e t u r n motor . s t a r t ( ) ; } ; p r i v a t e :

Motor motor ;

// . . .

} ;

i n t main ( )

{

Car my_car ( "LX 300" ) ;

my_car . on ( ) ;

}

Отношение Содержит

Реализация отношения Содержит в C++(3)

Создание (инициализация) вложенных объектов происходит до создания содержащего объекта. Для передачи параметров конструктору вложенного объекта используется список инициализации. Порядок создания определяется порядком описания вложенных объектов в классе.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Car : : Car (

const char

mark )

 

 

: motor ( "XV 5" ) ,

//

это вызов

 

 

 

 

//

конструктора для motor

 

 

t i t l e ( mark )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{ // < здесь

все вложенные объекты

 

 

 

 

 

 

 

 

 

 

// . . .

уже созданы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отношение Содержит

Реализация отношения Содержит в C++(4)

Удаление вложенных объектов происходит после удаления содержащего объекта. Деструктор вложенных объектов вызывается автоматически. Порядок уничтожения противоположен порядку создания.

 

Car : : ~ Car ( )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// . . . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

// < здесь будут

автоматически вызваны

 

 

 

 

 

 

 

 

 

 

 

//

деструкторы

вложенных объектов .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отношение Использует

Реализация отношения Использует в C++

Отношение Использует реализуется посредством вызова функций из интерфейса класса.

c l a s s Student {

 

p u b l i c :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Student ( const char nm, i n t

anz ) ;

 

 

~Student ( ) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i n t exam ( ) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

const

char

getName ( )

const

{ r e t u r n name ; } ;

 

 

// . . . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

} ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void f ( )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Student

a ( " Vasya " ,

9103

) ;

//

создать

 

 

a . exam ( ) ;

 

 

 

//

используем exam

 

 

cout <<

a . getName ( )

<< e n d l ;

// >> getName

 

 

} < //

здесь

используем

деструктор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

верно и для класса B
вс¼, что верно для класса A,

Отношение Есть разновидность

Реализация отношения Есть разновидность в C++ (1)

Отношение Есть разновидность реализуется посредством открытого наследования.

c l a s s A {

// . . .

} ;

c l a s s B : p u b l i c A { // обозначает : класс B // открыто наследует A .

// . . .

} ;

Ключевым моментом открытого наследования является следующее утверждение:

. Класс B может дополнять класс A, но не может убирать что-либо из интерфейса или реализации A. A - базовый класс для B.

Отношение Есть разновидность

Пример: курица есть разновидность птицы .

c l a s s

B i r d {

 

 

 

 

 

 

p u b l i c :

 

 

 

 

 

 

 

B i r d ( const char nm ) ;

 

 

~ B i r d ( ) ;

 

 

 

 

 

 

void

f l y

( ) ;

//

птицы летают

 

void e a t ( ) ;

//

è åäÿò

 

 

// . . .

 

 

 

 

 

 

 

} ;

 

 

 

 

 

 

 

 

c l a s s

Hen

:

p u b l i c

B i r d

{

 

 

p u b l i c :

 

 

 

 

 

 

 

Hen ( const

char

nm,

i n t

e2d ) ;

~Hen ( ) ;

 

 

 

 

 

 

void

f l y

( ) ;

 

// курица летает по своему

// åñò êàê

обычные птицы

íå

определяем свою

//

функцию

e a t используем из

базового

i n t makeEgg ( ) ;

// +

несет

ÿéöà

 

// . . .

 

 

 

 

 

 

 

} ;

Соседние файлы в папке Zaochniki