Please enable JavaScript.
Coggle requires JavaScript to display documents.
ООП. базовые понятия и принципы (объектная модель (иерархия (структура…
ООП. базовые понятия и принципы
программирование
программа состоит из объектов (экземпляров) какого-то более абстрактного класса. Между классами есть иерархия наследования ("is a").
проектирование
объектно-ориентированная декомпозиция, 2 создание статической и динамической мделей программы
объектная модель
иерархия
структура классов(общее/частное, "is a")
одиночное наследование
: один класс наследует структуру другого одного класса
множественное наследование
: один класс наследует свойства нескольких классов
проблема №1: может появиться повторное наследование (несколько суперклассов наследуют свойства общего супер(мега:))класса)
проблема №2: конфликты имён между классами (если в двух или более классов поля с одинаковыми именами)
структура объектов классов (целое/часть)
агрегация
: объединяет логически связанные структуры("целое-часть"). Отношения классов можно назвать агрегационными, если между их объектами есть связь по принципу "целое-часть", то есть объект класса1 - часть объекта класса2 или наоборот.
Включение по значению. Экземпляр одного класса не существует отдельно от экземпляра другого класса(который логически связан с первым классом). Они создаются одновременно.
Включение по ссылке (композиция). Два класса по-прежнему логически связаны, но их экземпляры не зависят друг от друга и могут создаваться и удаляться отдельно.
зависимости
ассоциация
модульность: делим систему на модули, которые слабо между собой связаны (низкочастотная динамика)
контроль типов (опционально): набор правил для использования объектов, которые (правила) не допускают их взаимную замену. Например, из строки нельзя вычесть число.
сильный/слабый
статический/динамический
инкапсуляция: позволяет ограничить одну абстракцию от другой (как бы упаковывает их в разные оболочки) и если нужно - не даёт доступа одному объекту(компоненту) к другому например.
параллелизм(опционально): отличает активные объекты от пассивных
абстракция, абстрагирование: выделить существенные черты некоторого объекта, которые отличают его от других.
принцип наименьшего удивления: поведение объект не должно порождать сюрпризов, его (поведение) можно предвидеть исходя из его абстрактного описания
персистентность: способность объекта преодолевать временные/пространственные рамки
классы
- абстракция существенных свойств объекта
операции
модификатор: меняет состояние объекта
селектор: имеет доступ к состоянию объекта, но не меняет его
итератор: доступ ко всем частям объекта в строго определённом порядке
конструктор == initializer
деструктор
интерфейс класса
открытый раздел(public): объявления доступны всем клиентам
защищённый раздел(protected): объявления доступны самом классу и его подклассам
закрытый раздел(private): объявления(то есть поля класса) доступны только самому классу
пакет(package): объявления доступны классам, которые входят в один и тот же пакет
объекты (== экземпляр)
состояние == статические свойства + динамические значения этих свойств
поведение == сообщения <---изменение состояния <---действия и реакции объекта
индивидуальность
объект-контроллер (активный о. controller): он может осуществлять операции над другими объектами, но сам никому не "подчиняется"
сервер(server): подвергается воздействию других о., сам не выполняет операции надодругими.
агент(proxy): и контроллер, и сервер
Задачи программиста: идентификация классов (как правило совпадает со словарём предметной области)
Классы и объекты - это основные абстракции (
key abstractions
)
Задачи программиста: Создание таких структур, в которых объекты классов взаимодействуют друг с другом и выдают нужный результат.
эти структуры - это механизмы реализации (
mechanisms of the implementation
)
Классы (и их объекты) должны соответствовать некоторым свойствам
Связанность(coupling): чем слабее связи между модулями системы, тем система проще и наоборот. Лучше делать связи слабыми, тогда каждый модуль становится более универсальным
Связность(cohesion): глубина взаимодействия между элементами одного модуля(класса или объекта). Лучше всего - функциональная связность: все элементы взаимодействую и обеспечивают конкретное и нужное поведение системы
Достаточность(sufficiency): у системы должно быть ровно такое количество свойств и функций, которое обеспечивают её логичное и поведение, без провалов и ошибок. Например, если у класса есть метод "удалить что-либо", то должен быть метод и "создать что-либо"
Полнота(completeness). НЕ ПУТАТЬ С ДОСТАТОЧНОСТЬЮ. Достаточность - это о минимальном интерфейсе. А полнота - это о ВСЕХ существенных свойствах абстракции, при этом если убрать каки-то из свойств, то общая логика не нарушится. Полнота - это более субъективная, чем достаточность, характеристика, и иногда она может приводить к избыточности.
Элементарность(primitiveness). Элементарные операции - такие, которым необходим доступ к внутреннему представлению абстракции.
Лучше, когда внутри класса только элементарные операции(методы), каждая из которых описывает только определённый аспект поведения. Это
мелкомодульные операции (fine-grained)
.