【问题标题】:Inheriting JFrame violates Generalization继承 JFrame 违反泛化
【发布时间】:2015-07-18 11:18:15
【问题描述】:

在开发 java 独立应用程序时,一些开发人员倾向于扩展 JFrame 类并实现(实现)一些 actionlistener 接口。它是否不违反 oops 和抽象中的泛化概念。它也没有违反单一责任原则。

[编辑] 通过违反 oops 中的泛化概念,我的意思是“is-a”关系变得无效。 继承类改扩展类

【问题讨论】:

  • 你认为什么是泛化概念和抽象?您可能是正确的违反单一责任原则,但我需要查看代码来确认这一点。
  • 我还没有准备好代码。但抽象是指让对象做事并包含与对象相关的事物。为了给我们通过继承 JFrame 所做的任何执行程序提供 UI,我们违反了泛化。不是吗?

标签: java oop design-patterns jframe actionlistener


【解决方案1】:

这种常见的反模式带来了几个问题:

class Application extends JFrame implements ActionListener {}

实现一个控制接口,例如ActionListener,对于self-contained example 可能很方便,但一个复杂的应用程序可能需要多个controller。使用 的示例检查here。另见Why CS teachers should stop teaching Java applets

【讨论】:

  • 我没有混淆包含层次结构,但很好奇 IS-A 关系是否因此被违反?
  • 对不起,如果我似乎 sententious 可能会造成混淆。基于APIhistory,我想说JFrame 的推导是相当一致的。您是否看到特定的异常情况?
  • 如果您能简要说明违反单一责任原则的情况,将接受答案
【解决方案2】:

您的问题有点令人困惑且难以理解,因为您使用了奇怪的术语。这些句子是正确的并且有意义:

  • 一个类扩展另一个类
  • 一个类实现一个接口
  • 类从其父类继承方法

这些句子不恰当,不清楚:

  • 一个类继承另一个类
  • 违反泛化概念

尤其是没有代码,我只能猜测你在问什么,但我还是试着回答:

  • 一个扩展了 JFrame 的类,同时实现了一个动作监听器接口,违反了单一职责原则,一次是两件事
  • 扩展JFrame的类同时包含一些与显示或配置JFrame无关的逻辑,同时做两件事违反了单一职责原则。它还违反了模型-视图-控制器的良好分离
  • 一个扩展 JFrame 的类,但就其行为/实现而言,它主要不是 JFrame 而是其他东西,因此它违反了 JFrame 的抽象,它不应该扩展 JFrame,而是可能包含它

【讨论】:

  • 那么抽象和 is-a 关系呢?只会违反 MVC 分离吗?感谢您的回复。并进行更正
  • 你是对的,是的,好的抽象也会被破坏。我在回答中又加了一点
  • 感谢您提供详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 2021-05-16
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多