Поля
Классы и объекты
Основные концепции ООП
К основным концепциям ООП относятся следующие:
1. Инкапсуляция представляет собой объединение данных и обрабатывающих их методов (подпрограмм) внутри класса (объекта). Это означает, что в классе инкапсулируются (объединяются и помешаются внутрь) поля, свойства и методы. При этом класс получает определенную функциональность, например, обеспечивая полный набор средств для создания программы поддержки некоторого элемента интерфейса (окна Windows, редактора и т. п.) или прикладной обработки.
2. Наследование – это процесс порождения новых объектов-потомков от существующих объектов-родителей, при этом потомок наследует от родителя все его поля, свойства и методы. В дальнейшем наследуемые поля, свойства и методы можно использовать в неизменном виде или переопределять (модифицировать).
Просто наследование большого смысла не имеет, поэтому в объект-потомок добавляются новые элементы, определяющие его особенность и функциональность. Удалить какие-либо элементы родителя в потомке нельзя. В свою очередь, от нового объекта можно породить следующий объект, в результате образуется дерево объектов (называемое также иерархией классов).
|
|
В корне этого дерева находится базовый класс TObject, который реализует наиболее общие для всех классов элементы, например, действия по созданию и удалению объекта. Чем дальше тот или иной класс отстоит в дереве от базового класса, тем большей специфичностью он обладает.
3. Сущность полиморфизма заключается в том, что методы различных классов могут иметь одинаковые имена, но различное содержание. Это достигается переопределением родительского метода в классе-потомке. В результате родитель и потомок ведут себя по-разному. При этом обращение к одноименным методам различных объектов выполняется аналогично.
Классы – это специальные типы данных, используемые для описания объектов. Соответственно объект, имеющий тип какого-либо класса, является экземпляром (instance) этого класса или переменной этого типа.
Класс представляет собой особый тип записи, имеющий в своем составе такие элементы (члены, member), как поля, свойства и методы. Поля класса аналогичны полям записи и служат дня хранения информации об объекте. Методами называются процедуры и функции, предназначенные для обработки полей. Свойства занимают промежуточное положение между полями и методами. С одной стороны: свойства можно использовать как поля, например, присваивая им значения с помощью инструкции присваивания; с другой стороны, внутри класса доступ к значениям свойств выполняют методы класса.
|
|
Описание класса имеет следующую структуру:
Туре <Имя класса> = class (<Имя класса-родителя>)
private
<Частные описания>;
protected
<3ащищеные описания>;
public
<Общедоступные описания>;
published
<Опубликованные описания>;
end;
В приведенной структуре описаниями являются объявления свойств, методов и событий.
Пример описания класса:
Type TColorCircle = class (TCircle);
FLeft, FTop, FRight, FBottom: Integer;
Color: TColor;
end;
Здесь класс TColorCircle создается на основе родительского класса TCircle. По сравнению с родительским, новый класс дополнительно содержит четыре поля типа Integer и одно поле типа TColor.
Если в качестве родительского используется класс TObject, который является базовым классом для всех классов, то его имя после слова class можно не указывать. Тогда первая строка описания будет выглвдеть так:
type TNewCIass = class
Для различных элементов класса можно устанавливать разные права доступа (видимости), для чего в описании класса используются отдельные разделы, обозначенные специальными спецификаторами видимости.
Разделы private и protected содержат защищенные описания, которые доступны внутри модуля, в котором они находятся. Описания из раздела protected, кроме того, доступны для порожденных классов за пределами названного модуля.
Раздел public содержит общедоступные описания, которые видимы в любом месте программы, где доступен сам класс.
Раздел published содержит опубликованные описания, которые в дополнение к общедоступным описаниям порождают динамическую (т. е. во время выполнения программы) информацию о типе (Run-Time Type Information, RTTI). По этой информации при выполнении приложения производится проверка на принадлежность элементов объекта тому или иному классу. Одним из назначений раздела published является обеспечение доступа к свойствам объектов при конструировании приложений. В Инспекторе объектов видны те свойства, которые являются опубликованными. Если спецификатор published не указан, то он подразумевается по умолчанию, поэтому любые описания, расположенные за строкой с указанием имени класса, считаются опубликованными.
Объекты как экземпляры класса объявляются в программе в разделе var как обычные переменные. Как и в случае записей, для обращения к конкретному элементу объекта (полю, свойству или методу) указывается имя объекта и имя элемента, разделенные точкой, т. е. имя элемента является составным.
var
CCircle1: TColorCircle;
CircleA: TCircle;
begin
…
CCircle1.FLeft:=5; CCirclel.FTop: =1;
…
end;
Поле класса представляет собой данные, содержащиеся в классе. Поле описывается как обычная переменная и может принадлежать к любому типу.
Пример описания полей:
type TNewClass = class(TObject)
private
FCode: integer;
FSign: char;
FNote: string;
end;
Здесь новый класс TNewclass создается на основе базового класса TObject и получает в дополнение три новых поля FCode, FSign и FNote, имеющих, соответственно, целочисленный, символьный и строковый типы. Согласно принятому соглашению имена полей должны начинаться с префикса F (от англ. Field – поле).
При создании новых классов класс-потомок наследует все поля родителя, при этом, удалить или переопределить эти поля нельзя, но можно добавить новые. Таким образом, чем дальше по иерархии какой-либо класс находится от родительского класса, тем больше полей он имеет.
Изменение значений полей обычно выполняется с помощью методов и свойств объекта.
Свойства (property) реализуют механизм доступа к полям. Каждому свойству соответствуют поле, содержащее значение свойства, и два метода, обеспечивающих доступ к этому полю. Описание свойства начинается со слова property, при этом типы свойства и соответствующего поля должны совпадать. Ключевые слова read и write являются зарезервированными внутри объявления свойства и служат для указания методов класса, с помощью которых выполняется чтение значения поля, связанного со свойством, или запись нового значения в это поле.
|
|
Пример описания свойств:
type TNewClass = class(TObject)
private
FCode: integer;
FSign: char;
FNote: string;
published
property Code: integer read FCode write FCode;
property Sign: char read FSign write FSign;
property Note: string read FNote write FNote;
end;
Для доступа к полям FCode, FSign и FNote, которые описаны в защищенном разделе и недоступны для других классов, используются свойства Code, Sign и Note соответственно.