RSS    

   Реферат: Программирование. Delphi

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

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

Оформление данных объекта как свойства позволяет ограничить доступ к полям, хранящим значения свойств объекта, например можно разрешить только чтение. Чтобы инструкции программы не могли изменить значение свойства, в описании свойства надо указать только имя метода чтения. Попытка присвоить значение свойству, предназначенному только для чтения, вызывает ошибку времени компиляции. В приведенном выше описании класса TTperson свойство Name доступно только для чтения, а свойство Address - для чтения и записи.

Установить значение свойства, защищенного от записи, можно во время инициализации объекта. Ниже приведены методы класса ттрегзоп, обеспечивающие создание объекта класса ттрегзоп и доступ к его свойствам.

//конструктор объекта TTPerson

Constructor TTPerson.Create (Name:TName) ;

begin

FName:Name ; end;

// метод получения значения свойства Name

Function TTPerson.GetName ;

 begin

Result: =FName ;

 end;

// метод получения значения свойства Address

Function TTPerson.GetAddress;

 begin

Result: =FAddress;

end;

// метод изменения значения свойства Address

Procedure TTPerson.SetAddress (NewAddress: TAddress ) ;

Begin

 if FAddress =' '

then FAddress: =NewAddress;

 end;

Приведенный конструктор объекта TTPerson создает объект и устанавливает значение поля FName, определяющего значение свойства Name.

Инструкции программы, обеспечивающие создание объекта класса TTPerson и установку его свойства, могут быть, например, такими:

student: =TTPerson.create ( ' Иванов ' ) ;

student.address:='yл. Садовая, д.З, кв.25';

Наследование

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

В объявлении класса-потомка указывается класс родителя. Например, класс TEmployee (сотрудник) может быть порожден от рассмотренного выше класса ттрегзоп путем добавления поля Department (отдел). Объявление класса TEmployee в этом случае может выглядеть так:

TEmployee = class (TTPerson)

FDepartment: integer; // номер отдела

constructor Create (Name :TName;Dep: integer) ;

end;

Заключенное в скобки имя класса TTPerson показывает, что класс TEmployee является производным от класса TTPerson. В свою очередь, класс ттрегзоп является базовым для класса TEmployee.

Класс TEmployee имеет свой собственный конструктор, который обеспечивает инициализацию класса родителя и своих полей. Вот пример реализации конструктора класса TEmployee:

constructor TEmployee.Create(Name:Tname;Dep:integer);

begin

inherited Create (Name);

FDepartment: =Dep;

end;

В приведенном примере директивой inherited вызывается конструктор родительского класса, затем присваивается значение полю класса потомка.

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

engineer: =TEmployee.create ( ' Сидоров ' , 413 ) ;

engineer.address:='yл.Блохина, д.8, кв.10';

Первая инструкция создает объект типа TEmployee. Вторая устанавливает значение свойства, которое относится к родительскому классу.

Директивы Protected и Private

Помимо объявлений элементов класса (полей, методов, свойств) описание класса, как правило, содержит директивы protected (защищенный) и private (закрытый), которые устанавливают степень видимости элементов класса в программе.

Элементы класса, объявленные в секции protected, доступны только в порожденных от него классах. Область видимости элементов класса этой секции не ограничивается модулем, в котором находится описание класса. Обычно в секцию protected помещают описание методов класса.

Элементы класса, объявленные в секции private, видимы внутри модуля. Эти элементы не доступны за пределами модуля, даже в производных классах. Обычно в секцию Private помещают описание полей класса, а методы, обеспечивающие доступ к этим полям, помещают в секцию protected.

Ниже приведено описание класса TTPerson, в которое включены директивы управления доступом.

TTPerson = class

private

Fname:TName; { значение св-ва Name }

Faddress:TAddress; ( значение св-ва Address)

protected

Constructor Create (Name :TName);

Function GetName :TName ;

Function GetAddress:TAddress;

Procedure SetAddress(NewAddress:TAddress);

Property Name:Tname

 read GetName;

Property Address :Taddress

read GetAddress

write SetAddress;

end;

Замечание

Если надо чтобы элементы класса были полностью скрыты, то определение класса следует поместить в отдельный модуль.

Полиморфизм и виртуальные методы

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

Пусть определены три класса, один из них является базовым для двух других.

type // базовый класс

TPerson=class

fname: string; { имя }

constructor Create (name: string);

function info: string;

virtual;

end;

// производный от базового Tperson

TStud=class (TPerson)

fgr: integer; { номер группы }

constructor Create (name: string; gr: integer) ;

function info: string; override;

end;

// производный от базового Tperson

Tprof=class (TPerson)

fdep: string; { название кафедры }

constructor Create(name:string;dep:string);

Страницы: 1, 2, 3, 4


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.