Объектно-ориентированная методология разработки сложных систем.

Презентация:



Advertisements
Похожие презентации
Методология объектно- ориентированного программирования.
Advertisements

OOП Инна Исаева. Подпрограмма – это большая программа, разделённая на меньшие части. В программе одна из подпрограмм является главной. Её задача состоит.
1 Диаграммы реализации (implementation diagrams).
1 ИССЛЕДОВАНИЕ ВОЗМОЖНОСТЕЙ COM- ТЕХНОЛОГИИ ДЛЯ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ ПРОГРАММНЫХ ПРОДУКТОВ Component Object Model Министерство образования и науки.
Алгоритмический подход – главное алгоритм решения задачи ( в основном, используется для вычислительных задач ); Структурное программирование – декомпозиция,
Лекция 5 Способы конструирования программ. Основы доказательства правильности.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 7.
Разработка программного обеспечения при объектном подходе Объектно-ориентированный подход.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
4. Моделирование функциональных требований к системе.
В. Дихтяр ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ (для бакалавров) Российский университет дружбы народов Институт гостиничного бизнеса и туризма Раздел 1.Разработка.
Java, каф. ОСУ АВТФ1 Методология ООП В формулировке цели выполнения некоторого проекта (например, разработка ИС) участвуют предметы (объекты)
COM (Component Object Model) – модель многокомпонентных объектов.
Кафедра ОСУ, Java 2007 Слайд 1 Методология ООП В формулировке цели участвуют предметы (объекты) и понятия реального мира, имеющие отношение.
Раздел 3 Сетевые модели. Тема 3.1 Понятие сетевой модели. Архитектура сети определяет основные элементы сети, характеризует ее общую логическую организацию,
Архитектура операционных систем Семестр 2, Лекция 1.
Сравнительный анализ языков программирования Автор Родионов Михаил.
WORK WITH UML Универсальный язык моделирования (UML) Studybook for students Author Dudnik Oxana.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Транксрипт:

Объектно-ориентированная методология разработки сложных систем

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

Алгоритмическая декомпозиция - это способ решения проблемы с функциональной точки зрения, когда проблема разбивается на фундаментальные функциональные единицы или подсистемы. После этого каждая подсистема реализуется как набор связанных процедур, которые воздействуют на данные, не учитывая их взаимосвязей. Преодоление сложности системы Check sum Update file Get master areaGet formated update Put new master area ExpandGet valid card ReformatPut formated master Format output

Объектно-ориентированная декомпозиция - это способ решения проблемы с объектной точки зрения. Предметная область разбивается на совокупность автономных действующих объектов, которые взаимодействуют друг с другом, чтобы обеспечить требуемое поведение системы и моделируют объекты реального мира. Master file File of updates Master record Check sum Update to card Get, Put, create Update Get Reformat Is Valid Add Match Get formatted

Объектно-ориентированный анализ (ООА - object- oriented analysis) - методология, при которой требования к системе воспринимаются с точки зрения классов и объектов, выявленных в предметной области. Объектно-ориентированное проектирование (OOD - object-oriented design) - методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической и физической, статической и динамической моделей проектируемой системы. Объектно-ориентированное программирование (OOP - object-oriented programming) - методология програм- мирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования. Объектный подход

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

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

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

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

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

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

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

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

Агрегация – это отношение целого (агрегата) и части (атрибута), приводящие к иерархии объектов. Объект, являющий атрибутом другого объекта (агрегата), имеет связь со своим агрегатом. Через эту связь агрегат может посылать ему сообщения. Агрегация может означать физическое или концептуальное вхождение одного объекта в другой. Клиент Внешний компонент Внутренний компонент IX IZ IUnknown

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

Классы, как и объекты, не существуют изолированно. В каждой проблемной области абстракции взаимодействуют между собой различными способами. Отношения между классами означают, что между ними есть что-то общее или между ними существует семантическая связь. Известны три основных типа отношений между классами: 1. Отношение обобщение/специализация (общее и частное), известное как is-a; Белая роза – цветок. Красная роза – цветок. Гвоздика – цветок. 2. Отношение целое/часть, известное как part-of. Лепесток розы – часть цветка 3. Семантические, смысловые отношения, известные как ассоциации. Пчела собирает нектар с розы

