抽象中的功能和实现细节有什么区别?

8

我正在学习面向对象编程和Java,抽象化的定义是隐藏实现细节,只提供功能给用户。

有人能解释一下功能和实现细节之间的区别吗?


可能是[Java中如何通过抽象来隐藏实现细节?]的重复问题(https://dev59.com/XaTja4cB1Zd3GeqPI-Qw)。 - Lino
也许更好的重复问题链接:https://dev59.com/4XVD5IYBdhLWcg3wTJvF - Lino
不要过多考虑这些定义。“抽象”、“细节”和“功能性”之所以被使用,是因为它们仍然具有字典中的普通含义。在编程中没有确切的意义。它是一个概念,对每个人都略有不同的意义。人们试图用“抽象”来表达的意思是你不会深入到细节层面(例如你将使用哪种for/while循环),而是保持在概念层面。一个“实现细节”总是指任何你感觉太详细以至于需要描述该概念的细节。同样的事情在其他地方可能是一个概念。 - zapl
5个回答

11

实际例子:想象一下一个齿轮箱,用户只有能够改变齿轮的功能。

齿轮箱背后的机制以及齿轮箱如何在内部工作是实现,而实现对用户来说是隐藏的。


5
一个很好的例子是Java List接口。它提供了方法来动态地添加或删除列表中的元素。这就是其功能。具体实现方式并没有在该接口中表达出来,对于使用该List接口的用户而言,这也不太重要。例如,实现可能是一个双向链表,你只需要改变列表中对象之间的“链接”,或者如果使用了需要增长/缩小的数组,那就由实现来决定。当然,不同的实现选项有其优缺点,但在许多情况下,你可能会决定不关心它们。

3

功能:它的作用是什么

实现:它是如何实现的


2
封装: 将数据包装成一个单元,这个单元就是类。在类内部,有成员变量,这些变量被包装在一个叫做类的单元中。例如,你的书包是一个单元,你把书、笔放进书包里面,同样的,类也是一个单元。 封装资源: 抽象: 隐藏后台细节。面向对象编程提供了这些功能。我们可以将数据存储在对象中,从而提供安全性。类也提供了这个功能,你无法访问私有数据。只有公共和受保护的数据可以被访问,如果你想保护你的数据,可以把它设为私有。 抽象资源:

1
简单来说,考虑下面的代码:
public Data getStoredData(int ID) {
    DBConnection conn = DBConnection.getInstance();
    conn.connect();

    Data data = conn.query("..." + ID);

    if(data != null) {
        data.setSomeValue('Some Value');
    }

    return data;
}

术语“实现细节”是指您在函数内部编写的代码。
术语“功能”是指方法签名或您想要向调用客户端公开的内容。这是您希望使用该方法的方式。
在上面的例子中,功能是这个 public Data getStoredData(int ID),而你的实现是驻留在其中的一个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接