我对抽象的理解是否正确?

时间:2015-06-13 22:59:25

标签: oop encapsulation abstraction reusability code-complexity

我已经阅读了其他有关抽象和封装的帖子,但我对自己的理解并不自信;或者我理解他们,但对他们内容的清晰度感到不满意。以下是我对抽象和封装的理解。他们在哪些方面准确/不准确/完整/不完整?

"抽象是程序员在原始数据类型不足时扩展语言而创建的数据类型。与原始数据类型一样,抽象的规范列出了它们所需的输入和它们返回的输出,但规范并没有使用在输入上操作的方法,函数和变量来压倒程序员。类是抽象的一个例子。 API是抽象的另一个例子。"

"封装是指抽象数据类型(即类)彼此隔离的状态,因此它们的方法,函数和变量不会相互冲突,因此程序员可以轻松地重用其他类中的现有类。程序而不关心这样做会干扰程序的其余部分(假设程序员正确地提供了所需的输入并正确处理了返回的数据)。"

3 个答案:

答案 0 :(得分:1)

我更喜欢Robert C. Martin在APPP中的定义:

  

抽象是消除不必要的和必要的放大。

答案 1 :(得分:0)

我会说你的理解是正确的......所以,我更犹豫地更具体地评论。

但是,如果我要评论,我可能会说“数据类型可用于实现抽象......”,而不是“抽象是数据类型...”,因为抽象可以存在于软件之外(它伤害我说: - )。

但那只是挑剔。我想你明白了。经过36年的编码,我希望我能做到......主要是支持合理抽象级别的语言(PL / 1,Pascal,C,C ++,Java)。

但是,在工业界有许多优秀的聪明人,他们没有软件抽象的概念,并且认为它很容易受到影响。

就我个人而言,我认为良好的无误的抽象概念是固体软件工程的关键技术要素。

答案 2 :(得分:0)

我以前从未遇到过封装的定义。该定义听起来更像是命名空间的用途。我一直在阅读封装纯粹是关于限制对代码的某些组件的访问的能力,例如OOP语言中的访问修饰符。但是,在维基百科上似乎有两种封装定义,这对我来说是新闻:

  

封装是将数据和功能打包成一个单一的   零件。使用类支持封装的功能   在大多数面向对象的编程语言中,尽管如此   替代品也存在。它允许选择性隐藏属性和   通过建造一个不可穿透的墙来保护物体的方法   来自意外腐败的代码。

     

在编程语言中,封装用于指代两种中的一种   相关但不同的概念,有时是组合   物:

     
      
  1. 用于限制对某些对象的访问的语言机制   组件。
  2.   
  3. 促进捆绑的语言结构   使用方法(或其他功能)操作的数据   数据。
  4.         

    一些编程语言研究人员和学者使用   第一个含义单独或与第二个含义相结合   面向对象编程的区别特征,而其他   提供词法闭包视图的编程语言   封装作为与对象正交的语言的特征   取向。

         

    第二个定义的动机是许多OOP   隐藏组件的语言不是自动的,也不能被覆盖;   因此,信息隐藏被那些人定义为一个单独的概念   更喜欢第二个定义。   source

所以,我想我总是用点#1来定义封装,但看起来有些人将它定义为将方法和数据捆绑在一起的能力,以及术语#1“信息隐藏”。