-
Notifications
You must be signed in to change notification settings - Fork 0
ООП 10. Объектно ориентированное проектирование. Диаграмма класса. Структура класса. Диаграмма зависимостей. Диаграмма наследования.
Объектно-ориентированное проектирование заключается в формировании диаграмм и структур классов, диаграммы зависимостей и наследования.
Недостаток документов, которые мы получили на этапе анализа:
- Непригодны для написания кода (да, у нас уже много чего есть, даже алгоритмы, но мы, например, ничего не говорили о типах данных)
Ни одна из существующих нотаций не отражает всех возможностей технологии ООП. UML, например, слишком избыточна. В данном случае лучшим (но не идеальным) вариантом будет нотация Гради Буча. Несмотря на то, что она тоже избыточна, в ней надо построить всего 4 диаграммы. Данные для них мы собираем по всем диаграммам, которые мы получили на этапе анализа.
Описывает внешнее представление данного класса.
- Мб эта картинка лучше
Если прям очень хочется тут много картинок
Слева: принимаемые, возвращаемые, изменяемые параметры
Ромб – кидает исключительную ситуацию.
Пунктир – отсроченный (асинхронный) вызов метода
Палочка слева - метод с динамическим связыванием.
- Картинки
Кидает исключительную ситуацию
Метод с динамическим связыванием
Также надо определить начальные значения и варианты инициализации атрибутов.
ID здесь можно использовать по надобности, а можно и опускать.
Задача: проследить потоки данных и доступ к данным конкретного класса. На этой диаграмме все строится вокруг данных объекта. Нас интересуют методы, которые используют данные извне.
Схема структуры класса конкретизирует внутреннее представление и структуру класса. Класс реализуется по слоям. По сравнению с прошлой диаграммой, у нас теперь есть не только публичные методы, но и приватные; доступ к нижним слоям напрямую снаружи недопустим, как и вызов публичного метода публичным методом(во второй лабе тассов закрывал на это глаза).
На каждой линии показываем, какие данные получают методы, и какие - возвращают. Данные показываем гробиками. От гробика стрелочка вверх - данные возвращаемые, вниз - принимаемые методом. И вверх, и вниз - изменяемые параметры.
Четко выделяются слои методов: слой методов, вызываемых извне класса, - общедоступные, находятся выше. И слой скрытых методов, не вызываемых извне. Желательно, чтобы методы интерфейса не вызывали друг друга - это очень важно. Если в интерфейсных методах есть общая часть, мы выделяем ее в метод скрытого слоя.
Если метод обрабатывает исключение, помечаем его вертикальной линией в правой части.
Если метод получает или передает данные во внешний модуль - показываем поток данных из этого метода в перевернутый домик.
Пунктир - граница между public (сверху) и private (снизу) методами. Нотация не идеальна в том плане, что здесь, например, не понятно, что private, а что protected. Хотя вроде бы тут можно делать больше уровней…
Шестиугольник - архив данных.
Класс разбивается на методы и атрибуты.
Диаграмма наследования – от базового класса подклассы. Внутри атрибуты и методы.
Базовое понятие должно быть абстрактным.
Если у базы нет атрибутов, то рассматриваем её как интерфейс (в C++ их нет).
Диаграмма зависимостей – строится диаграмма класса, только оставляем заголовок, а атрибуты перечисляем списком.
Одинарная стрелка - либо ассоциация классов (если стрелка от класса к классу), либо вызов одного метода другим (если стрелка от метода к методу).
Двойная стрелка - агрегация (жизненные циклы объектов связаны).