Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OOP中定义封装时,我们不能使用对象这个术语吗?_Oop - Fatal编程技术网

在OOP中定义封装时,我们不能使用对象这个术语吗?

在OOP中定义封装时,我们不能使用对象这个术语吗?,oop,Oop,我读过一篇关于封装的定义,其中指出“封装是将数据和函数封装到一个称为类的单元中。”.我的问题是,我们不能在定义中使用术语object而不是class,因为最终对象是使用类创建的,对象只封装其中的数据和函数?我想你大概知道什么是封装了吧?那么你是在问为什么这个定义不能重新表述 封装是将数据和函数包装到称为对象的单个单元中 因为封装与对象没有任何关系。您可以创建一个名为Car的类,它有一些字段,如engine,seats,steeringWheel,以及一些方法applyBrakes,openWin

我读过一篇关于封装的定义,其中指出“封装是将数据和函数封装到一个称为的单元中。”.我的问题是,我们不能在定义中使用术语object而不是class,因为最终对象是使用类创建的,对象只封装其中的数据和函数?

我想你大概知道什么是封装了吧?那么你是在问为什么这个定义不能重新表述

封装是将数据和函数包装到称为对象的单个单元中

因为封装与对象没有任何关系。您可以创建一个名为
Car
的类,它有一些字段,如
engine
seats
steeringWheel
,以及一些方法
applyBrakes
openWindow
,以及一些私有成员。现在您可以说,该类将汽车的内部工作封装到单个单元中,
car


看到了吗?我没有说任何关于物体的事
Car
对象实际上只是内存中指向其他
Engine
Seat
SteeringWheel
对象的一堆引用。

在示例语句中将“class”替换为“object”没有问题。它在基于类的OOP语言中仍然有效,而更适合于基于原型的OOP语言。类毕竟只是面向对象编程的一种类型系统,并不像封装那么重要


然而,我想改进这句话,以明确数据和函数不是以相同的方式“包装”的。数据必须隐藏,并且只能由对象的方法访问。

不是每个类都有对象

我们可以有没有对象的静态类

如果将定义改为使用“对象”一词,这些类别将不包括在内。“类”包括静态类和非静态类

即使一个类不是静态的,它也可以有静态数据和功能,同样,术语class更合适

其他类可能是抽象的,因此没有对象,它们可能仍然提供一些封装

模板类也可以被认为是能够封装的,即使模板本身没有对象——只有为模板类型参数提供了特定类型的“具体”类的对象

此外,如果我们将“single”一词应用于对象,它会变得有点混乱,因为一个类可以有多个对象

Cid的评论为“类”胜过“对象”提供了另一个理由

在我看来,“数据”是一个有问题的术语。类封装了一起处理这些属性的属性和方法。“数据”指的是实际数据,而不是元数据。这可能就是为什么要考虑对象而不是类


除此之外,我不会在这里用对象替换类,因为它忽略了一个重要特性,即一个类中的所有对象都具有相同的方法。使用对象,可以解释每个对象都有它自己的函数集。

更重要的问题是为什么封装对于真实OOP是必不可少的。对象将隐藏其属性和内部工作,并提供一个供其他对象使用的接口。当这个封装被破坏时,oop开始崩溃。如果每个人都控制着其他人的数据,那么代码就更难维护。考虑定位器和吸气剂,以及我们倾向于破坏封装的所有方式。真正的对象思考主要不是关于类和多态性。它肯定是关于对象之间的封装和接口。

对象包含类中定义的数据和方法。它们的可见性(封装)公共、私有、受保护等。。。是在类中定义的,而不是在对象中定义的。我希望有帮助。