Совместимость объектных типов

Содержание

Слайд 2

Наследование несколько изменяет правила совместимости типов в Турбо Паскале.

Наследование несколько изменяет правила совместимости типов в Турбо Паскале.

Слайд 3

Совместимость объектных типов. Порожденный тип наследует совместимость со всеми своими родительскими

Совместимость объектных типов.

Порожденный тип наследует совместимость со всеми своими родительскими типами.

Эта

совместимость бывает трех видов
между экземплярами объектов
между указателями на экземпляры объектов
между формальными и фактическими параметрами
Слайд 4

СОВМЕСТИМОСТЬ ОБЪЕКТНЫХ ТИПОВ. Необходимо помнить, что во всех трех случаях совместимость

СОВМЕСТИМОСТЬ ОБЪЕКТНЫХ ТИПОВ.

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

расширяется только от потомка к родителю.

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

Слайд 5

Совместимость объектных типов. В модуле Persons тип TStaff является потомком TPerson,

Совместимость объектных типов.

В модуле Persons тип TStaff является потомком TPerson, а

тип TTeacher является потомком TStaff.

Учитывая это, рассмотрим следующие описания:

TYPE
Pperson = ^ТРerson;
PStaff = ^TStaff;
Pteacher = ^TTeacher;
VAR
Person : TPerson;
Staff : TStaff;
Teacher : TTeacher;
PPtr : PPerson;
SPtr : PStaff;
TPtr : PTeacher;

В этом случае справедливы следующие операторы присваивания:

Person:=Staff;
Staff:=Teacher;
Person:=Teacher;

Слайд 6

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

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

Слайд 7

СОВМЕСТИМОСТЬ ОБЪЕКТНЫХ ТИПОВ. Принцип совмещения таков: поля данных источника должны полностью

СОВМЕСТИМОСТЬ ОБЪЕКТНЫХ ТИПОВ.

Принцип совмещения таков:
поля данных источника должны полностью заполнить

поля данных приемника.

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

Слайд 8

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

Совместимость объектных типов.

Присвоение порождающего (родительского) объекта порожденному (дочернему) может привести к

тому, что некоторые поля порожденного объекта останутся неопределенными, что является недопустимым.
Слайд 9

Совместимость объектных типов. В операторах присваивания из источника в приемник будут

Совместимость объектных типов.

В операторах присваивания из источника в приемник будут копироваться

только поля,
являющиеся общими для обоих типов.

Например:
Person := Teacher;

В данном операторе присваивания только поля Name, Date и Rate из переменной Teacher будут скопированы в переменную Person,
т.к. они являются общими для ТТеасher и TPerson.

Слайд 10

Совместимость типов работает также для указателей типов объектов и подчиняется тем

Совместимость типов работает также для указателей типов объектов и подчиняется тем

же общим правилам, что и для экземпляров объектов.
Слайд 11

Совместимость объектных типов. Допустимо: SPtr:=TPtr; PPtr:=SPtr; PPtr:=TPtr; Указатель на потомка может

Совместимость объектных типов.

Допустимо:

SPtr:=TPtr;
PPtr:=SPtr;
PPtr:=TPtr;

Указатель на потомка может присваиваться указателю на

родителя.

Обратные присваивания недопустимы.

Слайд 12

Формальный параметр (конкретное значение либо параметр-переменная) данного объектного типа может принимать

Формальный параметр
(конкретное значение либо параметр-переменная) данного объектного типа может принимать

в качестве фактического параметра объект
своего же типа или объекты всех дочерних типов.
Слайд 13

Совместимость объектных типов. Если определить заголовок процедуры следующим образом: PROCEDURE Show_Fields(Obj

Совместимость объектных типов.

Если определить заголовок процедуры следующим образом:
PROCEDURE Show_Fields(Obj : TStaff);

Допустимыми

типами фактических параметров могут быть TStaff или ТТеасher, но не тип TPerson.
Слайд 14

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

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