- •4.1.Стили программирования. Принципы разработки больших программ. Жизненный цикл больших программ. Примеры использ-я в соврем. Языках прогр-ия принципов разработки программ.
- •Interface
- •Implementation
- •Var m_cl_1 : My_class; - Это бъект
- •4.3.Объекты и классы. Разработка классов и объектов пользователей. Состав классов: поля, методы, свойства. Перегружаемые и перекрываемые методы классов. Примеры описания и использования.
- •Int k; free(item)
- •4.5.Объекты и классы. Структура класса: поля, методы, свойства. Разработка классов пользователей с динамическими структурами данных типа объект-таблица. Пример описания класса.
- •4.6.Структура данных типа списков. Варианты организации списков. Операции над списками. Примеры программирования операций над списками разных типов.
- •4.7.Структуры данных типа таблица. Способы организации таблиц. Основные операции над табличными структурами. Организация поиска в таблицах. Примеры операций поиска в таблицах.
- •11010 Результат 01001
- •4.8.Решение задачи сортировки в массивах разных структур. Сравнение алгоритмов сортировки: методом вставки, включения, шейкер сортировки и быстрой сортировки. Примеры использования.
- •4.10.Структуры данных типа дерева. Основные операции над бинарными деревьями. Решение задачи сортировки с помощью дерева. Примеры программирования операций над деревьями.
t
Type My_class = class
<поля
данных>
<Наименование
методов класса>; <Свойства
полей данных>; <Описание
всех методов класса> End;Interface
Implementation
Var m_cl_1 : My_class; - Это бъект
ype date = class
private
dd, mm, yy: integer;
public
procedure init (d, m, y: integer);
function month: integer;
function day: integer;
function year: integer;
end;
procedure date.init (d, m, y: integer);
begin
dd := d; mm := m; yy := y;
end;
function date.day: integer;
begin
result := dd;
end;
program ObjectPascalExample;
type
THelloWorld = class { определение класса }
procedure Put;
end;
procedure THelloWorld.Put; {описание процедуры метода Put }
begin
Writeln('Hello, World!');
end;
var
HelloWorld: THelloWorld; { определение переменной-
begin указателя на экземпляр класса }
HelloWorld := THelloWorld.Create; { конструктор }
HelloWorld.Put;
HelloWorld.Free; { деструктор }
end.
В состав классов входят:
1. Поля – типизированные данные для хранения внутр. состояния объекта.
2. Методы – это действия, выполняемые над полями объекта.
3. Свойства обеспечивают реализацию механизма доступа к полям класса. Доступ к ним осуществляется только через промежуточный код. Зарезервированные слова: property, read, write. Свойство обязательно соотносится с конкретным полем класса и определяет те методы класса, которые должны использоваться при записи в это поле или при чтении из него конкретных значений параметров.
Связывание метода с объектом – это механизм поиска метода объектом
способа связывания: 1). Статическое, 2). Динамическое, 3). Виртуальное
При обращении к виртуальным и динамическим методам вызываемая процедура или функция определяется только в момент обращения. Такой механизм называется поздним связыванием. Виртуальные и динамические методы определяются по типу фактической объектной переменной. Именно виртуальные и динамические методы позволяют в полной мере реализовать концепцию полиморфизма. При объявлении виртуальных и динамических методов используются директивы virtual и dynamic соответственно. Виртуальные и динамические методы различаются только внутренней реализацией. Кратко опишем их внутренние различия:
При вызове метода адрес метода определяется из таблиц VMT (Virtual Method Table) – для виртуальных или DMT (Dynamic Method Table) – для динамических. Таблицы VMT охватывают виртуальные методы всей иерархии классов, а DMT содержит информацию только о динамических методах текущего класса, следовательно, таблица VMT больше чем DMT. Так как адреса всех виртуальных методов содержаться в одной таблице VMT, то поиск адреса требуемого метода выполняется быстро. При вызове динамического метода адрес кода его реализации сначала ищется в DMT экземпляра и если адрес не найден, то в таблицах DMT всех классов-предков в порядке иерархии, что значительно медленней, чем у виртуальных методов. Следовательно, виртуальные методы выполняются быстрее, чем динамические, но требуют значительно больше памяти.
Для того чтобы изменить поведение виртуальных или динамических методов у потомка (переопределить метод или перекрыть) используется служебное слово override.
Virtual |
Procedure Name_x ( var y:string); virtual; |
Dynamic |
Function Gauss(var x,y:real):Boolean; dynamic; Метод аналогичен Virtual с меньшими затратами памяти |
Методы – это процедуры и функции для обработки данных, которые принадлежат классу.
Особые методы - конструктор и деструктор. Первый выделяет адрес в памяти для класса и его методов, производит связывание виртуальных методов, а второй выгружает из памяти объекты класса. Деструктор освобождает память.
Constructor Create() - Создание экземпляра класса
Destructor Destroy() - Уничтожение экземпляра класса
Любой созданный класс может наследовать свои свойства другим классам.
Type Heir_Class = class
(My_Class) <Поля
данных наследника>;
<Методы наследника>
;
<свойства
данных наследника> end;
В ООП разрешается наследовать несколько дочерних классов от одного родительского, но запрещено наследование одного класса от нескольких. Если класс B наследуется от класса А, тогда А называется базовым, родительским классом для класса B – производного, дочернего. В нашем примере CPixel есть дочерний класс класса CPoint.
В
type TForm1
= class(TForm) Button1:
TButton; Button2:
TButton; procedure
Button1Click(Sender: TObject); procedure
Button2Click(Sender: TObject); {
Private declarations } public {
Public declarations } end;
Так реализуется механизм инкапсуляции в классах
