TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Объекты: наследующие записи 

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

             TEmployee = record
                 Name: string[25];
                 Title: string[25];
                 Rate: Real;
             end;

                   Примечание: По  соглашению все типы начинаются с буквы
              T. Вы также можете следовать этому правилу.

             Здесь TEmployee является типом записи,  т.е.  шаблоном,  ис-
        пользуемым компилятором для создания переменных типа запись.  Пе-
        ременная типа TEmployee является экземпляром этого  типа.  Термин
        "экземпляр" будет вам нередко встречаться в Паскале. Он постоянно
        применяется теми, кто использует методы объектно-ориентированного
        программирования, поэтому будет хорошо, если вы начнете мыслить в
        терминах типов и экземпляров этих типов.

             Вы можете оперировать с типом TEmployee  двояко.  Вы  можете
        рассматривать поля Name,  Title и Rate по отдельности,  а когда о
        полях,  как о работающих одновременно  для  описания  конкретного
        рабочего, вы можете рассматривать их совокупность, как TEmployee.

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

             THourly = record
             Name: string[25];
             Title: string[25];
             Rate: Real;
             end;

             Вы можете  также  оказаться несколько догадливее и сохранить
        тип TEmployee путем создания  поля  типа  TEmployee  внутри  типа
        THourly:

             THourly = record
             Worker: TEmployee;
             Time: integer;
             end;

             Такая конструкция работает,  и программисты,  работающие  на
        Паскале, делают это постоянно.  Единственное,  чего этот метод не
        делает,  так это то, что он заставляет вас думать о том, с чем вы
        работаете  в вашем программном обеспечении.  Вам следует задаться
        вопросом типа;  "Чем почасовик отличается от дpугих pабочих?" От-
        вет  прост:  почасовик - это pабочий,  котоpому платится за коли-
        чество часов pаботы.  Продумайте снова первую часть  предложения;
        почасовик - это pабочий...

             Теперь вы поняли!

             Запись для  pаботника-почасовика hourly должна иметь все за-
        писи, котоpые имеются в записи employee. Tип THourly является до-
        черним типом для типа TEmployee.  THourly наследует все, что при-
        надлежит TEmployee,  и кроме того имеет кое-что новое, что делает
        THourly уникальным.

             Этот процесс, с помощью которого один тип наследует характе-
        ристики другого типа, называется наследованием. Наследник называ-
        ется порожденным (дочерним) типом,  а тип, которому наследует до-
        черний тип, называется порождающим (родительским) типом.

             Ранее известные типы записей Паскаля не  могут  наследовать.
        Однако Borland Pascal расширяет язык Паскаль для поддержки насле-
        дования. Одним из этих расширений является новая категория струк-
        туры данных,  связанная с записями,  но значительно более мощная.
        Типы данных в этой новой категории определяются с помощью  нового
        зарезервированного слова object. Тип объекта может быть определен
        как полный,  самостоятельный тип в манере описания записей Паска-
        ля, но  он  может  определяться  и как потомок существующего типа
        объекта путем помещения порождающего (родительского) типа в скоб-
        ки после зарезервированного слова object.

             В приводимом здесь примере платежной ведомости два связанных
        типа объектов могли бы определяться следующим образом:

             type
             TEmployee = object
               Name: string[25];
               Title: string[25];
               Rate : Real;
             end;

             THourly = object(TEmployee)
                Time : Integer;
             end;

                   Примечание: Обратите внимание, что здесь использование
              скобок означает наследование.

             Здесь TEmployee является родительским типом, а THourly - до-
        черним  типом.  Как  вы увидите чуть позднее,  этот процесс может
        продолжаться неопределенно долго.  Вы можете определить  дочерний
        тип  THourly,  дочерний  к типу THourly тип и т.д.  Большая часть
        конструирования объектно-ориентированных прикладных программ сос-
        тоит в построении такой иерархии объектов,  являющейся отражением
        генеалогического дерева объектов в приложениях.

             Все возможные типы,  наследующие тип  TEmployee,  называются
        дочерними  типами типа TEmployee,  тогда как THourly является не-
        посредственным дочерним типом типа TEmployee. Наоборот, TEmployee
        является непосредственным родителем типа THourly.  Тип объекта (в
        точности как подкаталог в DOS) может иметь любое число непосредс-
        твенных дочерних типов, но в то же время только одного непосредс-
        твенного родителя.

             Как показали данные определения, объекты тесно связаны с за-
        писями.  Новое  зарезервированное  слово object является наиболее
        очевидным различием,  но как вы увидите позднее,  имеется большое
        число других различий, некоторые из которых довольно тонкие.

             Например, поля Name, Title и Rate в типе TEmployee не указа-
        ны явно в типе THourly, но в любом случае тип THourly содержит их
        благодаря  свойству  наследования.  Вы можете говорить о величине
        Name типа THourly в точности так же,  как о  величине  Name  типа
        TEmployee.

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz