OOP-如何选择可能的候选对象?

OOP-如何选择可能的候选对象?,oop,Oop,我关心的是在OOP中应该使用什么技术来选择正确的对象 在如何选择对象方面,有关于OOP的必读书籍吗 最好,您可能指的是“正确的类”,而不是“正确的对象”。-) 有一些技巧,例如文本分析(即在名词下面划线)和 在“在名词下面划线”一词中,你基本上是从书面的自然语言(即普通英语)描述你要解决的问题开始,并在名词下面划线。这将为您提供候选类的列表。您将需要执行几个过程来将其细化为要实现的类列表 对于CRC 我建议你参考一下 希望能有所帮助。我假设大家已经理解了什么是结构、类型、类、集合、状态、字母表、

我关心的是在OOP中应该使用什么技术来选择正确的对象

在如何选择对象方面,有关于OOP的必读书籍吗

最好,

您可能指的是“正确的类”,而不是“正确的对象”。-)

有一些技巧,例如文本分析(即在名词下面划线)和

在“在名词下面划线”一词中,你基本上是从书面的自然语言(即普通英语)描述你要解决的问题开始,并在名词下面划线。这将为您提供候选类的列表。您将需要执行几个过程来将其细化为要实现的类列表

对于CRC

我建议你参考一下


希望能有所帮助。

我假设大家已经理解了什么是结构、类型、类、集合、状态、字母表、标量和向量以及它们之间的关系

宾语是名词,方法是动词。对象成员可以表示每个字段的标识、状态或标量值。对象之间的关系通常用引用表示,其中引用是对象的成员。在某些情况下,当关系复杂、多向、arity大于2、表示某种分组或包含时,则可以将关系表示为对象


出于其他更广泛的技术原因,对象很可能是用OOP语言表示任何形式信息的唯一方式。

只要写一些能完成任务的东西,即使它很难看,然后继续重构:

  • 消除()
  • 增加
  • 减少
但是:

  • 不要过度设计
  • 不要写东西
这不是一个精确的配方,只是一些一般的指导方针。继续练习

附言

代码对象与现实生活中的有形对象不相关;它们只是将相关信息保存在一起的结构

不要相信Java书籍/学校关于对象的教导;他们在撒谎。

你应该看看埃里克·埃文斯的作品。它提供了非常有用的概念,用于思考模型中的对象、它们在域中的功能以及如何将它们组织在一起工作。这不是一本烹饪书,也可能不是一本初学者的书——但后来,我在职业生涯的不同阶段阅读了这本书,每次我都从中发现一些有价值的东西……


(来源:)

由于德米安的评论,我添加了第二个答案:


有时候,这门课很明显 因为它是有形的,但其他时候 对象的概念是抽象的 像一个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呢?