Вы всегда должны стремиться запечатлеть то, что существует в реальности. Customer
экземпляр не не имеет отношения 1 к 1 с ProductList
, поскольку ProductList
может быть просмотрено более чем одним Customer
одновременно, а Customer
- нет. способ владеет этим списком.
Что, вероятно, ближе к реальности:
- Каждый
Supermarket
человек управляет один Inventory
индивидуальный - каждый
Inventory
индивидуальный: - управляется один
Supermarket
индивидуальный - включает
Inventory Item
физических лиц
- Каждый
Inventory Item
человек - состоит из один
Inventory
человек - описывает
Product
человек
- Каждый
Product
человек - описывается один
Inventory Item
человек - находится по адресу один
Physical Location
индивидуум
- Каждый
User Account
индивидуум - идентифицирует один человек индивидуальный
- играет Роль персонажей
В реальной жизни люди играют роли . Этими ролями могут быть «клиент», «доктор» или «полицейский». Каждый человек Role
имеет набор возможностей, которые он может выполнять. В ОО-системе каждый отдельный пользователь Role
может использовать операции для реализации своих возможностей, например purchaseProduct()
, prescribeMedication()
или writeMovingViolation()
.
Существует несколько способов представления этих ролей и возможностей в ОО система. В одном подходе экземпляр customer
Role
может быть сконфигурирован для предоставления доступа к операциям queryInventory()
и purchaseProduct()
в классах Supermarket
и InventoryItem
соответственно. owner
экземпляр Role
1 может быть настроен для предоставления доступа к операциям addInventoryItem()
и removeInventoryItem()
в классе Inventory
.
Вот пример модель UML:
В другом подходе вы можете создать одноэлементные подклассы класса Role
, называемые CustomerRole
и OwnerRole
, и затем каждый из этих подклассов вызывает операции. Вы можете поместить свои операции viewProducts()
и addProducts()
в эти синглтоны.
1 Подумайте о том, чтобы назвать эту роль "менеджером", чтобы владелец супермаркета мог нанять других людей. делать работу.