Объектно-ориентированное моделирование
Разработка программного обеспечения связана с изготовлением высококачественных систем при умеренных затратах на выполнение работ, а следовательно, и умеренной стоимости. При разработке системповышенной сложности все попытки решить проблемукачествапрограммного обеспечения с помощью функциональных методов разработки, языков программирования сверхвысокого уровня(Very High Level Language, VHLL), CASE-средств, технологий прототипирования, систем баз данных и генераторов кода не приводили к успеху. Толчком к переходу на объектно-ориентированные методы послужило то, что разработка многих сложных сиcтем функциональными методами либо не завершались в срок, либо требовали резкого увеличения бюджета, либо не использовались, потому что в них содержались существенные ошибки. Так отчеты Standish Group (1995—1997гг.) подтвердили, что почти 59% проектов США были аннулированы или выходили за рамки выделенных на них ассигнований и сроков разработки. Интерес к объектно-ориентированному моделированиюсущественно возрос в связи с тем, что объектные модели коренным образом изменили традиционную функциональную архитектуру программных систем. На основе таких моделей строится архитектура управляемая моделями (Model-Driven Architecture, MDA, состоящая из взаимосвязанных определёнными отношениями и строго типизированных групп (классов) программных объектов, моделирующих динамические сущности [14] реального или идеального мира. Подчеркнём, что имитационное и функциональное моделирование ориентированы на моделирование процессов функционирования информационных систем. Для полномасштабного моделирования сложных информационных систем, таких как АСУ/КИС, этого явно недостаточно. Модели таких систем должны быть комплексными, (охватывающими достаточно широкий набор их архитектурных компонентов – информационных, программных, инфраструктурных, подсистем управления и т.д.) и объектно-ориентированными, в основе которых лежат концептуальные модели предметных областей таких систем. Современные инструментальные средства разработки объектно-ориентированных систем характеризуются следующими свойствами: · Поддержка генерации кода и обратного проектирования (т.е. восстановление визуальной модели по программному коду) сразу для нескольких языков, включая: Object Pascal, Visual Basic, C++, C#, Java, PowerBuilder, CORBA Interface Definition Language (IDL), а также языков определения данных (Data Definition Languages) для большинства СУБД. · Поддержка визуального объектно-ориентированного моделирования и полная совместимость с языком UML (Unified Modeling Language), который начиная с 1997 года, определён как стандарт для графического описания динамических моделей. · Ориентация на проектировщиков информационных систем, менеджеров и программистов. Объектно-ориентированное моделирование обеспечивает следующие преимущества: · обеспечивает возможность повторного использования объектов и удобный способ их изменения; · помогает справиться со сложными системами благодаря делению их на различные объекты; · упрощает изменение моделей, поскольку изменения в объекте-предке отображаются в объектах-потомках; · предоставляет возможность нескольким программистам работать над одним большим проектом. · Существенно облегчает разработку, отладку, сопровождение и модернизацию сложных программных систем. 7.1. Принципы и методология объектно-ориентированного Начиная с 70-80-ых годов прошлого века развитие аппаратных средств существенно опережало развитие систем и средств программирования. Чтобы выправить положение, были предложены различные подходы к увеличению производительности труда программиста. Среди этих попыток выделяется такое популярное направление, как объектно-ориентированный подход (ООП) к конструированию и кодированию программ. Особую роль в популярности этого подхода сыграло как его тесная связь с графическими интерфейсами пользователя, так и включение элементов этого подхода в реализации объектно-ориентированных языков программирования, таких как C++, C#, Java, Object Pascal и др. Функциональные (структурные) технологии моделирования информационных систем характеризуются искусственным разделением (часто неоптимальным) системы на подсистемы, а также слабой взаимосвязью процессов и данных. В отличие от них, объектные технологии, ориентированные на тесную взаимосвязь процессов и данных, позволяют создавать более надежные, легко реализуемые и устойчивыми к изменениям программные системы. Кроме того, объектная философия моделирования в большей степени соответствует общим концепциям поведения систем реального мира. При модификации системы объектный подход позволяет легко включать в систему новые объекты и исключать устаревшие без существенного изменения ее структуры и жизнеспособности. Использование построенной модели при модификациях системы дает возможность устранить нежелательные последствия изменений, поскольку они не ломают устоявшейся структуры системы, а только слегка изменяют её в нужном направлении. OOП базируется на пяти фундаментальных понятиях: объект, класс, инкапсуляция, наследование и изоморфизм, [13]. Объектом в ООП называют программную модель некоторого реального или идеального (прототипного) объекта внешнего мира. Описание такого объекта в общем случае может включать ряд параметров (атрибутов), моделирующих состояние прототипного объекта и набор функций, предназначенных для обработки этих атрибутов (их в ООП называют методами) с целью их изменения. Такая структура программного объекта позволяет моделировать процессы функционирования (поведения)прототипных объектов, т.е. процессы, изменяющие их состояние во времени. ООП, таким образом, позволяет моделировать динамические объекты и системы. Классом называют набор объектов с одинаковыми атрибутами и методами (поведением), а объекты-члены этого набора – экземплярами класса. Класс, таким образом, определяет тип своих объектов. В соответствии с принципами строгой типизации, в языках объектно-ориентированного программирования определение класса отделяется от определения его экземпляров (объектов). Инкапсуляция – это концентрация описаний атрибутов и методов всех однотипных объектов внутри описания соответствующего класса. При этом принимаются специальные меры по защите экземпляров класса от непреднамеренного изменения или разрушения в моделирующей программе. Инкапсуляция, таким образом, позволяет: · резко сократить объём основной программы за счёт однократного описания определяемых в программе объектов внутри описания соответствующего класса; описания классов обычно выносится из тела основной программы, и могут храниться в отдельных файлах на дисковых накопителях, поскольку они используются только на этапе компиляции программы; · обеспечит защиту объектов непреднамеренного изменения или удаления. Наследование. Объекты реального мира обычно связаны друг с другом различными видами отношений. Особым видом отношений является отношение иерархического подчинения «родитель-потомок». Основным свойством этого отношения является наследование потомком характеристик и поведения своего родителя. Реализация этого типа отношений является обязательным требованием при разработке языков объектно-ориентированного программирования. В контексте этих языков принцип наследования формулируется следующим образом: объект-потомок наследует все атрибуты и методы объектов родительского класса. Это означает, что в определении класса потомков атрибуты и методы родительского класса повторять не нужно – они действуют «по умолчанию». Потомок, однако, никогда не является точной и полной копией своих родителей: у него всегда проявляются какие-то индивидуальные свойства и поведение. Поэтому, в определении класса потомков всегда добавляются свои собственные атрибуты и методы, отличающиеся от родительских. Кроме того, состояние объекта-потомка можно менять не только вызовом его собственных, но и родительских методов. Полиморфизм. Полиморфизм подразумевает, что различные типы объектов, объединенные общим происхождением, могут иметь методы с одинаковыми названиями (именами), но разной реализацией (т.е. с разными алгоритмами обработки данных), так что при их активизации поведение разных объектов будет различным. Следует отметить два момента: 1. ООП не является отрицанием или противопоставлением структурному подходу. Его правильнее представлять как расширение структурного подхода, позволяющее снизить сложность задачи и подойти к созданию таких систем, поведение которых невозможно представить в виде исчерпывающего набора всех возможных ситуаций и разветвлений алгоритма. Сегодня теоретически обоснована и практически доказана возможность создания на основе ООП проектов высокой степени сложности, включающих миллионы строк кода. Но на характер мышления и дисциплину проектирования новая методология, безусловно, накладывает свой отпечаток, особенно на первых этапах использования ООП. 2. Система, реализующая такие принципы построения, предъявляет более жесткие, чем при структурном подходе, требования к производительности вычислительной системы и СУБД. Объектно-ориентированная методология (ООМ). ООМ ориентирована, прежде всего, на создание больших сложных систем, коллективную их разработку, последующее активное сопровождение при эксплуатации и регулярные модификации (реижиниринг), [14]. ООМ включает следующие части: · объектно-ориентированный анализ (OOA),
· объектно-ориентированное программирование (OOР). ООА - методология анализа предметных областей реального или идеального мира на основе понятий класса (как типа объектов) и объекта (как экземпляра класса). Такой анализ нацелен на понимание и объяснение того, какие сущности образуют соответствующую предметную область и как они взаимодействуют между собой. Рассматривая реальную задачу, аналитик разбивает ее на некоторое число предметных областей. Каждая предметная область ‑ мир, наделенный объектами. В предметной области выделяются классы объектов, которые, если это необходимо, разбиваются на подклассы. Каждый класс и его подкласс анализируются в три этапа: информационное моделирование, моделирование состояний, моделирование процессов. В дальнейшем, модели OOA используются для проектировании объектно-ориентированных программных систем. OOD ‑ это методология проектирования, соединяющая в себе процесс объектной декомпозиции, опирающийся на выделение классов и объектов, и приемы представления моделей, отражающих логическую и физическую структуру системы. Под логической структурой понимают структуру классов и объектов, а под физической ‑ структуру моделей и процессов. OOP ‑ это технологии, использующие для реализации OOD-проектов языки объектно-ориентированные программирования (ООЯП). Подробности этих технолгий будут описаны в разд. 7.5.
|