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

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

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

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

Добавлен: 04.04.2023

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

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

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

- Моделирование действия из реального мира;

- Наличие типов данных, определяемых пользователем;

- Сокрытие деталей реализации;

- Возможность многократного использования кода благодаря наследованию;

- Интерпретация вызовов функций на этапе их выполнения. [4]

1.3 Объектно-ориентированные языки программирования

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

Simula (1967), как правило, считается первым языком с первичными особенностями объектно-ориентированного языка. Он был создан для проектирования программ моделирования, в которых то, что стали называть «объекты», было самым важным представлением информации. Smalltalk (1972 по 1980), возможно, является каноническим примером, а также тем, на основании которого была разработана большая часть теории объектно-ориентированного программирования. Что касается степени ориентации объекта, могут быть выделены следующие подтипы:

  • Чисто объектно-ориентированные языки, все в них обрабатывается последовательно в качестве объекта, начиная от примитивов, таких как символы и знаки препинания, вплоть до целых классов, прототипов, блоков, модулей и т.д. Они были разработаны специально для облегчения применения методов объектно-ориентированного программирования. Примеры: Eiffel, Emerald, Obix, Ruby, Scala, Smalltalk;
  • Языки, которые предназначены главным образом для объектно-ориентированного программирования, но с некоторыми процедурными элементами. Примеры: Delphi / Object Pascal, C++, Java, C #, VB.NET, Python;
  • Языки, которые исторически являлись процедурными языками, но были расширены некоторыми объектно-ориентированными особенностями. Примеры: Паскаль, Visual Basic (производный от BASIC), MATLAB, Fortran, Perl, COBOL 2002, PHP, ABAP, Ада 95; [9]
  • Языки с поддержкой абстрактного типа данных, но не всех других особенностей объектно-ориентированного программирования. Примеры: Modula-2, Pliant, CLU. [9]

2. Теоретические сведения о предмете исследования (этапы ООП)


2.1 Основные этапы объектно-ориентированного программирования

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

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

  • Анализ;
  • Проектирование;
  • Эволюция;
  • Модификация.

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

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

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

Анализ

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

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

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

Итак, этап анализа разбивается на следующие подпункты, а именно:

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

Например, необходимо разработать программный продукт «Телефонная книга». На первом этапе определяются основные требования к данному приложению: оно поддерживать хранение до 100 записей, их добавление и удаление. Основными компонентами приложения будут запись телефонной книги и менеджер функций.

Проектирование

На этапе проектирования происходит определение архитектуры, компонентов, интерфейсов и других характеристик системы или ее компонентов. [9]

Можно выделить такие типы проектирования:

  • логическое проектирование, при котором принимаемые решения практически не зависят от условий эксплуатации;
  • физическое проектирование, при котором приходится принимать во внимание факторы эксплуатации.

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

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

На данном этапе (продолжение примера из предыдущего раздела) для некоего разрабатываемого приложения «Телефонная книга» строится структура классов. Например, понятно, что для корректной работы телефонной книги в ней должен быть класс «Запись» с полями «Имя», «Фамилия», «Телефонный номер», а также класс «Менеджер функций» с методами «Добавление», «Удаление», «Редактирование». Во время этапа физического проектирования также выбирается способ хранения информации, например, текстовый файл или база данных.

Эволюция

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


Рассматривая пример телефонной книги можно предположить, что таким прототипом может служить система, позволяющая просмотреть уже существующую телефонную книгу из файла, однако ни добавить, ни удалить номер не будет представляться возможным. То есть основной интерфейс программного продукта будет реализован. [5]

рис. 2.1.

После тестирования и отладки, а также, возможно, уточнения каких-то требований, к данной системе подключаются другие группы классов, допустим, класс «Менеджер функций» телефонной книги и реализуются оставшиеся методы. По мере подключения всё новых классов прототип точно также тестируется и отлаживается. На рисунке выше показана блок-схема алгоритма, объясняющая, как именно происходит этот процесс. [5]

Поэтапная реализация программного продукта очень упрощает его тестирование и отладку.

Если говорить про «Телефонную книгу» (пример, использующийся ранее), то на этапе эволюции выполняется её программная реализация.

Модификация

Во время этапа модификации к программному продукту обычно добавляются какие-то новые возможности и функции или же изменяются уже существующие свойства системы.

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

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

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

На четвертом этапе для разрабатываемого приложения «Телефонная книга» добавляется новая функциональная возможность – функция сортировки записей.


3. Практическая часть

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

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

Средой разработки программного обеспечения была выбрана Microsoft Visual Studio 2012, а языком программирования - С++, он современный и достаточно удобный, поддерживает парадигму объектно-ориентированного программирования, обеспечивает модульность, разрешение компиляцию, обработку исключений, абстракцию данных, объявления типов (классов) объектов, виртуальные функции. [4]

Постановка задачи:

Необходимо определить наличие гамильтонова цикла в ориентированном графе.

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

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

Ориентированным графом, или сокращенно орграфом, называется такой граф, у которого для каждого ребра присвоено направление.

Гамильтонов цикл - разновидность гамильтонова пути, в котором начальная и конечная точки совпадают. [10]

Гамильтонов путь, или цепь - такой путь (цепь), который содержит каждую вершину графа только один раз. [10]

Граф удобнее всего представлять в виде матриц (смежности или инцидентности), для данного конкретного случая лучше использовать матрицу смежности.

Матрица смежности - матрица, состоящая из нулей и единиц, количество строк и столбцов одинаковое и равняется количеству всех вершин графа. Если из одной вершины в другую есть путь - то на пересечении столбца и строки ставится единица, нет - ноль. [10]