浅谈Java类的设计

需求:

  • 有一个在线教育的系统一个练习题模块,需要在练习模块设计题目。题目有母题(每种类型题的典型题),重点题和普通的题目。
  • 一道题可能是母题也可能是重点题,或者两者兼得;但如果某道题没有分配类型,那它就不可能是母题,因为类型题是根据母题来分配的

分析:

  1. 母题、重点题、普通题都是题目的一种,那么题目就是他们仨的最高抽象,这么来看题目可以暂定为接口(因为接口比继承关系要好得多)。
  2. 母题和重点题不是相互排斥的关系,也不是相互包含的关系(如果使用聚合,那么到底是母题包含重点题?还是重点题包含母题?这肯定不对吧)所以这两者的关系不太好确定,那么最后再回来看他。但我觉得母题和重点题应该是同级的关系
  3. 还需要考虑一个问题,母题和类型题之间的关系,母题一定是类型题,但类型题不一定是母题,这么看来是类型题包含了母题
    题目可能是有类型的,也可能是无类型的。
那我们来看看现在能整理出什么来

图1 初步草图

  • 看似还可以,但是没有体现出母题和重点题之间的关系,如果一道题既是母题又是重点题,那么将无法表示。
  • 那么,如果我们将母题和重点抽象为接口呢?尝试这种方案,普通题不能再抽象,他就是实体。注意,无类型的题需要特别关注,母题不可能没有类型,因为类型就是它自己,而重点题和普通题是可以没有类型的
画出草图,这样我们解决了一道题既是母题又是重点题无法表示的问题

图2 终极草图
注意:母题和无类型互斥的,所以在类型的接口里添加方法判断是否有类型
图3 最终UML图

  • 不过这样会导致一个问题,一道无类型的题也可以是母题,这就得在母题的接口去添加判定是否有类型的方法。这也是我能想到的最好的解决方案。希望如果您有更好的点子,烦请提出意见,感激不尽

PS:我也想过是否可以用一个题目类来表示所有的题,母题和重点题用类中一个属性来表示,没有没么做的原因就是“上帝类“太冗杂,改动起来十分困难,扩展性极差。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Java中的BorderLayout是一种常用的布局管理器,它将容器分为5个区域:北、南、东、西和中间。在使用BorderLayout时,我们可以通过设置组件的位置来确定它们在容器中的位置。 下面是一个简单的例子,演示如何使用BorderLayout: ``` import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; public class BorderLayoutExample { public static void main(String[] args) { JFrame frame = new JFrame("BorderLayout Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button1 = new JButton("North"); JButton button2 = new JButton("South"); JButton button3 = new JButton("East"); JButton button4 = new JButton("West"); JButton button5 = new JButton("Center"); frame.add(button1, BorderLayout.NORTH); frame.add(button2, BorderLayout.SOUTH); frame.add(button3, BorderLayout.EAST); frame.add(button4, BorderLayout.WEST); frame.add(button5, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } } ``` 在这个例子中,我们创建了一个JFrame,并在其中添加了5个JButton。使用BorderLayout将它们放置在窗口的不同位置。在上面的代码中,我们将button1放置在北面,button2放置在南面,button3放置在东面,button4放置在西面,button5放置在中心。 需要注意的是,当我们在使用BorderLayout时,如果某个位置没有被占用,那么它将会自动被设置为空。另外,如果我们在同一个位置添加了多个组件,那么后添加的组件将会覆盖先添加的组件。 总之,BorderLayout是一个非常常用的布局管理器,可以帮助我们轻松地将组件放置在容器中的不同位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bia!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值