Q1.
在我大学的面向对象建模和设计研究中,他们建议思考对象可以为其方法做什么,以及它对其属性的责任是什么。所有澄清的尝试都导致了进一步的混乱。
这往往会生成一个类图,其中包含具有所有操作的参与者和仅保存数据的内部类。
这似乎不正确。是否有另一种思考如何对对象建模的方法?
Q2。此外,该课程似乎强调按照现实世界的对象对对象进行建模,但它在领域模型中不一定有意义。 IE。在医疗实践中,他们Patient: CreateAppointment(), CancelAppointment()
但这不是它的实现方式(您可以修改约会集合)。还有另一种思考方式吗?
示例 Q1
秘书:预约记录()、取消预约记录()
约会:时间、日期……(无方法)
示例 Q2
医生:SeePatient()
While SeePatient
是一个用例,它对于实际类上的方法没有意义。您对此有何看法?
不幸的是,你遇到的障碍在学术界太常见了。学术项目往往从录像带租赁店、图书馆或学生注册系统(您的系统与医生办公室的系统不同)开始,然后用动物教授遗传。您提供的指南也非常典型
他们建议考虑一个对象可以为其方法做什么,以及它对其属性的责任是什么
事实上,当初学者问我时,我通常会解释对象的属性是它知道的关于自身的事情,而它的方法是它知道如何做的事情。这实际上只是准确表达你所拥有的东西的另一种方式。正如您所发现的,当您开始讨论更具体的系统而不仅仅是示例时,这种思维方式很快就会崩溃。
例如,该指南与该对象配合得很好:
public class Tree
{
public int Height { get; set; }
public void Grow(int byHowMuch)
{
Height += byHowMuch;
}
}
虽然这确实符合要求,但您有权认为它“感觉”不对:
public class Secretary
{
public void MakeAppoinment(Patient patient)
{
//make the appointment
}
}
那么解决办法是什么呢?问题在于如何接受并应用所教的内容。学习与理解设计模式 http://en.wikipedia.org/wiki/Design_Patterns对开发比知道如何生长的树更实用的系统有很大帮助。
推荐阅读:
-
设计模式:可重用的面向对象软件的元素 https://rads.stackoverflow.com/amzn/click/com/0201633612(也称为四人帮或 GoF)
- 首先设计模式 https://rads.stackoverflow.com/amzn/click/com/0596007124
- 面向对象的分析与设计 https://rads.stackoverflow.com/amzn/click/com/0596008678
为了解决您遇到的问题,我可能会使用继承的人员类和接口的组合,它们将通过一系列服务类执行其操作。本质上,秘书、医生和病人都将从 person 继承,并且每个类都可以传递给伴随的服务类。服务类可能会也可能不会做类似的事情SeePatient()
。请不要将此示例视为人员类没有方法。
Stack Overflow 有多个可能有用的相关问题:
- 单一职责原则是 OOP 的规则吗? https://stackoverflow.com/q/15412/61654
- OOP 有什么规则吗? https://stackoverflow.com/q/399656/61654
- 为什么 OOP 对我来说很难? https://stackoverflow.com/q/2035449/61654
此外,最好检查一下:
- 单一责任原则 http://en.wikipedia.org/wiki/Single_responsibility_principle
- 不要重复自己 http://en.wikipedia.org/wiki/Don't_repeat_yourself
- 食物原理 http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
最后,对于什么使应用程序面向对象,没有一个单一的定义。你如何应用模式、原则等将定义你的程序。事实上,你问自己这些问题表明你走在正确的道路上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)