Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения..pdf
Добавлен: 23.04.2023
Просмотров: 273
Скачиваний: 2
СОДЕРЖАНИЕ
1. ИСТОРИЧЕСКИЕ АСПЕКТЫ ВОЗНИКНОВЕНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
1.1 Исторические предпосылки создания объектно-ориентированного программирования
1.2 Классификация объектно-ориентированных языков программирования высокого уровня
2.1 Сущность методологии объектно-ориентированного программирования
2.2 Основные методы и концепции объектно-ориентированного программирования
2.3 Синтаксис и семантика объектно-ориентированных языков программирования
2.4 Анализ объектно-ориентированных языков программирования высокого уровня, сфера их применения
3. РАЗРАБОТКА ПРОГРАММНОЙ ПЛАТФОРМЫ С ИСПОЛЬЗОВАНИЕМ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА
3.1 Постановка задачи и обоснование выбора среды разработки
3.2 Разработка проекта программной платформы и ее основных классов
Методология проектирования программного продукта объединяет процесс декомпозиции объектов на основе выбора классов и объектов и методы представления моделей, которые отражают логику (структуру классов и объектов) и физическую (архитектура моделей и процессы) [3].
Модель объектно-ориентированного дизайна позже преобразуется в объектно-ориентированную программу. Методология объектно-ориентированного программирования опирается на объектный подход, который включает в себя четыре основных принципа:
- Абстракция - это выделение таких существенных характеристик объектов, которые отличают ее от всех других объектов и которые четко определяют особенности этого объекта в плане дальнейшего рассмотрения и анализа. Только для этой задачи и ничего больше. Минимальная единица абстракции в объектно-ориентированной методологии является классом.
- Ограничение доступа - это процесс защиты отдельных элементов объекта, который не влияет на основные характеристики объекта в целом.
- Модульность. Это свойство системы связано с возможностью разложения (разложения) на ряд тесно связанных частей (модулей). Модульность основана на дискретном программировании объектов, которые можно модернизировать или заменить, не затрагивая другие объекты и систему в целом.
- Существование иерархий - это ранжирование, упорядочение по некоторым правилам системных объектов [4].
Методологию объектно-ориентированного программирования можно рассматривать как модульное программирование нового уровня, когда вместо механического объединения процедур и данных их семантическое соединение становится основным. Объект рассматривается как логическая единица, которая содержит данные и правила (методы) для их обработки.
Объектно-ориентированный язык создает «программную среду» в виде набора независимых объектов, каждый из которых отличается своими свойствами и методами взаимодействия с другими объектами. Программист определяет набор операций, описывающих структуру обмена сообщениями между объектами. И при необходимости может изменять элементы внутри объектов или создавать новые [9].
2.2 Основные методы и концепции объектно-ориентированного программирования
Существуют такие основные методы объектно-ориентированного программирования:
- Метод объектно-ориентированного декомпозиции заключается в процессе выбора объектов и связей между ними. Метод поддерживается понятиями инкапсуляции, наследования и полиморфизма [2].
- Метод абстрактных типов данных - это метод, лежащий в основе инкапсуляции. Это подтверждается концепцией абстрактных типов данных.
- Метод пересылки сообщений - это описание поведения системы в процессе обмена сообщениями между объектами. Поддерживается концепцией сообщения [9].
Концепция объектно-ориентированного программирования подразумевает, что основой для управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны быть определены вместе с сообщениями, на которые они должны отвечать при выполнении программы. Это основное различие между объектно-ориентированным программированием и процедурным программированием. Таким образом, объектно-ориентированная программа состоит из объектов - отдельных фрагментов кода, которые обрабатывают данные, которые взаимодействуют друг с другом через определенные интерфейсы [4].
2.3 Синтаксис и семантика объектно-ориентированных языков программирования
В синтаксисе чистых объектно-ориентированных языков все может быть записано в виде отправки сообщений объектам. Класс в объектно-ориентированных языках описывает структуру и работу набора объектов со схожими атрибутами, характеристиками и поведением. Объект принадлежит определенному классу и имеет собственное внутреннее состояние. Методы - это функциональные свойства, которые могут быть активированы [6].
Каждый объект имеет ссылку на класс, к которому он принадлежит. Когда сообщение получено, объект обращается к классу для обработки сообщения. Сообщение может передаваться иерархией наследования, если сам класс не имеет метода его обработки. Если обработчик события для сообщения динамически выбран, то методы, реализующие обработчики событий, обычно называются виртуальными методами.
Классы являются естественным средством структурирования. Классы определяют, как обрабатывать отдельные сообщения, какие поля и методы экземпляра доступны извне. В чистых объектно-ориентированных языках доступны только методы снаружи, а доступ к объектным данным возможен только через его методы.
Все объектно-ориентированное программирование основано на трех фундаментальных принципах, которые придают объектам новые свойства [6]:
- Инкапсуляция — объединение в единое целое данных и алгоритмов их обработки. В этом случае подпрограммы (методы), включенные в объект, работают непосредственно с данными этого объекта, относятся к другим методам этого объекта или методам объектов-предков. Данные здесь - это поля объекта, а алгоритмы - это методы объекта. Инкапсуляция является наиболее важным свойством объектов, на которых построено объектно-ориентированное программирование.
Инкапсуляция позволяет изолировать класс от других частей программы разными способами, делая его «самодостаточным» для решения конкретной проблемы. В результате класс всегда обладает некоторой функциональностью [5]. Например, класс TForm в Delphi содержит (инкапсулирует в себе) все необходимое для создания Windows-окна, класс TTimer обеспечивает работу таймера. Единицей инкапсуляции в объектно-ориентированном программирование является объект.
- Наследование — это свойство объектов порождаать их потомков. Объект-потомок автоматически наследует все поля и методы, может дополнять объекты новыми полями, заменять и дополнять методы [9].
Наследование позволяет создать иерархию классов, начиная с исходного базового класса (предка) и продолжая более сложные, которые включают (наследуют) элементы предыдущих классов (потомки или производные классы). Любой класс может быть порожден из другого класса. Для этого, когда вы объявляете это, вы указываете имя родительского класса. Класс, поведение которого наследуется, называется суперклассом, а класс, который наследует поведение, называется подклассом.
Принцип наследования приводит к созданию постоянно растущего дерева ветвящихся классов. Каждый потомок дополняет возможности своего родителя новыми и передает их своим потомкам [2].
- Полиморфизм — это свойство родственных объектов для решения задач, похожих по смыслу по-разному. Полиморфизм состоит в назначении единственного имени для действия, которое затем разделяется по иерархии объектов, и каждый объект иерархии выполняет это действие соответствующим ему образом [9].
Для различных родственных классов возможно задать единый образ действия. Например, отобразить любую геометрическую фигуру на экране. Затем для каждого конкретного класса записывается подпрограмма, которая выполняет это действие непосредственно для него. Например, отображение точки отличается от отображения строки. И все эти подпрограммы должны иметь одно и то же имя. Если вы хотите отобразить определенную фигуру, она будет выбрана из всего набора тех же подпрограмм, которые соответствуют типу конкретного объекта [6]. Другими словами, полиморфизм реализует идею «одного интерфейса - множество методов». И выбор конкретного действия зависит от ситуации.
При объектно-ориентированном подходе понятие исполняемой программы исчезает. И решение задачи сводится к построению конкретных классов и к управлению созданными ими объектами [6].
2.4 Анализ объектно-ориентированных языков программирования высокого уровня, сфера их применения
Объектно-ориентированные языки программирования в последнее время стали очень популярными среди программистов, поскольку они позволяют использовать объектно-ориентированный подход не только на этапах проектирования и разработки программных систем, но также на этапах их реализации, тестирования и обслуживания [2].
Первым объектно-ориентированным языком программирования стал Simula 67. Он был разработан в Норвегии в конце 1960-х годов. Авторы этого языка очень точно предсказали перспективы развития программирования. Этот язык намного опережает свое время. Однако программисты шестидесятых не смогли понять значения Simula 67, и он не выдержал конкуренции с другими языками программирования (в основном с языком Fortran). Не популярности языка Simula 67 способствовало то, что он был реализован как интерпретируемый, а не скомпилированный язык. Этот факт был абсолютно неприемлем в 1960-х годах, поскольку интерпретация была связана с уменьшением скорости выполнения (эффективности) программ [9].
Однако достоинства языка Simula 67 все же были замечены позже некоторыми программистами. Поэтому в 1970-е годы было разработано множество экспериментальных объектно-ориентированных языков программирования: CLU, Alphard, Concurrent Pascal. Данные языки так и остались экспериментальными, но после их исследования были разработаны существующие объектно-ориентированные языки программирования [2].
В 1972 году командой Xerox Palo Alto Research Center Learning Research Group был разработан язык Smalltalk как программная часть Dynabook – фантастического проекта Алана Кея. Основой нового языка была идея Simula 67. Smalltalk был одновременно языком программирования и средой разработки.
Smalltalk - чисто объектно-ориентированный язык, в котором все рассматривается как объекты. Даже целые числа являются классами. Smalltalk оказал значительное влияние на последующие поколения языков программирования. Smalltalk также стал основой для современного графического интерфейса пользователя, на котором интерфейсы Windows, Macintosh и Motif [4].
Есть пять выпусков языка Smalltalk, которые обозначаются годом их появления: Smalltalk-72, -74. -76, -78, -80. Основа языка была заложена в 1972 и 1974 годах. Идея передачи сообщений и полиморфизма была заложена, несмотря на то, что механизм наследования еще не появился. В последующих версиях классы были взяты за основу.
Smalltalk-80 был перенесен на многие компьютерные платформы. Язык основан на двух простых идеях: все объекты и объекты взаимодействуют, обмениваются сообщениями [9].
В таблице 1 приведена характеристика языка Smalltalk с точки зрения основных элементов объектного подхода.
Таблица 1
Характеристика языка программирования Smalltalk [9]
|
Абстракции |
Переменные экземпляра |
Да |
|
Методы экземпляра |
Да |
|
|
Переменные класса |
Да |
|
|
Методы класса |
Да |
|
|
Инкапсуляция |
Переменных |
Закрытые |
|
Методов |
Открытые |
|
|
Модульность |
Разновидности модулей |
Нет |
|
Иерархии |
Наследование |
Одиночное |
|
Шаблоны |
Нет |
|
|
Метаклассы |
Да |
|
|
Типизация |
Сильная типизация |
Нет |
|
Полиморфизм |
Да (одиночный) |
|
|
Параллельность |
Многозадачность |
Непрямая (посредством классов) |
|
Сохраняемость |
Долгоживущие объекты |
Нет |
Большим недостатком Smalltalk является низкая производительность разработанных программ и большие требования к памяти. Это связано с не самой успешной реализацией особенностей объектно-ориентированного программирования [2].
В 1983 году язык Ады был создан для Министерства обороны США. Язык позволяет идентифицировать множество ошибок на этапе компиляции. Кроме того, поддерживаются многие аспекты программирования, которые часто передаются в операционную систему (параллелизм, обработка исключений). В 1995 году был принят языковой стандарт Ada 95, который разработал предыдущую версию и добавил к ней объектную ориентацию , а также исправил некоторые неточности. Оба эти языка не стали популярными и не распространялись вне военных и других масштабных проектов (авиация, железнодорожный транспорт). Основная причина заключалась в громоздком синтаксисе и сложности освоения языка [4].
Непосредственными предшественниками Ada являются Pascal и его производные, включая Euclid, Lis, Mesa, Modula и Sue. Были использованы некоторые концепции ALGOL-68, Simula, CLU и Alphard. В таблице 2 приведена основная характеристика языка Ada с точки зрения объектного подхода [4].