Объектно-ориентированное программирование

По крайней мере два различных языка носят имя Object Pascal. Исходным является язык, созданный Ларри Теслером из компанииApple Computer [Tesler 1985]. Язык был построен на основе модулей из языкаApple Pascal. Второй вариант языкаObject Pascal первоначально называлсяTurbo Pascal [Turbo 1988, O’Brian 1989]. Его разработала и распространяла компанияBorland International. Первый упомянутый язык очень часто встречается на компьютерахMacintosh, второй большей частью связан сIBM PC. Язык, созданный компаниейBorland, вновь привлек внимание кObject Pascal. Сейчас этот язык используется в качестве фундамента в средеDelphi для разработкиWindows-приложений[Borland 1995]. В него были введены новые свойства, отсутствовавшие в исходном языкеTurbo Pascal. В данной книге мы постараемся описать обе версии языка, отмечая особо, где и в чем они различаются.

В языке Object Pascal модуль называется библиотекой процедур(unit). В отличие от языковC++ иObjective-C библиотека процедур содержится в едином файле, а не разбивается на два. Тем не менее библиотека процедур состоит из интерфейса(interface) и реализации(implementation). Библиотека процедур может подключать другие библиотеки. Этот процесс делает доступными свойства, описанные в разделе интерфейса подключаемой библиотеки.

Часть библтотеки для класса Card в языкеObject Pascal версии фирмыApple показана в листинге3.1. Разделinterface аналогичен описаниям функций вPascal. Он может содержать подразделы, обозначаемые ключевыми словамиconst, type иvar. Здесь же задаются необъектные типы данных(такие, как перечисляемые типыsuits иcolors).

 

Описание класса напоминает запись (record), за исключением того, что класс может содержать заголовки процедур и функций наряду с полями данных. Последние должны быть перечислены перед объявлениями функций. Поле данных и методы должны иметь разные имена, поэтому поле данных называетсяsuitValue, а функция— suit. В одной библиотеке можно определить несколько классов.

Описание класса изучается пользователями намного чаще, чем собственно код. По этой причине для облегчения понимания в описании используются комментарии. Описания данных должны отделяться от описания методов. Методы группируются в соответствии с абстрактной классификацией их поведения. В пределах каждой группы методы можно перечислять в алфавитном порядке. Полезно использовать табуляцию, это поможет пользователю быстро найти имена методов.

Листинг 3.1. Интерфейсный раздел библиотеки для языка Object Pascal фирмыApple

unit card; interface type

suits = (Heart, Club, Diamond, Spade); colors = (Red, Black);

Card = object

(* поля данных *) suitValue : suits; rankValue : integer;

faceUp *) : boolean;
(* инициализация
procedure setRankAndSuit (c : integer; s : suits);
(* рабочие функции *)
function color : colors;
procedure draw (win : windows; x, y : integer);
function faceUp : boolean;
procedure flip; : integer;
function rank
function suit : suits;
end;

implementation

end.

Листинг 3.2. Интерфейсный раздел библиотеки для языка Deplhi Pascal

implementation const

CardWidth = 65;

CardHeight = 75;

function Card.color : colors; begin

case suit of Diamond: color:= Red; Heart: color:= Red;

Spade: color:= Black; Club: color:= Black; end;

end;

 

end.

3.5.2. Классы и методы в языке Smalltalk

Описание языка Smalltalk почти неразрывно связано с пользовательским интерфейсом средыSmalltalk. Таким образом, объяснение того, как в языкеSmalltalk создаются новые классы, должно обязательно начинаться с описания программы просмотра или броузераSmalltalk. Не только собственно броузер является достаточно сложным, но и детали его реализации отличаются для различных систем. Поэтому наше обсуждение необходимым образом будет поверхностным. Читатель, заинтересованный в более подробной информации, должен обратиться к руководству по той версии языкаSmalltalk, которую он использует[Goldberg 1984, LaLonde 1990b, Korienek 1993, Smith 1995].