Классы. Характеристики классов. Виды отношений между классами.
Понятия объекта и класса тесно связаны, но существует важное отличие между этими понятиями.
Класс – это абстракция существенных характеристик объекта.
Класс – это описание множества объектов, которые разделяют одинаковые свойства, операции, отношения, семантика. Любой объект – просто экземпляр класса.
Как показано на рисунке, различают внутреннее представление класса(реализацию) и внешнее представление класса(интерфейс).
Класс |
|
интерфейс |
|
части |
Публичная |
Защищенная |
|
Приватная |
|
Реализация |
|
Интерфейс объявляет возможности класса, но скрывает его структуру и поведение. Другими словами, интерфейс демонстрирует внешнему миру абстракцию класса, его внешний вид. Интерфейс в основном состоит из объявления всех операций, примененных к экземпляру классов, он может так же включать объявление типов, переменных, констант и исключений, необходимых для полноты этой абстракции. Интерфейс может быть разделен на 3 части:
Публичную (public), объявление которой доступно всем клиентам.
Защищенную (protected) – объявление которой доступно только самому классу, подклассам и друзьям.
Частный (private) – объявление доступно только классам и его друзьям.
Другом класса называют класс, который имеет доступ ко всем частям этого класса. Реализация класса описывает секреты поведения класса. Она включает реализацию всех операций, определенных в интерфейсе класса.
Виды отношений между классами.
Классы, подобно объектам не существуют в изоляции. Наоборот, с отдельной проблемной областью связывают ключевые абстракции, отношения между которыми формируют структуру из классов системы. Всего существует 4 основных вида между классами:
Ассоциация – фиксирует структурные отношения, связи между экземплярами классов.
Зависимость – отображает влияние одного класса на другой.
Обобщение-специализация – «is a»-отношение.
Целое-часть – «part of».
Для покрытия основных отношений, большинство объектно-ориентированных языков программирования, поддерживают следующие отношения: ассоциации, наследование, агрегацию, зависимость, конкретизация, мета класс, реализация.
Ассоциации – обеспечивает взаимодействие объектов, которые принадлежат разным классам. Они являются клеем, которые соединяют воедино все элементы программной системы.
Наследование – наиболее популярный вид отношения обобщения-специализация.
Альтернативой наследованию является делегирование. При делегировании объекты делегируют свое поведение с родственным объектом, при этом классы становятся не нужны.
Агрегация обеспечивает отношение целое-часть, объявленное для экземпляров класса.
Зависимость – часто представляется в виде частной формы – использование, которое фиксирует отношение между клиентом, который просит услугу и сервером, который предоставляет её.
Конкретизация выражает другую разновидность отношения обобщения-специализация, употребляется в таких языках, как ADO95, C++, Eiphel. Отношения мета-классов поддерживаются в языках Smalltalk и CLOS.
Мета-класс – это класс классов, понятие, которое позволяет вести себя с классами как с объектами.
Реализация определяет отношение, при котором класс-приниматель обеспечивает собственную реализацию интерфейса другого класса источника. Другим словами, тут идет речь про наследование интерфейса. «Скрещивание» отношений зависимости и обобщения-специализации.
