Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Основные понятия объектно-ориентированного программирования(ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ТЕХНОЛОГИЯ)

Содержание:

ВВЕДЕНИЕ

Давно известно, что программирование не является простой наукой. Научиться данной науке сложно. Еще сложнее программировать на уровне профессионалов – правильно и быстро создавать эффективные программы.

Достижение успеха в любой отрасли возможно лишь при условии освоения эффективной технологии конкретной деятельности. Здесь под технологией понимается наука о мастерстве – полная совокупность систематизированных знаний о всевозможных способах решения различного рода задач.

Современное программирование базируется на объектно-ориентированной технологии, которая не только позволяет повысить качество разрабатываемых программных продуктов, но и сокращает объем нового кода за счет использования уже написанного ранее. Одним из примеров языков, поддерживающих данную технологию, является язык программирования высокого уровня Object Pascal, предоставляющий программисту широкий набор развитых средств.

Основой разработки приложений для наиболее популярной на сегодняшней день операционной системы Microsoft Windows также является объектно-ориентированная технология программирования. Важно отметить, что все приложения Microsoft Windows относятся к классу программ, управляемых событиями. Язык программирования Object Pascal позволяет программисту создавать собственные обработчики для различных событий [19].

Популярность объектно-ориентированного программирования (ООП) также объясняется возможностью его применения не только на этапе написания программы, но уже на стадии ее разработки.

В рамках крупных проектов использование ООП также является оправданным. Очевидно, что чем сложнее и масштабнее проект, тем большую выгоду можно получить при использовании данной технологии.

Объектно-ориентированное программирование требует оставить в стороне характерные представления о программировании, которые долгие годы рассматривались как стандартные. Однако после того, как это сделано, объектно-ориентированное программирование становится более доступным в понимании, более наглядным и превосходным средством разрешения ряда задач, доставляющих неприятности традиционному программному обеспечению [11].

Актуальность рассматриваемой темы очевидна – программное обеспечение современных компьютеров развивается так же стремительно, как и вся сфера информационных технологий. Использование ООП позволяет строить большие функциональные проекты на базе простых элементов.

Объектом исследования данной работы является объектно-ориентированная технология программирования.

Предметом исследования - язык программирования Object Pascal.

Цель работы – описать основы объектно-ориентированного программирования и продемонстрировать их применение в языке Object Pascal.

Для достижения поставленной цели необходимо решить следующие задачи:

  • проанализировать литературу по заданной теме;
  • выделить причины популярности ООП;
  • определить основные элементы технологии;
  • выделить ключевые положения ООП;
  • рассмотреть элементы ООП в языке Object Pascal;
  • разработать приложение, демонстрирующее принципы ООП.

При написании работы в качестве опорных источников были использованы следующие книги: К.В. Отрутикова – «Основы объектно-ориентированного программирования» и Д.А. Слинкин – «Основы программирования на Турбо-Паскале».

Структруно работа состоит из трех глав:

  • первая - описывает объект исследования;
  • вторая - отражает принципы ООП в конкретном языке программирования;
  • третья - практическая.

1. ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ТЕХНОЛОГИЯ

1.1. Исторические аспекты

Объектно-ориентированная технология стала результатом долгого развития процедурного программирования. Основоположниками этой технологии являются норвежские ученые Кристен Нюгорт и Оле Джохан Дал, которые являются создателями языка программирования Simula [1].

Первое упоминание Simula относится к 1962 г. - это принято связывать с проектом Simulation Language, целью которого являлось моделирование метода Монте-Карло.

В 1965 г. Нюгарт и Дал предложили объединить данные и процедуры, служащие для обработки этих данных. В 1966 г. на саммите НАТО были официально утверждены возможности языка Simula I, а также было принято решение о его дальнейшем совершенствовании. Тогда же появились понятия классов и объектов, а затем и технология, которая в дальнейшем получила название «наследование». Язык Simula вобрал в себя возможности использования общих свойств разными классами за счет указания названий классов в виде префикса. Описанная технология программирования вызвала интерес в Дании, Германии и СССР.

