Читайте также:
|
|
Объединение полей данных и процедур и функций, работающих с этими данными, в единый пакет при наличии специальных правил доступа к элементам пакета называется инкапсуляцией.
Наличие интерфейса обеспечивает уменьшение возможности «разрушения» (несанкционированного изменения значений полей) объекта извне. При этом сокрытие особенностей реализации упрощает внесение изменений в реализацию класса, как в процессе отладки, так и при модификации программы. Таким образом, класс определяет существование глобальной области данных внутри объекта, доступной методам объекта.
С другой стороны доступ к объекту регламентируется и должен выполняться через специальный интерфейс (рис.).
Как и любая переменная программы, объект должен быть размещен в памяти (создан) и удален из памяти (уничтожен). Причем создание и уничтожение объектов выполняется статически или динамически.
Статическое создание объектов выполняется в процессе компиляции программы, а статическое уничтожение – при завершении программы: объект удаляется из памяти вместе с программой.
Динамическое создание и уничтожение объектов выполняется в процессе работы программы специальными командами.
Операция создания и инициализация полей объекта получила название конструирования объекта, а операция уничтожения объекта – деструкции объекта. Соответствующие методы, если они определены в классе, получили название конструкторов и деструкторов. Конкретные особенности этих методов в различных языках программирования будут обсуждаться в соответствующих разделах.
Пример
Сокрытие реализации класса (класс Файл). В соответствии с результатами объектной декомпозиции файл должен реагировать на следующие сообщения: «Открыть», «Добавить запись», «Найти запись».
Каждое сообщение должно дополняться необходимой информацией. Так, сообщение «Открыть» должно сопровождаться передачей имени файла. Сообщение «Добавить запись» должно сопровождаться передачей текста записи, состоящей из двух частей: фамилии абонента или названия организации и телефона. Сообщение «Найти запись» должно сопровождаться передачей фамилии абонента или названия организации, по которым должен быть найден телефон. Каждому сообщению должен соответствовать метод, объявленный в интерфейсной части класса и реализующий требуемые действия.
Метод «Открыть» должен выполнять открытие указанного файла для выполнения операций ввода-вывода. Операция открытия файла требует указания файловой переменной. Поскольку при выполнении операций с этим файлом в дальнейшем должна будет использоваться та же файловая переменная, целесообразно описать ее в секции реализации класса, где она будет доступна методам данного объекта, но не доступна из других объектов программы.
Метод «Добавить» должен проверять наличие открытого файла и сообщать пользователю о невозможности выполнения операции с закрытым файлом. Если же файл открыт, метод должен выполнить добавление записей в файл. Для выполнения проверки необходимо хранить информацию об открытии файла, для этого можно использовать специальное поле «Состояние файла», которое также можно объявить в секции реализации.
Метод «Найти» также вначале должен проверять, открыт ли файл. Если файл открыт, метод выполняет поиск информации в файле. Операции проверки открытия файла выполняются в методах «Добавить» и «Найти» идентично, их можно выделить в отдельный метод «Проверка открытия», который можно описать в секции реализации.
Для инициализации поля «Состояние файла» (в исходном состоянии файл закрыт) можно использовать специальный метод, традиционно с этой целью используется конструктор. При завершении программы файл необходимо закрыть. Операция закрытия может быть описана в деструкторе.
Окончательно для реализации объекта Файл можно предложить класс следующей структуры:
Класс Файл:
Дата добавления: 2015-09-06; просмотров: 173 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Т: Классы | | | Простой полиморфизм |