Средства разработки классов:
Механизмы инкапсуляции, наследования и полиморфизма.
Инкапсуляция - это объединение сущностей, из которых состоит класс, в единое целое.
Наследование – любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя родителя.
Структура описания класса-потомка:
Type <имя класса потомка>= class (<имя класса родителя >)
<Новые поля класса потомка>
<Новые методы класса потомка>
Type TPoint = class {класс точка на плоскости}
X,Y: Integer;
Visible:Boolean;
Color:word;
Procedure Init(InitX, InitY, Col:integer);
Procedure Show; {нарисовать }
Procedure MoveTo(StepX, StepY: integer); {переместить }
Function IsVisible:boolean; {сделать видимой }
End;
var X1,X2:Tpoint; X1.Y:=5 X1.Show;
Type Tcircle = class (Tpoint) {класс окружность }
Radius:integer;
Procedure Show;
End;
var C1,C2:Tcircle;
C1.X:=6; C1.R:=12;
Порожденный класс автоматически наследует поля, методы родителей и может добавлять их новыми. Это средство позволяет использовать имеющиеся классы и создавать новые.
Все классы Делфи и библиотеки VCL (С++ Builder используется библиотека объектов VCL (Visual Component Library) ) порождены от единственного родителя - класса Tobject. Этот класс не имеет полей, но имеет методы общего назначения, обеспечивающие весь жизненный цикл объектов – от создания до уничтожения.
В Делфи запрещено множественное наследование – каждый класс имеет только одного родителя.
Полиморфизм - средство, позволяющие называть разные алгоритмические действия одним именем.
Type Tcircle = class (Tpoint)
Radius:integer;
Procedure Init(InitX, InitY, R:integer);
Procedure Show; {нарисовать }
Procedure MoveTo(StepX, StepY: integer); {переместить }
Function IsVisible:boolean; {сделать видимой }
End;
Для реализации полиморфизма в Делфи используются механизмы виртуальных и динамических методов.
Для описания виртуального метода используется слово virtual
Динамического – dynamic
Procedure Show; virtual; {нарисовать }
Встретив эти объявления, компилятор создает таблицы виртуальных и динамических методов и помещает в них адреса точек входа в эти процедуры. Они используются при обращении к этим методам на этапе прогона программы.
Отличие этих методов в том, что таблица динамических методов содержит адреса динамических методов только этого класса, а таблица виртуальных методов содержит информацию о виртуальных методах этого класса и всех его родителей.
В состав любого класса входят 2 специальных метода – конструктор и деструктор.
Конструктор порождает объект и выполняется первым. Конструктор распределяет объекты в динамической памяти.
Деструктор удаляет объекты из кучи.
Описания их с помощью зарезервированных слов – Constructor , Destructor .
У класса Tobject - эти методы называются Create и Destroy, так они называются и в большинстве потомках.
Type TPoint = class
X,Y: Integer;
Visible:Boolean:
Color:word;
Constructor Create (InitX, InitY, Col:integer);
Destructor Destroy;
Procedure Show; virtual {нарисовать }
Procedure MoveTo(StepX, StepY: integer); {переместить }
Function IsVisible:boolean; {сделать видимой }
End
Классы определяются в модулях. При объявлении класса в интерфейсной секций определяются области видимости элементов класса.
Например,
Private [ praivit] – закрытые – доступны только для методов этого класса;
Protected [ protekted] – защищенные -доступны для методов этого класса и его потомкам
Public –доступные - нет ограничений на область видимости
Пример. Код программы при создании Приложения в Делфи
unit Unit1;
Interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
Implementation
{$R *.dfm}
End.
Код проекта
program Project1;
Uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
Begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
End. .
Дата: 2019-02-02, просмотров: 205.