Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Заголовок класса включает имя класса и директиву 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; Прочитано: 629 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!