在抽象中查看实现细节

时间:2017-07-26 16:58:03

标签: java oop abstraction

抽象的基本定义隐藏了方法的实现复杂性并显示了功能。虽然在处理代码时(我使用eclipse时)可以选择打开抽象方法的实现。

例如: -

我试图打开BufferedReader的实现能够看到许多实现。

因此,当我们能够看到实施时,我们如何隐藏复杂性。

我在概念上哪里出错?

2 个答案:

答案 0 :(得分:1)

Abstaction并不意味着从实际上隐藏实现细节。除非您有所注意,否则您仍将看到实现抽象方法的所有实现行。抽象意味着隐藏实现细节,以及如何在其代码中使用该方法。

假设您正在编写近似于函数导数的类。哪个功能?如果你把一个函数想象成抽象,这没关系。 你不关心这个功能是什么。您只需定义如何实现该功能的一些基本原则。它应该是一个double值,它应该返回一个double值。

这个概念隐藏了你的功能实现复杂性,来自你的类设计师。您现在可以继续执行您的工作。您可以编写以下类:

public abstract class DerivativeApprox {

    abstract double func(double x);

    double eps = 0.0;

    DerivativeApprox(double eps){
        this.eps = eps;
    }

    public double eval(double xPoint){
        return (func(xPoint + eps) - func(xPoint - eps)) / (2 * eps);
    }
}

现在任何人都可以通过以下方式使用您的课程(负责实施他们想要估算衍生工具的任何特定功能)

public static void main(String[] args) {

    DerivativeApprox cosDerApprox = new DerivativeApprox(0.0001) {
        @Override
        double func(double x) {
            return Math.cos(x);
        }
    };

    DerivativeApprox sinDerApprox = new DerivativeApprox(0.0001) {
        @Override
        double func(double x) {
            return Math.sin(x);
        }
    };

    System.out.println("Cos'(pi) = " + cosDerApprox.eval(Math.PI));
    System.out.println("Cos'(pi/2) = " + cosDerApprox.eval(Math.PI / 2));

    System.out.println("Sin'(pi) = " + sinDerApprox.eval(Math.PI));
    System.out.println("Sin'(pi/2) = " + sinDerApprox.eval(Math.PI / 2));

}

希望这个解释能帮助ypu继续进行OOP学习。

答案 1 :(得分:0)

您的定义是正确的,抽象隐藏了方法的实现复杂性并显示了功能。但这只是编程中的一个概念。它不是用于隐藏类或模块的实现细节的技术。您可以访问Java库中的任何预定义方法或类并进行探索。

但抽象的优点是,我们可以在不了解其实现细节或内部结构的情况下使用类或方法。

假设您是第一次使用BufferedReader课程。您只需要了解该类的功能(方法)。但是,您不需要研究这些方法的实施。这隐藏了用户的复杂性。他不需要意识到内部的复杂性。

希望这会对你有帮助....

相关问题