Всё для программиста

Основы объектно-ориентированного представления программных систем - Инкапсуляция
Индекс материала
Основы объектно-ориентированного представления программных систем
Инкапсуляция
Модульность
Иерархическая организация
Объекты
Виды отношений между объектами
Видимость объектов
Общая характеристика классов
Виды отношений между классами
Наследование
Полиморфизм
Агрегация
Зависимость
Базис языка визуального моделирования
Предметы в UML
Отношения в UML
Диаграммы в UML
Механизмы расширения в UML
Статические модели объектно-ориентированных программных систем
Операции
Отношения в диаграммах классов
Деревья наследования
Динамические модели объектно-ориентированных программных систем
Действия в состояниях
Вложенные состояния
Диаграммы взаимодействия
Диаграммы последовательности
Актеры и элементы Use Case
Работа с элементами Use Case
Подпотоки
Пример диаграммы Use Case
Построение модели требований
Определение элементов Use Case
Уточнение модели требований
Кооперации и паттерны
Паттерн Наблюдатель
Паттерн Компоновщик
Паттерн Команда
Бизнес-модели
Все страницы

Инкапсуляция

 

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

Инкапсуляция является процессом разделения элементов абстракции на секции с различной видимостью. Инкапсуляция служит для отделения интерфейса абстракции от ее реализации.

Пример: физический объект регулятор скорости.

Обязанности регулятора:

q       включаться;

q       выключаться;

q       увеличивать скорость;

q       уменьшать скорость;

q       отображать свое состояние.

Спецификация класса Регулятор скорости примет вид

with Кяасс_ДатчикСкорости. Класс_Порт;

use Класс_ДатчикСкорости. Класс_Порт;

Package Класс_РегуляторСкорости is

type Режим is (Увеличение, Уменьшение);

subtype Размещение is Natural range ...

type РегуляторСкорости is tagged private;

function НовРегуляторСкорости (номер: Размещение;

напр: Направление; порт; Порт)

return РегуляторСкорости;

procedure Включить(the: in out РегуляторСкорости);

procedure Выключить(1пе: in out РегуляторСкорости);

procedure УвеличитьСкорость(1г1е: in out

РегуляторСкорости);

procedure УменьшитьСкорость(the: in out

РегуляторСкорости);

Function OnpocCocтояния(the: РегуляторСкорости)

eturn Режим;

private

type укз_наПорт is access all Порт;

type РегуляторСкорости is tagged record

Номер; Размещение;

Состояние: Режим;

Управление: укз_наПорт;

end record;

end Класс_РегуляторСкорости;

Здесь вспомогательный тип Режим используется для задания основного типа класса, класс ДатчикСкорости обеспечивает класс регулятора описанием вспомогательного типа Направление, класс Порт фиксирует абстракцию порта, через который посылаются сообщения для регулятора. Три свойства: Номер, Состояние, Управление — формулируют инкапсулируемое представление основного типа класса РегуляторСкорости. При попытке клиента получить доступ к этим свойствам фиксируется семантическая ошибка.

Полное инкапсулированное представление класса РегуляторСкорости включает описание реализаций его методов — оно содержится в теле класса. Описание тела для краткости здесь опущено.