ВУЗ:
Составители:
Рубрика:
многими различными клиентами. Вы можете достичь этой цели с помощью следующей
демонстрационной процедуры GetAddress :
procedure GetAddress
(
const Cust : RCustomer;
var Address1,
Address2,
Address3 :String
);
begin
Address1 := Cust.FirstName + ‘ ‘ + Cust.LastName;
Address2 := Cust.Street;
Address3 := Cust.City + ‘ , ‘ + Cust.State + ‘ ‘ + Cust.Zip;
end;
Как и ранее, вместо “жёсткого” кодирования переменной конкретного клиента,
процедура GetAddress ссылается на общую переменную Cust, передаваемую в качестве
параметра. Она передаётся как параметр вида const во избежание копирования значения
фактического аргумента в локальный параметр Cust во время вызова. Параметр const
обеспечивает обращение к переменной как к ссылке без копирования её значения, и,
кроме того, она не может быть случайно изменена внутри процедуры.
Параметры Address1, Address2 и Address3 являются выходными параметрами,
через которые передаются соответствующие строки адреса. Поэтому они объявляются
как параметры var и их изменённые значения могут передаваться из процедуры.
Опять, как и ранее, у Вас есть специальная подпрограмма доступа к данным,
скрывающая детали реализации. Тем не менее, этот подход требует, чтобы внутренние
детали описания записи были открыты, а принадлежность подпрограммы и типа записи
RCustomer друг другу остаётся неочевидной.
1.4. Соединение подпрограмм с данными
Пример с записями клиентов демонстрирует типичный сценарий для случая
необъектного программирования. Здесь данные, запись RCustomer, определены
независимо от подпрограмм, которые оперируют с этими данными: Initialize и
GetAddress. Ничего в способе определения этих объектов не помогает обнаружить
логическую связь между программой и данными. Вы или должны догадаться, какие
подпрограммы работают вместе с этими элементами данных, или, что ещё хуже,
поддаться искушению обойти
подпрограммы, специально разработанные для
конкретных типов данных, и начать осуществлять доступ к полям записи напрямую. В
последнем случае Вы можете упустить некоторые действия, которые требуется
выполнить и которые были определены внутри подпрограммы.
Другая часть проблемы с записью RCustomer состоит в том, что её определение
“открыто” и её детали подвержены всем видам
“злоупотреблений”. Например, ничто не
может помешать кому - либо присвоить значение ‘John’ полю LastOrder. Ясно, что поле
LastOrder предназначено не для хранения этого значения. Ничто в определении записи
не помешает неосторожному программисту перепутать значения полей с возможными
причудливыми эффектами, проявляющимися во время работы программы.
Заметьте, что данные в этом необъектноориентированном подходе пассивны и
не могут активно проверить свою целостность и правильность. Переменные просто
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »