weixin_42300904 2009-03-18 22:20
浏览 183
已采纳

请教,面向对象的困惑?

我打个比如来说,大家帮忙看看我的想法哪里错了

比如要建立一个论坛,论坛有很多种板块,比如像javaeye的有java板块,ajax板块。
每个板块都一些设置,不同的板块可能有些不同的设置或显示选项。
如果用建关系表,那我可以用一个forum_type的表来存储板块类型,然后用一个forum_type_property来对应不同板块的属性设置。

但如果用对象来建类,那是不是像这样:


public class Forum{
}


JavaForum:

public class JavaForum extends Forum{
}


AjaxForm:

public class AjaxForm extends Forum{
}


但如果这样的话,那我要增加一个种类的板块,岂不是要新建一个类?而不是像关系表那样,新增一个板块就添加相应的数据就可以了……

我知道我的理解是有问题的,请问我的想法错在哪里?
问题补充:
没明白,可能我举的例子有问题
再说一个,比如我有一个动态添加动物的功能,关系数据表是这样的。
一个动物表:
t_animal:
id   name
1    老虎
2    乌鸦

然后一张动物的器官表:
t_animal_part:
id  animal_id part_name
1      1         头
2      1         四肢
3      1         尾巴
4      2         头
5      2         双脚
6      2         尾巴
7      2         翅膀

乌鸦比老虎多了翅膀的部分。
如果我要添加一种动物,比如蛇,那么只要在t_animal表添加一条“蛇”的数据,
然后在t_animal_part表添加相应的不分即可。不用改任何代码。

但如果按照每一种动物一个类的话,比如:

public Tiger extends Animal{
}

那势必是每添加一种动物就要加一个类吧?
比如添加蛇就要添加一个这样的类:

public snake extends Animal{
}


或者说,用类继承都是静态,固定了的,不可在运行时再添加或者删除。
那如果我现在要做一个可以在运行时添加删除动物的功能,是不是就不能用这种面向对象的想法了?


问题补充:

-----------------------------补充分割线--------------------------------

你说的我应该明白。
但不知道你有没有看我的问题补充,那个动物的例子。
我说的就是每个动物都是不同的。比如老虎有四条腿没有翅膀,而乌鸦两条腿有翅膀。
如果按上文说的数据表来建模,那么我添加一种动物只需要保存相应的数据即可。但如果建模成那种继承的类模型,就不是添加数据就可以解决问题了。因为要添加相应的类。

其实我的意思大概应该也相当于你说的那个SpeForum。
按你的说法,那只能是添加相应的类了。
  • 写回答

5条回答 默认 最新

  • playfish05 2009-03-19 00:02
    关注

    之所以需要继承覆盖,是因为版块之间属性差异,或者功能差异,业务逻辑差异很大,才需要一个这样特殊的,覆盖的方法。正常情况下,所有版块都是一个forum对象。

    你举的,老虎跟乌鸦的不同这样的理解就错了。

    老虎跟乌鸦都可以归结为animal对象,他们有腿跟翅膀的不同,那是对象的属性不同,就像老虎跟乌鸦的名字不一样,不同的对象肯定有不同的熟悉。

    对于业务来说

    老虎 = new Animal(1);
    乌鸦 = new Animal(2);

    老虎.腿=4
    老虎.翅膀=0

    乌鸦.腿=2
    乌鸦.翅膀=2

    本质,都是Animal。属性不同而已

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?