談談面向對象

面向對象是當前計算機界關心的重點,它是90年代軟件開發方法的主流。面向對象的概念和應用已超越了程序設計和軟件開發,擴展到很寬的範圍。如數據庫系統、交互式界面、應用結構、應用平臺、分佈式系統、網絡管理結構、CAD技術、人工智能等領域。
不過我想上面說的應該是國外吧!不知道國內的90年代OO是否風靡啊。偶是21世紀纔開始接觸電腦的。記得那時候老師在給我們上C++課的時候,拼命說什麼C++好啊,面向對象啊,大說了一通。總之,給我的感覺是,OO纔開始風靡。後來,學校裏又開了一門課,叫着面向對象×××什麼什麼的,忘了,反正就是在講面向對象。老師也是一個勁的給我們灌輸OO思想,叫我們區別好OO與OP的差別。不知道爲什麼會有這麼一段,可能想說國內的技術比國外的慢太多了。很多時候,其實,語言也是一種原因!畢竟國內好的翻譯太少了!而且不能總是等侯傑大叔叔來翻譯啊。記得以前在論壇上看到一句“名言”啊:不要看國內作者寫的書,不要看國內譯者翻譯的書,括弧(侯傑除外)。看起來似乎有點偏激,不過卻不無道理啊!很多的作者和譯者都是垃圾啊!!!!偶深受其害,因爲偶很愛買書(看書就。。。呵呵)。記得我去年看重構的時候,我覺得這個名詞還是很新的啊,看了那本書之後才發現原來這本書寫於上個世紀,昏迷啊,國內的技術太落後了。偶的e文也太落後了!要多關注關注國外的新技術。
扯遠了。回來再談OO。
OO,很早就已經學過了,很早以前就以爲自己懂了,今天突然發現自己還不懂什麼是OO,爲什麼要OO?以前的想法可能太簡單了一點,認爲只要是全都是對象就是OO了。
沒錯,在OO的思想中,所有一切東西都是O!但是,我發現在實際編程中,我連這一點都無法保證!而且,我也無法做到理論聯繫實際,把理論應用到實際。在實際運用中,幾乎沒有考慮過O的問題。更多的時候是在考慮什麼模塊怎麼劃分,一個模塊應該有幾個類阿,每個類都有些什麼功能阿。但是我沒有把那個類作爲一個對象來考慮,或者說沒有把那個類作爲一類抽象的對象來考慮。需要什麼東西就直接往裏面加。不管加的東西跟那個類有沒有關係,都往裏面塞!行爲相當惡劣。簡直就是OP啊,每個類都成了一組function的wrapper了,相當悲哀!不管function是否應該屬於該類(或者說該對象)。搞不好什麼時候就設計出個:一個人有爬的行爲!(結果肯定會被一羣人狂揍哦)。
OO有什麼優點呢?爲什麼要OO
OO使人們得變成與實際的世界更加接近,所有的對象被賦予屬性和方法,結果編程就更加富有人性化。
維護簡單模塊化是面向對象編程中的一個特徵。實體被表示爲類和同一名字空間中具有相同功能的類,我們可以在名字空間中添加一個類而不會影響該名字空間的其他成員。
可擴充性面向對象編程從本質上支持擴充性。如果有一個具有某種功能的類,就可以很快地擴充這個類,創建一個具有擴充的功能的類。
代碼重用,由於功能是被封裝在類中的,並且類是作爲一個獨立實體而存在的,提供一個類庫就非常簡單了。事實上,任何一個.NET Framework編程語言的程序員都可以使用.NET Framework類庫,.NET Framework類庫提供了很多的功能。更令人高興的是,我們可以通過提供符合需求的類來擴充這些功能。
在實際的編程中你有考慮過這些問題嗎?Sorry,偶是沒有考慮過。基本上是,維護很難!擴充相對較容易,因爲直接拷貝過來,在修改(這有算是OO嗎?顯然否)。這種根本就是沒有利用到面向對象中的重用性。擴充起來也不容易,需要什麼功能就胡亂繼承一通,搞得類的層次太多了,無形之中給後人維護帶來了極大的困難。出現這些情況的原因是什麼呢?前面的代碼設計的不夠好。面向對象的三大特點:封裝,繼承和多態有沒有都考慮進來?面向對象是一種思想,是我們考慮事情的方法,通常表現爲我們是將問題的解決按照過程方式來解決呢,還是將問題抽象爲一個對象來解決它。很多情況下,我們會不知不覺的按照過程方式來解決它,而不是考慮將要解決問題抽象爲對象去解決它。有些人打着面向對象的幌子,幹着過程編程的勾當。
OOA呢?OO對A有什麼幫助呢?
OOA的主要優點
·         加強了對問題域和系統責任的理解;
·         改進與分析有關的各類人員之間的交流;
·         對需求的變化具有較強的適應性;
·         支持軟件複用。
·         貫穿軟件生命週期全過程的一致性。
·         實用性;
·         有利於用戶參與。
OOA方法的基本步驟
 
在用OOA具體地分析一個事物時,大致上遵循如下五個基本步驟:
第一步,確定對象和類。這裏所說的對象是對數據及其處理方式的抽象,它反映了系統保存和處理現實世界中某些事物的信息的能力。類是多個對象的共同屬性和方法集合的描述,它包括如何在一個類中建立一個新對象的描述。
第二步,確定結構(structure)。結構是指問題域的複雜性和連接關係。類成員結構反映了泛化-特化關係,整體-部分結構反映整體和局部之間的關係。
第三步,確定主題(subject)。主題是指事物的總體概貌和總體分析模型。
第四步,確定屬性(attribute)。屬性就是數據元素,可用來描述對象或分類結構的實例,可在圖中給出,並在對象的存儲中指定。
第五步,確定方法(method)。方法是在收到消息後必須進行的一些處理方法:方法要在圖中定義,並在對象的存儲中指定。對於每個對象和結構來說,那些用來增加、修改、刪除和選擇一個方法本身都是隱含的(雖然它們是要在對象的存儲中定義的,但並不在圖上給出),而有些則是顯示的。
 
OO是個好東西啊。要理解OO的思想,並能夠在實際中運用它。不過OO現在已經不是最熱的了,在現在web2.0的年代,基於網頁上的應用會更火啊。你開發個軟件,如果是單機版的,你都不好意思說!如果是C/S架構的,你也是會被BS的。呵呵。現在什麼SOA,AJAX那個火 啊!SOA是service oriented architecture,AJAX是什麼東東?中間件、CRP、CPM等等,現在也是牛一B啊。學無止盡,學不能曬網啊;跟上時代的腳步,對新技術保持必要的觸覺。恩。
以上純屬胡言亂語,部分摘自網上。如果有興趣,偶歡迎大家一起來討論啊。
  <SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </SCRIPT>
Google
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章