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

Применение объектно-ориентированного подхода при проектировании информационной системы

Содержание:

ВВЕДЕНИЕ

Тема данной курсовой работы связана с фундаментальной областью компьютерных наук (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 с.