2013年10月19日 星期六

設計模式

化苦為花.

所謂的設計模式,即是指物件導向(Object-Oriented Programming Language)。

所不論是以何種語言實作(C++,Jave,C #, .Net)其核心就是"抽象".

 

而這個對於我們這種搞C的黑手,到底又是如何?

(話說最近的案子,用到Apple 的iOS,Bluetooth而且還得自己寫application(app)

反而不去k 他們的底層東西。去用app真是莫明其妙。

即時要學object-C...就是物件C啊。

讓自己進步就是K 底層的東西,而不是學個一招半式。到頭來還是沒用的)

雖然我也是要必須一套的OO語言,但一直都沒有去決定.,原因是沒時間及精力。

 

在開發專案時,因時間/市場/金錢下,

什麼夠用就好;是啊。但你永遠都不夠用的。而且這應該是在有強大的基礎下才行.

回到原點,討論C與OO。我該如何學習(目標時間結果)

1.目標;

學習C和OO之間該如何結果(抽象化)

及結合嵌入式系統或是任一種的圖形界面程式。

2.時間;因為OO的學習太大了,

             所以應該是定出目標(長,中及短)再去決定時間。

  1.短: K 大話設計模式及做筆記。1~3M

  2.中:學習用C及OO的某一FrameWork.2~3M

  3.長:這應該是一直都要做,一邊學一邊寫入目前的嵌入式中。~~

最後,我採取用GTK。

 

擷取一些討論及內容:

我想知道的是: 基於什麼原因你要用 C 來作 C++ 的 OO 特性?
程式語言只是個工具. 不同的程式語言是用來以不同的角度來解決不同的問題.
如果你覺得你的問題需要用 OO 來做比較適合, 而且目標系統上也有 C++ 編譯器, 那為什麼不用 C++?
如果因為某些原因你無法用 C++, 只能用 C, 那你就要換個設計, 用 非-OO 的方法來解決你的問題. 非-OO 的方法可能沒有那麼適合, 但大多數的情況下, 應該好過用語言 A 去模擬語言 B 的特性.

 

c有辦法寫成物件導向嗎?
當然可以,但是C語言有自身的限制,例如編譯器不允許函式名稱重複,所以無法模擬overloading;此外,有關簽名的應用(尤其是constructor)部分,也因這相同的原因,無法實作。諸如此類的限制,讓許多原本可用C++輕鬆撰寫的程式,變得舉步維艱、哀苦連天!等等!在C++擁護者點頭如擣蒜前,我得趕緊提出一個問題:使用constructor、 overloading等語法的程式,"才是"物件導向程式設計嗎?這跟使用C語言,就"一定"是結構化程式設計一樣,是很弔詭的說法。
軟體工程的誕生,是很實際的、想要解決程式設計師的困境:當程式碼大到一個規模後、進度愈難掌控(請各位算算VISTA延淌了多久)!而當我們談到物件、封裝、抽象化等、這些軟體工程的重要理論時,其實他們表達的是同一個簡單的概念,那就是資訊隱藏。簡單的說,只要工程師越不瞭解細節,系統就越穩定!怪哉,真有這麼神奇嗎?
我記得剛接觸程式時,幾乎身邊的每個軟體工程師,都有一本所謂的BIBLE書。我當然也不例外,手上有一本TURBO-C的寶典,內容其實是將所有TC所支援的函式、全部分類說明,並提供使用範例(內附1.44M磁碟片)。在這樣的環境下,工程師習慣於"程序性"的解題思考,同樣地,對於所有熟悉ANSI-LIB(或Windows API)的人來說,其實也很容易的、陷入這樣的思維:用程序(函式)的組合來解決問題。這正是大力鼓吹結構化程式設計的年代,只要有一點年紀的工程師,都應該經歷過,只是,當時少有人去質疑這樣的正確性罷了。說起來,很幸運的,我在大約15年前,還是個程式菜鳥的時候,就已經見識到OO的思維了。在那個時代並沒有C++,所以程式碼全都是C語言所撰寫的,而我們老大所寫的程式碼,其實就是本篇的回應:用C語言撰寫物件導向的程式。事隔多年,我無法找出當時的程式碼,但我仍記得他巧妙的運用member function、將其物件化的的手法。在那個時代,研發單位有一半僅是專科的學歷(包括我),但動腦筋的功夫卻很了得是也。這就叫臥虎藏龍嗎?(對不起、軍曹看多了)
有感而發的跟各位先進分享,希望對大家有幫助。我個人用C語言寫了許多物件導向的程式(是有商品化的產品)應用,著重在繼承、template等應用上。至於為什麼不用C++呢?喔!在嵌入式的領域,C++還沒有這麼普及啦。

 

 

參考:

大語設計模式

Object-C

http://zh.wikipedia.org/zh-tw/Objective-C

c有辦法寫成物件導向嗎?

http://www.programmer-club.com/ShowSameTitleN/c/36555.html

以 C 語言實作物件封裝

http://ccckmit.wikidot.com/cp:encapsulation

不要從程式語言學習「物件導向」

http://www.kenming.idv.tw/ac_eb_af_cu_af_eo_eu_ascci_a_c_carpad_a

Ubuntu 下的哈囉!GTK+!

http://www.javaworld.com.tw/roller/caterpillar/entry/ubuntugtk

Can you write object oriented code in C?

http://stackoverflow.com/questions/351733/can-you-write-object-oriented-code-in-c

沒有留言:

張貼留言