我已经阅读了封装的定义,该定义指出“封装是将数据和函数包装到称为 class 的单个单元中”。我的问题是我们不能使用术语对象而不是定义中的类,因为最后使用类创建了对象,而对象仅将数据和函数封装在其中?
答案 0 :(得分:1)
在例句中,用“对象”替换“类”没有问题。它在基于类的OOP语言中仍然有效,同时更适合于基于原型的OOP语言。毕竟,类只是OOP的类型系统,根本不像封装那样重要。
但是,我想改进该语句,以使数据和功能不是以相同的方式“包装”的。数据必须隐藏,并且只能由对象的方法访问。
答案 1 :(得分:1)
要考虑的更重要的问题是为什么封装对于真正的oop是必不可少的。对象将隐藏其属性和内部工作原理,并提供一个供其他对象使用的接口。当此封装被破坏时,oop开始崩溃。如果每个人都可以使用其他人的数据,则代码将变得难以维护。考虑设置器和获取器,以及我们倾向于破坏封装的所有方式。真正的对象思考主要不是关于类和多态性的。绝对是关于对象之间的封装和接口。
答案 2 :(得分:0)
我假设您对什么是封装有一个大概的了解?所以你在问为什么蜜蜂不能改写为
封装是将数据和功能包装到称为对象的单个单元中。
因为封装与对象完全无关。您可以创建一个名为Car
的类,它具有诸如engine
,seats
,steeringWheel
之类的字段以及一些方法applyBrakes
,openWindow
作为一些私人成员。现在您可以说该类将汽车的内部构造封装到一个单元中,即Car
类。
看到了吗?我什么都没说。 Car
对象实际上只是内存中指向其他Engine
,Seat
和SteeringWheel
对象的一堆引用。
答案 3 :(得分:0)
并非每个类都有对象。
我们可以有没有对象的静态类。
如果将定义更改为使用单词“对象”,则不会覆盖这些类。使用“类”,可以覆盖静态和非静态类。
即使一个类不是静态的,它也可能具有静态的数据和功能,所以术语“类”更合适。
其他类可能是抽象的,因此没有对象,它们可能仍提供一些封装。
即使模板本身没有对象,模板类也可能具有封装能力-只有为模板类型参数提供特定类型的“具体”类对象。
此外,如果我们将“单”一词应用于对象,则会变得有些混乱,因为我们可以拥有一个类的多个对象。
Cid的注释为“类”优于“对象”提供了另一个原因。
答案 4 :(得分:0)
在我看来,“数据”是有问题的术语。类封装了属性和可一起使用这些属性的方法。 “数据”表示实际数据,而不是元数据。这可能就是为什么您想到对象而不是类的原因。
除此之外,我不会在这里用对象替换类,因为它忽略了重要的功能,即一个类中的所有对象都具有相同的方法。使用对象,可以解释每个对象都有自己的一组功能。