提一个面向对象开发的百思不得其解的问题 现有一个班级类和一个学生类有一个方法是一次设置几个学生为同一班级的方法问该方法是应该在班级类中实现还是学生类中实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 既然要为学生设置班级,应该是将方法放在学生类中较好,学生.setClass() 学生.setClass(班级)班级.setMember(学生集合) { 学生.setClass(this);} 设计对象时不要考虑如何从数据库中取数据个人感觉这个方案较好:antter(JiangMiao|www.sssdf.com) 学生.setClass(班级)班级.setMember(学生集合) { 学生.setClass(this);} 应该设置在学生类中比较好理解一点吧.你可以这样定义:class Student{ private int stuClass; ..... public void setStuClass(){ stuClass = ......; }} public StudentClass{vector v;void addStudents(Student[] s){for(int i=0;i<s.lenth;i++){v.addElemet(s[i]);}}} 这个 可以都写:)班级类里 addStudent()学生类里可以 setClass() ^_^ 学生的属性按照OOP来讲应该是在类中封装实现当然班级类可以调用这个方法! 想问一下:一个学生可以在多个班级里面吗?可以没有任何班级吗?最好看看这两个实体之间的关系究竟是怎样的,到底是有多紧密,谁依赖谁更多一些?个人认为,班级和学生是两个不同的实体,它们的存在都不以单个的对方为必要条件(注意是“单个的”,当然,如果一个班级如果连一个学生都没有的话,它的存在就没有什么必要了,呵呵)。在这种情况下,我觉得提供一个第三方的对象来管理它们之间的关系会比较适合一点。这样的话,它们的单独个体之间不会产生直接的依赖关系,比较符合实际,而且这种关系会比较松散且唯一,也就是没有冗余。因为如果在两个实体上都需要维护与对方的关系,那么这个关系就会冗余,比如:学生甲是属于班级A的,那么学生甲就要自己记得自己的班级是班级A,而班级A也要记得自己有一个学生甲,在这种关系解除或者变化的时候,就需要将二者都改变,忘了一个的话就会出问题哦,^_^至于那个方法放在哪里,我的想法是都可以放,在班级里可以放一个addStudent,在学生里放一个joinClass,这些我认同上面兄弟们的意见,^_^,只是无论是哪个方法调用的都是那个第三方的对象的真正实现,也就是说,关系只维护一个,不冗余。 感觉 boltzjf(Bolt) 分析的比较透彻 学生类.所属班级是学生类的属性.并不能因为你想批处理方便就换属性的存在地.for each selected{ objstudent.setclass(&objclass); objclass.addmember(&objstudent);}也可以把 objclass.addmember(&objstudent);放到 student.setclass中调用.比如 CStudent::setclass(CClass& objclass){ this->pClass=objclass; objclass.addmember(this);} 从实现上 反证法:假如要在班机中设置一次设置多个学生. 一次设置多少个,你定了.肯定没定.不定数的要实现有两种方法,一种是先把选中的学生存放到一个数据结构中,比如容器类,然后把这个容器传入 班机的方法. 但是你怎么样才能填充这个容器呢,还不是得for each selected?二种是用可变个数得函数参数. 有点涩了. boltzjf(Bolt)讲的的确有些道理,不过能不能具体讲一下应该怎么设计这个第三方类呢?我没什么想法,很想听听大家讲下其实我自己觉得还是在学生类中设置一个成员字段来保存班级信息比较好,写get和set的方法来设置,如果是添加很多学生即同此:学生.setClass(班级)班级.setMember(学生集合) { 学生.setClass(this);} boltzjf(Bolt)的第三个类的方法在设计模式上叫 中介者 Mediator 分析:学生和班级的关系:一个学生只对应一个班级,一个班级必须有多于一个的学生。而且,一个学生只有在被开除,转学的时候才会不属于这个班级,即使毕业了,这个学生仍然属于该班级,只是毕业了而已,比如:2001级计算机系的学生甲,他所在的班级永远是2001compter,不会变成其他的班级。我觉得是否应该先把需求考虑清楚,否则会讨论得不着边际了。 好,深入. 从这点上来说,班机就不要加这个功能了吧? 除非你加入线程同步?--------------------------------------------------------------------java.util里面有已经有线程安全的集合类了。拿来用就行。 JAVA基础 byte[]数组怎么存放127~255之间的整数的? 数学问题 请问unicode4增补字符怎么用System.out.println显示出来?? 关于匿名内部类的问题 字符转ASCII的问题 看看我这是为什么呀? 求个Thinking in java第三版本的课后答案 求张孝祥JAVA视频教学 高级篇 下载地址 给个下载地址就结帖 这样的程序应该怎么编译??? 在这个小程序中,我想测试一下init(),start(),stop(),destroy()这几个方法的功能,但是... MySQL5+Jdk5+tomcat5需要什么版本的jdbc驱程?
班级.setMember(学生集合) {
学生.setClass(this);
}
个人感觉这个方案较好:
antter(JiangMiao|www.sssdf.com)
学生.setClass(班级)
班级.setMember(学生集合) {
学生.setClass(this);
}
你可以这样定义:
class Student{
private int stuClass;
.....
public void setStuClass(){
stuClass = ......;
}
}
vector v;void addStudents(Student[] s){
for(int i=0;i<s.lenth;i++){
v.addElemet(s[i]);
}}}
班级类里 addStudent()
学生类里可以 setClass() ^_^
应该是在类中封装实现当然班级类可以调用这个方法!
{
objstudent.setclass(&objclass);
objclass.addmember(&objstudent);
}也可以把 objclass.addmember(&objstudent);放到 student.setclass中调用.比如
CStudent::setclass(CClass& objclass)
{
this->pClass=objclass;
objclass.addmember(this);
}
从实现上 反证法:
假如要在班机中设置一次设置多个学生. 一次设置多少个,你定了.肯定没定.不定数的要实现有两种方法,
一种是先把选中的学生存放到一个数据结构中,比如容器类,然后把这个容器传入 班机的方法.
但是你怎么样才能填充这个容器呢,还不是得for each selected?二种是用可变个数得函数参数. 有点涩了.
班级.setMember(学生集合) {
学生.setClass(this);
}
学生和班级的关系:一个学生只对应一个班级,一个班级必须有多于一个的学生。
而且,一个学生只有在被开除,转学的时候才会不属于这个班级,即使毕业了,这个学生仍然属于该班级,只是毕业了而已,比如:2001级计算机系的学生甲,他所在的班级永远是2001compter,不会变成其他的班级。
我觉得是否应该先把需求考虑清楚,否则会讨论得不着边际了。
--------------------------------------------------------------------
java.util里面有已经有线程安全的集合类了。拿来用就行。