Файл: Основные понятия объектно-ориентированного программирования (Появление объектно-ориентированного программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 239

Скачиваний: 9

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

2.3 Полифорфизм

Третий принцип ООП – полиморфизм. Полиморфизмом называют возможность объектов с одинаковой спецификацией иметь различную реализацию. [5] То есть, можно создать один интерфейс для манипуляции с объектами различной степени сложности (рисунок 4). Этот интерфейс будет по-разному реагировать на события, и в то же время будет происходить правильная реализация поставленных задач.

Рисунок 4 - Пример полиморфизма

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

В программировании полиморфизм может быть воплощен в нескольких местах: классы, методы, операторы. [20]

Рисунок 5 - Листинг полиморфизма в Java

2.4 Абстракция

Последним основным принципом ООП является абстракция. Абстракцией в объектно-ориентированном программировании называют придание объекту характеристик, отличающих его от остальных объектов, конкретно определяя его концептуальные границы. [4] Основной идеей является отделение способа использования составных объектов данных от деталей их реализации в виде более простых объектов (рисунок 6).

Рисунок 6 - Пример абстрагирования

Подобно тому, как функциональная абстракция разделяет способ использования функции и деталей её реализации в терминах более примитивных функций, таким образом, данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня (рисунок 7).

Рисунок 7 - Листинг абстрагирования

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

2.5 Другие принципы

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


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

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

Принцип иерархичности позволяет разработчикам использовать два вида иерархии: иерархия «общее-частное» и иерархия «целое-часть». При использовании иерархии «общее-частное» некоторая абстракция является частным случаем другой абстракции. Например, абстракция «РАБОЧИЙ СТОЛ» является частным случаем абстракции «СТОЛ». Иерархия «целое-часть» используется, когда некоторые абстракции могут включаться в другие как ее части. Например, абстракция «Стол» состоит из абстракций «Столешница» и «Ножки».

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

Выводы по главе 2

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


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

Глава 3. Примеры объектно-ориентированного программирования

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

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

Пример 1. Пусть дан автомобиль марки BMW. [5] В данном случае он является объектом программирования, так как у него своя, особая конфигурация, отличающаяся от других машин. Стоит отметить, что каждый автомобиль «BMW» будет являться объектом, порожденным из класса, представленного из всех существующих автомобилей. Каждому классу присущи свои поля и методы. Полем класса считается информация, данные, созданные и используемые при реализации методов класса. Говоря о полях класса, имеются в виду константы и переменные, над которыми производятся действия внутри класса. Значит, полями класса Автомобили является вес, среднюю скорость, расход топлива, вместимость кузова. Говоря о методах класса, имеются в виду функции, работающие как с внешними данными, так и с полями класса. Например, функции автомобиля:


- Добавление пассажира;

- Поменять колесо.

Более того, в ООП существуют ограничения, соответствующие данному стилю и их нарушение может привести к неразборчивому коду. [3] Согласно ООП все данные представляются объектами (а в объектно-ориентированных языках каждая команда представляет собой объект какого-нибудь глобального класса), обменивающимися друг с другом сообщениями. Необходимо добавить, что каждый объект занимает свою область памяти, а также имеет свой тип и может состоять из других объектов, объединяя их атрибуты в композицию. Через объект можно обращаться к открытым атрибутам класса, а также атрибутам объектов, из которых он состоит. Важно понимать, что объекты одного класса должны выполнять схожие действия и придерживаться единой структуры. Заметим, что ООП создано и используется исключительно для упрощения воплощения программной мысли. Многие ошибочно считают, что ООП также предназначено для реализации протоколов и построения процессов, однако реализовать все можно не только с помощью ООП, а, к примеру, в функциональном стиле. Перед тем, как сесть за написание объектно-ориентированного кода необходимо практиковать объектное мышление, ведь именно им определяется сложность системы, которую возможно запрограммировать. [10]

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

Например, в Java объекты описываются так [2, с. 98]:

{ . . . public class MyJavaClass

{ static String str="Hello World!!!"; static void printHelloWorld (String s){ System.out.println(s); }

public static void main(String[] args) { printHelloWorld (str); }} MyJavaClass MyJavaObject; . . .}

В С++, описание объекта выглядит следующим образом:

. . . class MyCppClass { public: std::string fStr; MyCppClass (): fStr("Hello World!!!”) {} void printHelloWorld (){std::cout << fStr<

Пример 3. В.Л. Дмитриев предлагает для изучения ООП применять поэтапный подход к разработке классов (на примере графических объектов – прямоугольников) в среде Delphi, сущность которого заключается в создании и последовательном усовершенствовании класса, что позволяет продемонстрировать преимущества объектно-ориентированного подхода. На каждом этапе создания класса и его экземпляров добавляются новые методы, что позволяет неограниченно усложнять задачу. [9]

Пример 4. Интересный методический прием, который также позволяет показать преимущества ООП, предлагает Д.Н. Лавров [15], решить одну и ту же задачу нахождения корней квадратного уравнения с использованием императивного и объектно-ориентированного подходов. Несмотря на большие затраты времени и сложность, становится понятно, что во втором случае будет намного проще усовершенствовать программу в дальнейшем. [6, с. 179-181]


Хатаева Р.С отмечает в своей работе, что разработка объектно-ориентированных программ состоит из следующих последовательных работ:

- определение основных объектов, необходимых для решения данной задачи;

- определение закрытых данных (данных состояния) для выбранных объектов;

- определение второстепенных объектов и их закрытых данных;

- определение иерархической системы классов, представляющих выбранные объекты;

- определение ключевых сообщений, которые должны обрабатывать объекты каждого класса;

- разработка последовательности выражений, которые позволяют решить поставленную задачу;

- разработка методов, обрабатывающих каждое сообщение;

- очистка проекта, то есть устранение всех вспомогательных промежуточных материалов, использовавшихся при проектировании;

- кодирование, отладка, компоновка и тестирование. [25]

Объектно-ориентированное программирование позволяет программисту моделировать объекты определённой предметной области путем программирования их содержания и поведения в пределах класса. [21] Конструкция «класс» обеспечивает механизм инкапсуляции для реализации абстрактных типов данных. Инкапсуляция как бы скрывает и подробности внутренней реализации типов, и внешние операции и функции, допустимые для выполнения над объектами этого типа.

Пример 5. Решение задачи полета ядра [12, с. 24] начинается с определения необходимых условий, которые должны быть отображены на экране:

• Положение цели привязать к положению горизонтального скрола (HScroll);

• Задание угла стрельбы привязать к положению вертикального скрола (VScroll);

• Максимально отобразить наиболее важные числовые параметры.

Более подробно, что получается в результате решения этой задачи представлено на рисунке 8.

Рисунок 8 - Решение задачи с ядром

Можно привести большое количество примеров решения математических задач с использованием технологии объектно-ориентированного программирования. Например, задача решения квадратного уравнения, описанная Мухамедзяновым [20], позволяет сделать вывод о необходимости использования объектно-ориентированного программирования. Он дает другой взгляд на математические уравнения, геометрические фигуры и другие математические объекты, которые становятся с точки зрения объектно-ориентированного программирования такими же классами и объектами, как Автомобиль, Студент, Книга. Решение задач из практики математики позволит детально рассмотреть базовые принципы конструирования пользовательских классов в объектно-ориентированном программировании, таких как инкапсуляция, полиморфизм и наследование. [19]