Дальнейшее развитие технологии принято связывать с именем Алана Кея, придумавшего принципиально новую технологию разработки. Основой данной технологии была идея о том, что набор последовательно исполняемых команд может представляться в виде многомерной среды взаимодействия объектов, общающихся друг с другом посредством асинхронного обмена сообщениями. Таким образом, Кей создал возможность поддержки используемой среды целым множеством компьютеров, объединенных в сеть. Эти нововведения стали революционными и получили воплощение в новом объектном языке Smallalk. Первая документация SmallTalk была написана профессором лингвистики Аделью Голдберг [14].

В 1974 г. Марвин Мински, родоначальник теории искусственного интеллекта, ввел термин «фрейм», который отделил описание класса от его представления.

В 1976 г. Кристен Нюгорн предложил ввести концепцию шаблонов, представляющую собой более высокий уровень абстракций, по сравнению с объектами. Данная концепция нашла свою реализацию в языке BETA.

В 1980 г. Бьерн Страуструп ввел концепцию классов в язык программирования C.

В 1982 г. на восьмой Международной конференции по сверхбольшим базам данных в Мехико была предложена концепция объектно-ориентированных баз данных.

В 1983 г. окончательно сформировался язык программирования C++.

В 1986 г. состоялась первая всемирная конференция по объектно-ориентированным системам программирования в Портленде. Данное событие принято связывать с компонентной моделью CORBA (Common Object Request Broker Architecture), нацеленной на поддержку крупных проектов.

В 1992 г. вышел стандарт CORBA 1.0, который описывал базовые понятия объектной модели, наборы программных интерфейсов, а также декларативный язык определения этих интерфейсов.

В 1994 г. был опубликован стандарт CORBA 2.0, содержащий исправления недостатков предыдущей версии. Кроме того, в этой версии была добавлена работа с кодировкой Unicode и поддержка транзакций.

В 1995 г. компания Sun Microsystems опубликовала среду HotJava с поддержкой мобильного кода. Именно эта компания стала первой крупной компанией, предложившей полностью завершенное решение в области объектно-ориентированного программирования.

В настоящее время объектно-ориентированная технология поддерживается практически всеми языками программирования высокого уровня [7].

1.2. Причины популярности

Известно, что в последние годы технология объектно-ориентированного программирования обрела широкую популярность. Практически все производители программного обеспечения перевели свои продукты к объектно-ориентированным версиям. Сегодня существует целое множество различной литературы, посвященной данной технологии. Все современные IT-компании набирают специалистов именно со знанием ООП. Очевидно, данная концепция пользуется гораздо большим спросом, чем экспертные системы или классическое структурное программирование [20].

Объектно-ориентированная технология стала революцией в области программирования – это принципиально новая эволюционная ступень, которая естественным образом вытекает из всей предшествующей истории программирования.

Принято выделять три основные причины, благодаря которым объектно-ориентированная технология получила массовое признание и широкую популярность:

  • надежда на то, что данная технология позволит быстро и просто увеличить показатели надежности и продуктивности разработки, за счет чего разрешится кризис программного обеспечения;
  • желание перехода от классических языков и технологий к принципиально новой концепции, которая открывает большие возможности;
  • сходство ООП с идеями, применяемыми в смежных областях науки и техники [4].

Фактически, ООП является крайним звеном длинной цепочки решений, предложенных для разрешения «кризиса программного обеспечения». Само наличие кризиса говорит о том, что человеческий разум и воображение не всегда обладает возможностями для решения тех задач, которые необходимо решить при помощи вычислительных средств.

Место объектно-ориентированной технологии в рамках всех парадигм программирования изображено на рисунке 1.

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ

ПРОЦЕДУРНОЕ ПРОГРАММИРОВАНИЕ

ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ

АССЕМБЛИРОВАНИЕ

МАШИННОЕ КОДИРОВАНИЕ

Рисунок 1 – Эволюция парадигм программирования

Несмотря на то, что использование объектно-ориентированной технологии действительно позволяет упростить процесс разработки сложных программных систем, стоит отметить тот факт, что данная концепция не является универсальным средством, способным справиться с задачей любой сложности.

Программирование сегодня по-прежнему остается одной из самых сложных отраслей человеческой деятельности. Чтобы добиться профессионализма в этой области необходимо наличие сразу нескольких качеств: талант, интеллект, логика, способность к творчеству, умение строить и применять абстракции и т.п.

