在OOP中定义封装时,我们可以不使用术语“对象”吗?

时间:2018-06-25 13:05:44

标签: oop

我已经阅读了封装的定义,该定义指出“封装是将数据和函数包装到称为 class 的单个单元中”。我的问题是我们不能使用术语对象而不是定义中的,因为最后使用类创建了对象,而对象仅将数据和函数封装在其中?

5 个答案:

答案 0 :(得分:1)

在例句中,用“对象”替换“类”没有问题。它在基于类的OOP语言中仍然有效,同时更适合于基于原型的OOP语言。毕竟,类只是OOP的类型系统,根本不像封装那样重要。

但是,我想改进该语句,以使数据和功能不是以相同的方式“包装”的。数据必须隐藏,并且只能由对象的方法访问。

答案 1 :(得分:1)

要考虑的更重要的问题是为什么封装对于真正的oop是必不可少的。对象将隐藏其属性和内部工作原理,并提供一个供其他对象使用的接口。当此封装被破坏时,oop开始崩溃。如果每个人都可以使用其他人的数据,则代码将变得难以维护。考虑设置器和获取器,以及我们倾向于破坏封装的所有方式。真正的对象思考主要不是关于类和多态性的。绝对是关于对象之间的封装和接口。

答案 2 :(得分:0)

我假设您对什么是封装有一个大概的了解?所以你在问为什么蜜蜂不能改写为

  

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

因为封装与对象完全无关。您可以创建一个名为Car的类,它具有诸如engineseatssteeringWheel之类的字段以及一些方法applyBrakesopenWindow作为一些私人成员。现在您可以说该类将汽车的内部构造封装到一个单元中,即Car类。

看到了吗?我什么都没说。 Car对象实际上只是内存中指向其他EngineSeatSteeringWheel对象的一堆引用。

答案 3 :(得分:0)

并非每个类都有对象。

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

如果将定义更改为使用单词“对象”,则不会覆盖这些类。使用“类”,可以覆盖静态和非静态类。

即使一个类不是静态的,它也可能具有静态的数据和功能,所以术语“类”更合适。

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

即使模板本身没有对象,模板类也可能具有封装能力-只有为模板类型参数提供特定类型的“具体”类对象。

此外,如果我们将“单”一词应用于对象,则会变得有些混乱,因为我们可以拥有一个类的多个对象。

Cid的注释为“类”优于“对象”提供了另一个原因。

答案 4 :(得分:0)

在我看来,“数据”是有问题的术语。类封装了属性和可一起使用这些属性的方法。 “数据”表示实际数据,而不是元数据。这可能就是为什么您想到对象而不是类的原因。

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