Oop 面向对象设计方法
问题1。 在我大学的面向对象建模和设计研究中,他们建议思考对象可以为其方法做什么,以及它对其属性的责任是什么。所有澄清的尝试都导致了进一步的混乱 这倾向于生成一个类图,其中参与者拥有所有动作,内部类只保存数据 这似乎不正确。关于如何对对象建模,还有其他的思考方式吗 问题2。此外,本课程似乎强调按照真实世界中的对象建模,但在领域模型中并不一定有意义。例如,在医疗实践中,他们有Oop 面向对象设计方法,oop,class-design,analysis,Oop,Class Design,Analysis,问题1。 在我大学的面向对象建模和设计研究中,他们建议思考对象可以为其方法做什么,以及它对其属性的责任是什么。所有澄清的尝试都导致了进一步的混乱 这倾向于生成一个类图,其中参与者拥有所有动作,内部类只保存数据 这似乎不正确。关于如何对对象建模,还有其他的思考方式吗 问题2。此外,本课程似乎强调按照真实世界中的对象建模,但在领域模型中并不一定有意义。例如,在医疗实践中,他们有患者:CreateAppointment(),CancelAppointment(),但这不是它的实现方式(您将改为修改预约
患者:CreateAppointment(),CancelAppointment()
,但这不是它的实现方式(您将改为修改预约集合)。有没有其他的思考方式
示例Q1
秘书:RecordAppointment(),RecordAppointmentCancellation()
约会:时间、日期,。。。(无方法)
示例Q2
医生:病人
虽然
SeePatient
是一个用例,但它对于实际类上的方法没有意义。你对此怎么看?不幸的是,你遇到的障碍在学术界太典型了。学术项目往往从视频租赁店、图书馆或学生注册系统开始(你的项目与医生办公室不同),然后用动物教授遗传。您提供的指南也是非常典型的
他们建议考虑对象可以为其方法做什么,以及它对其属性的责任是什么
事实上,当初学者提问时,我通常会解释一个对象的属性是它知道的关于它自己的事情,它的方法是它知道如何做的事情。这实际上只是另一种表达你所拥有的东西的方式。正如您所发现的,当您开始讨论更具体的系统而不仅仅是示例时,这种思维方式很快就会崩溃
例如,该指南适用于此对象:
public class Tree
{
public int Height { get; set; }
public void Grow(int byHowMuch)
{
Height += byHowMuch;
}
}
虽然这当然符合条例草案,但你有权认为它“感觉”不对:
那么解决办法是什么呢?这是一个将你所学到的知识运用到实践中的问题。学习和理解将大大有助于开发比一棵知道如何生长的树更实用的系统
建议阅读:
- (也称为四人帮或GoF)
SeePatient()
的操作。请不要认为这个例子意味着person类没有方法
堆栈溢出有几个可能有用的相关问题:
这也与Q1有关,因为约会对象的职责是保存自身,因此它可能实现一个ISaveAppoimmation接口,该接口需要字段和方法来执行。预约还负责在保存之前提供日期、时间和患者等信息,因此ISaveAppoimmment界面应该要求这些信息存在,以及预约。Schedule()应该验证值是否正确或以前是否验证过。您是对的,在许多情况下,更高阶的事物更自然地包含行为,如系统或用户 您可以在类中将此行为建模为在数据模型上操作的静态方法。这不是OO,但很好。您可以将相关的方法组合到这样的类中,很快您就有了“服务”的概念,就像在面向服务的编程中一样 在Java中,有用于创建此类类的规范和标准,即EJB中的无状态会话bean。Spring框架具有与原型“服务”类似的概念,原型“服务”可以应用于类,将它们标记为业务逻辑的外观 服务是封装系统中特定功能或行为的组件。它在一个给定的对象模型上运行(要么是它自己的内部模型,要么是更多的基因模型)
public class Secretary
{
public void MakeAppoinment(Patient patient)
{
//make the appointment
}
}
public abstract GenderAppropriateDolly {
protected DrOffice Drkilldare;
public override MakeAppointment() {throw new NotImplementedException();}
}
public class GIJoe : GenderAppropriateDolly {
DrKilldare = new DrOffice();
List<Appointment> myAppointments = new List<Appointment>;
public void MakeAppointment () {
myAppointments.Add(DrKilldare.BookAppointment(this));
}
}
public class DrOffice {
List<Appointment> officeAppointments = new List<Appointments>;
public Appointment BookAppointment(GenderAppropriateDolly forWhom) {
Appointment newappt = new Appointment(formWhom);
this.Appointments.Add(newappt);
return newappt;
}
}
public class Kid {
GenderAppropriateDolly myRoleModel = new GIJoe();
// Joe got wounded so ...
myRoleModel.MakeAppointment();
}