Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вариант_№31.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

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

Одним из источников ошибок в процедурных языках программирования является передача неправильных параметров в подпрограммы. При передаче параметров в подпрограмму компилятор может проконтролировать синтаксическую совместимость типов, но не семантику. Например, подпрограмма имеет параметр типа “целое число”, который обозначает температуру воды, но в качестве фактического значения в нее можно передать любое целое число, например, 10000, которое не может являться температурой воды. Отследить такого рода ошибки очень не просто, особенно если учесть, что семантическая ошибка может быть намного тоньше и может не контролироваться простым попаданием числа в заданный диапазон. Уменьшение вероятности таких ошибок состоит в синтаксическом связывании данных с действиями. Имеются в виду данные, которые передаются в качестве фактических параметров в подпрограммы. Так появилось понятие абстрактного типа данных, реализованное например в языке Ада.

Инкапсуляция возникла как логическое продолжение идеи абстрактных типов данных, в которой каждый тип имеет некоторую, иногда недоступную извне внутреннюю структуру и набор всегда доступных операций над переменными данного типами. Т.е. в отличие от обычных подходов к типам ( например, в Pascal ), когда тип полностью определяется только структурой хранения информации, абстрактный тип дополнительно определяется набором операций. Достоинство такого подхода состоит в исключении ошибок, состоящих в применении операций, недопустимых для типа данных, большей универсальности, когда можно менять внутреннюю структуру хранения данных без необходимости изменения других частей системы.

Рассмотрим эти особенности на следующем примере. Пусть разрабатывается библиотека подпрограмм для работы с матрицами. Пусть выбрано хранение в виде двумерного массива. При необходимости перехода к разреженному хранению придется изменять любое определение данных для обращения к библиотеке. Если же матрица определена как абстрактный тип данных с операциями: “получить значение элемента”, “изменить значение элемента” и т.п., то изменение метода хранения матрицы не скажется на других частях программы. В программе не описываются переменные типа “array [1..10 ] of integer” и нет прямых обращений к элементам массива вида “A[i]”.

Объект, обладающий свойством инкапсуляции характеризуется следующими параметрами:

  • уникальное имя,

  • набор атрибутов - данных, характеризующих состояние объекта,

  • набор действий (методов) для смены своих состояний, т.е. для описания своего поведения.

Рассмотрим характерное описание объекта:

объект:

точка

атрибуты:

позиция на плоскости

методы:

создать

удалить

переместить в новую позицию

отобразить

стереть

объект:

прибор

атрибуты:

показания

методы:

снять показания

Каждый объект, заданный именем, атрибутами и методами представляет собой замкнутую сущность, однозначно определенную для постороннего наблюдателя. Принципиальная особенность такого объекта состоит в том, что он может делать только то, что определено в качестве его методов и все, что определено в качестве методов объекта, объект выполняет самостоятельно. Мы не говорим "переместить (объект)", а говорим "объект переместись". Это обеспечивает все свойства абстрактного типа данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]