Ассоциация Наследование Агрегация Использование Инстанцирование Метакласс Виды отношений

Ассоциация Ассоциация – смысловая связь, не имеет направления, не объясняет, как классы общаются друг с другом. Типы ассоциаций: Один к одному 1:1 Один ко многим 1: N Многие к одному N : 1 Многие ко многим N : N

Наследование Наследование – это такое отношение между классами, когда один класс повторяет структуру и поведение другого класса (одиночное наследование) или многих классов (множественное наследование).

Агрегация Целое Часть Агрегация – отношение целого и его части. Проявляется в виде физического включения одного класса в другой

Использование Использование – равноправная связь между объектами классов, например, если объект-клиент пользуется услугами объекта-сервера.

Инстанцирование Инстанцирование – использование параметров шаблона обобщенного или параметризованного класса для создания новых классов. Объекты получены из одного параметризирован ного класса Класс строится по шаблону из класса

Метакласс – это класс, экземпляры которого сами являются классами. Используя метаклассы, можно породить новые экземпляры класса.

Компонент АКомпонент С Компонент DКомпонент В Понятие компонентов Разбиение монолитного приложения на компоненты Компонент АКомпонент С Компонент ВНовый, улучшенный компонент D Замена компонента D на новую, улучшенную версию.

Для того, чтобы разбить монолитное приложение на компоненты, необходим инструмент. Инструмент, который мы будем использовать, называется СОМ. СОМ - модель компонентных объектов (Component Object Model) - это спецификация метода создания компонентов и построения из них приложений. Практически все продаваемые сегодня приложения Microsoft используют СОМ. Технология ActiveX этой фирмы построена на основе компонентов СОМ, которые объединяются в приложения, способные не только работать, но и с течением времени расти и развиваться.

Способность приложения эволюционировать с течением времени Удобство и гибкость при модернизации существующих приложений Адаптация приложений к нуждам пользователя. Обеспечение быстрой разработки приложений путем выбора компонентов из существующих библиотек и формирование приложения в результате его сборки из компонентов. Разработка распределенных приложений типа клиент-сервер.. Динамическая компоновка приложений – возможность замены компонентов во время работы приложения. Преимущества использования компонентов

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

1.Компоненты СОМ состоят из исполняемого кода, распространяемого в виде динамически компонуемых библиотек (DLL) или ЕХЕ-файлов Win32. 2.Компоненты, написанные в соответствии со стандартом СОМ, удовлетворяют всем требованиям компонентной архитектуры. 3.Компоненты СОМ подключаются друг к другу динамически. 4.Компоненты СОМ полностью независимы от языка программирования. Они могут быть разработаны с помощью практически любого процедурного языка, включая Ada, С++, Java, Modula-3, Pascal и т.д. Характеристика компонентов СОМ

5. Компоненты СОМ могут распространяться в двоичной форме. 6. Компоненты СОМ можно модернизировать, не нарушая работы старых клиентов.. 7. Компоненты СОМ являются прозрачно перемещаемыми. Компонент на удаленной системе рассматривается так же, как компонент на локальном компьютере.

СОМ - это объектно-ориентированная, основанная на интерфейсах, программная архитектура; СОМ - это набор функциональных возможностей, доступных во время выполнения приложения. Изначально СОМ является архитектурой программирования, которая позволяет получить легко масштабируемые, переносимые и доступные бинарные объекты СОМ - это также набор сервисных процедур для времени выполнения. СОМ предоставляет богатый API, называемый библиотекой СОМ. Многочисленные вспомогательные методы, функции и типы данных, определяемые библиотекой, создают окружение СОМ. Библиотека СОМ работает с любым СОМ- совместимым объектом единым (полиморфным) образом. В дополнение к библиотеке менеджер управления сервисом (Service Control Manager - SCM) и реестр системы обеспечивают сервис, доступный во время выполнения программы. Характеристика СОМ

