我已经阅读了其他有关抽象和封装的帖子,但我对自己的理解并不自信;或者我理解他们,但对他们内容的清晰度感到不满意。以下是我对抽象和封装的理解。他们在哪些方面准确/不准确/完整/不完整?
"抽象是程序员在原始数据类型不足时扩展语言而创建的数据类型。与原始数据类型一样,抽象的规范列出了它们所需的输入和它们返回的输出,但规范并没有使用在输入上操作的方法,函数和变量来压倒程序员。类是抽象的一个例子。 API是抽象的另一个例子。"
"封装是指抽象数据类型(即类)彼此隔离的状态,因此它们的方法,函数和变量不会相互冲突,因此程序员可以轻松地重用其他类中的现有类。程序而不关心这样做会干扰程序的其余部分(假设程序员正确地提供了所需的输入并正确处理了返回的数据)。"
答案 0 :(得分:1)
我更喜欢Robert C. Martin在APPP中的定义:
抽象是消除不必要的和必要的放大。
答案 1 :(得分:0)
我会说你的理解是正确的......所以,我更犹豫地更具体地评论。
但是,如果我要评论,我可能会说“数据类型可用于实现抽象......”,而不是“抽象是数据类型...”,因为抽象可以存在于软件之外(它伤害我说: - )。
但那只是挑剔。我想你明白了。经过36年的编码,我希望我能做到......主要是支持合理抽象级别的语言(PL / 1,Pascal,C,C ++,Java)。
但是,在工业界有许多优秀的聪明人,他们没有软件抽象的概念,并且认为它很容易受到影响。
就我个人而言,我认为良好的无误的抽象概念是固体软件工程的关键技术要素。
答案 2 :(得分:0)
我以前从未遇到过封装的定义。该定义听起来更像是命名空间的用途。我一直在阅读封装纯粹是关于限制对代码的某些组件的访问的能力,例如OOP语言中的访问修饰符。但是,在维基百科上似乎有两种封装定义,这对我来说是新闻:
封装是将数据和功能打包成一个单一的 零件。使用类支持封装的功能 在大多数面向对象的编程语言中,尽管如此 替代品也存在。它允许选择性隐藏属性和 通过建造一个不可穿透的墙来保护物体的方法 来自意外腐败的代码。
在编程语言中,封装用于指代两种中的一种 相关但不同的概念,有时是组合 物:
- 用于限制对某些对象的访问的语言机制 组件。
- 促进捆绑的语言结构 使用方法(或其他功能)操作的数据 数据。
醇>一些编程语言研究人员和学者使用 第一个含义单独或与第二个含义相结合 面向对象编程的区别特征,而其他 提供词法闭包视图的编程语言 封装作为与对象正交的语言的特征 取向。
第二个定义的动机是许多OOP 隐藏组件的语言不是自动的,也不能被覆盖; 因此,信息隐藏被那些人定义为一个单独的概念 更喜欢第二个定义。 source
所以,我想我总是用点#1来定义封装,但看起来有些人将它定义为将方法和数据捆绑在一起的能力,以及术语#1“信息隐藏”。