
第一章:對(duì)象入門
1.1 、面向?qū)ο缶幊蹋∣OP)的吸引力:
(1)對(duì)管理人員,它實(shí)現(xiàn)了更快和更廉價(jià)的開發(fā)與維護(hù)過(guò)程
(2)對(duì)分析與設(shè)計(jì)人員,建模處理變得更加簡(jiǎn)單,能生成清晰、易于維護(hù)的設(shè)計(jì)方案。
(3)對(duì)程序員,對(duì)象模型顯得如此高雅和淺顯。此外,面向?qū)ο蠊ぞ咭约皫?kù)的巨大威力使編程成為一項(xiàng)更使人愉悅的任務(wù)
現(xiàn)在的事實(shí)是:
事實(shí)上,很難很好地設(shè)計(jì)出對(duì)象——從而很難設(shè)計(jì)好任何東西。因此,只有數(shù)量相當(dāng)少的“專家”能設(shè)計(jì)出
最好的對(duì)象,然后讓其他人享用。對(duì)于成功的OOP 語(yǔ)言,它們不僅集成了這種語(yǔ)言的語(yǔ)法以及一個(gè)編譯程序
(編譯器),而且還有一個(gè)成功的開發(fā)環(huán)境,其中包含設(shè)計(jì)優(yōu)良、易于使用的庫(kù)。所以,大多數(shù)程序員的首
要任務(wù)就是用現(xiàn)有的對(duì)象解決自己的應(yīng)用問(wèn)題。
1.2、抽象的進(jìn)步
所有編程語(yǔ)言的最終目的都是提供一種“抽象”方法。
匯編語(yǔ)言是對(duì)基礎(chǔ)機(jī)器的少量抽象。后來(lái)的許多“命令式”語(yǔ)言(如FORTRAN,BASIC 和C)是對(duì)匯編語(yǔ)言的一種抽象。與匯編語(yǔ)言相比,這些語(yǔ)言已有了長(zhǎng)足的進(jìn)步,但它們的抽象原理依然要求我們著重考慮計(jì)算機(jī)的結(jié)構(gòu),而非考慮問(wèn)題本身的結(jié)構(gòu)。
程序員可利用一些工具表達(dá)問(wèn)題空間內(nèi)的元素。由于這種表達(dá)非常普遍,所以不必受限于特定類型的問(wèn)題。
我們將問(wèn)題空間中的元素以及它們?cè)诜桨缚臻g的表示物稱作“對(duì)象”(Object)。
在java世界中,一切皆對(duì)象。
Alan Kay 總結(jié)了Smalltalk 的五大基本特征。這是第一種成功的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,也是Java 的基礎(chǔ)語(yǔ)言。
(1) 所有東西都是對(duì)象。可將對(duì)象想象成一種新型變量;它保存著數(shù)據(jù),但可要求它對(duì)自身進(jìn)行操作。理論上講,可從要解決的問(wèn)題身上提出所有概念性的組件,然后在程序中將其表達(dá)為一個(gè)對(duì)象。
(2) 程序是一大堆對(duì)象的組合;通過(guò)消息傳遞,各對(duì)象知道自己該做些什么。為了向?qū)ο蟀l(fā)出請(qǐng)求,需向那個(gè)對(duì)象“發(fā)送一條消息”。更具體地講,可將消息想象為一個(gè)調(diào)用請(qǐng)求,它調(diào)用的是從屬于目標(biāo)對(duì)象的一個(gè)子例程或函數(shù)。
(3) 每個(gè)對(duì)象都有自己的存儲(chǔ)空間,可容納其他對(duì)象。或者說(shuō),通過(guò)封裝現(xiàn)有對(duì)象,可制作出新型對(duì)象。所以,盡管對(duì)象的概念非常簡(jiǎn)單,但在程序中卻可達(dá)到任意高的復(fù)雜程度
(4) 每個(gè)對(duì)象都有一種類型。根據(jù)語(yǔ)法,每個(gè)對(duì)象都是某個(gè)“類”的一個(gè)“實(shí)例”。其中,“類”(Class)是“類型”(Type)的同義詞。一個(gè)類最重要的特征就是“能將什么消息發(fā)給它。
(5) 同一類所有對(duì)象都能接收相同的消息。這實(shí)際是別有含義的一種說(shuō)法,大家不久便能理解。由于類型為圓”(Circle)的一個(gè)對(duì)象也屬于類型為“形狀”(Shape)的一個(gè)對(duì)象,所以一個(gè)圓完全能接收形狀消息。這意味著可讓程序代碼統(tǒng)一指揮“形狀”,令其自動(dòng)控制所有符合“形狀”描述的對(duì)象,其中自然包括“圓”。這一特性稱為對(duì)象的“可替換性”,是OOP 最重要的概念之一。
1.3、對(duì)象的接口
建好一個(gè)類后,可根據(jù)情況生成許多對(duì)象。隨后,可將那些對(duì)象作為要解決問(wèn)題中存在的元素進(jìn)行處理。
事實(shí)上,當(dāng)我們進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)時(shí),面臨的最大一項(xiàng)挑戰(zhàn)性就是:如何在“問(wèn)題空間”(問(wèn)題實(shí)際存在的地方)的元素與“方案空間”(對(duì)實(shí)際問(wèn)題進(jìn)行建模的地方,如計(jì)算機(jī))的元素之間建立理想的“一對(duì)一”對(duì)應(yīng)或映射關(guān)系。
必須有一種辦法能向?qū)ο蟀l(fā)出請(qǐng)求,令其做一些實(shí)際的事情,比如完成一次交易、在屏幕上畫一些東西或者打開一個(gè)開關(guān)等等。
每個(gè)對(duì)象僅能接受特定的請(qǐng)求。我們向?qū)ο蟀l(fā)出的請(qǐng)求是通過(guò)它的“接口”(Interface)定義的,對(duì)象的“類型”或“類”則規(guī)定了它的接口形式。“類型”與“接口”的等價(jià)或?qū)?yīng)關(guān)系是面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
