1, 程式可以用接近人的思維的方法來寫。
2, 演算法設計的思想可以用來設計現實生活的事情,比如迭代,貪婪,遞迴,分治。程式有迴圈,生活也有迴圈,真正做了的事情也沒有幾件,都是在重複勞動。
3, 在設計模式中曾經學過這麼一個思想,父類規定了方法,子類來實現。
形象讀工程源碼方法。
在我們自己的行業,想要追求技術以提高自己的人,學習別人,吸取別人的精華是必須的,也是必要的,牛頓曾說過他之所以取得這樣的成就,是站在巨人的肩膀上。在軟體行業,GPL的存在,開源文化的傳播,網路上擁有著無數的優秀的開源源碼,作為學習者,很多人都是讀源碼成長,無論成長了沒有,都為怎麼樣去一個龐大的源碼而傷心和難受過,至此,我把我探索出的一點經驗歸結為“形象讀工程源碼方法”,簡稱“形象碼”。
人類語言發展到現在,不知道是屬於第幾代語言了,電腦語言發展到現在,我們稱C/C++/java等為第三代語言,他們的特點就是接近了人的思維,讓大部分人類不再浪費大把時間在無聊的助記符上,讓人類花更多的時間去創新,去研究,去為了生活奮鬥。
好了,讓我們進入正題吧,相信大家有過這樣的經驗,當你從Internet上download了一個project時,源碼之龐大,模組之多,頓時讓自己處於了一種缺氧的狀態,頭暈呼呼的,胸口悶悶的;試著就讀一下,又發現難以顧頭尾,半個月下來腳忙,linux核心源碼就是這麼一通。
物件導向思想。
所謂對象,就是一個物體,一個實物,一個虛擬,一個你夢中的物體,如果你的想象力好,那麼你認識的對象就比一些人要多。物件導向,就是把你要實現的功能封裝在你的對象裡,用你的對象去實現。講到這裡,太形象化了,一個7歲孩子是理解不了的,那如果我們用形象的思維來理解呢?那麼,我相信,一個7歲小孩看了就不會忘記。
我們把對象形象化成現實中的實物,並在我們的腦海裡配以形象的圖畫來解釋,看似抽象而複雜的源碼就很形象的為人們所接受。
比如:
Person.h
Class person
{
Public:
Person();
Public:
Vitual Attack(Person*);
}
Person.cpp
Person::person(){}
Liubei.h
Class liubei
{
Public:
Liubei();
Public:
Attack(Person*)
Private:
Person *enemy;
}
Liubei.cpp
Void liubei::Attack(Person *p)
{
Enemy = p;
/**
Attack person Enemy;
**/
}
Caocao.h
Class caocao
{
Public:
Caocao();
}
Caocao.cpp
Caocao::caocao(){};
Chibi.h
Class chibi
{
Public:
Chibi();
Public:
Void (*activtity)(Person *);
Void attatch(Person *p){this->activtity = p->Attack()};
}
Int main(argc,argv *[])
{
Caocao *cao = new caocao;
Liubei *liu = new Liubei(cao) ;
Chibi* chi = new Chibi;
Chi-> attatch(liu);
Chi->activity(liu);
Return 0;
}
上面一段代碼說明了什麼呢?除非是高手,否則當我們看完整個代碼的時候相信理解得不是很清晰,或許看到main後面的時候又要回到前面去看了,如果再痛點,相信就有人會放棄學這個了,我告訴你,當你用形象化得思維去理解的話,以上代碼就可以用幾個字或者一個頭腦中的圖畫所替代,那就是“劉備在赤壁攻打曹操”。
我們分析一下,Caocao *cao = new caocao;//這裡創造了一個曹操。
Liubei *liu = new Liubei(cao) ;//創造了一個劉備
Chi-> attatch(liu);
Chi->activity(liu);//這裡表達的就是攻打曹操吧。
再看源碼,首先Class liubei,然後caocao,再者Class chibi。繼續我們看到
Void liubei::Attack(Person *p)
{
Enemy = p;
/**
Attack person Enemy;
**/
}
和chibi裡面的
Void attatch(Person *p){this->activtity = p->Attack()};
即可知道liubei在赤壁在攻打某person;
再繼續看到
Liubei *liu = new Liubei(cao) ;
我們就可以完全理解意思了。有了這樣的解釋,相信,看這個程式一開啟10s就可以理解,省略了N多人的時間。
當然,這隻是一個簡單的例子,當真正的走進軟體世界,走進linux,走進開源世界,還想在軟體行業發展,那麼你就不得不閱讀大量的源碼,以促進自己,提高自己。在開源社區裡面,有N多的開源軟體,代碼之龐大,讓人望而卻步,但是,如果能形象化的去理解,maybe會節省好多時間和增加N多信心。
用過LIVE555的人都知道,裡面模組很龐大,但是形象化也就那麼一點。如下:
UsageEnvironment:程式環境的初始化。
NetInterface GroupSock:實現網路組播功能。
Sink:接受模組。
Source:源發射模組。
形象化可以理解為:Source通過GroupSock組播資訊到Sink。通過這樣的原則再去讀龐大的源碼,相信大家會好一點。