Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Delphi Pascal (DP)



Заголовок класса включает имя класса и директиву class и объявляется в разделе описания типов следующим образом:

type ИмяКласса = class

После директивы class сразу начинается тело класса, содержащее в произвольном порядке перечень свойств и заголовки методов. Порядок следования директив public и private и их количество не имеют значения. Каждая директива относится ко всем последующим элементам класса до появления другой директивы.

Конструкторы задаются с помощью директивы constructor. Класс может иметь любое количество конструкторов. Разные конструкторы по-разному могут инициализировать создаваемые объекты. На практике часто используются классы с двумя конструкторами: первый устанавливает свойства создаваемого объекта в значения по умолчанию, второй – в значения, передаваемые через входные параметры конструктора. Конструкторам можно давать любые имена. Стандартным именем является Create. Все одноименные (перегруженные) методы должны иметь в заголовке директиву overload. Деструктор в классе один, обозначается директивой destructor и имеет имя Destroy.

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

procedure ИмяКласса.ИмяМетода (параметры);

Разделение описания класса и программной реализации методов целесообразно потому, что позволяет помещать описание класса в открытой (интерфейсной) части программного модуля, тогда как реализация методов размещается в закрытом разделе реализации и после компиляции распространяется в двоичном коде.

Свойства класса объявляются с помощью комбинации директив classvar (только для версии Delphi 2005/2006), а методы класса – с помощью одной директивы class.

В качестве примера рассмотрим описание класса окружностей, оформив для этого отдельный программный модуль:

Unit Circle; // заголовок модуля

interface // открытый раздел модуля

type

TCircle = class // заголовок класса

private // закрытые свойства

x, y: integer; // координаты центра

r: integer; // радиус окружности

public // открытые методы

constructor Create; overload;

constructor Create (ax, ay, ar: integer); overload;

destructor Destroy;

function GetX: integer;

function GetY: integer;

function GetR: integer;

function Length: real; // подсчет длины окружности

procedure SetXY (ax, ay: integer);

procedure SetR (ar: integer);

procedure MoveTo (ax, ay: integer); // метод перемещения

procedure Show; //метод прорисовки окружности

end; // конец описания класса

implementation // закрытый раздел модуля

// для простоты реализация некоторых очевидных методов пропущена

constructor TCircle.Create; // реализация конструктора

begin

x:= 0; y:= 0; r:= 0;

end;

constructor TCircle.Create (ax, ay, ar: integer); // другая реализация

begin

x:= ax; y:= ay; r:= ar;

end;

function TCircle.GetX: integer;

begin

result:= x; // result – внутренняя переменная языка DP

end;

function TCircle.Length: real;

begin

result:= 6.28*r;

end;

procedure TCircle.MoveTo (ax, ay: integer);

begin

«если окружность нарисована, то стереть ее»;

x:= ax; y:= ay;

// а иначе - можно вызвать метод SetXY (ax, ay);

Show;

end;

procedure TCircle.Show;

begin

«отображение окружности»;

end;

end;

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

2. Язык C++

Заголовок класса включает имя класса и директиву class. Все конструкторы класса имеют одно и то же имя, совпадающее с именем класса. Деструктор только один, его имя также совпадает с именем класса, но перед именем ставится символ ~ (тильда, волнистая черта). Директивы public и private используются так же, как и в языке DP. Программную реализацию методов можно либо вынести за пределы класса, либо вставить сразу за заголовком метода. Для вынесенной реализации в заголовке обязательно надо сначала указать имя класса. Классовые (статические) свойства и методы объявляются с помощью директивы static.

Пример для класса окружностей (некоторые методы пропущены):

class Circle

{ private:

int x; int y; int r;

public:

Circle (); // конструктор без параметров

Circle (int ax, int ay, int ar); // конструктор с тремя параметрами

Circle (int, int); // конструктор с двумя параметрами

int GetX () { return x}; // встроенная реализация метода

void SetXY (int ax, int ay) {x = ax; y = ay}; // аналогично

void MoveTo (int ax, int ay); // реализация вынесена за тело класса

void Show (); // аналогично

~Circle(); // деструктор

}; // конец тела класса

Программная реализация некоторых методов за пределами класса:

Circle::Circle () // реализация конструктора без параметров

{x = 0; y = 0; r = 0};

Circle::MoveTo (int ax, int ay) // реализация метода перемещения

{«стереть»; SetXY(ax, ay); Show (); };

3. Языки Java и С#

Описание класса похоже на С++ за несколькими отличиями:

· каждый элемент класса имеет свою собственную директиву public или private;

· все реальные (т.е. не абстрактные) методы обязательно должны быть программно реализованы внутри класса сразу за своим заголовком, т.е. все методы полностью определяются в теле класса;

· деструкторы не используются, т.к. в язык Java и платформу.NET встроен механизм «сборки мусора», т.е. освобождение памяти из-под неиспользуемых объектов производится автоматически лишь при нехватке памяти.

Пример описания класса окружностей (некоторые методы пропущены):

class Circle

{ private int x;

private int y;

private int r;

public Circle () {x = 0; y = 0; r = 100;}

public Circle (int ax, int ay, int ar) {x = ax; y = ay; r = ar;}

public int GetX () { return x;}

publicvoid MoveTo (int ax, int ay)

{«стереть»; SetXY(ax, ay); Show (); }

}; // конец описания класса





Дата публикования: 2014-11-02; Прочитано: 626 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...