Общая характеристика классов.
Класс – это структурный тип данных, который включает описание полей данных, а так же процедур и функций, работающих с этими полями данных. Класс - это некое множество объектов, имеющих общую структуру и общее поведение. Реализация объединения данных с определенными видами их обработки делает классы пригодными для описания состояния и поведения моделей реальных объектов.
Принято различать внутреннее представление класса (реализация) и внешнее (интерфейс). Интерфейс – внешний облик, объявление операций, поддерживаемых экземплярами класса, объявления других классов, переменных, констант и исключительных ситуаций, уточняющих абстракцию, которую класс должен выражать. Реализация – внутреннее устройство класса, по большей части состоящее в определении операций, объявленных в интерфейсе класса.
Описание класса без учета синтаксиса конкретного языка выглядит следующим образом:
Класс <имя класса> интерфейс <объявление полей и методов класса, к которым возможно обращение извне> реализация < объявление полей и методов класса, к которым невозможно обращение извне> Конец описания.
Наличие интерфейса обеспечивает уменьшение возможности не санкционированного изменения значений полей объекта извне. При этом сокрытие особенностей реализации упрощает внесение изменений в реализацию класса, как в процессе отладки, так и при модификации программы.
Пример про файл: Файл должен реагировать наследующие сообщения: «Открыть», «Добавить запись», «Найти запись». Сообщение «Открыть» должно сопровождаться передачей имени файла. Сообщение «Добавить запись» должно сопровождаться передачей текста записи. Сообщение «Найти запись» должно сопровождаться. Метод Открыть должен выполнять открытие указанного файла для выполнения операций ввода-вывода. Операция открытия файла требует указания файловой переменной. Поскольку при выполнении операций с этим файлом в дальнейшем должна будет использоваться та же файловая переменная, целесообразно описать ее в секции реализации класса, где она будет доступна методам данного объекта, но недоступна из других объектов программы. Метод Добавить должен проверять наличие открытого файла и сообщать пользователю о невозможности выполнения операции с закрытым файлом. Для выполнения проверки необходимо хранить информацию об открытии файла, для этого можно использовать специальное поле Состояние файла, которое так же можно объявить в секции реализации. Метод Найти так же в начале должен проверять, открыт ли файл. Если файл открыт, метод выполняет поиск информации в файле. Для инициализации поля Состояние файла (в исходном состоянии файл закрыт) можно использовать специальный метод, традиционно с этой целью используется конструктор. При завершении программы файл необходимо закрыть. Операция закрытия может быть описана в деструкторе. Окончательно для реализациио бъекта Файл можно предложить класс следующей структуры:
Класс Файл: интерфейс конструктор Инициализировать; метод Открыть(имя файла); метод Добавить(фамилия, телефон); метод Найти(фамилия); деструктор Закрыть_файл; реализация поле Файловая_переменная; поле Состояние_файла; метод Проверка_открытия; Конец описания.
После определения структуры класса должны быть разработаны алгоритмы методов и назначены типы полей и передаваемых параметров.
Мы можем разделить интерфейс класса на три части: 1. открытую (public) – видимую всем клиентам; 2. защищенную (protected) – видимую самому классу, его подклассам и друзьям; 3. закрытую (private) – видимую только самому классу и его друзьям.
Все методы объекта обязательно имеют доступ ко всем полям своего объекта.
Разработчик может задать права доступа к той или иной части класса, определив тем самым зону видимости клиента. В дополнение к этому есть еще и механизм друзей, с помощью которого посторонним классам можно предоставить привилегию видеть закрытую и защищенную области класса. Тем самым, нарушая принцип инкапсуляции, поэтому, как и в жизни, друзей надо выбирать осторожно.
Виды отношений между классами:
Ассоциация – семантическое (смысловое) соединение классов. Выделяется на этапе анализа предметной области. Является наиболее общим и неопределенным видом отношений. Обычно аналитик констатирует наличие ассоциации и, постепенно уточняя проект, превращает ее в какую-то более специализированную связь.
По умолчанию, ассоциация не имеет направления, подразумевает двухстороннюю связь . Характеристикой ассоциации является ее мощность. На практике важно различать три случая мощности ассоциации:
Наследование – возможность конструирования новых более сложных классов из уже имеющихся посредством добавления полей и определения новых методов (принцип иерархичности). При этом исходный класс, на базе которого выполняется конструирование, часто называют родителем или суперклассом, а производный – потомком или подклассом.
Если непосредственный родитель единственный, то наследование называется простым, а если таких классов несколько - то множественным. Наличие механизма наследования позволяет повторно не определять в классе уже описанные параметры и свойства объектов, производный класс их просто «наследует».
Классы для которых не существует экземпляров, называются – абстрактные. Конкретные классы – это классы, экземпляры которых могут существовать в системе. Назначением абстрактных классов является определение общих, наиболее характерных методов и полей, наследуемых из них классо
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|