
- •Вопрос 1. Внешнее проектирование по: разработка требований, определение целей по, внешние спецификации проекта.
- •Вопрос 2. Процесс разработки.
- •Вопрос 3. Структура сложных систем. Существует пять признаков сложных систем
- •Вопрос 4 Составные части объектного подхода
- •Вопрос 5. Объектная модель предметной области
- •Вопрос 6. Природа объекта.
- •Вопрос 7. Отношение между объектами. Типы отношений.
- •Вопрос 8. Диаграммы вариантов использования, диагр. Потоков данных.
- •Вопрос 9. Диаграммы классов, отношения между классами
- •Вопрос 10. Диаграммы взаимодействия
- •Вопрос 12. Отношение между классами. Типы отношений.
Вопрос 12. Отношение между классами. Типы отношений.
Класс и объект тесно связаны Хотя объект - это конкретная сущность определенная но времени и пространстве То класс - определяет лишь абстракцию существенного в объекте (класс млекопитающее - объект бегемот )
Класс - это некое множество объектов имеющих общую структуру и общее повеление
Любой объект - это экземпляр класса Объекты, не связанные общностью нельзя объединит в класс Существуют сложные абстракции которые нельзя выразить классом (графический интерфейс база данных, система учета) даже вложенностью классов В таких системах классы выступают как компоненты А совокупность кластеры - категориями классов
Интерфейс и реализация
По своей природе, класс - это генеральный контракт между абстракцией и всеми ее компонентами
Идея контрактного программирования приводит к разграничению внешнего - интерфейса, и внутреннего - реализации Интерфейс объявление операций, других классов переменных констант исключительных ситуаций Реализация никому не интересна
Интерфейс класса можно разделить на три части открытую (public) - видимую всем клиентам защищенную (protected) видимую самому классу, его подклассам классам и друзьям (friends)
Закрытую {private) - видимую только самом) классу и его друзьям В различных языках предусматривается различная комбинация этих частей Состояние объекта задается в его классе через определение констант или переменных, помещаемые в его защищенной или закрытой части, например Displayltem
Жизненный цикл класса
Внутри объектов происходит взаимодействие разных операции (как в машине ее части) Снаружи виден только результат взаимодействия - поведение объекта
Языки поддерживают следующие виды отношений
ассоциация
наследование альтернатива -> делегирование своего поведения родственным объектам
Агрегация
Использование
Инстанцирование
Метакласс
Наиболее обшее и неопределенное отношение ассоциация
Наличие ассоциаций это значит проект находится на стадии уточнения
Рис 3.4 Ассоциация
Класс Product - это то. что мы продали в некоторой сделке, а класс Salt сама сделка, в которой было продано V товаров Ассоциация здесь один ко многим
Семантика.
Ассоциация - смысловая связь, по умолчанию она не имеет направление, подразумевает 2-х стороннюю связь Фиксируются на первой стадии разработки участники и их роли (мощность отношения)
Мощность. Мы имели ассоциацию "один ко многим", т.е. указали ее мощность (количество участников) существует три вида мощности
один-к-одному
один-ко-многим
многне-ко-многим
Наследование
Одиночное наследование когда класс повторяет структуру и поведение другого класса {одиночное) или других (множественное наследование) классов Наследуемый класс называется суперклассом(TelemetryDatd) для произвольного (подкласса) ElectricalData Здесь соблюдается иерархия общего - частного Наличие механизма наследование отличает языки объектно-ориентированные от объектных
Рис 3-5 Одиночное наследование
Такой тип иерархии характерен для семантических сетей которые используются для распознавания образцов и искусственного интеллекта, для организации баз знаний - это вопрос логической иерархии Самые специализированные классы называют конкретными классам, или листьями иерархического дерева Промежуточные (SensorData) - называются абстрактными Самый общий класс базовый Таких в системе бывает несколько У класса бывает обычно два вида клиентов
экземпляры.
подклассы
Полезно для них иметь разные интерфейсы Внешнее видимое поведение - это для клиентов - экземпляров, открытые служебные функции - это для клиентов подклассов
В C++ иерархия типов совпадает с иерархией классов. Но здесь большая опасность если переопределить суперкласс, то его потомки могут оказаться вне закона, с точки зрения типов Меняется его положение в иерархии наследования