ООП представляет собой новое понимание вычислений, а также того, как именно человек способен структурировать данные внутри компьютера [3].

1.3. Элементы

Ранее уже говорилось, что технология ООП появилась в процессе разработки языка Smalltalk. Объектно-ориентированную технологию принято считать парадигмой. Сам термин «парадигма» обозначает способ восприятия человеком-программистом компьютерной программы и процесса ее исполнения. В данном случае парадигма представляет собой нечто абстрактное, относящееся к мышлению программиста, а не к конкретным языковым средствам [16].

В рамках ООП есть два ключевых понятия:

  • объект – явление или предмет, который обладает четко определенным поведением. Объект обладает состоянием, поведением и индивидуальностью. Поведение и структура подобных объектов определяют для них общий класс, поэтому объекты часто называют экземплярами классов. Состояние объекта характеризуется его свойствами. Поведение объекта связано со способами его воздействия на другие объекты и наоборот относительно изменения состояния этих объектов и передачи сообщений. Индивидуальность представляет собой свойство объекта, отличающее его среди всех остальных объектов;
  • класс – множество объектов, обладающих общей структурой и поведением.

Основные элементы объектно-ориентированного программирования представлены на рисунке 2:

Элементы ООП

абстрагирование

инкапсуляция

модульность

иерархия

типизация

параллелизм

устойчивость

Рисунок 2 – Основные элементы ООП

  • абстрагирование – определение важнейших характеристик объектов, которые отличают их на всем множестве объектов, четко определяя концептуальные границы. В процессе абстрагирования принято уделять внимание внешним особенностям и свойствам объекта, связанным с его поведением. Именно формирование правильного набора абстракций является основной задачей ООП;
  • инкапсуляция – процесс разделения объекта на отдельные элементы, определяющие его устройство и поведение. Основная задача инкапсуляции - изолировать интерфейс объекта, отвечающий за внешнее поведение, от внутренней реализации. В рамках объектно-ориентированного подхода собственные ресурсы объектов, которыми могут пользоваться объекты, скрыты от внешней среды. Инкапсуляция и абстрагирование являются взаимодополняющими операциями: при помощи абстрагирования можно сфокусироваться на внешних особенностях объектов, а при помощи инкапсуляции скрыть внутреннее устройство объектов;
  • модульность – это характеристика системы, связанная с возможностью ее декомпозиции. Процесс декомпозиции предполагает разбиение всей системы на несколько внутренне связанных модулей. При этом друг с другом модули могут быть вовсе не связаны. Модульность и инкапсуляция позволяют создавать препятствия между абстракциями;
  • иерархия – абстрактное расположение объектов по нескольким уровням. Основными структурами иерархии являются классовая структура и структура объектов;
  • типизация – свойство-ограничение, накладывающееся на классы объектов и препятствующее взаимозаменяемости различных классов. Основной задачей типизации является реализация защиты от использования объектов одного класса под видом других классов;
  • параллелизм – свойство объекта находиться в одном из двух состояний – активное или пассивное;
  • устойчивость – свойство объекта существовать во времени или пространстве [18].

1.4. Ключевые положения

Ключевые положения объектно-ориентированной технологии были первые сформулированы Аланом Кеем. К ним относятся следующие утверждения:

  • в рамках ООП все является объектом;
  • все вычисления реализуются при помощи взаимодействия объектов таким образом, что один объект запрашивает выполнение какого-либо действия у другого объекта посредством отправки сообщений. Сообщение содержит запрос на выполнение какого-либо действия, также оно сопровождается списком аргументов, которые требуются для реализации данного действия;
  • все объекты обладают собственной независимой памятью, состоящей из других объектов;
  • все объекты являются экземплярами классов, отражая общие свойства соответствующих классов;
  • классы определяют функциональные возможности объектов. Следовательно, все объекты, принадлежащие одному классу, способны выполнять одни и те же действия;
  • классы являются древовидной структурой с общим корнем. Эта структура называется иерархией наследования. Поведение и память отдельных экземпляров являются автоматически доступными любым экземплярам, которые находятся на нижележащих уровнях иерархии [5, 9].

1.5. Выводы

