我对建模和职责之间的关系有点困惑。许多“真实世界”的对象似乎没有明确的职责。
如何开始建模这些概念并保持明确定义的职责呢?
解析“像银行账户一样运作”的含义。银行账户可能需要能够:
从中,可以将其中一些任务(职责)抽象出来,转化为更通用的模型,例如“能够根据不同权限级别进行身份验证的实体”,“能够与同类实体以适当的权限级别进行通信的实体”,“能够记录其状态何时发生变化以及发生了什么变化的实体”,等等。
在敏捷开发模型中,用户故事就是为了搞清楚这些任务是什么。然而,你不必遵循敏捷开发模式来使用这种技术;它只是一种合理的找出项目需求的方法。批判性地审查用户将如何与您的软件进行交互,并具体定义这些交互将做什么,是设计软件的第一步。
举几个银行账户的责任例子,我能想到的有:
"...许多“现实世界”对象似乎没有明确的责任..."
请记住,当您编写软件时,您正在对真实世界进行建模。 模型可以简单或复杂,并具有不同程度的逼真度。 重要的是捕捉您试图注入到软件系统中的行为。 您可以自由地省略不推进目标的功能。 您也可以将没有物理类比的功能“具象化”。
物理学中的模型也是根据其解释现象和预测新领域行为的能力来评估的。 软件模型的成功或失败在于其模拟所需行为并优雅地接受未来更改的能力。
请记住,在软件中对任何系统建立模型都有许多方法。 没有一个唯一正确的答案。
你的问题,koen,是在创建类之后才问它,而实际上这是你在尝试创建新类时应该问自己的基本问题之一。
无论如何,我不同意我们上面同事的观点。 Meredith 和 Neil 的答案定义了 类合同,而不是职责。类职责被定义为类提供的任何公共服务,而不考虑特定的实现。它取代了 功能 的概念,并且基本上非常简洁地描述了每个类公共方法。因此,类职责的示例可能包括:
另一方面,类合同由类职责的总和定义。 Meredith 和 Neil 给出了示例。
保持思维简单并大声思考。 确定职责的基本规则(从一组简单操作开始):
在建模对象上提出以下问题(实际上是很多问题):
对象能否自行运作?还是它只是交易的工具?仅在与其他对象一起使用时才有意义?(依赖因素)
对象本身能做什么?
其他对象可以对该对象执行哪些操作?
可以对对象、其数据或状态进行哪些操作?
(例如)账户不能自行借记/贷记。那根本没有意义。 但它可以被用作系统、银行家或客户要借记/贷记的工具。
通过从不同的角度来看待对象,确定动作,根据谁将使用此对象以及出于什么目的(即,从银行家、客户、系统等的角度来看待账户对象)。
银行账户是顾客和银行之间进行交易的通用工具,两者从不同的角度使用它。银行将其作为管理客户资金的关键,而客户则将其作为交易工具。
对于客户来说,存款/取款就是银行的借记/贷记。银行会利用该账户进行各种内部用途(例如通过提醒通知客户发薪水),而客户的操作则受到限制。
尝试形成简单的句子,通过对象与其他人合作来传达含义 - 如果它们有意义,那就很好。如果没有,请重新考虑。
一个银行账户,
谢谢
- Sundar