Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Исторические предпосылки создания объектно-ориентированного программирования).pdf

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

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

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

Добавлен: 30.03.2023

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

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

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

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. ИСТОРИЧЕСКИЕ АСПЕКТЫ ВОЗНИКНОВЕНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

1.1 Исторические предпосылки создания объектно-ориентированного программирования

1.2 Классификация объектно-ориентированных языков программирования высокого уровня

2. СПЕЦИФИКА МЕТОДОЛОГИИ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ В СОВРЕМЕННЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ

2.1 Сущность методологии объектно-ориентированного программирования

2.2 Основные методы и концепции объектно-ориентированного программирования

2.3 Синтаксис и семантика объектно-ориентированных языков программирования

2.4 Анализ объектно-ориентированных языков программирования высокого уровня, сфера их применения

3. РАЗРАБОТКА ПРОГРАММНОЙ ПЛАТФОРМЫ С ИСПОЛЬЗОВАНИЕМ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПОДХОДА

3.1 Постановка задачи и обоснование выбора среды разработки

3.2 Разработка проекта программной платформы и ее основных классов

3.3 Разработка интерфейса программной платформы

ЗАКЛЮЧЕНИЕ

БИБЛИОГРАФИЯ

Таблица 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].

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

Глобальный «одинокий» объект - именно объект, а не набор процедур, не привязанных ни к какому объекту - бывает нужен если:

  1. Используется существующая объектно-ориентированная библиотека;
  2. Есть шансы, что один объект когда-нибудь превратится в несколько;
  3. Интерфейс объекта слишком сложен и не стоит засорять основное пространство имён большим количеством функций;
  4. В зависимости от каких-нибудь условий и настроек, создаётся один из нескольких объектов [2].