封装.精心设计的课程

ban*_*cer 5 oop encapsulation ooad

今天我读了一本书,作者写道,在一个设计良好的类中,访问属性的唯一方法是通过其中一个类方法.这是一个被广泛接受的想法吗?为什么封装属性如此重要?不做的后果可能是什么?我之前在某处读过,这可以提高安全性或类似的东西.PHP或Java中的任何示例都非常有用.

Fea*_*nor 10

这是一个被广泛接受的想法吗?

在面向对象的世界中,是的.

为什么封装属性如此重要?不做的后果可能是什么?

对象旨在成为包含其他对象可以通过公共接口以受控方式访问的数据和行为的内聚实体.如果一个类没有封装其数据和行为,它就不再能够控制被访问的数据,也无法完成与公共接口隐含的其他对象的契约.

其中一个重大问题是,如果一个类必须在内部进行更改,那么公共接口就不必更改.这样它就不会破坏任何代码,其他类可以像以前一样继续使用它.

PHP或Java中的任何示例都非常有用.

这是一个Java示例:

public class MyClass {
    // Should not be < 0
    public int importantValue;
    ...
    public void setImportantValue(int newValue) {
        if (newValue < 0) {
           throw new IllegalArgumentException("value cannot be < 0");
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是因为我没有importantValue通过制作它private而不是公开来封装,所以任何人都可以出现并绕过我放入setter中的检查以防止对象具有无效状态.importantValue永远不应该小于0,但缺乏封装使得不可能阻止它这样做.