В Делфи  все объекты динамические
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

Средства разработки классов:


Механизмы инкапсуляции, наследования и полиморфизма.

Инкапсуляция - это объединение  сущностей, из которых состоит класс, в единое целое.

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

Структура описания класса-потомка:

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, просмотров: 178.