Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

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

Содержание:

ВВЕДЕНИЕ

Объектно-ориентированное программирование - это подход к разработке программных платформ, основанный на объектах. Объектно-ориентированное программирование базируется на инкапсуляции структур данных и процедуры, которая работает с данными в структуре и с модулем. Данный подход позволяет максимизировать принципы «сокрытия информации» и модульности.

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

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

Исходя, из цели, были поставлены следующие задачи:

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

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

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

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

5. Изучить синтаксис, и семантика объектно-ориентированных языков программирования

6. Проанализировать существующие объектно-ориентированные языки программирования высокого уровня, обозначить сферы их применения

7. Разработать и протестировать программное обеспечение с использованием объектно-ориентированного подхода

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

Информационной базой исследования являются научные публикации отечественных и зарубежных ученых, таких как Павловская, Хорев, Буч, Амааль, Страуструп, Прата, научная информация, имеющая форму непечатных продукции, размещенной во всемирной сети Интернет.

Общий объем работы составляет 36 страниц печатного текста, включает 13 рисунков (схем) и 4 таблицы.

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

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

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

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

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

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

Чтобы писать все более сложные программы, необходим новый подход к программированию. Теоретические основы объектно-ориентированного программирования были заложены еще в 1970-х годах прошлого столетия, но их практическое внедрение стало возможным только в середине 1980-х годов с появлением соответствующих технических средств. После появления в 1967 году языков третьего поколения ведущие специалисты в области программирования выдвинули идею преобразования постулата фон Неймана: данные и программы неразличимы в памяти машины. Их цель заключалась в максимальном сближении данных и кода программы. Решая поставленную задачу, они столкнулись с задачей, решить которую без декомпозиции оказалось невозможно, а традиционные структурные декомпозиции не сильно упрощали задачу. Усилия многих программистов и системных аналитиков, направленные на формализацию подхода, увенчались успехом [8].

В результате были разработаны три фундаментальных принципа того, что позже стало известно, как объектно-ориентированное программирование (ООП): наследование, инкапсуляция, полиморфизм [6].

Итогом их первого применения стал язык Симула-1 (Simula-1), в котором был введен новый тип — объект. В описании этого типа одновременно указывались данные (поля) и процедуры, их обрабатывающие (методы). Родственные объекты были объединены в классы, описания которых были оформлены в виде программных блоков. В этом случае класс может использоваться как префикс для других классов, которые в этом случае становятся подклассами первого. Впоследствии Симула-1 был обобщен, и в 1967 году появился первый универсальный объектно-ориентированный язык программирования — Симула-67 и использовался для моделирования. На момент его появления в нём были предложены грандиозные идеи: объекты, классы, виртуальные методы. Именно ряд средств, входящих в данный язык стал прототипом современного объектно-ориентированного программирования [2].

Большинство концепций позже были развиты Аланом Кэем и Дэном Ингаллсом в языке Smalltalk. Именно он в 1972 году стал первым широко распространённым объектно-ориентированным языком программирования. И изначально предназначенного для реализации функций машинной графики [3].

Основная цель объектно-ориентированное подхода, как и большинства других подходов к программированию – повышение эффективности разработки программ. Идеи объектно-ориентированное программирования оказались плодотворными и нашли применение не только в языках программирования, но и в других областях компьютерной науки, например, в области разработки операционных систем [6].

Поэтому на смену процедурным языкам в начале 1990-х годов. пришло современное объектно-ориентированное программирование(ООП).

Объектно-ориентированный подход помогает справиться с такими сложными проблемами, как облегчение разработки и обслуживания программного обеспечения; повышение надежности программного обеспечения; возможность изменения отдельных программных компонентов без изменения других компонентов программного обеспечения; обеспечивает возможность повторного использования отдельных программных компонентов [7].

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

Для поддержки концепции объектно-ориентированного программирования в будущем были разработаны специальные современные объектно-ориентированные языки программирования.

Язык программирования называется объектно-ориентированным, если:

  1. Поддержка объектов как абстракции данных, которые имеют часть интерфейса в форме именованных операций, и защищенную область локальных данных;
  2. Все объекты могут быть отнесены к соответствующим типам (классам);
  3. Классы могут наследовать от суперклассов;
  4. Любые данные сохраняются как объекты, помещенные с автоматическим распределением и освобождением памяти;
  5. Объект существует с системой, а его можно назвать [2].

