我编写的越多,越容易获得。 但是,关于编程的问题更多。
本周,我的想法是关于面向对象的编程。 有人告诉我OOP是关于封装状态的,而行为是一个孤立的单元。
在我所知道的语言中,状态转化为属性,行为转化为方法。
publicclassCat{
privateColorcolor;
publicvoidmew(){...}
}
这就是说,单元测试要求在隔离的能力进行测试:这已经通过依赖注入启用(无论是手动或框架为基础的)。 依赖关系也转换为属性,尽管大多数(如果不是全部)在实例生命周期中始终不变。
publicclassMechanicalCat{
privatefinalRepairmentManagerrepairmentMgr;
publicMechanicalCat(RepairmentManagerrepairmentMgr){
this.repairmentMgr=repairmentMgr;
}
}
现在,我们将状态和依赖项都当作属性来处理。 对于Java来说,这是有道理的,因为依赖注入比语言早得多地成为主流。 更现代的JVM语言引入了val
的概念,该概念使属性不可变。 这是上面代码的Kotlin端口:
classCat(varcolor:Color){
funvoidmew(){...}
}
classMechanicalCat(valrepairmentMgr:RepairmentManager)
但是,这种语义仅涉及可变性/不变性。 Java当时已经有了一个不同的语法相同semnantics -的final
关键字。
我想知道我们是否可以对状态和依赖项使用不同的语义? 是否有任何语言创建者阅读此博客并认为将它们分开可能是一个好主意?
翻译自: https://blog.frankel.ch/semantics-state-or-dependency-not-both/