面向对象设计中的方法

lau*_*cer 9 oop class-design analysis

Q1.在我的大学对面向对象建模和设计的研究中,他们建议考虑对象可以为其方法做什么,以及它对其属性的责任.所有澄清的尝试都导致了进一步的混乱.

这往往会生成一个类图,其中包含具有所有操作的actor,以及仅包含数据的内部类.

这似乎不正确.还有另一种思考如何建模对象的方法吗?

Q2.此外,该课程似乎强调在真实世界对应物之后对物体进行建模,但在域模型中并不一定有意义.IE浏览器.在医疗实践中,他们有,Patient: CreateAppointment(), CancelAppointment()但不是如何实施(你会修改约会集合).还有另一种思考方式吗?

示例Q1

秘书:RecordAppointment(),RecordAppointmentCancellation()

预约:时间,日期,...(没有方法)

例Q2

医生:SeePatient()

虽然SeePatient是一个用例,但它对实际类的方法没有意义.你觉得这个怎么样?

ahs*_*ele 11

不幸的是,你所遇到的障碍在学术界非常典型.学术项目往往从视频租赁商店,图书馆或学生注册系统开始(你的医疗办公室不同于此),然后通过动物教授遗产.您提供的指南也非常典型

他们建议考虑一个对象可以为其方法做些什么,以及它对其属性的责任

事实上,当初学者问我通常会解释一个对象的属性是它所了解的事物,它的方法就是它知道如何做的事情.这真的只是另一种说明你在那里的东西的方式.正如您所发现的那样,当您开始讨论更有形的系统而不仅仅是示例时,这种思维方式会很快崩溃.

例如,该指南适用于此对象:

public class Tree
{
    public int Height { get; set; }
    public void Grow(int byHowMuch)
    {
        Height += byHowMuch;
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这肯定符合您的权利,但您认为它没有"感觉"正确:

public class Secretary
{
    public void MakeAppoinment(Patient patient)
    {
        //make the appointment
    }
}
Run Code Online (Sandbox Code Playgroud)

那么解决方案是什么?这是一个关于你正在教授和应用它的问题.学习和理解设计模式将对开发系统有很大帮助,这些系统比知道如何成长的树更具功能性.

推荐阅读:

为了解决你所呈现的问题,我可能会使用继承人类和接口的组合,这些类和接口将通过一系列服务类来执行他们的操作.基本上,秘书,医生和患者都将从人身上继承,并且这些课程中的每一个都可以传递给随附的服务类.服务类可能会也可能不会执行类似的操作SeePatient().请不要将此示例表示人员类没有方法.

Stack Overflow有一些以上可能有用的相关问题:

另外,最好还是看看:

最后,没有一个定义应用程序对象的定义.如何应用模式,原则等将定义您的程序.您问自己这些问题的事实表明您走在正确的轨道上.