Классы и объекты в Object Pascal. Семенов Н.М. - 7 стр.

UptoLike

Составители: 

begin
. . .
Initialize (Cust1, ‘John’, ‘Smith’, ‘123 Anystreet’,
‘Anytown’, ‘CA’, ‘99999 - 8888’);
. . .
end;
Переменная, представляющая клиента Cust1, передаётся процедуре вместе с
величинами, которые Вы хотите присвоить экземпляру клиента при инициализации.
Вызов подпрограммы скрывает детали инициализации. Вам не надо больше обращать
внимания на детальную структуру записи при инициализации её значения. Все
низкоуровневые аспекты присваивания значений соответствующим полям
осуществляются внутри процедуры и скрыты от внешнего взгляда.
Подпрограмма Initialize предназначена для типа RCustomer : Вы не можете
передать ей другой тип переменной и ожидать разумного результата . Строгий
механизм проверки типа в Паскале не позволит Вам передать процедуре переменную
типа, отличного от RCustomer. Однако, связь между типом RCustomer и процедурой
Initialize не подчёркивается в определении типа. Поэтому можно и не заметить, что Вы
должны использовать процедуру Initialize со всеми экземплярами RCustomer.
При необъектном подходе возникает такая проблема, как возможность для
переменной типа RCustomer существовать внеопределённом состоянии”, когда она
объявлена в блоке var, но ещё не инициализирована. Неудача инициализации
экземпляра RCustomer правильным образом может привести к странному поведению
программы. Но в определении RCustomer нет механизма, обеспечивающего
автоматическую инициализацию экземпляра типа.
Выше приведено только несколько примеров тех трудностей, которые легко
могут быть преодолены при объектном подходе.
1.3. Получение адреса клиента
Другая типичная операция, выполняемая с экземплярами RCustomer - это
получение значений их полей, таких как адрес. Вы могли бы манипулировать каждым
экземпляром отдельно, получая значения их полей, следующим образом:
var
Address1,
Address2,
Address3 : String;
begin
. . .
Address1 := Cust1.FirstName + ‘ ‘ + Cust1.LastName;
Address2 :=Cust1.Street;
Address3 := Cust1.City + ‘ , ‘ + Cust1.State
+ ‘ ‘ + Cust1.Zip;
. . .
end;
Приведённая программа
получает адрес клиента Cust1 в виде, подходящем для
печати на конверте в три строки: Address1, Address2 и Address3.
Как и раньше, поскольку эту операцию придётся повторять для многих
клиентов, имеет смысл оформить её в виде отдельной подпрограммы и передавать ей
экземпляр клиента в виде параметра, чтобы использовать этот набор операций со