现在的位置: 首页 > 综合 > 正文

Why object oriented, rather than class oriented

2011年12月12日 ⁄ 综合 ⁄ 共 738字 ⁄ 字号 评论关闭
曾经疑惑,为什么是object oriented,不是class oriented?最近从一些建模经验中体会到,的确是object oriented!

object在自己的life cycle内,没有什么不可以变,但不管怎么变,它还它。class则是人为赋予object的功能或特性的抽象描述。

object和class的关系很微妙,用一个比喻“以金作器,器器皆金”,不管样子怎么变,黄金永远是黄金;不管变成什么样,它总有个样。不管class怎么变,object永远是object;object不管怎么变,它总有class。这里的class是广义的功能/属性抽象,不是C#或Java等具体语言的class。

再来举个例子:Todd这个人,从10岁到30岁,从物理上讲,身体所有的细胞都换了遍,但他一直都是Todd,没有变成另外一个人(生活常识范畴);另外,Todd 10岁可能属于学生类,30岁可能是打工仔类,30岁比10岁多了个老婆属性,但却少了参加考试的方法。

很佩服OO理论先驱们,很好地区分了object和class的微妙关系,很明智地object oriented。

后记:和朋友讨论,朋友提到OO需要注意区分继承和合成(针对静态类型语言),结论是:继承的好处是,语义上表示xx object可以当作xx class来用,对于object的使用者来讲更方便;缺点是类型在object lifecycle内固定,不灵活。

PS:胡乱聊这么多,其中有些东西除了自己建模的体会,还受到《悟透javascript》启发,在这里表示感谢!错误不足之处,欢迎大家批评指正!

声明:这篇文章是几年前不成熟的个人感想,希望不要误导初学者,我认为应该提倡想象与严谨并重,学习OOP除了要结合实践也要阅读大量经典书籍。

抱歉!评论已关闭.