Файл: Основные понятия объектно-ориентированного программирования.pdf
Добавлен: 03.04.2023
Просмотров: 194
Скачиваний: 2
ВВЕДЕНИЕ
Актуальность данной темы обусловлена широким использованием объектно-ориентированной парадигмы для решения информационных задач.
Объектом исследования является методология программирования.
Предметом исследования является объектно-ориентированное программирование.
Целью данной курсовой работы является исследование основных понятий и принципов объектно-ориентированного программирования.
Задачи исследования:
1. Изучить причины возникновения объектного подхода в программировании и историю возникновения объектно-ориентированной парадигмы;
2. Исследовать основные понятия ООП, такие, как объект, класс, абстракция, наследование, инкапсуляция и полиморфизм;
3. Рассмотреть способы реализации ООП на популярных языках программирования.
В качестве основного теоретического материала для исследования предмета, были использованы следующие источники:
ГОСТ 19781-90, устанавливающий термины и определения основных понятий в области программного обеспечения систем обработки информации [1];
ГОСТ 28397-89 устанавливает термины и определения в области некоторых традиционных языков программирования процедурного типа, которые, также, применяются и в объектно-ориентированных языках [2];
Книга «Программирование на Java» Алексея Николаевича Васильева, профессора кафедры физики КНУ имени Тараса Шевченко, доктора физико-математических наук, описывает примеры реализации ООП на языке Java [3];
В книге Льюиса Дирка и Петера Мюллера: Java7, также описываются примеры реализации ООП на языке Java [4];
В учебном пособии Сартасова Евгения Михайловича, доцента кафедры «Информационные технологии в экономике» и кандидата технических наук, подробно рассмотрены вопросы разработки программ с использованием ООП, на примере языка C#. [5];
Книга Брюса Эккеля «Философия Java» в 4м издании, ставшая классическим пособием для изучения Java, весьма популярного объектно-ориентированного языка. В книге подробно описывается история возникновения объектно-ориентированной парадигмы и ее принципы [6];
В книге Алекса Эллайна, знаменитого разработчика и создателя учебного портала «cprogramming.com» описаны примеры реализации ООП на языке C++ [7];
В руководстве по изучению языка программирования C# Джозефа Албахари, разработчика утилиты LINQPad, описаны некоторые особенности языка C# и примеры реализации ООП [8];
Четвертое издание книги «The C++ programming language» Бёрна Страуструпа, разработчика языка С++, содержит исчерпывающую информацию мультипарадигмального языка программирования С++ [9].
Официальный сайт Microsoft Corporation (электронный ресурс) содержит интерактивный учебник по объектно-ориентированному языку C# платформы .NET Framework. [10].
ОСНОВНЫЕ ПОНЯТИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
1.1. История возникновения объектно-ориентированной парадигмы
Развитие информационных технологий всегда подразумевает повышение сложности задач, стоящих перед разработчиками. Чем сложнее система, тем выше должен быть уровень абстракции от аппаратной части платформы, в противном случае могут возникнуть непреодолимые трудности в создании подобных программ, отладке и дальнейшей их поддержке [6, с.41].
Первые системы не нуждались в высоком уровне абстракции, и даже в наши дни разработчики встраиваемых систем по-прежнему используют низкоуровневые языки программирования в связи с тем, что они вынуждены работать напрямую с аппаратной частью разрабатываемых устройств, имеющих значительные платформенные ограничения. До возникновения ООП, использовались различные подходы к написанию программ. Одним из таких подходов было процедурное программирование, осуществляемое посредством процедур, именованных программных блоков, конкретное выполнение которых определялось вызовом процедуры [2, c.3]. Для этих целей были разработаны процедурные языки программирования, в которых действия над данными выражаются в терминах последовательностей команд [1, c.4].
Впоследствии, процедурное программирование претерпело значительные изменения, а позже, вовсе эволюционировало самостоятельную методологию. В ООП легла идея объектов, взаимодействующих друг с другом. Каждый объект имеет свое состояние, поведение и индивидуальность, а программа может быть представлена отдельно от архитектуры информационной системы в виде определения объектов, и сообщений между ними [6, с.69]. Продукт «Smalltalk», разработанный Аланом Кейем и его коллегами в научно-исследовательском центре Xerox PARC стал первым удачным объектно-ориентированным языком программирования [6, с.42]. Объектно-ориентированный язык – это язык, соответствующий концепциям ООП [1, с.4]. На сегодняшний день, ООП реализована в большинстве промышленных языков программирования.
1.2. Объект
Базовым понятием объектно-ориентированного программирования является объект – набор данных и функций, принадлежащих друг к другу, объединенный в одну сущность в пространстве информационной системы. Свойства объекта описывается его переменными, а поведение – определяется его функциями [4, с.38]. Переменной называется языковой объект, способный принимать различные значения [2, c.2]
Объект – это реальная конструкция, экземпляр класса, на основе которого он создается [3, c.82]. Объект имеет три этапа жизненного цикла (рисунок 1).
Рисунок 1 – Жизненный цикл объекта
Первый этап – создание объекта – его объявление при помощи языковой конструкции [2, c.2] и объектной переменной для последующего осуществления доступа к нему, при этом, сама объектная переменная объектом не является [3, c.83-84].
Второй этап – использование объекта, в процессе которого выполняется обращение к данным объекта. Если объект имеет в своем составе функцию, то, после ее вызова, она может возвращать результат [3, c.85-87].
Третьим этапом жизненного цикла является уничтожение объекта. Так как объект и его переменные занимают адресное пространство в информационной системе, то после его использования, если он больше не нужен, целесообразно его уничтожить во избежание переполнения памяти. Уничтожение объектов реализуется при помощи команд-деструкторов, вызываемый вручную или автоматически, если работа с памятью ведется напрямую [7, c.334], либо при помощи сборщика мусора, если таковой реализован в используемой технологии (как например в Java) [2, c.102].
1.3. Класс
Класс – абстрактный тип данных, позволяющий одновременное объявление свойств (полей) и методов (функций), на основе которого строятся объекты (экземпляры класса) [4, с.38] (Рисунок 2). Свойства класса – это данные, реализуемые в виде двух методов, предназначенных для получения и записи данных [5, c.31]. Методом называется процедура или функция, реализуемая в виде программного блока, способная вырабатывать значение, связанное со своим именем. Выполнение метода определяется вызовом [2, c.3].
Рисунок 2 – Класс
Создание класса начинается с его объявления, после, объявляются переменные класса – его свойства. Так же, в классе могут быть добавлены функции, определяющие поведение класса [4, с.39-40].
Классы, которые не имеют экземпляров, называется абстрактным. Также, объект имеет свойства инкапсуляции, наследования и полиморфизма [8, с.1].
1.4. Инкапсуляция
В объектно-ориентированном программировании важна устойчивость к изменению к коде программы, чтобы внешние объекты были не способны изменять внутреннее состояние (совокупность значений всех его свойств) какого-либо объекта. Особенно это важно при повторно используемом коде, когда классы или библиотеки, написанные одним разработчиком, используются другими. Для этих целей в объектно-ориентированных языках программирования реализована инкапсуляция – сокрытие информации [4, c.68]. В основе инкапсуляции лежит принцип, согласно которому, каждая часть системы должна изменяться только с помощью ее внутренних функций (методов).
Как правило, инкапсуляция реализуется при помощи модификаторов доступа, определяющих различные уровни доступа для элементов состояния объекта. Модификаторы доступа, чаще всего, бывают публичные (доступные вне класса), приватные (доступные только внутри класса) и защищенные (доступные внутри класса и из классов-наследников) [5, c.28] [7, c.331-333] [3, c.107] (рисунок 3).
Рисунок 3 – Модификаторы доступа
1.5. Наследование
Класс может происходить от другого класса, включая все его основные свойства и элементы. Такой принцип построения классов называется наследованием. Существующий класс, на основе которого создается другой класс, называется базовым классом или суперклассом, а класс, происходящий от него, называется производным классом или дочерним классом [5, с.38] [7 c.361]. Данный подход позволяет существенно сократить время разработки программного обеспечения и повышает совместимость программных продуктов [5, с.192].
Классическим примером наследования классов служит пример с геометрическими фигурами (рисунок 4).
Рисунок 4 – Наследование
Если класс «фигура» представляется как базовый класс, то наследуемые фигуры представляют собой уже конкретные разновидности фигур: треугольник, окружность, куб и т.д. Свойства базового класса – расположение, цвет, размер и размерность, наследуются дочерними классами, но к этим свойствам, также, могут быть добавлены индивидуальные свойства, например, переменные для определения значений углов треугольника. Аналогично свойствам, к производным классам также возможно добавление индивидуальных функций. К примеру, вращение треугольника может происходить только в двумерной системе координат, в отличие от куба, вращение которого реализуется в трехмерном пространстве [9, c.68] [6, c.49].
1.6. Полиморфизм
Часто встречается ситуация, когда один и тот же метод, вызываемый у различных дочерних классов, имеет разную реализацию. К примеру, если рассматривать базовый класс «животные», то метод «дыхание» у таких производных классов, как «рыба», «кошка» и «червь» осуществляется по-своему (рисунок 5). Точно также, классы «куб» и «шар», произведенные от класса «фигура», имеют разные методы вычисления объема.
Рисунок 5 – Полиморфизм
Принцип полиморфизма позволяет единообразно вызывать один и тот же метод различных по типу классов, скрытых путем инкапсуляции, когда интерфейс[1] класса абстрагирован от способа исполнения функции [6, с.238]. В объектно-ориентированных языках программирования полиморфизм реализуется посредством переопределения унаследованных функций дочерних классов [4, c.89].
ОСНОВНЫЕ ПОНЯТИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
Реализация ООП в языке Java
Java – кроссплатформенный мультипарадигмальный, объектно-ориентированный язык программирования, имеющий C-подобный синтаксис. Программы, написанные на данном языке, компилируются в байт-код, который, впоследствии, исполняется виртуальной машиной Java (JVM). В технологии, также реализован сборщик мусора (garbage collector), автоматически управляющий памятью. [4, c.1-3]. Java широко применяется для разработки серверных enterprise приложений.
Для объявления класса используется ключевое слово «class» с указанием имени, например – «example», для обращения к классу. Далее, описываются поля и методы класса при помощи конструкторов [3, c.82-83]. Поля класса объявляются при помощи указания типа данных и имени переменной (см. приложение 1). При объявлении переменных, как правило, происходит их инициализация с присвоением начального значения. Для объявления метода указывается его тип, имя и параметры, далее, в теле метода описываются инструкции (операторы), выполняемые при вызове метода (рисунок 6) [4, c.41].
Рисунок 6 – Объявление класса, его полей и методов
Для создания объектов (экземпляров класса) используется оператор «new», далее происходит вызов конструктора класса – метода для инициализации переменных, в который передаются параметры (подробное описание операторов см. приложение 2 [10]) (рисунок 7) [4, c.46].