提一个面向对象开发的百思不得其解的问题

lcong 2006-02-19 03:14:45

现有一个班级类和一个学生类
有一个方法是一次设置几个学生为同一班级的方法
问该方法是应该在班级类中实现还是学生类中实现?
...全文
774 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
wd_6532 2006-02-21
  • 打赏
  • 举报
回复
如果用班级的话,你需要维护的集合类必须是线程安全的。

=============
好,深入. 从这点上来说,班机就不要加这个功能了吧? 除非你加入线程同步?
alemjann 2006-02-21
  • 打赏
  • 举报
回复
用学生好一点。
如果用班级的话,你需要维护的集合类必须是线程安全的。
dayang2001911 2006-02-21
  • 打赏
  • 举报
回复
分析:
学生和班级的关系:一个学生只对应一个班级,一个班级必须有多于一个的学生。
而且,一个学生只有在被开除,转学的时候才会不属于这个班级,即使毕业了,这个学生仍然属于该班级,只是毕业了而已,比如:2001级计算机系的学生甲,他所在的班级永远是2001compter,不会变成其他的班级。


我觉得是否应该先把需求考虑清楚,否则会讨论得不着边际了。
ZyxIp 2006-02-21
  • 打赏
  • 举报
回复
选择多个学生只是界面上的操作罢了.

学生类中肯定有"所属班级"这个属性了.如果有学生可以属于多个班级的情况,则"所属班级"是一个列表.

当选中多个学生后,循环设置所有学生的"所属班级"属性并保存到数据库中,然后调用班级对象的"刷新学生人数"的方法来刷新界面上的显示.

在创建班级对象的时候没有必要就创建所有的学生对象,只有在需要显示或调用学生对的方式时才创建学生对象.


alemjann 2006-02-21
  • 打赏
  • 举报
回复
好,深入. 从这点上来说,班机就不要加这个功能了吧? 除非你加入线程同步?
--------------------------------------------------------------------
java.util里面有已经有线程安全的集合类了。拿来用就行。
lcong 2006-02-20
  • 打赏
  • 举报
回复
感觉 boltzjf(Bolt) 分析的比较透彻
dext 2006-02-20
  • 打赏
  • 举报
回复
Class.add(Student);
canji 2006-02-20
  • 打赏
  • 举报
回复
实际项目中类似的功能班级类和学生类都必须实现。
水晶平衡木 2006-02-20
  • 打赏
  • 举报
回复
想问一下:一个学生可以在多个班级里面吗?可以没有任何班级吗?最好看看这两个实体之间的关系究竟是怎样的,到底是有多紧密,谁依赖谁更多一些?

个人认为,班级和学生是两个不同的实体,它们的存在都不以单个的对方为必要条件(注意是“单个的”,当然,如果一个班级如果连一个学生都没有的话,它的存在就没有什么必要了,呵呵)。

在这种情况下,我觉得提供一个第三方的对象来管理它们之间的关系会比较适合一点。这样的话,它们的单独个体之间不会产生直接的依赖关系,比较符合实际,而且这种关系会比较松散且唯一,也就是没有冗余。因为如果在两个实体上都需要维护与对方的关系,那么这个关系就会冗余,比如:学生甲是属于班级A的,那么学生甲就要自己记得自己的班级是班级A,而班级A也要记得自己有一个学生甲,在这种关系解除或者变化的时候,就需要将二者都改变,忘了一个的话就会出问题哦,^_^

至于那个方法放在哪里,我的想法是都可以放,在班级里可以放一个addStudent,在学生里放一个joinClass,这些我认同上面兄弟们的意见,^_^,只是无论是哪个方法调用的都是那个第三方的对象的真正实现,也就是说,关系只维护一个,不冗余。
hsnh1981 2006-02-20
  • 打赏
  • 举报
回复
学生类继承班级类中一个设置班级的变量就可以了!
超级大笨狼 2006-02-20
  • 打赏
  • 举报
回复
当然是班级类中。

涉及多个学生的操作当然要放班级类啊。
学生类最好只针对一个学生实例操作。对多个的就要写静态方法来实现。

班级类你可以写动态方法。也可以写静态方法。
weiqin25 2006-02-20
  • 打赏
  • 举报
回复
我也认为班级类,他的目的是把学生放到班级,况且班级是学生的集合体,应该把学生封装进去也是必须的
wd_6532 2006-02-20
  • 打赏
  • 举报
回复
boltzjf(Bolt)的第三个类的方法在设计模式上叫 中介者 Mediator
infowain 2006-02-20
  • 打赏
  • 举报
回复
应该设置在学生类中比较好
interpb 2006-02-20
  • 打赏
  • 举报
回复
学生
interpb 2006-02-20
  • 打赏
  • 举报
回复
学生的属性按照OOP来讲
应该是在类中封装实现

当然班级类可以调用这个方法!
EnginePlus 2006-02-20
  • 打赏
  • 举报
回复
这个 可以都写:)
班级类里 addStudent()


学生类里可以 setClass()

^_^

larryzhao 2006-02-20
  • 打赏
  • 举报
回复
boltzjf(Bolt)讲的的确有些道理,不过能不能具体讲一下应该怎么设计这个第三方类呢?我没什么想法,很想听听大家讲下

其实我自己觉得还是在学生类中设置一个成员字段来保存班级信息比较好,写get和set的方法来设置,如果是添加很多学生即同此:

学生.setClass(班级)
班级.setMember(学生集合) {
学生.setClass(this);
}
wd_6532 2006-02-20
  • 打赏
  • 举报
回复

从实现上 反证法:
假如要在班机中设置一次设置多个学生. 一次设置多少个,你定了.肯定没定.

不定数的要实现有两种方法,
一种是先把选中的学生存放到一个数据结构中,比如容器类,然后把这个容器传入 班机的方法.
但是你怎么样才能填充这个容器呢,还不是得for each selected?

二种是用可变个数得函数参数. 有点涩了.
wd_6532 2006-02-20
  • 打赏
  • 举报
回复
学生类继承班级类中一个设置班级的变量就可以了!

====================
如果你面试的话,你该走人了.
加载更多回复(19)

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