封装是否信息隐藏或导致隐藏信息?
正如我们所说Encapsulation在单个实体中绑定数据和函数,因此它为我们提供了对数据流的控制,我们只能通过一些定义良好的函数来访问实体的数据。因此,当我们说Encapsulation导致抽象或信息隐藏时,它意味着它让我们知道要隐藏哪些数据以及向用户显示哪些数据...因为用户无法访问的数据可能会被隐藏,因此封装会给出我们一种技术,找出要隐藏的数据和应该可见的数据......这个概念是否正确?
信息隐藏和抽象之间有什么区别?
答案 0 :(得分:3)
public class Guest {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
参见上面的代码,我们已经封装了String名称,我们通过公共方法提供对它的访问。
假设我们创建了一个名为guest的Guest对象。那么以下将是非法的。
System.out.println("Guests name : "guest.name);
只能通过公共方法进行访问。
guest.getName();
封装的好处:
可以制作课程的字段 只读或只写。
一个班级可以完全控制 存储在其字段中的内容。
班级的用户不知道怎么做 该类存储其数据。一类 可以更改字段的数据类型, 并且该类的用户不需要 改变他们的任何代码。
答案 1 :(得分:2)
封装意味着隐藏实现
抽象意味着提供有关实施的蓝图
数据隐藏意味着控制对DataMember或属性的访问
答案 2 :(得分:1)
信息是一个更通用的术语,因此,我认为,封装是信息隐藏,是不合适的。 我会说Encapsulation是数据隐藏。
封装意味着......
组合对象状态&行为(在该州运作),在一个单一的单位。 这非常类似于现实世界的对象。
隐藏&通过提供明确定义的受控访问(通过行为)来保护对象的状态免受意外的外部变更。
在Java中,定义可以详细说明为......
在Java中,类和枚举是实现封装的单个单元。使用变量(基元,对象的引用)和使用方法的行为来定义状态。
数据隐藏是使用变量上的私有访问说明符实现的(因此没有人可以从外部访问它们)。
通过提供Getters / Setter和/或业务逻辑方法来实现受控访问。 Setter和其他影响状态的方法都应该有边界条件检查,以保持状态在逻辑上正确。
答案 3 :(得分:1)
封装讨论了将数据隐藏到某个东西并为其命名(类中的私有数据成员 - Car)和绑定行为方法,它将改变或提供对这些数据变量的访问。
抽象以抽象的术语提供客户的视角。作为一个概念或想法。汽车是具体实体,其中可驱动,可跟踪(具有位置并且可以被跟踪)可以是针对不同客户的汽车的抽象。
您可以查看一些现实生活examples of Abstraction和Encapsulation here。
答案 4 :(得分:0)
封装是一种用于隐藏属性的技术。对象的行为。
抽象是指代表基本特征。
答案 5 :(得分:0)
封装 - 工作完成,门永久关闭。通过方法名称获得工作福利。 抽象 - 工作开始,门温和关闭。使用覆盖密钥打开并更改工作。
答案 6 :(得分:0)
这两种OOP原则都涉及信息隐藏,但有所不同。
封装涉及通过将类变量设置为私有并允许公共获取器和设置器访问它们来限制对类变量的直接访问。 目的:这样做是为了防止班级成员从外部被意外操纵(从而损坏)。
抽象涉及只向调用者公开相关细节,而隐藏其他细节(实现细节)。客户端无需担心以后可能会更改的实现。示例:调用方将调用List的add方法,其实现今天可能是ArrayList,但明天可能会更改为LinkedList。 目的:这提供了将来可以更改实现的灵活性。而且,它简化了设计。
答案 7 :(得分:-1)
抽象意味着寻找对象的重要特征并忽略其他细节。
例如,如果你考虑一辆汽车:汽车的抽象定义是一种车辆,有四个车轮,一个方向盘和一个发动机。转向系统的工作原理或汽车品牌的细节对于使物体成为汽车的重要性并不重要。
详细解释见abstraction meaning in Object Oriented Programming concepts。