ActiveX - это собирательное имя для всех технологий на основе СОМ. Когда-то термином ActiveX называли только Web-специфичные СОМ-технологии, однако сегодня большинство компонентов СОМ имеет в своем названии ActiveX: элементы управления ActiveX, документы ActiveX, серверы ActiveX и т. д.

Процесс. В Win32 процесс - это часть памяти, содержащая выполняемое приложение и все необходимые системные ресурсы или внешние исполняемые файлы, требуемые приложением. Клиент. В модели СОМ клиент (пользователь объекта) - это любой фрагмент кода, использующий СОМ-объект. Сервер. В модели СОМ сервер - это пакет исполняемых файлов (DLL или ЕХЕ), содержащих любое количество объектов СОМ. Обычно один сервер может быть домом для многих связанных СОМ-объектов, каждый из которых может поддерживать любое количество интерфейсов. Ключевые понятия СОМ

Клиент Пользовательс кий сервис Сервер &Клиент Промежуточная СОМ DLL Сервер Конечная СОМ DLL Связь между клиентом и сервером

In-proc серверы загружаются в ту же область памяти (процесс), что и клиент, которого они обслуживают. Преимущество связи внутри процесса - скорость. Клиенты получают функциональные возможности внутрипроцессного сервера так же быстро, как выполняются вызовы локальных функций, поскольку клиент и объект общаются напрямую через указатели интерфейса. Недостаток in-proc-сервера - его низкая устойчивость по отношению к ошибкам. Если в сервере есть ошибка, и эта ошибка проявляется, то вылетает весь процесс вместе с клиентом. Другая потенциальная проблема таких серверов - они всегда принимают контекст безопасности клиента, в который они загружаются. Связь внутри процесса (in-process)

Такая связь называется локальной. Клиент и сервер находятся на одной физической машине, но загружены в разные области памяти (процессы), каждый со своим собственным контекстом безопасности. Достоинство - высокий уровень устойчивости. Если в сервере возникает ошибка, приводящая к завершению серверного процесса, клиент продолжает работу. Если он к тому же располагает эффективными средствами обработки ошибок, то может жить спокойно. Недостаток локального сервера - скорость: информация от одного процесса к другому должна быть запакована, передана и распакована на границе процессов. Хотя СОМ берет весь этот сервис на себя (используя технику под названием "универсальный маршалинг" - universal marshaling), тем не менее время потребляется. Связь вне процесса (out-of-process)

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

Для клиента компонент СОМ представляет собой набор интерфейсов, т.к. детали реализации компонента скрыты от пользователя. Клиент взаимодействует с компонентом через интерфейс. Компонент можно удалить или заменить другим, если новый компонент поддерживает те же интерфейсы, что и старый, то приложение будет работать без изменения. Таким образом, приложение определяют интерфейсы между компонентами.

Аn object supports three interfaces A, B, and C. Обозначения интерфейсов и объектов

Interfaces extend towards the clients connected to them.

Two applications may connect to each others objects, in which case they extend their interfaces towards each other.

Клиент (ехе) Одиночный процесс на одном компьютере Сервер (DLL) COM Object A B C Связь внутри процесса

Локальная связь вне процесса Process A Computer AProcess B Computer A Client EXE Прокси- сервер Заглушка COM Object Server EXE LRPC LRPC – упрощенный удаленный вызов процедуры – протокол связи, используемый во время выполнения программы Клиент и сервер не коммутируют напрямую, а передают данные между заглушками и прокси-серверами СОМ объект для клиента

Локальная связь вне процесса – удаленный сервер Computer AComputer В Client EXE Прокси- сервер Заглушка COM Object Server EXE RPC RPC – удаленный вызов процедур – протокол связи, используемый во время выполнения программы

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