Последний принцип используется в чистых объектно-ориентированных языках (Smalltalk, Actor), от гибридных языков программирования, выросших из ранее существовавших процедурных языков (Object Pascal, C++). Эти подходы являются крайностями в семействе объектно-ориентированных языков.

Ближе к середине лежит совершенно новый, полностью построенный на принципах объектно-ориентированной идеологии, но все же нарушающий последний принцип, язык Java [3].

Все языки объектно-ориентированного программирования можно разделить на три группы:

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

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

3. Усеченные языки – языки, которые появились после удаления с гибридных языков наиболее опасных и ненужных с позиций конструкций ООП [8].

На современном этапе существует множество систем визуального программирования и инструментальной среды для создания объектно-ориентированных программ на языках высокого уровня.

Вывод по первой главе

Объктно-ориентированное программирование возникло когда структурное программирование уже не могло решать посталвенные пользователем задачи. Первым объктно-ориентированным языком стал Симула, который опередил свое время и поэтому не был воспринят современниками. Все следующие объктно-ориентированные языки языки программирования берут на основу язык Симула. После 1990 года объектно-ориентированное программирование стало стремительно развиватся, появились множество новых языков программирования, таких как Java, C++ и другие.

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

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

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

Объектно-ориентированная методология состоит из такиех частей: объектно-ориентированный анализ, объектно-ориентированное проектирование, объектно-ориентированное программирование [1].

Объектно-ориентированный анализ – является методологией для анализа реалий настоящего мира, основанных на понятиях класса и объекта, составляющих словарь предметной области, для понимания и объяснения того, как они (сущности) взаимодействуют друг с другом. Модели объектно-ориентированного анализа впоследствии превращаются в объектно-ориентированный проект [2].

Методология проектирования программного продукта объединяет процесс декомпозиции объектов на основе выбора классов и объектов и методы представления моделей, которые отражают логику (структуру классов и объектов) и физическую (архитектура моделей и процессы) [3].

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

  1. Абстракция - это выделение таких существенных характеристик объектов, которые отличают ее от всех других объектов и которые четко определяют особенности этого объекта в плане дальнейшего рассмотрения и анализа. Только для этой задачи и ничего больше. Минимальная единица абстракции в объектно-ориентированной методологии является классом.
  2. Ограничение доступа - это процесс защиты отдельных элементов объекта, который не влияет на основные характеристики объекта в целом.
  3. Модульность. Это свойство системы связано с возможностью разложения (разложения) на ряд тесно связанных частей (модулей). Модульность основана на дискретном программировании объектов, которые можно модернизировать или заменить, не затрагивая другие объекты и систему в целом.
  4. Существование иерархий - это ранжирование, упорядочение по некоторым правилам системных объектов [4].

Методологию объектно-ориентированного программирования можно рассматривать как модульное программирование нового уровня, когда вместо механического объединения процедур и данных их семантическое соединение становится основным. Объект рассматривается как логическая единица, которая содержит данные и правила (методы) для их обработки.

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

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

Существуют такие основные методы объектно-ориентированного программирования:

  1. Метод объектно-ориентированного декомпозиции заключается в процессе выбора объектов и связей между ними. Метод поддерживается понятиями инкапсуляции, наследования и полиморфизма [2].
  2. Метод абстрактных типов данных - это метод, лежащий в основе инкапсуляции. Это подтверждается концепцией абстрактных типов данных.
  3. Метод пересылки сообщений - это описание поведения системы в процессе обмена сообщениями между объектами. Поддерживается концепцией сообщения [9].

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

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

В синтаксисе чистых объектно-ориентированных языков все может быть записано в виде отправки сообщений объектам. Класс в объектно-ориентированных языках описывает структуру и работу набора объектов со схожими атрибутами, характеристиками и поведением. Объект принадлежит определенному классу и имеет собственное внутреннее состояние. Методы - это функциональные свойства, которые могут быть активированы [6].

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

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

Все объектно-ориентированное программирование основано на трех фундаментальных принципах, которые придают объектам новые свойства [6]:

  1. Инкапсуляция — объединение в единое целое данных и алгоритмов их обработки. В этом случае подпрограммы (методы), включенные в объект, работают непосредственно с данными этого объекта, относятся к другим методам этого объекта или методам объектов-предков. Данные здесь - это поля объекта, а алгоритмы - это методы объекта. Инкапсуляция является наиболее важным свойством объектов, на которых построено объектно-ориентированное программирование.

