我读过一个关于封装的定义,它指出“封装是将数据和函数封装到一个称为类的单元中”。.My问题是,我们不能在定义中使用对象这个术语而不是类,因为最终对象是使用类创建的,而对象只封装在其中的数据和函数?
发布于 2018-06-25 07:54:51
不是每个类都有对象。
我们可以有没有对象的静态类。
如果将定义更改为使用"object“一词,则不会涵盖这些类。使用"class",包括静态类和非静态类。
即使一个类不是静态的,它也可能具有静态数据和功能,同样,类这个术语更合适。
其他类可能是抽象的,因此没有对象,它们仍然可以提供一些封装。
模板类也可以被认为是能够封装的,即使模板本身没有对象--只有“具体”类的对象具有为模板类型参数提供的特定类型。
此外,如果我们将“单个”一词应用于对象,那么“单”这个词就会变得有点混乱,因为我们可以拥有一个类的多个对象。
Cid的评论为"class“而不是"object”提供了一个额外的理由。
发布于 2018-06-25 07:38:06
在示例句中将"class“替换为"object”没有问题。它在基于类的面向对象语言中仍然有效,但更适合于基于原型的面向对象语言。类毕竟只是面向对象程序设计( OOP )的一个类型系统,根本不像封装那样重要。
然而,我想要改进这句话,清楚地表明数据和函数不是以相同的方式“包装”的。数据必须是隐藏的,并且只能被对象的方法访问。
发布于 2018-06-25 18:03:10
需要考虑的更重要的问题是为什么封装对于真正的oop至关重要。对象将隐藏它们的属性和内部工作方式,并呈现一个接口供其他对象使用。当这个封装被破坏时,oop开始崩溃。如果每个人都掌握了其他人的数据,那么代码就更难维护了。考虑一下setter和getter,以及我们倾向于打破封装的所有方法。真正的对象思想主要不是关于类和多态性的。它绝对是关于对象之间的封装和接口。
https://stackoverflow.com/questions/51024204
复制