Тема 8. Основные подходы к проектированию автоматизированных информационных систем

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

Объектом называют элемент автоматизированной информационной системы, информация о котором сохраняется.

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

Состояние объекта – это набор значений его атрибутов.

Атрибут – это информационное отображение свойств объекта. Каждый объект характеризуется рядом основных атрибутов. Например, сотрудник характеризуется фамилией, именем, табельным номером т. д.

Значение атрибута объекта – это тоже некоторый объект или множество объектов.

Поведение объекта – это набор методов (программный код), оперирующих над состоянием объекта.

Состояние и поведение объекта заключены в самом объекте. Каждый объект обладает определённым набором свойств, которые запоминаются в АИС. Взаимодействие между объектами производится путём передачи сообщений и выполнения соответствующих методов. Из сказанного следует потребность в объединении схожих объектов в классы.

Класс – это объект, содержащий определение всех данных и методов, применяемых к его членам.

Множество объектов с одним и тем же набором атрибутов и методов образует класс объектов.

Классом объектов называют совокупность объектов, обладающих одинаковым набором свойств.

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

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

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

В прикладных традиционных информационных системах, основанных на БД, существовал разрыв между структурной и поведенческой частями. При этом структурная часть системы в них поддерживается аппаратом БД. Её можно моделировать, верифицировать и т.д. Поведенческая часть создаётся изолированно.

Каждая реальная система изменяется и эволюционирует. Традиционное ПО состоит из данных и процедур, осуществляющих доступ и изменение данных. Данные и процедуры комплектуются отдельно, поэтому изменение структуры данных влияет на различные модули, написанные разными специалистами. Такой подход к проектированию программных продуктов, в том числе АИС называют структурным подходом.

На структурированных моделях предметной области с регулярной структурой основаны системы баз данных.

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

Объектно-ориентированный подход (ООП) уменьшает концептуальный разрыв между реальным миром и компьютерной моделью. Он предоставляет аналитикам и проектировщикам возможность ясно понимать структуру системы. ООП позволяет моделировать не только структуру предметной области, но и поведение экземпляров сущностей, относящихся к каждому определённому типу.

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

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

· данные и процедуры объединяются в программные объекты;

· сообщения используются для взаимосвязи с этими объектами;

· схожие объекты группируются в классы;

· данные и процедуры наследуются по иерархии классов.

 

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

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

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

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

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

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

Во время анализа не принимаются во внимание ограничения и требования к физической реализации, например, время ответа или ограничения памяти.

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

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

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

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

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

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

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

Затем объектно-ориентированное проектирование переходит от моделирования предметной области к моделированию области реализации. При этом структура включает описания специфических компьютерных объектов. Например: классы интерфейса пользователя (окна, меню, и т.д.), классы управления задачами (процессы и т.д.), классы обработки данных (списки, очереди, и т.д.).

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

В некоторых случаях бывает необходимо моделировать разные объекты системы с разной точностью. Важным свойством программной модели является конфигурируемость. Этот подход позволяет моделировать каждое устройство со своей точностью. Свойство конфигурируемости относится к понятию гибкости модели.

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

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

Цели процессов анализа и процесса проектирования направлены на проектирование и формирование обобщенных классов с законченными и полезными структурами. Преимуществом такого подхода, является то, что эти классы можно многократно использовать в новых ситуациях, более расширяемых и совместимых друг с другом. Их можно многократно использовать и потому, что эти классы разработаны не для одиночной задачи, а для моделирования конкретных характеристик объектов реального (или компьютерного) мира. Они будут расширяемы, потому что разработаны обобщенно, без привязки к особенностям одной задачи. При этом можно добавлять дополнительные функциональные возможности, изменяя реализацию без нанесения вреда фундаментальным абстракциям. Классы более совместимы и потому, что они разработаны так, чтобы быть завершенными, иметь ясно определённые и защищённые интерфейсы. Это означает, что такие классы способны существовать в новых ситуациях без изменения.

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

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

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

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

Объектно-ориентированный язык программирования характеризуется тремя основными свойствами:

Инкапсуляция. Комбинирование записей с процедурами и функциями, манипулирующими полями этих записей, формирует новый тип данных – объект. Объект представляет собой капсулу, в центре которой хранятся данные. Доступ к данным ведётся через методы, доступ к которым, в сою очередь, осуществляется через сообщения от потребителя. Поверхность капсулы состоит из общей информации, содержащей имена и определения методов. Для вызова метода объекту посылается сообщение, сравнивающее его со списком имен методов. Если находится соответствие, метод активизируется и соответствующий ответ посылается потребителю. В противном случае посылается сообщение об ошибке.

Наследование – это определение объекта и его дальнейшее использование для построения иерархии порождённых объектов с возможностью для каждого порождённого объекта, относящегося к иерархии, обеспечения доступа к коду и данным всех порождающих объектов. Иерархии обычно начинаются с нескольких абстрактных классов. Каждый новый класс представляется как подкласс существующего класса (называемого его суперклассом). Он наследует данные и методы от классов, стоящих выше в иерархии. Только те данные и методы, которые являются новыми для этого класса, следует определить и реализовать.

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

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

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

Причины этих улучшений заключаются в следующем:

· объектная ориентация работает на более высоком уровне абстракции;

· жизненный цикл объектно-ориентированной программы не требует никаких «прыжков» между фазами;

· данные, на которых базируется система, имеют тенденцию быть более стабильными, чем функциональные возможности, которые эта система поддерживает;

· объектно-ориентированное программирование поощряет и поддерживает хорошие методы программирования;

· объектно-ориентированное проектирование и программирование поощряют многократное использование кода.