В данной главе рассмотрены основы объектно-ориентированного программирования: описана история возникновения данной технологии, причины ее популярности, а также основные понятия и ключевые положения.

2. OBJECT PASCAL

2.1. Классы

Ранее говорилось, что одним из ключевых понятий объектно-ориентированного подхода является понятие класса. Класс представляет собой структуру, динамически размещаемую в памяти. Все классы строятся на базе абстракций. Для корректной работы абстракции необходимо ограничить доступ к ее внутреннему содержимому. Данное условие реализуется за счет разделения абстракции на две части (см. рисунок 3):

КЛАСС

ИНТЕРФЕЙС

ПОЛЯ

МЕТОДЫ

РЕАЛИЗАЦИЯ

 

ПОЛЯ

 

МЕТОДЫ

Рисунок 3 – Две части абстракции

  • интерфейс – полная собой совокупность элементов, доступных вне абстракции – основные характеристики состояния и поведения экземпляров;
  • реализация – полная совокупность элементов, доступных только в рамках абстракции – внутренняя организация абстракции и механизмы реализации ее поведения.

Наличие интерфейса сокращает возможность разрушения целостности объекта извне. При этом сокрытие особенностей реализации упрощает редактирование реализации класса не только на этапе отладки, но и в процессе модификации всего программного кода. Таким образом, класс определяет существование глобальной области данных в рамках объекта, которая доступна методам этого объекта. Также важно отметить, что доступ к объекту реализуется при помощи специального интерфейса.

Описание класса в языке Object Pascal выглядит следующим образом:

Type <имя> = class (<имя _родительского_класса>)

Private

<строго_скрытые_элементы>

Strict Private

<скрытые_элементы>

Protected

<защищенные_элементы>

Public

<общедоступные_элементы>

Published

<опубликованные_элементы>

end;

В данном описании использованы специальные директивы, отвечающие за разграничение доступа к отдельным элементам класса (см. таблицу 1) [2].

Любой класс содержит как минимум два метода – конструктор и деструктор. Конструктор - метод создания объекта, деструктор – метод его уничтожения. В языке Object Pascal имена конструктора и деструктора произвольны. Конструктор может принимать на вход некоторое количество аргументов. Деструктор не имеет аргументов.

Таблица 1 – Спецификаторы доступа

Спецификатор

Описание

Private

Класс доступен только в текущем модуле.

Strict Private

Члены класса, доступные только внутри собственных методов.

Protected

Члены класса, доступные в производных классах даже в тех случаях, когда они описаны в других модулях.

Public

Общедоступные члены, на которые не накладываются ограничения.

Published

Публичные члены класса, доступные в инспекторе объектов. Важно отметить, что массивы не могут являться членами класса.

Характерное отличие конструктора от других методов – использование ключевого слова «Constructor», которое заменяет классические «procedure» и «function». Метод-деструктор определяется ключевым словом «Destructor».

Перед созданием объекта его необходимо объявить. Объявление экземпляров классов аналогично объявлению переменных. Задача конструктора – выделение памяти под объект. Задача деструктора – освобождение этой памяти после того, как работа с объектом завершена.

Чтобы проверить принадлежность объекта какому-либо классу в языке Object Pascal используется бинарный оператор «is». Первым аргументом этого оператора является имя объекта, вторым имя интересующего класса. В результате выполнения данного оператора возвращается логическое значение. Важно помнить, что если объект объявлен, но не создан, оператор «is» всегда вернет значение «false» [13].

2.2. Свойства

Основное назначение свойств – ограничение доступа к членам класса. Обращение к свойствам реализуется аналогично обычным членам.

Взаимодействие и передача данных между свойствами и данными-членами реализуется с помощью неявного обращения к члену или неявного вызова метода.

Реализация ограничений возможна благодаря спецификаторам доступа. Так, например, спецификатор read предоставляет права на чтение, а спецификатор write – права на запись. В том случае, если спецификаторы явно не указаны, считается, что предоставлены только права на чтение.

Синтаксис объявления свойств:

property <идентификатор>: <тип> <ограничитель>;

Задача ограничителя – разграничение прав доступа. Синтаксис записи ограничителя:

<спецификатор>:<идентификатор>

Ограничители бывают двух видов - простые и сдвоенные. Сдвоенный ограничитель представляет собой запись двух ограничителей, разделенных между собой пробелом.

