Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по ООП.doc
Скачиваний:
31
Добавлен:
25.09.2019
Размер:
1.04 Mб
Скачать

100. Диаграмма классов (class diagram).

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

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

Каждый класс должен иметь имя; если имя слишком длинно, его можно сократить или увеличить сам значок на диаграмме. Имя каждого класса должно быть уникально в содержащем его проекте.

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

  1. ассоциации (например, менеджер может вести несколько проектов),

  2. подтипы (работник является разновидностью личности).

Существуют разные точки зрения на построение диаграмм классов в зависимости от целей их применения:

  1. Концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;

  2. Точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;

  3. Точка зрения реализации — диаграмма классов содержит классы, используемые непосредственно в программном коде (при использовании объектно-ориентированных языков программирования).

102. Компонентно-ориентированное проектирование

Представляет собой множество методов проектирования, базирующихся на концепции объектов. Данная область активно эволюционирует с середины 80-х годов, основываясь на понятиях объекта (сущности), метода (действия) и атрибута (характеристики). Здесь главную роль играют полиморфизм и инкапсуляция, в то время, как в компонентно-ориентированном подходе большее значение придается мета-информации, например, с применением технологии отражения (reflection). Хотя корни объектно-ориентированного проектирования лежат в абстракции данных (к которым добавлены поведенческие характеристики), так называемый responsibility-driven design или проектирование на основе <функциональной> ответственности по SWEBOK* может рассматриваться как альтернатива объектно-ориентированному проектированию.

Достоинства компонентно-ориентированной модели:

1) уменьшает на 30% время разработки программного продукта;

2) уменьшает стоимость программной разработки до 70%;

3) увеличивает в полтора раза производительность разработки.

  1. Объектно-ориентированное проектирование на основе иерархии классов.

С помощью наследования можно определить взаимосвязи между независимыми классами запросов. Для этого мы вводим в рассмотрение абстрактный класс Query, который будет служить для них базовым (соответственно сами эти классы будут считаться производными). Абстрактный класс можно представить себе как неполный, который становится более или менее завершенным, когда из него порождаются производные классы, - в нашем случае AndQuery, OrQuery, NotQuery и NameQuery.

В нашем абстрактном классе Query определены данные и функции-члены, общие для всех четырех типов запроса. При порождении из Query производного класса, скажем AndQuery, мы выделяем уникальные характеристики каждого вида запроса. К примеру, NameQuery - это специальный вид Query, в котором операндом всегда является строка. Мы будем называть NameQuery производным и говорить, что Query является его базовым классом. (То же самое относится и к классам, представляющим другие типы запросов.) Производный класс наследует данные и функции-члены базового и может обращаться к ним непосредственно, как к собственным членам.

Основное преимущество иерархии наследования в том, что мы программируем открытый интерфейс абстрактного базового класса, а не отдельных производных от него специализированных типов, что позволяет защитить наш код от последующих изменений иерархии. Например, мы определяем eval() как открытую виртуальную функцию абстрактного базового класса Query. Пользовательский код, записанный в виде:

_rop->eval();

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

Когда мы говорим о полиморфизме в языке C++, то имеем в виду главным образом способность указателя или ссылки на базовый класс адресовать любой из производных от него.

94. Системы визуального программирования на С++

Библиотека Визуальных Компонент позволяет программистам визуально создавать программные приложения, не прибегая более к кодированию классов "вручную", или кодированию в рамках стандартных библиотек MFC (Microsoft Foundation Class), или OWL (Object Windows Library).

Программист создает законченное приложение посредством интерактивного взаимодействия с интегрированной визуальной средой C++Builder, используя компоненты VCL для создания интерфейса программы с пользователем и с другими управляющими элементами: обслуживания баз данных, контролируемого ввода параметров и т.д. Характерная для C++Builder методика визуального стиля разработки программного обеспечения не применяется множеством других систем программирования.

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

Любая компонента может находиться во владении (ownership) других компонент, но не все компоненты могут являться владельцами. Свойство компоненты Owner (Владелец) содержит ссылку на компоненту, которая ею владеет. Рис. 1. показывает иерархию владения некоторой формы.

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

Рис. 1. Пример иерархии владения.

Определение класса в языке C++ содержит инкапсуляцию членов данных и методов, оперирующих с данными и определяющих поведение объекта. Эта концепция всех систем ООП принята в VCL.

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

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

C++Builder использует ключевое слово _property для идентификации свойств. Синтаксис описания свойства имеет вид:

property <тип свойства> <имя свойства> = {<список атрибутов>} ;

где список атрибутов содержит перечисление следующих атрибутов свойства:

write = < член данных или метод записи >;

read = < член данных или метод чтения >;

default = < булева константа, управляющая сохранением значения>;

stored = < булева константа или функция, сохраняющая значение >.

95.Объектно-ориентированный интерфейс на С++ для среды Windows.

На текущий момент имеется несколько развитых языков программирования, позволяющих создавать полноценные программы, предназначенные для работы в среде Windows NT, но основными конкурирующими платформами стали Delphi и C++. В последнее время мы стали свидетелями прогресса в области программирования: появились программные продукты, реализующие концепцию быстрой графической разработки программ (rapid application development - RAD). Примерами таких сред программирования для C++ могут являться Optima++ фирмы Powersoft и C++Builder фирмы Borland[10].

C++ Builder для Windows 95 и Windows NT – выпущенное в 1997г. компанией Borland International новое средство быстрой разработки корпоративных информационных систем. Это средство сочетает в себе удобства визуальной среды разработки, объектно-ориентированный подход, разнообразные возможности повторного использования кода, открытую архитектуру и высокопроизводительный компилятор языка С++[11].

Программирование в основном сводится к проектированию форм из элементов графической библиотеки компонентов (Visual Component Library). Разместив компоненты, программист устанавливает их свойства и “привязывает” программные фрагменты к определенным событиям.

Библиотека Visual Component Library содержит более ста компонентов. Помимо стандартных объектов пользовательского интерфейса Microsoft Windows имеются компоненты для: наиболее употребительных элементов управления Windows 95; элементов управления, связанных с базами данных; объектов баз данных, например, таблиц и транзакций; объектов для составления отчетов; компонентов Internet. Реализована и совместимость с элементами ActiveX.

В С++ Builder применена технология инкрементного построения проекта, впервые реализованная в Delphi. Проект может быть создан в фоновом режиме, параллельно с редактированием исходного текста, что значительно сокращает время, затрачиваемое на его разработку.

Отладчик С++ Builder полностью интегрирован в пакет. При исполнении программы разработчик имеет доступ к окнам контроля значений переменных, почкам прерываний, потокам, регистрам и стекам вызовов. В любой момент программу можно приостановить, внести изменения и частично перестроить проект. Конструктор форм и другие инструментальные средства продолжают функционировать во время выполнения программы, что позволяет в ходе отладки добавлять новые события[10].

Вышеперечисленные, а также многие другие достоинства пакета Borland C++ Builder, делают его очень удобной средой для разработки программ под Windows 95 и Windows NT.