Файл: Основные понятия объектно-ориентированного программирования(ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ТЕХНОЛОГИЯ).pdf
Добавлен: 29.03.2023
Просмотров: 237
Скачиваний: 2
Данные, хранящиеся в RTTI не являются документированными, однако среди них обязательно имеются следующие:
- указатель на VMT родительского класса;
- указатель на строку, содержащую имя класса;
- указатель на VMT класса;
ОБЪЕКТНАЯ ПЕРЕМЕННАЯ А
УКАЗАТЕЛЬ НА VMT КЛАССА
------------------------------
ПОЛЯ ОБЪЕКТА А
ОБЪЕКТНАЯ ПЕРЕМЕННАЯ В
УКАЗАТЕЛЬ НА VMT КЛАССА
------------------------------
ПОЛЯ ОБЪЕКТА В
RTTI КЛАССА
------------------------
VMT КЛАССА
Рисунок 4 – Схема размещения объектов и классов в памяти
- размер экземпляра объекта в байтах.
С помощью этих данных в процессе выполнения программы можно контролировать и приводить объектные типы [6].
2.6. Выводы
В данной главе рассмотрены основные понятия ООП применительно к языку Object Pascal: классы, свойства, наследование, полиморфизм, а также рассмотрено размещение объектов и классов в памяти.
3. ПРАКТИЧЕСКАЯ ЧАСТЬ
3.1. Создание простейшего класса
В рамках практической части будет разработано простейшее консольное приложение на языке Object Pascal в среде Lazarus (см. рисунок 5) [17].
Рисунок 5 – Создание приложения
Данная среда автоматически генерирует часть необходимого исходного кода, что упрощает процесс разработки (см. рисунок 6).
Разработаем класс «Персонаж», который будет содержать два свойства – имя персонажа и количество здоровья, а также конструктор, деструктор и метод вывода информации о персонаже на экран.
Рисунок 6 – Автоматически сгенерированный код
Исходный код класса:
type TPersonage = class
public
health: Integer;
name: String;
procedure showInfo;
constructor Create();
constructor Create(n:String; h:Integer);
destructor Destroy();
end;
Конструктор по умолчанию:
constructor TPersonage.Create();
begin
name:='Player';
health:=100;
end;
Конструктор с параметром:
constructor TPersonage.Create(n:String; h:Integer);
begin
name:=n;
health:=h;
end;
Деструктор:
destructor TPersonage.Destroy();
begin
writeln('Player: '+name+' deleted!');
end;
Метод вывода информации:
procedure TPersonage.showInfo;
begin
writeln(self.name+'. Health: '+IntToStr(self.health));
end;
Демонстрация работы:
procedure TestApplication.DoRun;
var
p: TPersonage;
begin
p:=TPersonage.Create();
p.showInfo();
p.Destroy();
p:=TPersonage.Create('Fox',200);
p.showInfo();
p.Destroy(); readln();
Terminate;
end;
В данном коде создаются два объект класса TPersonage. В первом случае используется конструктор по умолчанию, во втором – конструктор с параметрами.
Результат выполнения данного кода представлен на рисунке 7 [8].
Рисунок 7 – Демонстрация работы с простейшим классом
3.2. Создание производного класса
Создадим производный класс – «Босс». Добавим в него дополнительное свойство – мощность, а также опишем метод совершения удара [20]:
type TBoss = class (TPersonage)
public
power: Integer;
procedure hit(var p:TPersonage);
constructor Create(n:String; p:Integer);
destructor Destroy;
end;
Конструктор:
constructor TBoss.Create(n: String; p:Integer);
begin
health:=500;
name:=n;
power:=p;
end;
Деструктор:
destructor TBoss.Destroy();
begin
inherited;
end;
В данном случае просто вызывается деструктор базового класса.
Метод, демонстрирующий удар:
procedure TBoss.hit(var p: TPersonage);
begin
p.health:=p.health-power;
end;
Демонстрация работы:
procedure DemoApplication.DoRun;
var
p: TPersonage;
b: TBoss;
begin
p:=TPersonage.Create('Fox',200);
p.showInfo();
b:=TBoss.Create('Boss',50);
b.showInfo();
b.hit(p);
p.showInfo();
readln();
Terminate;
end;
В данном коде создаются два объекта – один класса TPersonage, другой класса TBoss. Информация по каждому созданному объекту выводится на экран. Далее идет вызов метода hit – босс атакует созданного игрока. Результат работы данного кода приведен на рисунке 8.
Рисунок 8 – Демонстрация принципа наследования
Модифицируем код таким образом, чтобы при запуске программы создавалась имитация боя двух персонажей. Для этого необходимо добавить в класс персонажа метод hit и свойство power, удалив их из класса босса.
Код основной программы будет выглядеть следующим образом:
procedure DemoApplication.DoRun;
var
p: TPersonage;
b: TPersonage;
begin
p:=TPersonage.Create('Fox',200,50);
p.showInfo();
b:=TBoss.Create('Boss',50);
b.showInfo();
writeln('Game started!');
while ((p.health>0) and (b.health>0)) do
begin
writeln();
writeln('Player is attacking');
p.hit(b);
b.showInfo();
if b.health>0 then
begin
writeln('Boss is attacking');
b.hit(p);
p.showInfo();
end
else writeln('Player win!');
end;
if p.health<=0 then writeln('Boss win!');readln();
Terminate;
end;
Результат выполнения данного кода приведен на рисунке 9.
Рисунок 9 – Демонстрация игры
3.3. Выводы
В рамках данной главы рассмотрено создание простейшего класса, класса-наследника, а также продемонстрирован принцип полиморфизма.
ЗАКЛЮЧЕНИЕ
В рамках выполнения данной работы была раскрыта тема «Основы объектно-ориентированного программирования в языке Object Pascal».
Первая глава работы носит теоретический характер, описывая основную концепцию объектно-ориентированной парадигмы программирования. Алан Кей выделял следующие основные положения данной парадигмы:
- все является объектом;
- любые вычисления реализуются при помощи взаимодействия объектов друг с другом путем обмена данными;
- любой объект имеет свою независимую память, в состав которой входят другие объекты;
- класс определяет функциональное поведение объекта;
- классы представляют собой структуру «дерево», имеющую один общий корень.
Основными элементами объектно-ориентированного подхода являются следующие:
- абстрагирование – выделение свойств объектов, отвечающих за их поведение;
- инкапсуляция – разделение свойств поведения и устройства;
- модульность – возможность декомпозиции системы;
- иерархия – расположение объектов по уровням;
- типизация – ограничение взаимозаменяемости классов;
- параллелизм - свойство объекта находиться в одном из двух состояний – активное или пассивное;
- устойчивость - свойство объекта существовать во времени или пространстве.
Вторая глава работы непосредственно посвящена языку Object Pascal. В ней отражены основные моменты объектно-ориентированной парадигмы, которые вобрал в себя данный язык. В первую очередь сюда относятся классы. Классы обладают определенной структурой – они могут содержать свойства и методы. Свойства классов характеризуются спецификаторами доступа, определяющими область видимость.
У методов также есть свои спецификаторы, отвечающие за реализацию и назначение метода.
Кроме основных классов в языке Object Pascal есть помощники классов, которые служат для расширения функциональных возможностей уже существующих классов без необходимости создания новых классов. Важно отметить, что помощники не являются полноценными классами, на них накладываются следующие ограничения:
- запрещено использование конструкторов и деструкторов;
- нельзя определять члены класса или его свойства;
- нельзя использовать абстрактные методы;
- нельзя переопределять виртуальные методы класса;
- перегружаемые методы используются с модификатором overload.
Еще одна важная черта ООП в Object Pascal – наличие интерфейсов. Интерфейсы необходимы в тех случаях, когда нужно использовать объекты, находящиеся в бинарных файлах.
В рамках практической части было разработано приложение, демонстрирующее такие технологии ООП как:
- простое наследование;
- множественное наследование;
- реализация интерфейсов.
Важно отметить, что тема ООП является очень обширной, в данной работе отражены лишь ее основы.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
- Алексеев Е.Р. Самоучитель по программированию на Free Pascal и Lazarus / Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер. – Донецк: ДонНТУ, 2012. – 503 с.
- Бабушкина И.А. Практикум по объектно-ориентированному программированию / И.А. Бабушкина, С.М. Окулов. – М.: БИНОМ, 2015. – 369 с.
- Бадд Т. Объектно-ориентированное программирование. – СПб.: Питер, 2012. – 296 с.
- Бердоносов В.Д. Объектно-ориентированное программирование / В.Д. Бердоносов, А.А. Животова. – Комсомольск-на-Амуре: ФГБОУ ВПО «КнАГТУ», 2015. – 135 с.
- Вайсфельд М. Объектно-ориентированное мышление. – СПб.: Питер, 2014. – 304 с.
- Волосевич А.А. Инструменты и средства программирования. – Минск: Изд-во БелГУ, 2015. – 154 с.
- Грудзинский А.О. Методы программирования / А.О. Грудзинский, И.Б. Мееров, А.В. Сысоев. – Нижний Новгород: ННГУ, 2015. – 313 с.
- Дарахвелидзе П.Г. Программирование в Delphi 7 / П.Г. Дарахвелидзе, Е.П.Марков. – СПб.: БХВ-Петербург, 2013. – 784 с.
- Иванова Г.С. Объектно-ориентированное программирование / Г.С. Иванова, Т.Н. Ничушкина, Е.К. Пугачев. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2012. – 320 с.
- Кузнецова И.А. Практикум по Delphi для решения прикладных задач. – Нижний Новгород: ННГУ, 2015. – 144 с.
- Немнюгин С.А. Turbo Pascal. – СПб.: Питер, 2012. – 506 с.
- Отрутикова К.В. Основы объектно-ориентированного программирования. – Екатеринбург: Изд-во РГППУ, 2016. – 54 с.
- Попов Е.А. Экспресс курс программирования в Lazarus. – М.: БИНОМ, 2012. – 76 с.
- Радченко Г.И. Объектно-ориентированное программирование / Г.И. Радченко, Е.А. Захаров. – Челябинск: Издательский центр ЮУрГУ, 2013. – 167 с.
- Слинкин Д.А. Основы программирования на Турбо-Паскале. – Шадринск: Изд-во ШГПУ, 2013. – 244 с.
- Столяров А.В. Введение в язык Си++. – М.: МАКС Пресс, 2012. – 128 с.
- Толстых В.К. Программирование в среде Delphi. – Донецк: ДонНУ, 2012. – 128 с.
- Хабибуллин И.Ш. Java 7. – СПб.: БХВ-Петербург, 2012. – 768 с.
- Хорев П.Б. Объектно-ориентированное программирование. – М.: Издательский центр «Академия», 2012. – 448 с.
- Чекулаева А.А. Основы объектно-ориентированного программирования в языке Паскаль / А.А. Чекулаева, Я.М. Демяненко. – Ростов-на-Дону: Изд-во РГУ, 2014. – 31 с.