Skip to content

ООП 10. Объектно ориентированное проектирование. Диаграмма класса. Структура класса. Диаграмма зависимостей. Диаграмма наследования.

Kozlitin Maxim edited this page Jun 14, 2023 · 3 revisions

Объектно-ориентированное проектирование

Объектно-ориентированное проектирование заключается в формировании диаграмм и структур классов, диаграммы зависимостей и наследования.

Недостаток документов, которые мы получили на этапе анализа:

  • Непригодны для написания кода (да, у нас уже много чего есть, даже алгоритмы, но мы, например, ничего не говорили о типах данных)

Ни одна из существующих нотаций не отражает всех возможностей технологии ООП. UML, например, слишком избыточна. В данном случае лучшим (но не идеальным) вариантом будет нотация Гради Буча. Несмотря на то, что она тоже избыточна, в ней надо построить всего 4 диаграммы. Данные для них мы собираем по всем диаграммам, которые мы получили на этапе анализа.

Диаграмма класса

Описывает внешнее представление данного класса.

image-2

  • Мб эта картинка лучше

image-3

Если прям очень хочется тут много картинок

Слева: принимаемые, возвращаемые, изменяемые параметры

Ромб – кидает исключительную ситуацию.

Пунктир – отсроченный (асинхронный) вызов метода

Палочка слева - метод с динамическим связыванием.

  • Картинки

Кидает исключительную ситуацию
Кидает исключительную ситуацию

Метод с динамическим связыванием метод с динамическим связыванием

Также надо определить начальные значения и варианты инициализации атрибутов.

ID здесь можно использовать по надобности, а можно и опускать.

Схема структуры класса

Задача: проследить потоки данных и доступ к данным конкретного класса. На этой диаграмме все строится вокруг данных объекта. Нас интересуют методы, которые используют данные извне.

Схема структуры класса конкретизирует внутреннее представление и структуру класса. Класс реализуется по слоям. По сравнению с прошлой диаграммой, у нас теперь есть не только публичные методы, но и приватные; доступ к нижним слоям напрямую снаружи недопустим, как и вызов публичного метода публичным методом(во второй лабе тассов закрывал на это глаза).

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

Четко выделяются слои методов: слой методов, вызываемых извне класса, - общедоступные, находятся выше. И слой скрытых методов, не вызываемых извне. Желательно, чтобы методы интерфейса не вызывали друг друга - это очень важно. Если в интерфейсных методах есть общая часть, мы выделяем ее в метод скрытого слоя.

Если метод обрабатывает исключение, помечаем его вертикальной линией в правой части.

Если метод получает или передает данные во внешний модуль - показываем поток данных из этого метода в перевернутый домик.

Пунктир - граница между public (сверху) и private (снизу) методами. Нотация не идеальна в том плане, что здесь, например, не понятно, что private, а что protected. Хотя вроде бы тут можно делать больше уровней…

Шестиугольник - архив данных.

image-4 image-5 image-6

Диаграмма наследования

Класс разбивается на методы и атрибуты. 

Диаграмма наследования – от базового класса подклассы. Внутри атрибуты и методы.

image-7

Базовое понятие должно быть абстрактным.

Если у базы нет атрибутов, то рассматриваем её как интерфейс (в C++ их нет).

Диаграмма зависимостей

Диаграмма зависимостей – строится диаграмма класса, только оставляем заголовок, а атрибуты перечисляем списком.

Одинарная стрелка - либо ассоциация классов (если стрелка от класса к классу), либо вызов одного метода другим (если стрелка от метода к методу).

Двойная стрелка - агрегация (жизненные циклы объектов связаны). image-8

Clone this wiki locally