Терминология ООП. Отношения между классами в программах.
Отправной точкой во всей терминологии ООП является понятие класса. Классом называется шаблон, по которому создаются объекты.
Каждый объект, созданный на основе класса, называется экземпляром этого класса. Методы, свойства и процедуры событий, определенные внутри класса, называются членами. Предположим, вы пишете программу для работы с информацией о сотрудниках компании. Несомненно, в такой программе будет определен класс Employee; каждый экземпляр класса Employee будет соответствовать конкретному человеку.
Члены класса Employee должны соответствовать специфике решаемых задач (например, в свойстве Name будет храниться имя работника, а метод Raise-Salary будет использоваться для повышения зарплаты).
Отношения между классами в программах
В традиционном ООП предусмотрены три типа отношений между классами:
- Использование: непосредственная зависимость.
- Включение: иногда называется агрегированием. Реализует логические связи типа "является составной частью".
- Наследование: реализует логические связи типа "является частным случаем".
Примечание
В таких языках, как VB.NET, C# и Java, кроме классических типов существует четвертый тип отношений между классами – реализация интерфейса (отношение типа "поддерживает"). Суть реализации интерфейса заключается в том, что для поддержки некоторых функциональных возможностей ваш класс принимает на себя обязательства, по которым он должен содержать определенные члены. Интерфейсы существуют в VB начиная с версии 5 и часто используются в VB.NET. В главе 5 эта тема рассматривается гораздо подробнее.
Вернемся к классической тройке. Отношение использования, самое очевидное и распространенное, всего лишь означает, что один класс зависит от другого. Во всех ситуациях, когда один объект посылает сообщение другому объекту, можно говорить о зависимости между этими объектами. В обобщенном случае класс А использует класс Б, если:
- член класса А отправляет сообщение объекту класса Б
…или:
- член класса А создает или возвращает объекты класса Б
Примечание
Постарайтесь свести к минимуму количество взаимодействующих классов. Иначе говоря, избегайте лишних связей между классами, без которых можно обойтись. Если класс А не использует класс Б, то изменения в классе Б никак не отразятся на работе класса А (а следовательно, модификация класса Б не станет причиной ошибок в классе А!).
Термин "включение" (агрегирование) означает, что объект класса А содержит внутренние объекты класса Б.
На базе включения реализуется методика делегирования, когда поставленная перед внешним объектом задача перепоручается внутреннему объекту, специализирующемуся на решении задач такого рода. Агрегирование с делегированием методов было очень распространенным явлением в прежних версиях VB, поскольку этот принцип использовался при создании новых элементов (вспомните, как создавались новые, специализированные текстовые поля – вы размещали текстовое поле внутри формы пользовательского элемента, а затем запускали программу-мастер, которая автоматически генерировала код делегирования).
Агрегирование по-прежнему широко используется в VB.NET, но во многих ситуациях ему на смену приходит наследование – третий тип отношений между классами. Наследование считается одним из четырех "краеугольных камней" ООП наряду с абстракцией, инкапсуляцией и полиморфизмом. Все четыре концепции будут рассмотрены в ближайших четырех разделах.