Файл: Применение объектно-ориентированного подхода при проектировании информационной системы ...pdf
Добавлен: 23.04.2023
Просмотров: 239
Скачиваний: 1
СОДЕРЖАНИЕ
Глава 1. Сущность объектно-ориентированного подхода к проектированию
Основные положения объектно-ориентированного подхода
Глава 2. Применение объектно-ориентированного подхода при проектировании информационной системы
2.1. Достоинства и недостатки объектно-ориентированного подхода. Методологии его реализации
Методология OSA обеспечивает объектно–ориентированный анализ программных систем и не содержит возможностей, связанных с поддержкой этапа разработки.
Методологии объектно–ориентированного анализа нередко критикуются за то, что они являются больше реализационно–ориентированными, чем проблемно–ориентированными, обеспечивая больше предварительную разработку, чем анализ требований к системе. Действительно, все рассмотренные методологии (такие, как OMT, SA/SD, JSD) поддерживают прежде всего предварительную разработку программных систем, а не анализ требований к ним. Это следует из таблиц 1 и 2, в которых рассмотрены возможности различных методологий, поддерживающие процесс анализа (таблица 1) и процесс разработки (таблица 2) [12].
Таблица 1
Аналитические возможности сравниваемых методологий объектно–ориентированного анализа
|
Возможность |
OSA |
OMT |
SA/SD |
JSD |
|
Объекты: должны иметь индивидуальное и независимое состояние и поведение |
+ |
+ |
+ |
+ |
|
Классы объектов: должны определять свойства своих членов и должны иметь место в памяти |
+ |
+ |
+ |
+ |
|
Множества связей: множества соединений объектов |
+ |
+ |
+ |
+ |
|
Реляционные классы объектов: рассматривают связи как объекты |
+ |
+ |
– |
+ |
|
Полностью интегрированные подмодели: допускают произвольную интеграцию подмоделей анализа; знак «–» в таблице означает, что подмодели, представленные, например, блок–схемами, не могут комбинироваться с другими видами подмоделей (например, моделями поведения) |
+ |
– |
– |
+ |
|
Агрегация: часто используемый механизм абстракции, который представляет взаимосвязи между системами и их частями |
+ |
+ |
+ |
+ |
|
Обобщение/наследование: механизм абстракции: если A есть специализация B, то свойства A подразумевают свойства B |
+ |
+ |
– |
+ |
|
Полномасштабные ограничения мощности связей: допускают мощности связей, являющихся произвольными множествами неотрицательных целых чисел (не только 1–1, 1–M, M–1, M–M) |
+ |
– |
– |
– |
|
Синонимы и омонимы: допускают несколько имен для одной конструкции и многократное использование одного имени для различных конструкций; полезно при интеграции моделей |
+ |
– |
– |
– |
|
Полная система триггеров: допускаются только условия, только события, или комбинации условий и событий |
+ |
+ |
– |
– |
|
Действия: описывают поведение, которое завершается |
+ |
+ |
+ |
+ |
|
Недетерминированное поведение: описание поведения, которое при отсутствии внешних воздействий может и не завершиться |
+ |
+ |
– |
– |
|
Межобъектный параллелизм: более одного объекта могут быть активными одновременно |
+ |
+ |
+ |
+ |
|
Внутриобъектный параллелизм: в одном объекте допускается одновременное активное существование двух или более трэдов |
+ |
+ |
– |
– |
|
Исключения: допускается обнаружение и обработка условий ошибок |
+ |
– |
– |
– |
|
Временные ограничения: обеспечивают средства ограничения времени на какое–либо действие |
+ |
– |
+ |
+ |
|
Темпоральные условия: поддерживают возможность формулировать условия, ссылающиеся на события в прошлом, настоящем и будущем |
+ |
– |
– |
– |
|
Метамодель: определяет правильный экземпляр модели |
+ |
– |
– |
– |
|
Родовой класс: параметризация классов – механизм абстракции, помогающий осуществлять анализ, хотя иногда его считают особенностью языка |
– |
– |
– |
– |
|
Взаимодействие данных и событий: обеспечивает возможность объектам посылать и принимать данные и события |
+ |
+ |
+ |
– |
|
Унифицированные взаимодействия: разрешают взаимодействие и по данным, и по событиям одновременно; многие модели разделяют взаимодействия по данным (поток данных) и по событиям |
+ |
– |
– |
– |
|
Детализация взаимодействий: показывает когда и почему объект взаимодействует с другими объектами |
+ |
– |
– |
– |
|
Непрерывные взаимодействия: допускает непрерывный поток информации |
+ |
– |
– |
– |
|
Взаимодействия по бродкастингу: разрешает иметь много приемников для одной передачи данных или события; бродкастинг разрешен только для данных, но не для событий |
+ |
– |
– |
– |
|
Общее число аналитических возможностей |
29 |
13 |
8 |
9 |
Таблица 2
Возможности сравниваемых методов объектно–ориентированного анализа, используемые на этапе разработки системы
|
Возможность |
OSA |
OMT |
SA/SD |
JSD |
|
Значения: имеют состояние, но не имеют поведения и индивидуальности; хотя значения можно считать постоянными объектами, во многих подходах существует различие между пространствами значений и объектов |
– |
+ |
+ |
+ |
|
Атрибуты и/или методы: определяют классы объектов в терминах атрибутов и/или методов, аналогично тому, как классы объектов определяются в объектно–ориентированных языках |
– |
+ |
+ |
+ |
|
Шаблоны классов объектов: шаблоны, по которым создаются экземпляры классов объектов, что подразумевает, что свойства экземпляра объекта определяет класс, а не свойства объекта определяют его класс |
– |
+ |
– |
+ |
|
Абстрактные классы: шаблоны, которые определяют свойства, но не разрешают создавать экземпляры |
– |
+ |
+ |
+ |
|
Псевдонаследование: разрешает, чтобы атрибуты и сигнатуры методов подкласса совпадали с атрибутами и сигнатурами методов суперкласса |
– |
+ |
+ |
+ |
|
Тождественность по значениям: множества атрибутов (их обычно называют возможными ключами), используемые для определения тождественности объектов |
– |
+ |
+ |
– |
|
Изменение семантики: разрешает переопределять в подклассе семантику методов суперкласса |
– |
+ |
+ |
– |
|
Императивный вызов операций: позволяет вызов метода в отношении клиент–сервер |
– |
– |
– |
+ |
|
Общее число возможностей по разработке |
0 |
7 |
6 |
6 |
Методология OSA сосредоточена только на проблемах анализа, предлагая ряд интересных соображений, связанных с объектно–ориентированным анализом систем и специально исключая из рассмотрения особенности, характерные для разработки. Предлагая удобные и тонкие методы анализа систем, методология OSA обеспечивает интерпретацию моделей на компьютере на самых ранних этапах анализа системы: OSA реализована в системе программирования C++ на рабочей станции Hewlett–Packard 700 под управлением ОС HP–UX 9.01.
Методология OSA, как и другие методологии, поддерживает три взаимно–ортогональных представления (модели) проектируемой системы:
- модель зависимостей между объектами;
- модель поведения объектов;
- модель взаимодействия объектов.
Модель зависимостей между объектами аналогична объектной модели методологии OMT. В ней рассматриваются объекты, множества отношений между объектами и различные ограничения [15].
Во второй главе работы рассмотрены достоинства и недостатки объектно-ориентированного подхода к проектированию информационной системы в сравнении со структурным подходом. Кроме того, осуществлен краткий, но емкий обзор методологий, которые сегодня наиболее часто используются для реализации программных целей. Так или иначе, выбирать подходящую методологию, а также подход к проектированию в целом необходимо индивидуально и субъективно – исходя из целей, задач и требований к готовому продукту.
2.2. Краткий обзор программных сред, применяемых в процессе реализации объектно-ориентированного подхода
Рассмотрим три наиболее распространенных языков и программных продуктов, которые применяются в процессе реализации объектно–ориентированного подхода – Pascal, Java и Python.
В основе того или иного языка программирования лежит некоторая руководящая идея, оказывающая существенное влияние на стиль соответствующих программ.
Исторически первой была идея процедурного структурирования программ, в соответствии с которой программист должен был решить, какие именно процедуры он будет использовать в своей программе, а затем выбрать наилучшие алгоритмы для реализации этих процедур. Последовательное использование идеи процедурного структурирования программ привело к созданию обширных библиотек программирования, содержащих множество сравнительно небольших процедур, из которых, как из кирпичиков, можно строить «здание» программы.
По мере прогресса в области вычислительной математики акцент в программировании стал смещаться с процедур в сторону организации данных. Оказалось, что эффективная разработка сложных программ нуждается в действенных способах контроля правильности использования данных. Контроль должен осуществляться как на стадии компиляции, так и при прогоне программ, в противном случае, как показала практика, резко возрастают трудности создания крупных программных проектов. Отчетливое осознание этой проблемы привело к созданию Алгола–60, а позже – Паскаля, Модулы–2, Си и множества других языков программирования, имеющих более или менее развитые структуры типов данных [9].
Начиная с языка Симула–67, в программировании наметился новый подход, который получил название объектно–ориентированного программирования (ООП). Его руководящая идея заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое – объект. Характерной чертой объектов является инкапсуляция (объединение) данных и алгоритмов их обработки, в результате чего и данные, и процедуры во многом теряют самостоятельное значение. Фактически объектно–ориентированное программирование можно рассматривать как модульное программирование нового уровня, когда вместо во многом случайного, механического объединения процедур и данных акцент делается на их смысловую связь.
Какими мощными средствами располагает объектно–ориентированное программирование наглядно демонстрирует библиотека Turbo Vision, входящая в комплект поставки Турбо Паскаля.
Одна из наиболее популярных программ для работы с Турбо Паскалем – Free Pascal [9].
Free Pascal это свободно распространяемый компилятор языка Паскаль. Free Pascal работает на различных процессорах (Intel x86, Amd64/x86_64, PowerPC, Sparc) и операционных системах (Linux, FreeBSD, Mac OS X/Darwin, Mac OS classic, DOS, Win32, OS/2, Netware и MorphOS). Синтаксис Free Pascal полностью совместим с Turbo Pascal 7.0, а так же, по утверждению разработчиков, с большинством версий Delphi (классы, rtti, исключения, ansistrings, widestrings, интерфейсы). Для пользователей Apple есть режим совместимости с Mac Pascal. Кроме того Free Pascal поддерживает перегрузку функции, перегрузку оператора, глобальные свойства и некоторые другие особенности.
Сам компилятор распространяется бесплатно по лицензии GNU GPL, а идущие вместе с ним пакеты и библиотеки по модифицированной LGPL, что позволяет распространять ваши скомпилированные программы на любых удобных для вас условиях.
Free Pascal поддерживает компиляцию кода для процессоров Intel, начиная с i386, AMD64 or EMT64, PowerPC, SPARC, Intel ARM. На сегодняшний день существуют или находятся в разработке релизы Free Pascal для следующих операционных систем: Dos (с поддержкой 32–разрядных расширений), Linux, Mac OS X/Darwin, Mac OS classic, Amiga (только версия 0.99.5), Win32, os/2, FreeBSD, BeOS, Solaris , PalmOS , NetBSD, Netware, OpenBSD, MorphOS.
Сейчас последней и рекомендуемой к использованию является версия 2.0.2, вышедшая в ноябре 2005 г. Для каждой из поддерживаемых платформ существует свой дистрибутив Free Pascal. В дальнейшем речь пойдет о пакете, предназначенном для семейства ОС Win32 [11].
На уровне исходного кода приложения, разработанные при помощи Free Pascal, являются переносимыми (портируемыми) между поддерживаемыми платформами. Степень переносимости тем выше, чем больше приложение ориентировано на использование входящих в состав Free Pascal модулей (имеются в виду модули, общие для всех поддерживаемых платформ).
В дистрибутив Free Pascal для Win32 включена документация на английском языке, представленная в формате pdf. На сайте разработчиков также доступна он–лайн документация и архивы с документацией в формате html и в виде обычного текстового файла.
В состав документации входят руководство пользователя, руководство программиста, справочник по диалекту языка Паскаль, который поддерживается Free Pascal, справочник по опциям командной строки,справочник по модулям и функциям встраиваемых библиотек и руководство по созданию документации.
Кроме компилятора, в состав пакета входят дополнительные утилиты, призванные подсобить в разработке приложений. Среди них:
- data2inc – преобразует произвольный файл во включаемый файл (.inc) для FPC, где соответствующие данные представлены в виде константы–массива.
- delp – очищает папку от «временных» файлов, возникающих при компиляции.
- fpcmake – используется для подготовки make–файлов для GNU make.
- fpdoc – генерирует документацию из модулей Free Pascal в форматах HTML и LaTeX.
- fpmc – компилятор msg–файлов.
- fprcp – pascal–препроцессор для windres.
- grep – осуществляет поиск строки по шаблону в одном или нескольких файлах.
- h2pas и h2paspp – транслятор заголовочных файлов C и C++ в модули Pascal.
- makeskel – утилита для подготовки скелета xml–описания для fpdoc.
- ppdep – позволяет получить список зависимостей одного модуля от других.
- ppudump – позволяет извлечь информацию из .ppu–файлов.
- ppufiles – то же, что ppdep, но для .ppu–файлов.
- ppumove – позволяет собирать библиотеки из .ppu.
- ptop – форматирование исходников.
- windres – компилятор ресурсов и др. [14]
Java Development Kit (JDK) является одним из трех основных пакетов, используемых в программировании на языке Java. К ним также относятся JVM (Java Virtual Machine) и JRE (Java Runtime Environment). Важно различать эти три технологии, а также понимать, как они связаны:
- JVM – это часть платформы Java, которая исполняет программы
- JRE – это элемент Java, расположенный на диске, создающий и запускающий JVM
- JDK позволяет разработчикам создавать Java–программы, которые могут выполняться и запускаться посредством JVM и JRE [13]
Начинающие Java разработчики часто путают Java Development Kit и Java Runtime Environment. Различие заключается в том, что JDK представляет собой пакет инструментов для разработки программного обеспечения, тогда как JRE представляет собой пакет инструментов для запуска Java–кода
JRE может использоваться, как отдельный компонент для простого запуска Java–программ, но при этом является частью JDK. JDK требуется JRE, потому что запуск программ является неотъемлемой частью их разработки