據說smalltalk發明者alan kay就曾經說過: 我發明了物件導向,而我可以告訴你c++並不是我頭腦裡所想的東西.
計算機裡面只有資料和演算法,資料用於對現實世界抽象建模,演算法對資料演算,這已經很好,怎麼出來乙個物件導向這個"怪胎".
物件導向教學每次都要從對現實世界的模擬講起,還記得那個會叫的鴨子的物件嗎?物件導向認為物件有狀態和行為,由此對現實世界抽象建模.然而現實世界就是物件導向的世界嗎?
準確的說當時我所學的c++的物件導向對世界的模擬就是反世界反牛頓定理的,因為事物之間是相互作用的,c++的物件導向根本無法對現實世界抽象建模.
這就是我當時學物件導向為什麼那麼痛苦,物件導向和我對世界的認知是矛盾的,然而我當時卻選擇相信物件導向是完全正確的.
如同非歐幾何一樣和現實世界關係不大的東西也是有用的,起碼是乙個邏輯訓練.也如同非歐幾何一樣c++的物件導向也根據一定的規則構成了自己的抽象系統.
每個語言根據自己的規則構成了乙個抽象系統,通過抽象邏輯演繹完成任務.
物件導向基於人對客觀事物的認知,這個是自然而然的.但物件導向有多種實現方式,每個語言可以選擇自己的實現方式或者自己創造一種實現方式.目前看沒有一種語言能夠實現乙個反映客觀世界的物件導向,畢竟客觀世界太複雜了.正是乙個不能反映客觀世界的語言實現,語言引入物件導向解決了一部分問題,也因引入物件導向而製造出更多的問題.
go語言就自己創造了一種實現物件導向的方式,go裡面沒有了class,物件的方法也不是直接和物件繫結在一起的,物件在go裡面其實就是乙個演算法(函式)的引數.這樣把資料演算法和物件導向很好的結合起來.
go語言學習筆記19 物件導向
package main import fmt type interger int func a interger test b interger interger func main 輸出結果6type integer int 表示的意思是給int型別指定了乙個別名叫integer,別名可以隨便起...
go語言學習筆記20 物件導向
package main import fmt type human inte ce type student struct func s student sayhi type teacher struct func t teacher sayhi func main i s i.sayhi var...
Go語言學習 十三 物件導向程式設計 繼承
go語言也提供了繼承,但是採用了組合的方式,所以我們將其稱為匿名組合 package main import fmt 定義基類 type base struct 基類相關的2個成員方法 func base base a func base base b 定義子類 type son struct 重寫...