Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Исторические предпосылки создания объектно-ориентированного программирования).pdf
Добавлен: 30.03.2023
Просмотров: 333
Скачиваний: 1
СОДЕРЖАНИЕ
1. ИСТОРИЧЕСКИЕ АСПЕКТЫ ВОЗНИКНОВЕНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
1.1 Исторические предпосылки создания объектно-ориентированного программирования
1.2 Классификация объектно-ориентированных языков программирования высокого уровня
2.1 Сущность методологии объектно-ориентированного программирования
2.2 Основные методы и концепции объектно-ориентированного программирования
2.3 Синтаксис и семантика объектно-ориентированных языков программирования
2.4 Анализ объектно-ориентированных языков программирования высокого уровня, сфера их применения
3. РАЗРАБОТКА ПРОГРАММНОЙ ПЛАТФОРМЫ С ИСПОЛЬЗОВАНИЕМ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА
3.1 Постановка задачи и обоснование выбора среды разработки
3.2 Разработка проекта программной платформы и ее основных классов
Таблица 2
Характеристика языка программирования Ada [9]
|
Абстракции |
Переменные экземпляра |
Да |
|
Методы экземпляра |
Да |
|
|
Переменные класса |
Нет |
|
|
Методы класса |
Нет |
|
|
Инкапсуляция |
Переменных |
Открытые, закрытые |
|
Методов |
Открытые, закрытые |
|
|
Модульность |
Разновидности модулей |
Пакет |
|
Иерархии |
Наследование |
Нет (входит в Ada9x) |
|
Шаблоны |
Да |
|
|
Метаклассы |
Нет |
|
|
Типизация |
Сильная типизация |
Да |
|
Полиморфизм |
Нет (входит в Ada9x) |
|
|
Параллельность |
Многозадачность |
Да |
|
Сохраняемость |
Долгоживущие объекты |
Нет |
С 1995 года появился новый объектно-ориентированный язык программирования Java. Данный язык ориентированный на сети компьютеров [4]. Синтаксис этого языка похож на синтаксис языка C++, однако эти языки имеют мало общего. Java интерпретируемый язык. Для данного языка определены внутреннее представление (bytecode) и интерпретатор этого представления, которые реализованы на множестве платформ. Интерпретатор упрощает отладку программ, написанных на языке Java. А так же обеспечивает их адаптируемость к новым окружениям и переносимость на новые платформы. Он позволяет исключить влияние программ, написанных на языке Java, на другие программы и файлы, имеющиеся на новой платформе, и тем самым обеспечить безопасность при выполнении этих программ. Эти свойства языка Java позволяют использовать его как основной язык программирования для программ, распространяемых по сетям (в частности, по сети Internet) [9].
Одним из современных и популярных объектно-ориентированных языков является C++. Язык программирования C++ был разработан Бьерном Страуструпом, сотрудником AT&T Bell Laboratories. Непосредственным предшественником C++ является С with Classes, созданный тем же автором в 1980 году. Язык С with Classes был создан под сильным влиянием С и Simula. Язык C++ - это в значительной степени надстройка над языком С. В определенном смысле можно назвать язык C++ улучшенным языком С, тем С, который обеспечивает контроль типов, перегрузку функций и ряд других удобств. Но главное в том, что язык C++ добавляет к языку С объектную ориентированность [7].
Известны несколько версий языка C++. В версии 1.0 реализованы основные механизмы объектно-ориентированного программирования. Это проверка типов и перегрузка функций, одиночное наследование и полиморфизм, [8]. В версии 2.0 созданной в 1989 году отражены многие дополнительные свойства, возникшие на базе опыта применения языка многочисленными пользователями. В версии 3.0, которая вышла в 1990 году появились обработка исключений и шаблоны.
Язык C++ продолжает совершенствоваться и в настоящее время. В 1998 году вышла новая версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов [8]. Характеристики C++ приведены в таблице 3.
Таблица 3
Характеристика языка программирования C++[2]
|
Абстракции |
Переменные экземпляра |
Да |
|
Методы экземпляра |
Да |
|
|
Переменные класса |
Да |
|
|
Методы класса |
Да |
|
|
Инкапсуляция |
Переменных |
Открытые, защищенные, закрытые |
|
Методов |
Открытые, защищенные, закрытые |
|
|
Модульность |
Разновидности модулей |
файл |
|
Иерархии |
Наследование |
Множественное |
|
Шаблоны |
Да |
|
|
Метаклассы |
Нет |
|
|
Типизация |
Сильная типизация |
Да |
|
Полиморфизм |
Да (одиночный) |
|
|
Параллельность |
Многозадачность |
Непрямая (посредством классов) |
|
Сохраняемость |
Долгоживущие объекты |
Нет |
Object Pascal создавался сотрудниками компании Apple Computer (некоторые из которых были участниками проекта Smalltalk) совместно с Никлаусом Виртом (Niklaus Wirth), создателем языка Pascal [9]. Object Pascal известен с 1986 года и является первым объектно-ориентированным языком программирования, который был включен в Macintosh Programmer's Workshop (MPW), среду разработки для компьютеров Macintosh фирмы Apple. В этом языке нет методов класса, переменных класса, множественного наследования и метаклассов. Эти механизмы исключены специально, чтобы сделать язык простым для изучения начинающими программистами. В таблице 4 приведены общие характеристики Object Pascal [4].
Таблица 2
Характеристика языка программирования. Object Pascal [9]
|
Абстракции |
Переменные экземпляра |
Да |
|
Методы экземпляра |
Да |
|
|
Переменные класса |
Нет |
|
|
Методы класса |
Нет |
|
|
Инкапсуляция |
Переменных |
Открытые |
|
Методов |
Открытые |
|
|
Модульность |
Разновидности модулей |
Модуль (unit) |
|
Иерархии |
Наследование |
Одиночное |
|
Шаблоны |
Нет |
|
|
Метаклассы |
Нет |
|
|
Типизация |
Сильная типизация |
Да |
|
Полиморфизм |
Да (одиночный) |
|
|
Параллельность |
Многозадачность |
Нет |
|
Сохраняемость |
Долгоживущие объекты |
Нет |
Этот язык в свое время стал очень популярен благодаря системе Delphi фирмы Borland.
Вывод по второй главе
Методология объектно-ориентироанного программировнаия строится на трех основных принципа: инкапсуляция, наследование, полиморфизм.Все современные языки программирования высокго уровня строятся на этих принципах. К современым языкам программирования можно отнести Ada9x, Java, C++, Delphi.
3. РАЗРАБОТКА ПРОГРАММНОЙ ПЛАТФОРМЫ С ИСПОЛЬЗОВАНИЕМ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА
3.1 Постановка задачи и обоснование выбора среды разработки
В данной курсовой работе поставлена задача написать программную платформу по сбору и анализу данных с датчика давления газа в цилиндре и датчика угла поворота колен вала с использованием аналого-цифрового преобразователя и объектно-ориентированного подхода с возможностью построения графиков.
Для решения задачи разработки программной платформы был выбран язык программирования С++ и среда разработки QT. Для удобства использования, и возможности вывода графиков на экран в понятном и привычном для всех виде программа имеет графический интерфейс.
Трудностями в реализации задачи стало преобразование полученной информации с датчиков в цифровой вид, организация передачи информации с датчиков программе, и проверка того, что собранная информация является реальной и достоверной. Задача преобразования информации была решена с помощью подключения датчиков к аналого-цифровому преобразователю (АЦП). Задача передачи информации решена с помощью подключения к АЦП компьютера с разработанной программой.
Среда разработки QT выбрана из-за того, что, она кроссплатформенна, а также имеет удобные инструменты для построения интерфейсов. В MS Visual Studio и другая любая другая среда разработки для С++ не подходит для решения поставленной задачи, так как не кроссплатформенна, а также не имеет удобных инструментов для построения интерфейсов и имеет другое назначение разработки [2].
А языком разработки выбран С++, так выбран потому что для него существует много библиотек для работы с USB и АЦП, и он эффективнее работает с близкой к реал-тайм обработкой данных. Быстрее даже чем Java.
3.2 Разработка проекта программной платформы и ее основных классов
Для разработки программной платформы по сбору данных с усовершенствованных с помощью АЦП дизельных датчиков, и анализу этих данных для построения графиков были использованы стандартные библиотеки среды QT и дополнительные библиотеки, которые устанавливаются в среду разработки QT (Рисунок 1).
Рисунок 1- Библиотеки, использованные для разработки программы
В программе для интерполяции данных использована сторонняя библиотека Spline.
Для разработки программной платформы использован объектно-ориентированный подход к программированию и графы. Это связано с тем, что приложение имеет графический интерфейс и завязано на различных расчетах и объектах, а использования именно объектно-ориентированного подхода к программированию и графов лучше подходит для решения этих задач [9].
Объектно-ориентированный подход предполагает использования для решения задачи наследования классов. В программе используется язык С++, который как объектно-ориентированный язык, поддерживает наследование. В отличие от Java и C#, в С++ не предусмотрен обобщенный класс Object, который наследуется всеми другими классами [5]. Qt предоставляет Q_Object в качестве естественного базового класса для объектов всех типов. В данной работе все Qt классы наследуются от Q_Object.
Q_Object – это базовый класс для всех объектов Qt. Его наследует любой класс использующий сигналы и слоты. Он обеспечивает возможность соединения объектов друг с другом. А также предоставляет к этому полезную функциональность. Во введение этого базового класса находиться: прослеживание за потомками и родителями и возвращение указателей на них (наследственная информация). Q_Object поддерживают информацию о дереве дочерних объектов. Когда создается Q_Object в качестве родителя другого объекта, то объект автоматически добавляет себя в список дочерних объектов children(). Родитель принимает в собственность свои дочерние объекты. То есть дочерние объекты будут автоматически удалены в деструкторе объекта-родителя. Есть поиск дочерних объект по имени и типу используя findChild() или findChildren()[5].
Каждый объект знает свой objectName(), а имя его класса возможно получить с помощью metaObject(). С помощью функции inherits() можно определить является ли класс наследником другого класса в иерархии наследования Q_Object.
QObject могут получать события от других объектов через event() и фильтр событий. Для получения более подробной информации смотреть installEventFilter() и eventFilter(). Для удобства можно переопределить childEvent() позволяющую перехватывать события от дочерних объектов. События ставятся в потоки, в которых объект был создан. Все виджеты Qt наследуют QObject. Функция isWidgetType() позволяет узнать, дейтвительлно ли объект является виджетом. Это работает намного быстрее, чем qobject_cast<QWidget>(obj) или obj->inherits(«QWidget») [6].
Некоторые функции QObject, такие как children(), возвращают QObjectList. QObjectList - переименование типа для QList<QObject *>.
Для разработки данной программы использованы стандартные классы, которые создаются самой средой разработки QT. Также для удобной работы с информацией о типе используемого в данный момент двигателя было принято решение реализовать шаблон проектирования - одиночка (singletone) (Рисунок 2) [1]. Каждый класс содержит файлы с расширением *.h (header) – это объявление класса, а *.cpp – это реализация класса. Не все папки в программе являются классами.
Рисунок 2 – Классы, использованные в программе
Шаблон singletone (одиночка) - порождающий шаблон проектирования, гарантирующий, что в одно процессном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру [2].
У класса написанного с использованием данного шаблона есть только один экземпляр, и он предоставляет к нему глобальную точку доступа. Существенно то, что можно пользоваться именно экземпляром класса, так как при этом во многих случаях становится доступной более широкая функциональность. Например, к описанным компонентам класса можно обращаться через интерфейс, если такая возможность поддерживается языком.
Глобальный «одинокий» объект - именно объект, а не набор процедур, не привязанных ни к какому объекту - бывает нужен если:
- Используется существующая объектно-ориентированная библиотека;
- Есть шансы, что один объект когда-нибудь превратится в несколько;
- Интерфейс объекта слишком сложен и не стоит засорять основное пространство имён большим количеством функций;
- В зависимости от каких-нибудь условий и настроек, создаётся один из нескольких объектов [2].