有个疑问
1。有个grade成绩属性,有个student类和section类,现在要取得一个学生的成绩,那grade 是放在studen类中还是放在section类中?2.在比如,有个opendoor()的方法,现在有个事件,人开门,那时 是放在person类中还是放在door类中?然后又想了下,类库中操作数据库的connection类里面的close(关闭连接的方法),它是放在连接类中的,那是不是如上opendoor(开门)也可以放在door类中? 但是有常听人说开门应该放在person类中?因为开门由人来开的想听听大家的意见,一般怎么设计面向对象的类,属性,方法的?或者怎么区分?请具体点说明下
1。有个grade成绩属性,有个student类和section类,现在要取得一个学生的成绩,那grade 是放在studen类中还是放在section类中?2.在比如,有个opendoor()的方法,现在有个事件,人开门,那时 是放在person类中还是放在door类中?然后又想了下,类库中操作数据库的connection类里面的close(关闭连接的方法),它是放在连接类中的,那是不是如上opendoor(开门)也可以放在door类中? 但是有常听人说开门应该放在person类中?因为开门由人来开的想听听大家的意见,一般怎么设计面向对象的类,属性,方法的?或者怎么区分?请具体点说明下
解决方案 »
- treeview 要如何写,才能绑定为节点“类型”的子节点,哪位高手,指导一下呀。
- c# 创建类(.cs)
- 求教:如何在一个嵌入word的winform程序中新建一个空白页并写入内容
- sql-server的备份为什么都是在绝对目录下?
- 求:读取网站访问记录。(已知相关函数)
- C# 调用Oracle 10g存储过程
- datagridview问题,大家帮忙看下呀?
- 把DataGridView中数据导出到文本文档
- 极度地菜问题
- 请问大家,有多少人是把程序代码写在.aspx页,有多少人是.aspx和.cs后端分开写的?
- 苦恼 xpo 如何禁用约束
- 在Window7安装Microsoft Visual Studio 2008,是不是取消debug和release选项
真正的面向对象思想的话,两个都要写.
public class Door
{
private string _operators;
/// <summary>
/// 记录开门者
/// </summary>
public string Operators
{
get { return _operators; }
set { _operators = value; }
}
public void OpenDoor()
{
}
/// <summary>
/// 某人打开门
/// </summary>
/// <param name="p">人</param>
public void OpenDoor(Person p)
{
_operators = p.Name;
OpenDoor();
}
} public class Person
{
private string _name; /// <summary>
/// 姓名
/// </summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// 开门
/// </summary>
/// <param name="door">要打开的门</param>
public void OpenDoor(Door door)
{
door.OpenDoor(this);
}
}Door的第一个无参重载的OpenDoor()方法,主要用于初始化..例如Door为Room的一个成员,希望初始化Room的时候门就是打开的,而初始化Room时不需要Person.就可以使用OpenDoor()来初始化.
第二个OpenDoor(person p)有参的,是向外提供的操作方法.
----------------
总的来说,是互操作性的体现.
因为对Person类来说,它更像一个基类,抽象的.基类上不要定义任何具有针对性的方法.因为Person类更广泛,OpenDoor()方法对使用者来说会引起疑惑.
第二个:
现实世界是the door has been opened表明door发生了事件而不是person发生了事件...这个我认同,但就方法而言,保留意见.
在设计模式中,一个对象可以用自身构造函数构造.也可以被工厂模式中的构造方法构造.
现在我有一个需求,一扇门我希望它在打开和关闭的时候都记录是谁打开的.
于是有两种设计模式.
1. Door.OpenDoor(Person p)
2.Person.OpenDoor(Door d)
两者效果一样,只不过是观察模式不同而已.但个人比较推崇2,因为Door是不会主动打开的,只会被打开.
所以Person.OpenDoor(Door d)方式更直观.2楼已经讲述过为什么Door要保留OpenDoor(),是为初始化而为之.
定义一个
public interface IOperationDoor
{
void OpenDoor();
}的接口未尝不可.