В прецедентах появились новые отношения. В UML 1.1 имелись только два типа отношений между прецедентами: «uses» (использует) и «extends» (расширяет), каждое их которых является стереотипом обобщения. UML 1.3 предлагает три типа отношений:
• Конструкция «includes» (включает) является стереотипом зависимости. Она означает, что выполнение одного прецедента включает в себя другой прецедент. Обычно это отношение встречается в ситуации, когда несколько прецедентов имеют общие этапы или части. Включаемый прецедент может предоставлять другим некоторое общее поведение. В качестве примера можно рассмотреть банкомат (ATM), в контексте которого оба прецедента Withdraw Money (Получить деньги) и Make Transfer (Сделать перевод) используют прецедент Validate Customer (Проверить подлинность клиента). Это отношение в общем случае заменяет применение стереотипа «uses».
• Обобщение (generalization) прецедента означает, что один прецедент представляет собой вариацию другого. Таким образом, можно иметь один прецедент для сценария «Получить деньги» (базовый вариант использования) и другой прецедент для ситуации, когда выдача денег невозможна по причине отсутствия средств на счету
клиента. Отказ от выплаты денег можно представить в виде отдель ного прецедента, который уточняет базовый прецедент. (Кроме того, можно определить еще и дополнительный сценарий для прецедента «Получить деньги».) В этом случае специальный прецедент, подобно рассмотренному выше, может изменить какой-либо аспект базового прецедента.
|
|
• Конструкция «extends» (расширяет) является стереотипом зависи
мости. Она обеспечивает более управляемую форму расширения по
сравнению с отношением обобщения. В этом случае в базовом прецеденте задается несколько точек расширения. Включающий прецедент может вносить изменения в свое поведение только в этих точках расширения. К примеру, при рассмотрении покупки товара через Интернет можно определить один прецедент для покупки товара с точками расширения для ввода информации о доставке товара и ввода информации об оплате товара. После чего этот прецедент может быть расширен для постоянных клиентов, для которых подобная информация может быть получена другим способом.
Существует некоторая путаница насчет старой и новой интерпретаций указанных отношений. Большинство разработчиков применяют стереотип «uses» в ситуациях, когда версия 1.3 рекомендует указывать стереотип «includes», поскольку для многих из них стереотип «includes» может быть заменен стереотипом «uses». И большинство разработчиков применяют стереотип «extends» из версии 1.1 в более широком смысле, предполагая не только отношение «extends» из версии 1.3, но также и важнейшую составляющую отношения обобщения в версии 1.3. Поэтому можно считать, что отношение со стереотипом «extends» расщепляется в версии 1.3 на два отношения: со стереотипом «extends» и обобщение (generalization).
|
|
Хотя это объяснение охватывает большую часть известных мне приложений языка UML, в настоящее время мне неизвестен строгий и правильный способ применения в них старых отношений. Однако большинство разработчиков вовсе не пользуются этим строгим определением отношений, поэтому мне не хотелось бы развивать эту тему дальше.