Состояние поддерживаемое интерфейсом класса

#OOP #OOD

Нелегальное состояние

Если интерфейс позволяет изменять внутренне состояние на нелегальное то это приводит к проблемам. Нелегальное состояние подразумевает выход за пределы пространства-состояния и не соблюдения инвариантов. Например открытие внутренних переменных класса для модификации без проверки инвариантов. Например для класса Прямоугольник возможность изменения координат каждой из его точек отдельно и без проверки инвариантов, может привести к тому, прямоугольник превратится в трапецию или другую фигуру отличную от прямоугольника.

Незавершенное(недостижимое полное) состояние

Такой интерфейс при котором некоторые возможные корректные состояния объекта становятся недостижимыми. Например такой интерфейс класса Прямоугольник, при котором создание квадратного прямоугольника невозможно.

Несоответствующее состояние

Интерфейс который открывает состояние несоответствующее абстракции. Например класс STACK реализованный на массиве с указателем. Метод pop извлекает элемент находящийся на вершине стека, внутренняя реализация при этом использует указатель на извлекаемый элемент. Если внешний интерфейс предоставляет указатель, то таким образом открывается состояние которое не принадлежит абстракции стека. Более того это позволяет указывать некорректный указатель.