抽象和封装的区别?

抽象和封装的区别?

封装和抽象之间的确切区别是什么?



明月笑刀无情
浏览 743回答 3
3回答

HUWWW

这里的大多数答案都集中在OOP上,但是封装开始的时间要早得多:每个函数都是封装;在伪码中:point x = { 1, 4 } point y = { 23, 42 } numeric d = distance(x, y)这里,distance封装平面中两点之间(欧几里德)距离的计算:它隐藏实现细节。这是封装,纯而简单。抽象化是…的过程泛化*具体实施,并使其适用于不同类型的数据,尽管有些相关。抽象的经典例子是C的qsort函数对数据进行排序:关于qsort是它不关心它排序的数据-事实上,它不知道它分类的数据。相反,它的输入类型是一个无类型指针(void*),这只是C的一种说法:“我不在乎数据的类型”(这也称为类型擦除)。重要的一点是qsort无论数据类型如何,始终保持不变。唯一有更改是比较函数,它因数据类型而异。qsort因此,期望用户将所述比较函数作为函数参数提供。封装和抽象是紧密联系在一起的,所以您可以指出它们确实是不可分割的。出于实际目的,这可能是正确的;尽管如此,这里的封装并不是抽象的:class point {     numeric x     numeric y }我们封装了点的坐标,但是除了逻辑分组之外,我们并没有将它们抽象出去。这里有一个抽象的例子,它不是封装的:T pi<T> = 3.1415926535这是一个泛型变量 pi对于给定的值(π),声明并不关心变量的确切类型。诚然,我很难在实际代码中找到这样的东西:抽象几乎总是使用封装。然而,上述是吗?实际上存在于C+(14)中,可变模板(=变量的通用模板);具有稍微复杂的语法,例如:template <typename T> constexpr T pi = T{3.1415926535};

婷婷同学_

封装隐藏实现细节,这些实现细节可能用于一般行为,也可能不用于特定行为。抽象化是提供一个泛化(例如,对一组行为)。
打开App,查看更多内容
随时随地看视频慕课网APP