TURBO PASCAL |
Новости
|
Объекты: наследующие записиВ терминах Паскаля, объект во многом схож с записью, которая является оболочкой для объединения нескольких связанных элементов под одним именем. Предположим, вы хотите разработать программу вывода платежной ведомости, печатающую отчет и показывающую, сколько нужно выплатить каждому служащему за рабочий день. Запись можно организовать следующим образом: 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. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |