Файл: Применение объектно-ориентированного подхода при проектировании информационной системы (Жизненный цикл проектируемой системы).pdf
Добавлен: 29.06.2023
Просмотров: 78
Скачиваний: 3
- один-к-одному;
- один-ко-многим;
- многие-ко-многим[4, с.117].
- Наследование и полиморфизм обеспечивают развитие новых классов с помощью создания производных классов. Наследование — это свойство системы, позволяющее описать новый класс (потомок) на основе уже существующего (базового, суперкласса) с частично или полностью заимствующейся функциональностью. Потомки наследуют характеристики наследованных классов без изменения их первоначального состояния и добавляют при необходимости собственные структуры данных и методы. Наследование позволяет различать разновидности абстракций и передавать свойства и структуру базового класса своим подклассам, что позволяет существенно экономить код. Наконец, наследование определяет направление развития классов, что существенно облегчает разработку иерархии классов. Полиморфизм— способность класса принадлежать более, чем к одному типу, возможность с помощью одного имени решать две или более схожие, но технически разные задачи. Полиморфизм позволяет устанавливать аналогии между методами различных классов. Он помогает снижать сложность программ, разрешая использование того же интерфейса для задания единого класса действий[3, c. 85-86].
- Агрегация - обозначает отношения целого и части между экземплярами классов[1, с.104].
- Использование - наличие связи между экземплярами классов[5, с.40].
- Истанцирование - создание экземпляра класса.
- Метакласс - класс, экземпляры которого суть классы, что позволяет трактовать классы как объекты[1, с.108].
Внутреннее состояние классов и объектов разрабатываются только после завершения их внешнего поведения. При этом необходимо определить способ представления класса или объекта и способ размещения их в модуле. Представление классов и объектов почти всегда должно быть инкапсулировано. Оптимальный способ всегда выбирается при определении характера решаемой задачи. В отношении способа размещения классов и объектов в модуле, необходимо учитывать, что модули должны быть функционально связанными внутри и слабо связанными друг с другом.
Выводы: сущность объектно-ориентированного подхода заключается в понятие классов и объектов. Каждый объект является частью определенного класса и имеет свое состояние и поведение. Как объекты, так и классы взаимодействуют между собой. В главе рассмотрены типы этих отношений.
Глава 2. Жизненный цикл проектируемой системы
2.1 Объектно-ориентированный анализ
Первой фазой жизненного цикла является объектно-ориентированный анализ и предварительное проектирование системы[15, с.12].
Основная задача объектно-ориентированного анализа – построение информационной модели, в которой фундаментальная структура предметной области абстрагируется от реального мира и чётко формализуется и документируется[14, с.50].
На этапе объектно-ориентированного анализа выполняется моделирование проблемы а также выделение классов и объектов, которые будут составлять словарь предметной области. Существует несколько основных подходов к анализу объектно-ориентированной системы.
Анализ поведения, в котором на выбор классов и объектов влияет сходное динамическое поведение.
Анализ предметной области подразумевает выделение тех объектов и связей, которые наиболее важны для данной области. Мур и Байлин выделяют следующие этапы анализа предметной области:
- Построение скелетной модели после в результате консультирования с экспертами в данной области.
- Изучение существенных в данной области систем и представление результатов в стандартном виде.
- Определение сходства и различия между системами при участии экспертов.
- Уточнение общей модели для приспособления к нуждам данной системы[1, с.127].
Эксперт должен быть хорошо осведомлен в вопросах исследуемой проблемы и владеть понятиями данной области.
На этапе анализа вариантов разработчики и эксперты перечисляют сценарии, наиболее существенные для работы системы а затем прорабатывают каждый сценарий выделяя объекты, их обязанности и взаимосвязи между ними. В результате появляются новые или уточняются существующие абстракции.
На этапе анализа системы решаются две основные задачи:
- Выделение ключевых абстракций, то есть классов и объектов включенных в систему и определяющих границу рассматриваемой проблемы. Необходимо правильно расположить классы и объекты на нужных уровнях абстракции[1, с.130,131].
- Выделение механизмов реализации, служащих для задания поведения совокупности объектов. Механизмы представляют шаблоны поведения[1, с.132,133].
В результате объективно-ориентированного анализа создаются модели, на которых основывается декомпозиция системы, которая создает фундамент для реализации системы с использованием методологии объектно-ориентированного проектирования[15, с.13].
Объектно-ориентированное проектирование - это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической и физической, а также статической и динамической моделей системы[7, с.129]. Граница между объектно-ориентированным анализом и проектированием расплывчата и построение проекта программного изделия состоит из ряда циклов, в которых уточняются описания классов и взаимодействия между ними, разрабатываются реализующие их программы, проводится их отладка и тестирование и по результатам каждого этапа уточняются рабочие документы предыдущих этапов, дорабатываются описания классов и программы. Эти циклы повторяются до получения требуемого результата.
Результаты анализа и проектирования выражаются в моделях. Моделью системы называется формальное описание системы, в котором выделены основные объекты, составляющие систему, и отношения между этими объектами. В общем случае проектируемая программная система представляется в виде трех взаимосвязанных моделей:
-
- Объектная модель, которая раскрывает статические и структурные элементы системы. Эта модель представляет собой обобщение структуры проектируемой системы и описывает структуру объекта- их атрибуты, операции, механизмы взаимодействия. В объектной модели отражаются те понятия и объекты реального мира, которые важны для разрабатываемой системы[15, с.14].
- Динамическая модель- модель, зависящая от времени. Она описывает работу у тех или иных частей системы и отражает определенные временные аспекты и последовательность операций. Если объектная модель представляет собой статическую структуру проектируемой системы, то динамическая модель позволяет отображать все изменения, которые происходят с объектами с течением времени и что происходит с их связями во время работы системы. Динамическая модель состоит из диаграмм состояний[15, с.60].
- Функциональная модель отражает взаимодействие частей системы в процессе работы и описывает потоки данных. Она отражает, как входные данные преобразуются в выходные. Она состоит из совокупности диаграмм потоков данных потоков данных, которые показывают, как потоки данных поступают к внешним выходам[15, с.78,79].
Диаграммы состояний связывают событие и состояние. Событие используется для определения некого момента времени, оно не имеет продолжительности. События передают информацию с одного объекта на другой. Состояние определяется совокупностью текущих значений атрибутов и связей объекта. Состояние определяет реакцию объекта на поступающее в него событие. Такая реакция может включать некоторое действие или переход объекта в другое состояние. При приеме события следующее состояние системы зависит как от ее текущего состояния, так и от события; смена состояния называется переходом. Диаграмма состояний - это граф, узлы которого представляют состояния, а направленные дуги, помеченные именами соответствующих событий, - переходы. Диаграмма состояний позволяет получить последовательность состояний по заданной последовательности событий[1, с.183].
Диаграммы потоков данных строятся в функциональной модели. Эти диаграммы описывают смысл операций и ограничений, отражает функциональные зависимости значений, вычисляемых в системе, включая входные значения, выходные значения и внутренние хранилища данных[4, с.41].
Диаграммы потоков данных содержит процессы, которые преобразуют данные, потоки данных, которые переносят данные, активные объекты, которые производят и потребляют данные, и хранилища данных, которые пассивно хранят данные[15, с.79].
2.2 Конструирование системы
Вторая фаза жизненного цикла - конструирование системы. На этом этапе решается вопрос, как реализовать решения, принятые на этапе анализа[15, с.94].
На этапе конструирования системы ее разработчик должен принять следующие решения:
- определить разбиение системы на относительно независимые в реализации части (модули);
- выявить асинхронный параллелизм в системе, то есть выяснить, какие объекты должны быть активными одновременно , а какие бывают активными только в разное время;
- определить состав вычислительного комплекса, на котором будет работать система;
- распределить компоненты системы по процессорам вычислительного комплекса и независимым задачам;
- организовать управление хранилищами данных;
- определить глобальные ресурсы и разработать механизмы управления доступом к ним;
- выбрать принципы реализации управления программным обеспечением;
- предусмотреть поведение каждого объекта и всей системы в пограничных ситуациях: инициализации, терминации и обвале[15, с.96].
2.3 Реализация проекта
Третья фаза жизненного цикла - реализация объектно-ориентированного проекта. Она состоит в реализации разработанных программных единиц (классов, функций, библиотек), которые в совокупности составляют разрабатываемую программную систему. Реализация каждой программной единицы может осуществляться как на объектно-ориентированном, так и на не объектно-ориентированном языке программирования, с использованием ранее разработанных программ, библиотек и баз данных[15, с.121].
Выводы: жизненный цикл проектируемой системы включает в себя три фазы: объективно-ориентированный анализ системы, конструирование системы и реализация проекта. Этап объективно-ориентированного анализа и проектирования очень важен, поскольку на его основе необходимо построить достаточно полную и не противоречивую модель системы. Благодаря построению модели мы можем проверить работоспособность разрабатываемой системы на ранних этапах ее разработки и вносить, если необходимо, определенные изменения в проект системы.
Глава 3. Объектно-ориентированные языки программирования
Общим предком практически всех используемых сегодня объективно-ориентированных языков программирования является Simula, разработанный в конце 60-х годов в Норвегии Далем, Мюрхогом и Ныгардом. Достоинства языка Simula были замечены некоторыми программистами, и в 70-е годы было разработано большое число экспериментальных объектно-ориентированных языков программирования: например, языки CLU, Alphard, Concurrent Pascal и др. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно-ориентированные языки программирования: C++, Smalltalk, Eiffel и др[1, с.335].
- Smalltalk
Является одновременно и языком программирования и средой разработки программ. Вслед за Simula, Smalltalk является важнейшим объектно-ориентированным языком, поскольку он не только оказал влияние на последующие поколения языков программирования, но и заложил основы современного графического интерфейса пользователя, на которых непосредственно базируются интерфейсы Macintosh, Windows и Motif. В основу языка положены две простые идеи:
- все является объектами;
- объекты взаимодействуют, обмениваясь сообщениями[1, с.336].
В Smalltalk существует ограничение на построение иерархии классов: у каждого класса может быть только один непосредственный супер-класс. Такое наследование называется одиночным наследованием[10, с.20].
- С++
Является объективно-ориентированным расширением языка Си, созданным Бьерном Страуструпом в 1980 году[3, с.81]. C++ добавляет к C объектно-ориентированные возможности. Он вводит классы, которые обеспечивают три самых важных свойства объективно-ориентированного программирования : инкапсуляцию, наследование и полиморфизм. Класс является ключевым понятием C++. Описание класса содержит описание данных, требующихся для представления объектов этого типа и набор операций для работы с подобными объектами[1, c.340 ].
С ++ унаследовал возможности языка C. Строго говоря, C++ является расширением языка С: любая конструкция на языке C является корректной в C++; в то же время обратное неверно. Наиболее значительные нововведения, присутствующие в C++, касаются классов, объектов и ООП (первоначальное название языка C++ — «С с классами»). Тем не менее имеются и другие увершенствования, связанные со способами организации ввода/вывода и написанием комментариев[2, с.43].