【问题标题】:Why we use abstraction [duplicate]为什么我们使用抽象[重复]
【发布时间】:2019-06-21 06:58:48
【问题描述】:

我知道抽象是什么,但我想知道使用它的目的是什么,如果我们必须实现所有功能,为什么不直接编写它们 例如

interface Moveable{
     public void move();
}
class Human implements Moveable{
    public void move(){
          System.out.println("walk");
    }

 }

 //or just write (why use abstraction)

class Human{
    public void move(){
          System.out.println("walk");
    }

}

【问题讨论】:

  • 添加FishApeInsectAlien 类。现在尝试编写一些必须move 其中任何一个的代码。
  • 你在哪里使用了抽象?
  • 通过抽象,我们可以将可以分组的东西分离成另一种类型。可以将经常更改的属性和方法分组到一个单独的类型中,这样主类型就不需要进行更改。这增加了 OOAD 原则的强度。 > “代码应该对扩展开放,但对修改关闭” 简化了领域模型的表示。并且在android中主要是通过传递instance的方式在fragment之间传递数据,并使用接口方法进行回调。

标签: java


【解决方案1】:

有用的抽象用于控制复杂性。

没有这些有用的抽象,你的第一个类的前 5 行更容易编写。但在现实世界中,任何有价值的东西都会随着时间的推移而增长。用户想要附加功能,出现错误并需要修复,等等。

如果您没有为接下来的 500 行代码做好准备,在接下来的课程中,该代码将很快变成维护的噩梦。

换句话说:现实世界太复杂,无法用代码完全表示。因此,您必须预测在您的应用程序中重要的基本“模式”,并找到以更简洁的方式表达它们的方法。

在您的示例中,是的,只有 一个 类实现了该接口。但是如果你有 50 节课,或者 100 节课呢?然后您的客户端代码必须知道 Human、Cat、Dog、Snake ……所有这些类都有一个 move() 方法。这真的更简单比能够检查“类是否实现接口Moveable?!

【讨论】:

    【解决方案2】:

    使用抽象有两个原因。首先支持推理和交流;如果一个人的主要考虑是他或她可以走路,那么对移动的东西的明确视图是合适的。其次提供不同实现的统一。假设有如下第二个实现。

    class Tiger implements Moveable{
        public void move(){
            System.out.println("stalk");
        }
    }
    

    接口Moveable提供了一个统一的方式来访问一个通用类型。话虽如此,如果接口只有一个实现,则该接口在技术上不是必需的,但仍可能提供实现的清晰度和可扩展性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-23
      • 2020-04-03
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多