OOP-如何选择可能的候选对象?
我关心的是在OOP中应该使用什么技术来选择正确的对象 在如何选择对象方面,有关于OOP的必读书籍吗 最好,您可能指的是“正确的类”,而不是“正确的对象”。-) 有一些技巧,例如文本分析(即在名词下面划线)和 在“在名词下面划线”一词中,你基本上是从书面的自然语言(即普通英语)描述你要解决的问题开始,并在名词下面划线。这将为您提供候选类的列表。您将需要执行几个过程来将其细化为要实现的类列表 对于CRC 我建议你参考一下OOP-如何选择可能的候选对象?,oop,Oop,我关心的是在OOP中应该使用什么技术来选择正确的对象 在如何选择对象方面,有关于OOP的必读书籍吗 最好,您可能指的是“正确的类”,而不是“正确的对象”。-) 有一些技巧,例如文本分析(即在名词下面划线)和 在“在名词下面划线”一词中,你基本上是从书面的自然语言(即普通英语)描述你要解决的问题开始,并在名词下面划线。这将为您提供候选类的列表。您将需要执行几个过程来将其细化为要实现的类列表 对于CRC 我建议你参考一下 希望能有所帮助。我假设大家已经理解了什么是结构、类型、类、集合、状态、字母表、
希望能有所帮助。我假设大家已经理解了什么是结构、类型、类、集合、状态、字母表、标量和向量以及它们之间的关系 宾语是名词,方法是动词。对象成员可以表示每个字段的标识、状态或标量值。对象之间的关系通常用引用表示,其中引用是对象的成员。在某些情况下,当关系复杂、多向、arity大于2、表示某种分组或包含时,则可以将关系表示为对象
出于其他更广泛的技术原因,对象很可能是用OOP语言表示任何形式信息的唯一方式。只要写一些能完成任务的东西,即使它很难看,然后继续重构:
- 消除()
- 增加
- 减少
- 不要过度设计李>
- 不要写东西
(来源:)由于德米安的评论,我添加了第二个答案:
有时候,这门课很明显 因为它是有形的,但其他时候 对象的概念是抽象的 像一个db连接器 这是真的。我首选的方法是对系统进行行为分析(例如使用用例),然后导出系统操作。一旦您有了一个稳定的系统操作列表(例如字处理器的PrintDocument、SaveDocument、拼写检查、MergeMail等),您就需要将它们分配给一个类。如果您已经使用我前面提到的一些技术开发了候选类列表,那么您将能够分配一些操作。但有些仍将无法分配。这些将表明需要更抽象或非直观的类,您需要使用良好的判断来弥补这些类
整个方法都记录在一份白皮书中。你在说什么语言?谁在乎?设计与语言无关。:-)我没有时间把它扩展到一个完整的答案,但是“这很难,特别是在不熟悉的问题领域,而且需要经验和品味。就我个人而言,我还没有找到任何真正有帮助的方法。”:-\有时类是如此明显,因为它是有形的,但有时对象的概念像db连接器一样抽象,那么,一个对象必须成为一个什么样的对象呢?可能的重复:当然可以。:-)看看这些技巧,如果可以的话,看看那本书。是的,但它给了你一个常见的例子。。一个购物车,您可能想在其中添加添加项目,签出到Customer类,而不是创建一个shoppingCart类。。那么电话线在哪里。。是的,顾客是一流的。问题:ShoppingCart是1-1(正是1对正是1)吗?让我们做生命周期测试。客户信息是否比他的购物访问寿命更长。例如,在您的设计中,您会说“是的,我们将其保存在数据库中,以便下次可能的购物访问”。好的,另一个生命周期测试。你的购物车是否总是只有一个顾客。例如,您回答“不,我们有匿名存根,当匿名访问者没有识别他/她自己时,它不是真正的客户”。然后它是一个单独的类。“Object是一个名词,method是一个动词。”好吧,但请注意,在这两种语言中,名词可以是动作(触地,homocide,
javax.swing.Action
),动词可以表示除动作以外的各种事情(getName()
,hashCode()
,迭代器()
,应该,做,可以,想要)。+1个很好的答案,如果短一点就更好了。:)好的面向对象设计侧重于达到这5个要点(特别是关于内聚和耦合!),并且(我要补充)提供人们可以轻松使用的简单的API。不匹配名词的类和动词的方法。谢谢!我会尽量把它缩短一点。提供甜美的API本身就是一个完整的艺术领域。我的意思是,任何程序员都可以提出像DOM这样的API,但是有多少人可以提出像jQuery这样的API呢?