![](/stc/img/evkova.png)
Применение объектно-ориентированного подхода при проектировании информационной системы
Содержание:
ВВЕДЕНИЕ
Тема данной курсовой работы связана с фундаментальной областью компьютерных наук (computer science), - с технологией разработки программного обеспечения. Эта весьма обширная область знаний является объектом нашего исследования и включает в себя вопросы языков программирования, парадигм программирования, интегрированных средств разработки, вопросы методологии проектирования программного обеспечения и многие другие вопросы теоретически и практически связанные с процессом разработки программного обеспечения для вычислительным машин.
В этой работе будет рассмотрена наиболее востребованное направление в этой области знаний - объектно-ориентированное проектирование. Эта востребованность, вместе с широким охватом отмеченной области знаний, являются причиной выбора автором данной темы.
Предметом исследования является конкретная, объектно-ориентированная информационная система, то есть, такая система, которую можно представить в виде взаимодействующих с друг другом, по определенным механизмам, иерархически связанных объектов - особых элементов системы [2, с.36].
Цель курсовой работы состоит в раскрытии сущности этой технологии проектирования. Для достижения этой цели необходимо решить задачу рассмотрения предпосылок возникновения этой технологии, а также задачи рассмотрения теоретических и практических особенностей присущих этой технологии. Задача рассмотрения практических особенностей применения данной технологии будет решаться рассмотрением конкретных средств проектирования и программирования объектно-ориентированных систем.
Фундаментальным трудом, по тематике данной работы, является общепризнанный труд [1]. В нем авторами, которые стояли у истоков возникновения этой методологии, широко освящаются объектные методы решения задач проектирования и программирования информационных систем. Достоинством книги является рассмотрение многочисленных примеров, иллюстрирующих особенности объектно-ориентированного подхода.
В книге - бестселлере [7] рассматриваются фундаментальные концепции и понятия программирования, осуществляется анализ наиболее популярных языков и парадигм программирования. Кроме того, в данной книге, рассматривается объектно-ориентированный подход программирования и его историческое развитие.
В книге [8] приводится обширный сравнительный анализ языков программирования, рассматривается вопрос универсальности объектно-ориентированной методологии.
В книге [3] рассматриваются основные принципы объектно-ориентированного анализа и проектирования на основе унифицированного языка моделирования UML 2.0.
В книгах [2], [4], [5], [6] и [9], на конкретных средствах и технологиях разработки, рассматриваются вопросы проектирования и программирования информационных систем.
1. История возникновения объектно-ориентированного подхода
Программирование, как отрасль технической деятельности, возникло с появлением вычислительных машин и длительный период времени находилось в зачаточном состоянии. Это связано с тем, что этот период был более посвящен вопросам вычислительных архитектур, поиску концептуальных архитектурных решений. С появлением фон-неймановской вычислительной архитектуры, программирование эволюционировало от переключения тумблеров на панели компьютера к применению машинных команд, хранящихся в памяти компьютера. Затем появился язык ассемблера - язык мнемонических описаний машинных команд. Следующий шаг в этом процессе - появление языка программирования высокого уровня Fortran (см. рис. 1) [8, с.27].
Рисунок 1. Первый язык высокого уровня Fortran
С появлением этого языка в научном мире начались дискуссии относительно процедурности, модульности, структурности языков программирования. В 1960-х годах компания IBM предпринимает попытку разработки беспрецедентной, по сложности, программы - операционной системы для машин серии IBM/360. В результате этой разработки выявилось множество недостатков языка Fortran и в самой дисциплине программирования. Научный мир стоял перед фактом: технологии программирования не позволяют разрабатывать достаточно сложные системы. Это был кризис программирования 60-х годов [8, с.64]. Выход из этого кризиса наметился в работах Вирта (Niklaus Wirth), Хоара (Charles Antony Richard Hoare), Дейкстры (Edsger Wybe Dijkstra) и других ученых, с появлением дисциплины структурного программирования [8, с.65]. Эта дисциплина подразумевает использование, при написании программы, ограниченного набора типовых управляющих структур. Таким образом, программа представляет собой композицию этих структур [8, с.67]. Всего определили восемь управляющих структур: цепочка, ветвление (if-then-else), условное ветвление (if-then), многозначное ветвление (case), цикл с постусловием (repeat-until), цикл с предусловием (while), обобщенный цикл (loop) и цикл с параметром (for). На рисунке 2 показаны основные типовые структуры, где прямоугольником обозначены функциональные блоки, а ромбом - блоки проверки условия.
Рисунок 2. Основные типовые управляющие структуры
Впоследствии, итальянскими математиками Бём (Corrado Böhm) и Якопини (Giuseppe Jacopini) была доказана теорема структурирования о достаточности двух управляющих структур (цепочка и цикл с предусловием) для представления любого алгоритма [8, с.71]. Таким образом, под структурное программирование была подведена прочная математическая база. Но, несмотря на это, все возрастающая сложность разрабатываемых программ, требовала дальнейшего обобщения вычислительных команд и элементов, для того чтобы упорядочит код, привнести ясность в его сложную структуру. Эти поиски привели к появлению языка программирования SIMULA-67, в котором были впервые заложены идеи объектно-ориентированного подхода в программировании [7, с.452]. Язык SIMULA-67 во многом опередил свое время. Основное назначение языка - решение задач имитационного моделирования. Ввиду этих двух факторов язык не получил широкого распространения [8, с.106]. Интерес к языку возник в 1980-х годах с появлением его последователя - полностью объектно-ориентированного языка Smalltalk 80 [7, с.452]. В этом языке программа представляется не как последовательность инструкций, а как совокупность иерархически связанных между собой объектов, обладающих определенными свойствами и обменивающихся с друг другом посредством механизма сообщений [7, с.461]. Успех использования этого языка был ошеломляющим. Разработчики структурных языков стали вводить объектно-ориентированные механизмы в свои языки. Возникла особая, объектная парадигма мышления, объектная идеология [7, с.480]. Впоследствии, на базе объектно-ориентированных языков, возникли средства объектно-ориентированного проектирования [1, с.72]
Рассмотрим эти теоретические вопросы.
2. Теория объектно-ориентированной методологии проектирования
Выделяют два уровня объектно-ориентированной разработки информационной системы: уровень проектирования, который сводится к эффективному структурированию системы [1, с.72] и уровень программирования, сводящийся к правильному использованию объектно-ориентированных механизмов конкретного языка программирования [8, с.107]. Эти два уровня органически связаны между собой и оперируют общими понятиями.
2.1. Основные понятия
Центральное понятие объектного подхода - объект. Объект - это объединение данных и действий, производимых над этими данными в единое целое [2, с.34]. Данные объекта определяют его текущее состояние. Действия объектов определяют его поведение и являются особыми функциями, называемыми методами объекта. Методы могут менять данные состояния объекта и предоставлять эти данные другим объектам. Состояния и действия объектов задаются при описании класса. Класс - это тип объектов, а объект, таким образом, - экземпляр класса. Расширение типов осуществляется за счет механизма наследования. Дочерний класс наследует свойства и методы родительского класса. Таким образом, в средствах проектирования и программирования имеет место быть иерархия классов. Реализация класса скрыта от его пользователей механизмом инкапсуляции. За счет этого механизма ограничен доступ к его внутренними переменным и функциям. Доступ к ним возможен только посредством определенного интерфейса: совокупности свойств и методов. То есть здесь делается акцент на то, что пользователям объекта не нужно знать его внутреннюю реализацию, срабатывает так называемый принцип черного ящика. Способность разнотипных, но имеющих общего предка, объектов по-разному реагировать на одно и то же сообщение обеспечивается механизмом полиморфизма [8, с.112]. За счет этого
механизма объекты наследники переопределяют поведение предков.
Учитывая вышеизложенное можно выделить следующие характерные особенности объектно-ориентированного подхода:
- значение понятия "переменная" конкретизировано до понятия "состояние объектов".
- Управление в программе децентрализовано. Типичная программа представляет собой совокупность взаимодействующих между собой, посредством методов, объектов (см. рис. 3)
- Доступ к внутренним данным объекта ограничен или запрещен
- Удобность применения восходящих методов разработки систем за счет проектирования, в начале, совокупности объектов и решения других вопросов объектной организации.
Рисунок 3. Структура объектно-ориентированной системы
Благодаря этим особенностям объектно-ориентированного подхода выработался особый, унифицированный процесс проектирования систем.
2.2. Унифицированный процесс
Процесс проектирования информационных систем унифицирован и осуществляется, чаще всего, средствами языка UML (от англ. Унифицированный Язык Моделирования). Этот язык предоставляет пользователю определенную графическую нотацию с помощью которой строятся специальные диаграммы (см. рис. 4). Эти диаграммы подразделяются на две большие группы: структурные диаграммы и диаграммы поведения [1, с.179]. Диаграммы первого типа отображают элементы из которых состоит система. Диаграммы поведения отображают процессы которые протекают в проектируемой системе.
Рисунок 4. Диаграммы UML
Восходящий метод проектирования состоит в последовательном построении этих диаграмм, на конечных стадиях которого средства проектирования позволяют генерировать программный объектно-ориентированный код.
На первом этапе строится диаграмма вариантов использования (Use-case-diagram). Эта диаграмма является наиболее популярным средством анализа требований [3, с.34]. Основными элементами этой диаграммы являются актеры, варианты использования и отношения. Актер - это роль, которую выполняет пользователь или элемент системы. Вариант использования - это единица взаимодействия актера и системы. Отношения описывают характер взаимосвязи актеров и вариантами использования, актеров с актерами и вариантов использовании друг с другом. Возможны следующие отношения: включение (когда один вариант использования инициирует в процессе использования другой), расширения (когда один вариант использования является дополнением другого), реализация (когда один вариант использования является реализацией другого). На рисунке 5 показан пример этой диаграммы для упрощенного проекта интернет - магазина.
Рисунок 5. Диаграмма вариантов использования для интернет - магазина
Далее строится диаграмма последовательностей, являющаяся уточнением последовательности действий выполнения конкретного варианта использования [3, с.36]. На этой диаграмме, помимо описанных выше элементов, прямоугольниками обозначаются классы с которыми взаимодействует актер. Стрелки на диаграмме означают сообщения. Чаще всего эти сообщения являются вызовами методов. Пример диаграммы показан на рисунке 6.
Рисунок 6. Диаграмма последовательностей для интерент-магазина
После построения двух предыдущих поведенческих диаграмм строится структурная диаграмма классов, которая отображает совокупность классов разрабатываемого приложения с указанием их атрибутов и методов [3, с.37]. Основными элементами диаграммы являются классы и отношения между ними [1, с.224]. Данная диаграмма наиболее полно отображает архитектуру проектируемой системы [1, с.223]. Пример диаграммы показан на рисунке 7. При построении этой диаграммы задействуются все, описанные выше, объектно-ориентированные механизмы. Так, все атрибуты и операции классов указываются с указанием области видимости. За счет использования отношений, которые обозначаются стрелками, описывается механизм наследования, а также механизм реализации (когда один класс реализует указанный интерфейс), механизм ассоциации (когда один класс взаимодействует с другим, или включает в себя один или несколько экземпляров другого класса), механизм композиции (когда объект одного класса может быть включен в объект другого с условием, что вложенный объект может находится в одном объекте контейнере) и механизм агрегации, аналогичный механизму композиции за исключением того, что вложенный объект может находится в нескольких объектах-контейнерах [1, с.226].
Рисунок 7. Диаграмма классов интернет - магазина
Следующая диаграмма, которая также, как и диаграмма последовательностей создается в привязке к конкретному варианту использования, - диаграмма коммуникаций. На этой диаграмме отображаются все коммуникации инстанцированных объектов, которые задействуются для решения конкретной задачи [1, с.274]. В этой диаграмме используются такие же обозначения как в диаграмме классов. Пример диаграммы приведен на рисунке 8. На этой диаграмме также задействуется механизм ассоциаций, в котором, в отличие от диаграмм последовательности, ассоциации определяют порядок инициации.
Рисунок 8. Диаграмма коммуникаций
Последние наиболее важные диаграммы - это диаграмма состояний и диаграмма деятельности. Диаграмма состояний показывает каким образом какой-либо элемент (обычно класс) переходит из одного своего состояний в другое. Основными элементами диаграммы являются: состояния, переходы. Кроме того, особыми знаками обозначаются начальные и конечные состояния. На рисунке 9 показан пример диаграммы состояний для интернет-магазина.
Рисунок 9. Диаграмма состояний
Диаграмма деятельности описывает потоки и последовательности выполнения работ конкретного варианта использования. Основными элементами диаграммы являются: узлы действий, узлы управления и узлы объектов [1, с.218].
Рисунок 10. Диаграмма деятельности интернет-магазина
После построения приведенных диаграмм, средства проектирования позволяют генерировать шаблон объектно-ориентированного кода. После этого остается лишь наполнить внутренним содержанием этот код.
3. Применение объектно-ориентированного подхода в современных RAD IDE средах
Разработка системы, с применением объектно-ориентированного подхода, в современных языках программирования, предполагает владение двум основными средствами этих языков: объектно-ориентированными механизмами и библиотеками, написанными с применением данного подхода, в том числе библиотекой визуальных (и не визуальных) компонентов - VCL.
3.1. Язык программирования Delphi
Язык программирования Delphi, ранее известный как Object Pascal, получил свое название с выхода в свет интегрированной среды разработки (IDE) Borland Delphi 2007. На сегодняшний день поддержка этого языка реализована в IDE Embarcadero RAD Studio. Последняя версия среды - Embarcadero RAD Studio 10.1 Berlin.
Класс, описывающий объект, является в Delphi особым типом данных [5, с.103]. Определение класса начинается с ключевого слова type, за которым следуют поля и методы, с указанием их области видимости. На рисунке 11 показано общее определение класса. Здесь, для примера, создается класс user, на базе которого будет создан соответствующий
Рисунок 11. Объявление класса в Delphi
объект. В этом объявлении задействуются все механизмы объектно-ориентированного программирования: наследование, инкапсуляция и полиморфизм. Механизм наследования задействуется во второй строчке кода - "Tuser = class(TObject)", и означает что создается новый класс, родителем которого будут являться класс TObject [5, с.110]. Далее с помощью ключевых слов "private", "public","protected" и "published" задаются области видимости, с помощью которых настраивается наследование. Все поля, свойства и методы, размещенные в секции private, в секции частных объявлений, доступны только из того же программного модуля в котором описан класс. В секции защищенных объявлений protected находится информация доступная для классов потомков. В секции общих объявлений public находится информация доступная для всех. Секция опубликованных объявлений published аналогична секции public, за одним исключением - свойства, опубликованные в этой секции доступны на этапе конструирования программы, а не только на этапе исполнения.
Механизм полиморфизма задействован в виде переопределения поведения конструктора и деструктора класса - родителя (специальные методы создания и уничтожения объекта) [5, с.111].
Механизм инкапсуляции задействован при объявлении свойств класса в разделе published [5, с.108]. Здесь объявлено три свойства: Fio, Address и Age и указано что чтение данных из этих свойств осуществляется из соответствующих полей, а запись через специальные методы, которые в данном примере проверяют корректность введенных значений (см. рис. 12)
Рисунок 12. Методы посредники доступа к полям объекта
Специфика разработки объектно-ориентированных приложений в данной среде предполагает широкое использование библиотеки визуальных компонентов. Эта библиотека написана с использованием объектного подхода, поэтому при разработке какой-либо системы решается вопрос выбора подходящего класса - родителя, в котором реализован подходящий функционал. На рисунке 13 показана часть иерархии классов этой библиотеки VCL [9, с.172]. Знание особенностей
Рисунок 13. Часть иерархии классов библиотеки VCL
реализации классов из этой библиотеки, а также владение основными средствами объектно-ориентированного подхода, позволяет разрабатывать полнофункциональные приложения с применением самых передовых технологий инкапсулированных в этих классах [5, с.114]
3.2. Язык программирования С++
В языке программирования C++ реализовано множество различных объектно-ориентированных механизмов. Некоторые эксперты считают, что столь обширные средства языка его необоснованно усложняют [8, с.119]. Тем не менее, "С++", признанный стандарт программирования сложных объектно-ориентированных систем. На этом языке реализовано множество сложнейших систем, в том числе большая часть кода операционных систем Windows и Linux написана на С++.
Объявление класса аналогично объявлению в Delphi (см. рис. 14).
Рисунок 14. Основные механизмы ООП в С++
В этом примере мы видим перегруженный конструктор User и вызов этого конструктора по умолчанию [6, с.496]. Кроме того, на этом рисунке видны скрытые поля, методы класса осуществляющие доступ к этим полям.
Кроме описанных выше механизмов в языке С++ реализован механизм множественного наследования, механизм шаблонов, особый модульный механизм - пространство имен [8, с.115].
3.3 Язык программирования PHP
PHP (PHP: Hypertext Preprocessor) - популярный скриптовый язык программирования web-серверов, поддерживающий объектно-ориентированные средства. Наиболее популярным IDE для этого языка является среда программирования NetBeans (последняя версия - NetBeans IDE 8.2.). Синтаксис языка схож с синтаксисом С++. Применение объектно-ориентированных механизмов в скриптовых языках значительно упрощает процесс программирования web-серверов [4, с.133]. На рисунке 15 приведено объявление аналогичного класса User.
Рисунок 15. Основные механизмы ООП в PHP
На этом рисунке видно описание базового класса, в котором задан лишь один конструктор, и описание производного класса. В производном классе User конструктор базового класса перегружен. Кроме того, в производном классе объявлены скрытые поля name и password доступ к которым возможен только посредством методов getName и getPass, чем достигается инкапсулирование данных в классе.
ЗАКЛЮЧЕНИЕ
В ходе написания этой работы мы рассмотрели историю возникновения объектно-ориентированной технологии в языках программирования и проектирования. Выявили, что основным мотивом к созданию этой технологии являлось введение обобщающих понятий и средств программирования с целью упрощения сложных структур программ. Вехой этого процесса стало появления унифицированного процесса языка моделирования UML. Мы рассмотрели основные диаграммы этого языка, показали каким образом осуществляется анализ предметной области и как такой анализ приводит в конце к построению диаграммы классов и других детализированных диаграмм классов, после построения которых осуществляется непосредственная генерация кода будущей программы. Кроме того, на примере технологий объектно-ориентированного программирования Delphi, С++ и PHP, мы рассмотрели особенности механизмов ООП в этих языках. Установили схожесть ООП технологий в этих языках и универсальность объектно-ориентированного подхода к программированию и проектированию. Тем не менее, объектный подход вовсе не является панацеей от всех болезней. Его удобно использовать в системах, которые предполагают существование в памяти огромного числа родственных элементов, группирующихся в динамические структуры [8, с.113]. Недаром этот подход был впервые реализован в языке имитационного моделирования SIMULA-67. Несмотря на это, этот подход выработал то, что сегодня называется унифицированным процессом проектирования, привел к появления UML. Поэтому, несмотря на пристрастие разработчиков к той или иной парадигме программирования, использование UML при проектировании значительно упрощает сложность процесса проектирования, позволяет выявить структуру системы и её поведение, и реакцию на внешние воздействия. Эти качества безусловно являются плюсами объектного подхода. Однако, он не лишен недостатков. Во-первых, в виду механизма позднего связывания, иногда в программе, написанной с применением этого подхода, невозможно определить какая из функций (методов) будет вызвана. Кроме того, по утверждению некоторых экспертов, привнесенная объектно-ориентированным подходом графическая нотация, значительно усложнила процесс программирования, в виду того, что необходимость в какой-либо графической нотации отпала с появлением парадигмы структурного программирования [8, с.114].
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Объектно-ориентированный анализ и проектирование с примерами приложений, 3-е изд.: Пер. с англ./Г. Буч, Р. Максимчук, М. Энгл, Д. Коналлен, К. Хьюстон. - М.: Вильямс,2008.- 720 с.
2. Лафоре Р. Объектно-ориентированное программирование в С++, 4-е. изд. –СПб.: Питер, 2004.- 923 с.
3. Ларман К. Применение UML 2.0 и шаблонов проектирования. Практическое руководство. 3-е издание.: Пер. с англ. - М.: Вильямс, 2013. - 736 с.
4. Никсон Р. Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5, 3-е изд. - СПб.: Питер, 2015 - 688 с.
5. Осипов Д.Л. Delphi.Профессиональное программирование. - СПб.: Символ-Плюс, 2006. - 1056 с.
6. Прата С. Язык программирования С++. Лекции и упражнения, 5-е изд.: Пер. с англ. - М.: Вильямс, 2007. - 1187 с.
7. Себеста Р.У. Основные концепции языков программирования, 5-е. изд.:Пер. с англ. – М.: Вильямс, 2001.- 627 с.
8. Свердлов С. З. Языки программирования и методы трансляции: Учебное пособие. - СПб.: Питер, 2007. - 638 с.
9. Фаронов В. В. Delphi. Программирование на языке высокого уровня: Учебник для вузов - СПб.: Питер, 2009. - 640 с.
- Барьеры на пути эффективных коммуникаций
- Менеджмент человеческих ресурсов
- Подсистемы управления корпоративным проектом
- Взаимодействие с внешним окружением проекта
- Организационные структуры управления будущего
- Конфликты в молодой семье. Профилактика и пути их решения
- Финансовое состояние: анализ и оценка (на примере ООО «ЮГРАФ»)
- Венчурное инвестирование инновационного развития. Отечественная и зарубежная практика
- Метод STEM для зaдaчи принятия решений
- Сетевые операционные системы
- Анализ и оценка средств реализации объектно-ориентированного подхода к проектированию экономической информационной системы
- Языки гипертекстовой разметки