Инкапсуляция позволяет изолировать класс от других частей программы разными способами, делая его «самодостаточным» для решения конкретной проблемы. В результате класс всегда обладает некоторой функциональностью [5]. Например, класс TForm в Delphi содержит (инкапсулирует в себе) все необходимое для создания Windows-окна, класс TTimer обеспечивает работу таймера. Единицей инкапсуляции в объектно-ориентированном программирование является объект.

  1. Наследование — это свойство объектов порождаать их потомков. Объект-потомок автоматически наследует все поля и методы, может дополнять объекты новыми полями, заменять и дополнять методы [9].

Наследование позволяет создать иерархию классов, начиная с исходного базового класса (предка) и продолжая более сложные, которые включают (наследуют) элементы предыдущих классов (потомки или производные классы). Любой класс может быть порожден из другого класса. Для этого, когда вы объявляете это, вы указываете имя родительского класса. Класс, поведение которого наследуется, называется суперклассом, а класс, который наследует поведение, называется подклассом.

Принцип наследования приводит к созданию постоянно растущего дерева ветвящихся классов. Каждый потомок дополняет возможности своего родителя новыми и передает их своим потомкам [2].

  1. Полиморфизм — это свойство родственных объектов для решения задач, похожих по смыслу по-разному. Полиморфизм состоит в назначении единственного имени для действия, которое затем разделяется по иерархии объектов, и каждый объект иерархии выполняет это действие соответствующим ему образом [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].

Таблица 2

Характеристика языка программирования Ada [9]

Абстракции

Переменные экземпляра

Да

Методы экземпляра

Да

Переменные класса

Нет

Методы класса

Нет

Инкапсуляция

Переменных

Открытые, закрытые

Методов

Открытые, закрытые

Модульность

Разновидности модулей

Пакет

Иерархии

Наследование

Нет (входит в Ada9x)

Шаблоны

Да

Метаклассы

Нет

Типизация

Сильная типизация

Да

Полиморфизм

Нет (входит в Ada9x)

Параллельность

Многозадачность

Да

Сохраняемость

Долгоживущие объекты

Нет

С 1995 года появился новый объектно-ориентированный язык программирования Java. Этот язык ориентированный на компьютерные сети [4]. Синтаксис этого языка похож на синтаксис C ++, но эти языки имеют мало общего. Язык, интерпретируемый Java. Для этого языка определяется внутреннее представление (bytecode) и интерпретатор этого представления, которые реализованы на разных платформах. Интерпретатор упрощает отладку программ, написанных на языке Java. А также обеспечивает их адаптируемость к новым условиям и переносимость на новые платформы. Это позволяет исключить влияние программ, написанных на языке Java, на другие программы и файлы, доступные на новой платформе, и таким образом обеспечить безопасность этих программ. Эти свойства языка Java позволяют использовать его в качестве основного языка программирования для программ, распространяемых по сетям (в частности, по сети Internet) [9].

Одним из современных и популярных объектно-ориентированных языков является C ++. Язык программирования C ++ был разработан Bjarne Stroustrup, сотрудником AT & T Bell Laboratories. Непосредственным предшественником C ++ является C с классами, созданная тем же автором в 1980 году. Язык C с классами был создан под сильным влиянием C и Simula. Язык C ++ в значительной степени является надстройкой над языком C. В определенном смысле вы можете назвать C ++ улучшенным языком C, который обеспечивает управление типом, перегрузку функции и ряд других удобностей. Но главное, что язык C ++ добавляет ориентацию объекта на язык C [7].

Существует несколько версий языка C ++. В версии 1.0 реализованы основные механизмы объектно-ориентированного программирования. Это проверка типов и перегрузка функций, одиночное наследование и полиморфизм [8]. В версии 2.0, созданной в 1989 году, отражены многие дополнительные свойства, которые возникли из-за опыта использования языка многочисленными пользователями. В версии 3.0, выпущенной в 1990 году, появились обработка исключений и шаблоны. В 1998 году появилась новая версия стандарта, содержащая некоторые довольно значительные изменения.

В настоящее время язык C ++ продолжает совершенствоватся. Язык стал основой для развития современных крупных и сложных проектов [8]. Характеристики C ++ приведены в таблице 3.

Таблица 3

Характеристика языка программирования C++[2]

Абстракции

Переменные экземпляра

Да

Методы экземпляра

Да

Переменные класса

Да

Методы класса

Да

Инкапсуляция

Переменных

Открытые, защищенные, закрытые

Методов

Открытые, защищенные, закрытые

