我担心我应该使用哪些技术在OOP中选择正确的对象
在如何选择对象方面是否有关于OOP的必读书?
最佳,
答案 0 :(得分:5)
只要写下完成工作的东西,即使它很难看,然后不断重构:
可是:
这不是一个精确的配方,只是一些一般的指导方针。继续练习。
P.S。
代码对象不与有形现实生活对象相关;它们只是将相关信息保存在一起的结构。
不要相信Java书籍/学校教的对象;他们在说谎。
答案 1 :(得分:2)
你可能意味着“正确的阶级”,而不是“正确的对象”。 : - )
有一些技巧,例如文本分析(a.k.a.强调名词)和Class Responsibility Collaborator (CRC)。
通过“强调名词”,你基本上从一个书面的,自然语言(即简单的英语)开始描述你要解决的问题,并强调名词。这会为您提供候选课程列表。您需要执行多次传递以将其细化为要实现的类列表。
对于CRC,check out the Wikipedia。
我建议The OPEN Toolbox of Techniques作为完整参考。
希望它有所帮助。
答案 2 :(得分:0)
我假设有什么是sctruct,类型,类,集合,状态,字母,标量,向量和关系的理解。
对象是名词,方法是动词。对象成员可以表示每个字段的标识,状态或标量值。对象之间的关系通常用引用表示,其中引用是对象的成员。在情况下,当关系复杂,多向,具有大于2的arity时,表示某种分组或包含,则关系可以表示为对象。
对于其他更广泛的技术原因,对象很可能是用OOP语言表示任何形式信息的唯一方式。
答案 3 :(得分:0)
你应该看看Eric Evans的Domain-Driven Design。它提供了非常有用的概念,可以考虑模型中的对象,它们在域中的功能以及它们如何组织起来协同工作。这不是一本烹饪书,可能不是一本初学者书 - 但是,我在职业生涯的不同阶段读到它,每次我发现它都有价值的东西......
(来源:domaindrivendesign.org)
答案 4 :(得分:0)
由于demian的评论,我正在添加第二个答案:
有时班级如此明显 因为它是有形的,但其他时候 对象的概念是抽象的 像数据库连接器。
这是事实。我首选的方法是对系统进行行为分析(例如,使用用例),然后导出系统操作。一旦你有一个稳定的系统操作列表(例如PrintDocument,SaveDocument,SpellCheck,MergeMail等,用于文字处理器),你需要将它们分配给一个类。如果您已经使用我之前提到的一些技术开发了候选类列表,那么您将能够分配一些操作。但有些仍未分配。这些将表明需要更多抽象或不直观的课程,你需要使用你的良好判断来弥补这些课程。
整个方法记录在www.openmetis.com的白皮书中。