Объектно-ориентированное программиирование (ООП
) — методология программирования, основанная на представлении программы в виде совокупности объектов1), каждый из которых является экземпляром определённого класса2), а классы образуют иерархию наследования3).4)
Запись представляет собой набор элементов разных типов, каждый из которых имеет свое имя и называется полем записи.
Тип записи в классическом языке Паскаль описывается следующим образом:
record описания полей end
где описания полей
имеет такой же вид, что и раздел описания переменных без ключевого слова var
.
type Person = record Name: string; Age: integer; end;
Записи в PascalABC.NET
имеет вид:
record секция1 секция2 ... end
Каждая секция имеет вид:
модификатор доступа описания полей объявления или описания методов и описания свойств
Класс представляет собой составной тип, состоящий из полей (переменных), методов (процедур и функций) и свойств. Описание класса имеет вид:
type имя класса = class секция1 секция2 ... end;
Каждая секция имеет вид:
модификатор доступа описания полей объявления или описания методов и описания свойств
Модификатор доступа в первой секции может отсутствовать, при этом подразумевается модификатор internal (видимость всюду внутри сборки). Все описания и объявления внутри класса образуют тело класса. Поля и методы образуют интерфейс класса.
Классы могут описываться только на глобальном уровне. Локальные определения классов (т.е. определения в разделе описания подпрограмм) запрещены.
type Person = class //Person = class(BaseClass) // Вариант с наследованием от BaseClass private fName: string; fAge: integer; class cnt: integer := 0; // Классовое (статическое) поле — PascalABC.NET public class property Coun: integer read cnt; // При описании статических свойств в секциях read и write можно указывать только статические поля или методы — PascalABC.NET constructor Create(Name: string; Age: integer); // Конструктор begin // Описание конструктора ВНУТРИ класса fName := Name; Self.fAge := Age; // Переменная Self, ссылается на объект, вызвавший этот метод cnt += 1; // end; //destructor Destroy; // Деструткор class function Count: integer; // Классовый (статический) Метод — PascalABC.NET begin // Описание метода ВНУТРИ класса Result := cnt; end; procedure Print; // Метод property Name: string read fName; // Свойство property Age: integer read fAge; // Свойство end; procedure Person.Print; // Описание метода ВНЕ класса begin writelnFormat('Имя: {0} Возраст: {1}', Name, Age); end; begin var p0: Person := new Person('Иванов',20); // Создание объекта var p1: Person := new Person('Петров',18); // Создание экземпляра класса writeln(p1.Age); // Обращение к свойству объекта writeln(Person.Count); // Обращение к классовому методу Count — PascalABC.NET end.
Методы представляют собой процедуры и функции, объявленные внутри класса или записи. Особыми разновидностями методов являются конструкторы, деструкторы и перегруженные операции.
Методы могут описываться как внутри, так и вне класса.
Свойство внешне выглядит как поле класса, однако, при доступе к нему на чтение или запись позволяет выполнять некоторые действия. Свойство описывается в классе следующим образом:
property Prop: тип read имя функции чтения write имя процедуры записи;
Как правило, каждое свойство связано с некоторым полем класса и возвращает значение этого поля с помощью функции чтения, а меняет - с помощью процедуры записи. Функция чтения и процедура записи должны быть методами этого класса и иметь следующий вид:
function getProp: тип; procedure setProp(v: тип);
Обычно функция чтения и процедура записи описываются в приватной секции класса. Они могут быть виртуальными, в этом случае их уместно описывать в защищенной секции класса.
Свойства не могут передаваться по ссылке в процедуры и функции. Например, следующий код ошибочен:
Inc(p.Age); // ошибка!
Класс может быть унаследован от другого класса. Класс, от которого наследуют, называют базовым классом (надклассом, предком), а класс, который наследуется, называется производным классом (подклассом, потомком). При наследовании все поля, методы и свойства базового класса переходят в производный класс, кроме этого, могут быть добавлены новые поля, методы и свойства и переопределены (замещены) старые методы. Конструкторы наследуются по особым правилам.
Полиморфизм – это свойство классов, связанных наследованием, иметь различную реализацию входящих в них методов, и способность переменной базового класса вызывать методы того класса, объект которого содержится в этой переменной в момент вызова метода.
экземпляр класса
» и «объект
» взаимозаменяемы.