Читайте также:
|
|
1.4.1. Типы отношений. Рассмотрим сходства и различия между следующими классами: цветы, пионы, красные розы, желтые розы, лепестки и божьи коровки. Мы можем заметить следующее:
- пион – цветок;
- роза - (другой) цветок;
- красная и желтая розы – розы;
- лепесток является частью обоих видов цветов;
- божьи коровки питаются вредителями, поражающими некоторые цветы.
Из этого простого примера следует, что классы, как и объекты, не существуют изолированно. В каждой проблемной области ключевые абстракции взаимодействуют многими интересными способами, что мы и должны отразить в программном проекте.
Отношения между классами могут означать одно из двух. Во-первых, у них может быть что-то общее. Например, и пионы, и розы - это разновидности цветов: и те, и другие имеют ярко окрашенные лепестки, испускают аромат и так далее. Во-вторых, может быть какая-то семантическая (смысловая) связь. Например, красные розы больше похожи на желтые розы, чем на пионы. Но между розами и пионами больше общего, чем между цветами и лепестками. Также существует симбиотическая (приносящая взаимную пользу) связь между цветами и божьими коровками: божьи коровки защищают цветы от вредителей, которые, в свою очередь, служат пищей божьим коровкам.
Существует три основных типа отношений между классами. Во-первых, это отношение «обобщение/специализация» (общее и частное, «is-a»). Розы суть цветы, что значит: розы являются специализированным частным случаем, подклассом более общего класса «цветы». Во-вторых, это отношение «целое/часть» («part of»). Так, лепестки являются частью цветов. В-третьих, это семантические, смысловые отношения, ассоциации. Например, божьи коровки ассоциируются с цветами - хотя, казалось бы, что у них общего. Или вот: розы и свечи - и то, и другое можно использовать для украшения стола. Существует большое разнообразие семантических отношений между классами.
Языки программирования выработали несколько общих подходов к выражению отношений этих трех типов. В частности, большинство объектно-ориентированных языков непосредственно поддерживают разные комбинации следующих видов отношений:
- ассоциация
- наследование
- агрегация
- использование
- инстанцирование
- метакласс.
Рассмотрим отношения между классами более подробно.
1.4.2. Ассоциация. Из шести перечисленных видов отношений наиболее общим и неопределенным является ассоциация. Обычно системный аналитик констатирует наличие ассоциации и, постепенно, уточняя проект, превращает ее в другую, более специализированную связь.
Ассоциация
Рис. 1.2
Пример. Желая автоматизировать розничную торговую точку, мы обнаруживаем, кроме прочих, две абстракции - товары и продажи. На рис. 1.2 показана ассоциация, которую мы при этом усматриваем. Класс TArticle - это то, что мы продали в некоторой сделке, а класс TSale - сама сделка, в которой продано несколько товаров. Надо полагать, ассоциация работает в обе стороны: задавшись товаром, можно выйти на сделку, в которой он был продан, а пойдя от сделки, найти, что было продано.
Вот две выдержки из объявления соответствующих классов:
Class TSale;
Дата добавления: 2015-10-29; просмотров: 114 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Virtual float temperatureAt(int Minute); | | | Double dubFuelCell2Amperes(); |