Реализация СОМ-интерфейса на С++ class IX // Первый интерфейс { public: virtual void Fx1() = 0; //чисто виртуальные функции virtual void Fx2() = 0; } ; class IY // Второй интерфейс { public: virtual void Fy1() = 0; virtual void Fy2() = 0; } ; class CA : public IX, public IY // Компонент CA { public: virtual void Fx1() {cout

// Iface.cpp. To compile, use: cl Iface.cpp #include #include // определить интерфейсы void trace(const char* pMsg) //функция вывода run-time сообщений {cout

void main() // Клиент { trace("Client: Create an instance of the component."); CA* pA = new CA ; //получить указатель pA на класс СА IX* pIX = pA ; // получить указатель IX через указатель на класс СА trace("Client: Use the IX interface."); //сообщение pIX->Fx1() ; //Вызов функций интерфейса IX pIX->Fx2() ; IY* pIY = pA ;//Получить указатель IY через указатель на класс СА trace("Client: Use the IY interface.") ; pIY->Fy1() ; //Вызов функций интерфейса IY pIY->Fy2() ; trace("Client: Delete the component.") ; delete pA ; //удаление компонента }

Таблица виртуальных функций 1.Определение чисто абстрактного базового класса задает структуру некоторого блока памяти, т.е. формат данных в памяти. 2. Память для этой структуры не выделяется до тех пор, пока абстрактный класс не будет реализован в производном классе. 3. Когда производный класс наследует абстрактному базовому классу, он наследует и эту структуру

Блок памяти, определяемый чисто абстрактным базовым классом, состоит из двух частей: таблицы виртуальных функций (virtual function table) указателя на эту таблицу. Таблица виртуальных функций, или vtbl - это массив указателей на реализации виртуальных функций. Элементы vtbl содержат адреса функций FxХ, реализованных в производном классе. Указатель на абстрактный базовый класс указывает на указатель vtbl, который, естественно, указывает на таблицу vtbl. Указатель на vtbl &FX1 &FX2 &FX3 &FX4 &FX1 &FX2 &FX3 &FX4 pIX

Рассмотрим код компонента сlass CA: public IX { public: // Реализация интерфейса IX virtual void _stdcallFx1(){ cout

. Данные экземпляра потенциально доступны через указатель класса СА. Однако обычно клиент не знает, какие именно данные там хранятся, и потому не может обращаться к ним. Данные, специфичные для экземпляра, хранятся вместе с указателем vtbl pA Указатель vtbl &m_Fx2 Указатель vtbl &m_Fx2 &Fx1 &Fx2 &Fx1 &Fx2 Fx1 Fx2 Fx1 Fx2 Таблица виртуальных функций СА &Fx4 &Fx3 Fx1 Fx3 &m_Fx4 &m_Fx3 В СОМ Вы можете работать с компонентом только через функции, и никогда - через переменные.

Указатель vtbl - это место для хранения данных экземпляра. Он также позволяет разным экземплярам одного класса использовать одну и ту же vtbl. Если cоздать два экземпляра СА, то получится два отдельных набора данных экземпляра. Однако эти экземпляры могут совместно использовать одну и ту же vtbl и одну и ту же реализацию. Например, предположим, что мы создали два объекта СА: void main () { CA* pA1=new CA(1,5); //создать первый экземпляр СА CA* pA2=new CA(2,75); //создать второй экземпляр СА ……. } Множественные экземпляры

pA1 pA2 pA1 pA2 Указатель vtbl &m_Fx2 &m_Fx3 &m_Fx4 Указатель vtbl &m_Fx2 &m_Fx3 &m_Fx4 &Fx1 &Fx2 &Fx3 &Fx4 &Fx1 &Fx2 &Fx3 &Fx4 Fx1 Fx2 Fx3 Fx1 Fx2 Fx3 Fx1 Указатель vtbl &m_Fx2 &m_Fx3 &m_Fx4 Указатель vtbl &m_Fx2 &m_Fx3 &m_Fx4 Таблица виртуальных функций СА Клиент