Модульность

Разновидности модулей

файл

Иерархии

Наследование

Множественное

Шаблоны

Да

Метаклассы

Нет

Типизация

Сильная типизация

Да

Полиморфизм

Да (одиночный)

Параллельность

Многозадачность

Непрямая (посредством классов)

Сохраняемость

Долгоживущие объекты

Нет

Объект Pascal был создан сотрудниками Apple Computer (некоторые из которых были участниками проекта Smalltalk) совместно с Никлаусом Виртом, создателем Паскаля [9]. Object Pascal известен с 1986 года и является первым объектно-ориентированным языком программирования, который был включен в Workshop для Macintosh Workshop (MPW), среду разработки для компьютеров Macintosh от Apple. На этом языке нет методов класса, переменных класса, множественного наследования и метаклассов. Эти механизмы исключены специально, чтобы облегчить изучение языка начинающими программистами. В таблице 4 показаны общие характеристики Object Pascal [4].

Таблица 4

Характеристика языка программирования. 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].

Шаблон singletone имеет ряд недостатков.

1. Синглтон нарушает SRP (Single Responsibility Principle) – принцип единой обязанности. Класс синглтона, кроме выполнения своих непосредственные обязанностей, занимается контролированием количества своих экземпляров.

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

3. Глобальное состояние. При получение доступа к экземпляру класса, не известно текущее состояние этого класса, кто и когда его менял. А это состояние может быть вовсе не таким, как ожидается. Другими словами, корректность работы с синглтоном зависит от порядка обращений к нему, что вызывает неявную зависимость подсистем друг от друга и, как следствие, серьезно усложняет разработку [9].

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

Папка DieselType (одиночка) – класс в данной программе, который написан вручную с использованием шаблона singletone и описывает тип дизеля. Шаблон гарантирует, что в программе при разных обстоятельствах создастся только один экземпляр класса дизеля. То есть будет только один тип дизеля, использоваться для расчетов. Класс DieselType описывается в файлах dieseltype.h (ввод данных) и dieseltype.cpp (вывод данных) (Рисунок 2).

Папка Dataio содержит файлы dataio.h и dataio.cpp. В них имеются функции реализации ввода, считывания и вывода данных.

Папка MainWindow– класс стандартной формы в Qt, который описывает и реализует главное окно с кнопками. Данная папка содержит в себе файлы mainwindow.cpp, mainwindow.h, mainwindow.ui.

Папка Settings – класс стандартной формы стандартной формы Qt, который описывает и реализует кнопку настройки датчика. Данная папка содержит в себе файлы settingsclass.h и settingsclass.cpp.

Папки WidgetArchive, WidgetDieselType, WidgetMetering, WidgetSelectDiesel, WidgetSettings, WidgetTest, WidgetVMTSetup – дочерние классы виджетов - более подробное описание кнопок, которые описаны общем head.

Папка QCustomPlot – библиотека в Qt для построения и визуализации графиков. Отрисовка графиков происходит после вызова метода replot() (вручную, или при срабатывании события). Для отрисовки данный виджет требует 2 массива данных, содержащих значение аргумента (x) и значение функции в этой точке (y). Используется в данной программе для реализации рисования графиков [1].

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

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

Рисунок 3- Проект главного окна программы

Так же для корректной работы программы в любой версии операционной системы Windows и не зависимо от наличия среды разработки QT, кроме exe файла нужны все папки на рисунке 4 и библиотеки, обведенные рамочкой (рисунок 4).

Рисунок 4 – Используемые библиотеки

Часть библиотек QT уже вшиты в сам ехе файл. Это библиотеки являються стандартними для QT и Windows, и необходимы для запуска на операционной системе Windows. Поэтому для Windows их не принято добавлять отдельными файлами в проект.

Библиотеки, которые в название имеют Qt*.dll являються стандартними для QT, но не для Windows. То есть если на операционной системы Windows не стоит среда разработки QT и нет этих файлов, то при открытие ехе файла, система выдаст ошибку [1].

Остальные библиотеки являются не стандартными для QT. Их нет в базовой версии, установленной на компьютере QT, но данная среда разработки позволяет их установить и использовать для создания проектов. То есть они могут использоваться не для всех проектов, и их есть большое множество, зависимо от целей проекта и решаемой задачи. В данном проекте они используются и нужны для корректной работы программы независимо от того установлена данная среда разработки у пользователя или нет. На рисунке 4 представлены только библиотеке необходимые для работы только данного проекта, а не любого проекта, созданного с помощью QT.