В большинстве случаев идентификатором свойства является имя того элемента класса, который привязывается к этому свойству. Стоит отметить, что идентификаторами также могут быть имена методов, взаимодействующих с элементами класса, в том случае, если эти элементы и методы уже объявлены в классе.

Частным случаем свойств являются свойства-массивы, с помощью которых реализуется ограниченный доступ к массивам, расположенным внутри объектов. В процессе работы с такими свойствами необходимо указывать индексы интересующих элементов.

Обмен данными между массивами и свойствами реализуется с помощью специального метода, одним из параметров которого является число целого типа.

Синтаксис записи свойств-массивов:

property <свойство>[<параметр>:<тип>] <ограничитель>;

Кроме того, свойства-массивы могут быть помечены в качестве «свойств по умолчанию» (спецификатор «default») Класс может иметь только одно такое свойство. При использовании свойств по умолчанию конструкции объект.свойство[индекс] и объект[индекс] становятся равнозначными.

Еще одним видом свойств являются индексные свойства, связанные с конкретными элементами массива.

Синтаксис записи индексных свойств:

property <свойство> <тип> index <ограничитель>; [12]

2.3. Наследование

Один из основных принципов ООП - наследование. Согласно данному принципу, классы могут строиться на базе других, уже существующих классов, которые называются родительскими. Если у класса один родительский класс, такое наследование называется простым. В противном случае наследование называется множественным.

Одноименные методы в пределах иерархии классов могут переопределяться на нижних уровнях. Для этого необходимо добавить прототип нужного метода в объявление класса-наследника и написать требуемую реализацию.

По умолчанию все методы классов являются статическими. Если обратиться к какому-либо методу объекта базового класса, исполнится метод родительского класса. Если же вызвать тот же метод из наследуемого класса, вызовется соответствующий метод класса-наследника.

Часто при перегрузке методов используются виртуальные методы, основой которых является механизм позднего связывания. В этом случае привязка методов к объектам происходит непосредственно в процессе исполнения программного кода (при вызове конструктора). Важно отметить, что виртуальные методы нельзя перекрыть обычными методами. Чтобы пометить метод виртуальным, используется ключевое слово «dynamic» или «virtual».

Перегрузка виртуального метода реализуется с помощью модификатора «override». В этом случае перегружаемый метод автоматически становится виртуальным.

Наряду с основными методами, также могут наследоваться и конструкторы. Для этого используется оператор «inherited». Также данный оператор используется при наследовании деструктора.

Еще одним вид методов являются абстрактные методы - это динамические или виртуальные методы, реализация которых не определяется в том классе, где они объявлены. Таким образом, заранее предполагается, что эти методы будут переопределяться в классах-наследниках. Абстрактные методы объявляются с ключевым словом «abstract» [15].

2.4. Полиморфизм

При помощи полиморфизма могут задаваться различные реализации некоторого единого по названию метода для классов, расположенных на разных уровнях иерархии. В этом случае одноименные методы называются статическими полиморфными.

В рамках ООП считается, что все реализации одноименных методов представляют собой один полиморфный метод семейства классов. Любая реализация в этом случае является отдельным аспектом полиморфного метода семейства классов. Всякий конкретный аспект статического полиморфного метода определяется объектным типом на этапе компиляции.

Существует также сложный полиморфизм. В этом случае конкретный аспект полиморфного метода также определяется объектным типом, для которого он вызван. Главное отличие состоит в том, что это происходит не на этапе компиляции, а непосредственно в процессе выполнения программы. Данный подход принято называть поздним связыванием.

Необходимость существования и использования позднего связывания объясняется тем, что Object Pascal разрешает указателям на объекты родительского класса присваивать адреса объектов классов потомков.

Так как в случае передачи объектов в качестве параметров применяются указатели, формально описанному параметру типа некоторого класса может соответствовать фактический параметр не только того же типа, но и типа класса, производного от указанного.

В тех случаях, когда реальный тип объекта не определен, связывание объекта и метода на этапе компиляции программы приводит к тому, что при любых условиях (и для объектов родительских классов, и для объектов производных классов) вызывается родительский метод. Применение позднего связывания позволяет правильно определить требуемый аспект полиморфного метода [10].

