題目就這麼抽象~。~其實一點都不抽象,老師之前也說過吧,面向對象就是創建在面向過程的基礎上的。 下面這些主要是能讓你們吸取一些較新鮮的編程思路,對於嵌入式編程大有裨益,對理解面向對象的底層封裝全新的認識,對引入go的必要性的一些闡述。 下面以java做爲面嚮對象語言,以c做爲面向過程語言和以go做爲一種新型語言進行對比。 面向對象的概念中引入了一個重要的東西就是類,類中有兩種主要的東西:成員方法和成員變量,在面向過程當中咱們主要依靠結構體struct來抽象「類」這種數據結構中的成員變量部分,依靠函數來抽象「類「中的方法。具體請看如下例子: 在java中定義一個最簡單的類java public static class Person{ //sataic是爲了方便後面調用演示直接類調用 String name; int age; walk(){ System.out.println("walking"); } } c++ 在c中能夠這樣去實現 首先定義結構體去描述數據部分,而後去寫函數來實現walk功能,最後用封裝後的組合來調這種咱們本身DIY的這種數據結構:編程 struct Person{ char[20] name; int age; } 數據結構 下面定義方法編程語言 void Person_walk(){ println("walking"); } 函數 最後: 在java中 Person.name和Person.walk()來執行 在c中則必須這樣來用 oop int main(){ Person p; ?=p.name; ?=p.age; Person_walk(); } this //相似這種代碼去實現,很顯然我寫的很隨意,徹底能夠用指 //針進行地址傳遞,我只是簡單的的這樣寫 很明顯你若是實際中真的這麼寫太麻煩了,首先c中沒有一種現成的數據結構把成員變量和方法很好地結合在一塊兒 除非你頻繁的運用指針,另外咱們沒法實現過深的繼承層次,還有沒有」包「的概念,只有全局和局部這兩種權限範圍 很容易讓你的代碼出現未知錯誤。 其實在後臺像c++真的是靠編譯器藉着隱藏的this指針翻譯爲c中的結構體這種類型去作的 那麼咱們能夠看到c++(又名c with class和c plus plus)他這種叫法能夠看出就是c的加強版。 可是c在如今看來是一門古老的語言,c++的標準過於複雜,以致於他的創造者都很難去徹底掌握它。有沒有其餘的辦法呢, 答案是確定有滴,出自貝爾實驗室血統的人馬,加盟google後推出的go語言很好地解決了這個問題,這是一個定義爲現代的, 軟件工程的,爲最終取代c的系統級編程語言,咱們來看一看他是怎麼作的:google type Person struct{ age float name string }
func (p *Person) Walk() { fmt.println("walking") } spa 下面是使用它的格式: p1:=new(Person) p1.Walk() fmt.println(p1.age) fmt.println(p1.name) 就這麼簡單,從語法上支持函數與結構體的綁定,簡單調用,從而實現java中的」類「,固然除此以外的多態實現還要依靠go中的interface{}類型他就是java中的object類型的做用。下面作一點註釋:go中沒有每句結束的分號,由於這是沒必要要的。go中的:號是變量定義的簡化關鍵字詳情請百度一下。fmt是go中的標準庫函數,我省略了引用,go不支持」類「,但支持面向對象這一思想。 就說這麼多了,oop只是go的一方面體現,其餘的功能給你們本身去發現,就是想讓你們體會一下指針的強大做用,以及oo思想的另外一種體現方法。 晚安嘍,假期愉快。 參考資料: 《深度探索c++對象模型》《go語言編程》《c語言程序設計》《thinking in java》 本文全部代碼都是簡化版,不能直接運行,僅供相互對比。 go是明日之星。 by: flybutterfly ceo#gotobe.net #表明什麼你懂的 2014.1.14 |