Открывшееся при запуске окно программы для удобства и простоты использования разделено на три блока: тип дизеля, подготовка измерений, индицирование (Рисунок 3).

Блок тип дизеля. В данном блоке есть 2 кнопки: Задание и Выбор (Рисунок 3). При открытие кнопки задание, появляется окно, которое изображено на рисунке 5.

Рисунок 5 - Окно тип дизеля

В данном окне задаются характеристики дизеля. При этом в строке количество цилиндров стоит ограничение от 1-30, и есть возможность выбора тактности 2 или 4. При нажатии кнопки Принять, появляется окно, которое изображено на рисунке 6, где выставляется порядок работы цилиндра.

Рисунок 6 – Окно задание порядка работы цилиндра

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

Рисунок 7 – Окно выбор дизеля

Блок подготовка измерений. В данном блоке есть 2 кнопки: Установка ВМТ и Тест датчиков (Рисунок 3). При нажатии кнопки Установка ВМТ открывается окно, изображенное на рисунке 8.

Рисунок 8 – Окно установка ВМТ

При нажатии кнопки Тест датчиков открывается окно, изображенное на рисунке 9. Но при этом надо, чтобы в настройках стояло какой канал мы проверяем в этом режиме.

Рисунок 9 – Окно тест датчика

Блок индицирование. В данном блоке есть 2 кнопки: Измерение и Архив (Рисунок 3).

При нажатии кнопки Измерение открывается окно, изображенное на рисунке 10.

Рисунок 10 – Окно измерение

При нажатии кнопки Архив открывается окно, изображенное на рисунке 11.

Рисунок 11 – Окно архив

В программе также есть валидация вводимых данных - комплекс мер по пресечению ввода неправильной информации в форме

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

Например, если не заполнены все данные или введено недопустимое значение, то программа выдаст ошибку (Рисунок 12).

Рисунок 12 – Валидация вводимых данных в программе

При закрытии программы или окна с не сохраненными данными, в программе вызывается диалоговое окно с вопросом стоит ли закрывать программу (Рисунок 13).

Рисунок 13 – Вызов диалогового окна

По графикам, изображенным на рисунке 9 и 11 видно, что программа работает, что выполняется сбор данных с датчика, нормализация, хранение (кнопка Архив), анализ данных, и функция отрисовки графиков в программе. То есть цель дипломной работы достигнута.

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

Вывод по третий главе

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

ЗАКЛЮЧЕНИЕ

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

Были достигнуты следующие задачи:

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

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

3. Расскрыта сущность методологии объектно-ориентированного программирования

4. Изучены основные методами и концепциями объектно-ориентированного программирования

5. Изучен синтаксис и семантика объектно-ориентированных языков программирования

6. Проанализировано существующие объектно-ориентированные языки программирования высокого уровня, обозначить сферы их применения

7. Разработана с использованием объектно-ориентированного подхода и протестирована програмная платформа.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Амерааль, Л. STL для программистов на С++. / Л. Амерааль; пер. с англ.- СПб.: ДМК Пресс, 2016.- 240 с.
  2. Г.Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. - М.: Бином, 2015. - 560 с.
  3. Дейл, Н. Программирование С++. / Н. Дейл, Ч. Уимз, М. Хедингтон; пер. с англ.- СПб.: ДМК Пресс, 2017.- 672 с.
  4. Дубина Г.Д. Разработка и применение пакетов прикладных программ в экономике: Учебное пособие. – Томск: Изд. ТПУ, 2016. - 144 с.
  5. Лафоре, Р. Объектно-ориентированное программирование в С++. / Р. Лафоре.- СПб: Питер, 2017.- 928 с.
  6. Павловская, Т.А. С++. Объектно-ориентированное программирование. Практикум: учебное пособие. / Т.А. Павловская, Ю.А. Щупак.- М.; СПб.; Н.Новгород: Питер, 2016.- 264 с.
  7. Прата, С. Язык программирования Си. Лекции и упражнения. / С. Прата; пер. с англ.- 5-е изд.- М.: Вильямс, 2017. - 1181 с.
  8. Страуструп, Б. Язык программирования С++. / Б. Страуструп; пер. с англ.- М.: Бином-Пресс, 2014.- 1098 с.
  9. Хорев, П.Б. Технологии объектно-ориентированного программирования. / П.Б. Хорев.- М.: «Академия», 2018.- 448 с.