2.5. Размещение класса и объектов в памяти

Характерной особенностью Object Pascal является тот факт, любой класс после успешной компиляции программы хранит не только основную информацию, но и дополнительную – это данные о типе периода времени выполнения (RTTI – Runtime Type Information). Эта информация хранится в памяти непосредственно перед таблицей виртуальных методов (VMT – Virtual Methods Table). Всякий объект кроме указанных полей также содержит указатель на VMT. Таблица может даже не содержать ссылок, в том случае, если у класса и его предков отсутствуют виртуальные методы. Схема размещения объектов и класса в памяти приведена на рисунке 4.

Данные, хранящиеся в 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 – наличие интерфейсов. Интерфейсы необходимы в тех случаях, когда нужно использовать объекты, находящиеся в бинарных файлах.

В рамках практической части было разработано приложение, демонстрирующее такие технологии ООП как:

  • простое наследование;
  • множественное наследование;
  • реализация интерфейсов.

Важно отметить, что тема ООП является очень обширной, в данной работе отражены лишь ее основы.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Алексеев Е.Р. Самоучитель по программированию на Free Pascal и Lazarus / Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер. – Донецк: ДонНТУ, 2012. – 503 с.
  2. Бабушкина И.А. Практикум по объектно-ориентированному программированию / И.А. Бабушкина, С.М. Окулов. – М.: БИНОМ, 2015. – 369 с.
  3. Бадд Т. Объектно-ориентированное программирование. – СПб.: Питер, 2012. – 296 с.
  4. Бердоносов В.Д. Объектно-ориентированное программирование / В.Д. Бердоносов, А.А. Животова. – Комсомольск-на-Амуре: ФГБОУ ВПО «КнАГТУ», 2015. – 135 с.
  5. Вайсфельд М. Объектно-ориентированное мышление. – СПб.: Питер, 2014. – 304 с.
  6. Волосевич А.А. Инструменты и средства программирования. – Минск: Изд-во БелГУ, 2015. – 154 с.
  7. Грудзинский А.О. Методы программирования / А.О. Грудзинский, И.Б. Мееров, А.В. Сысоев. – Нижний Новгород: ННГУ, 2015. – 313 с.
  8. Дарахвелидзе П.Г. Программирование в Delphi 7 / П.Г. Дарахвелидзе, Е.П.Марков. – СПб.: БХВ-Петербург, 2013. – 784 с.
  9. Иванова Г.С. Объектно-ориентированное программирование / Г.С. Иванова, Т.Н. Ничушкина, Е.К. Пугачев. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2012. – 320 с.
  10. Кузнецова И.А. Практикум по Delphi для решения прикладных задач. – Нижний Новгород: ННГУ, 2015. – 144 с.
  11. Немнюгин С.А. Turbo Pascal. – СПб.: Питер, 2012. – 506 с.
  12. Отрутикова К.В. Основы объектно-ориентированного программирования. – Екатеринбург: Изд-во РГППУ, 2016. – 54 с.
  13. Попов Е.А. Экспресс курс программирования в Lazarus. – М.: БИНОМ, 2012. – 76 с.
  14. Радченко Г.И. Объектно-ориентированное программирование / Г.И. Радченко, Е.А. Захаров. – Челябинск: Издательский центр ЮУрГУ, 2013. – 167 с.
  15. Слинкин Д.А. Основы программирования на Турбо-Паскале. – Шадринск: Изд-во ШГПУ, 2013. – 244 с.
  16. Столяров А.В. Введение в язык Си++. – М.: МАКС Пресс, 2012. – 128 с.
  17. Толстых В.К. Программирование в среде Delphi. – Донецк: ДонНУ, 2012. – 128 с.
  18. Хабибуллин И.Ш. Java 7. – СПб.: БХВ-Петербург, 2012. – 768 с.
  19. Хорев П.Б. Объектно-ориентированное программирование. – М.: Издательский центр «Академия», 2012. – 448 с.
  20. Чекулаева А.А. Основы объектно-ориентированного программирования в языке Паскаль / А.А. Чекулаева, Я.М. Демяненко. – Ростов-на-Дону: Изд-во РГУ, 2014. – 31 с.