可能重复:
抽象VS信息隐藏VS封装
我知道这个问题可能已经在这个论坛上被问了几千次,甚至net也充满了关于这些概念的许多定义,但所有声音都相同,并且都使用相同的技术词汇.例如以下定义
封装是将数据和对数据进行操作的代码绑定或包装到单个实体中的过程.这样可以保护数据免受外部接口和误操作的影响.考虑封装的一种方法是作为保护包装器,防止代码和数据被包装器外部定义的其他代码任意访问.
我从上面的定义中理解的是创建变量,将它们标记为私有并为这些变量生成getter-setter,并使用object来访问那些getter和setter.这样,数据就隐藏在对象内部,只能通过对象访问.希望我是对的.
抽象是Java中的过程,用于隐藏某些细节并仅显示对象的基本特征.换句话说,它处理对象(界面)的外部视图.
现在这是让我困惑的部分.每当我想到抽象时,我想到的东西就是抽象类(可能因为它们都有Abstract关键字).上面的定义说抽象意味着隐藏数据并且只显示所需的细节,但这是我们在封装中已经做的事情吗?然后有什么区别.此外,我没有得到对象的侧视图,它处理对象的外部视图.
有人可以用一些现实生活中的例子,或者如果可能的话,用一些程序化的例子来说明这一点.
学习OOP概念特别有兴趣深入了解抽象和封装.
已经查看了下面的内容
我发现用一个真实而简单的示例类/代码片段很难理解这些概念.
我的一位同事说抽象只不过是创建抽象类和普通类来保护其成员变量的范围称为封装.
是否有一种简单的方法可以理解并帮助其他人了解它们究竟是什么,而不是重复下面的内容?
抽象和封装是互补的概念:抽象侧重于对象的可观察行为......封装侧重于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.对象的秘密不会对其基本特征产生影响.
采访者:什么是封装,你如何用Java实现它?
我: 封装是一种隐藏客户端信息的机制.该信息可以是数据或实现或算法.我们使用访问修饰符来实现这一点.
采访者:这是数据隐藏.我们如何在Java中实现封装?
我:uummmm
具体问题:除了'Access Modifiers'之外,在Java中实现Encapsulation的方法是什么?
Ecapsulation和信息隐藏之间究竟有什么区别?
我知道将字段设为私有然后制作字段的setter和getter是ecapsulation.However封装意味着这个?
假设我有一个如下所述的课程.
public Class IsThisEncapsulation
{
public int age;
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
}
Run Code Online (Sandbox Code Playgroud)
现在是IsThisEncapsulation类是Encapsulation的一个例子吗?
现在是否会让上述类私有领域的'年龄'实现信息隐藏?
能否请您给我一些明确的例子,以帮助我清楚地区分这些概念?
" 抽象和封装是互补的概念:抽象关注于对象的可观察行为......封装集中于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.物体的秘密对其基本特征没有贡献." - 面向对象分析与设计的Grady Booch
您能否通过信息隐藏向我展示一些有说服力的封装优势的例子?
language-agnostic oop encapsulation abstraction information-hiding
数据抽象和信息隐藏有什么区别吗?经过这个链接中的所有答案后,我更加困惑. 抽象VS信息隐藏VS封装 无法找到任何区别.是否只是我们可以将一个(信息隐藏)作为目标而另一个(抽象)作为一个过程?但这对我来说并不是令人满意的.此外,我得到封装是实现抽象过程的技术我在这里吗?请解释确切的区别.
我参加了一个java程序员的面试,在几个人的问题之后,面试官问我"什么是封装和抽象"这个问题我对问题非常满意,并且我已经回答它隐藏了不必要的实现细节供用户知道.而Abstraction只向用户展示了重要的细节.在我回答后几秒钟,面试官对我提出了另一个问题.向用户显示重要细节,这意味着将不相关的数据(如实现细节)隐藏到用户.是吗?
我回答是的!
还有另外一个问题.那么抽象和封装之间有什么区别.我认为根据你的答案没有区别.
我就像我不知道,我的双手被冷冻,对我来说是一个非常糟糕的一天
如果有人向你提出这样的问题,任何人都可以解释你会如何回答
我正在学习OOP和Java,而Abstraction的定义是将实现细节隐藏起来的过程,只有功能才会提供给用户.
有人可以解释一下功能和实现细节之间的区别是什么?
可能重复:
C++中struct和class之间有什么区别
http://www.cplusplus.com/reference/std/typeinfo/type_info/
我想我的"老师"并没有告诉我很多关于C++中struct和classes之间的区别.
我在其他一些问题中读到有关继承的问题,结构默认是公共的...我也猜测struct没有构造函数/析构函数...
那么其他的差异呢?他们这么重要吗?
在谈到私有/受保护的属性/方法时,它们在运行时是不可访问的,只是因为编译器在编译时告诉它并报告错误,对吧?然后将这些功能与类进行比较,"信息隐藏"真正为程序员带来了什么?是否在这里,当有人重用该类时,这个人不会滥用该类,因为编译器会报告私有/受保护的东西?
我仍然为信息隐藏的真正目的而苦苦挣扎,它仍然希望在我的脑海中发出声音,因为它为程序带来更多安全性,意味着更少的安全漏洞,但我真的很困惑这种设计在语言中的目标...... (而且我不打算以任何方式反对C++,我只是想了解在什么情况下这个功能可能有趣或不;如果不是,那不是问题,但我只是想知道...).
oop ×8
abstraction ×5
java ×5
android ×1
c++ ×1
class ×1
concept ×1
data-hiding ×1
inheritance ×1
ios ×1
php ×1
struct ×1