Why object oriented, rather than class oriented

來源:互聯網
上載者:User
曾經疑惑,為什麼是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除了要結合實踐也要閱讀大量經典書籍。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.