? ? 問(wèn)題空間由類組成,對(duì)象是類在解空間的映射衬廷;
? ? 計(jì)算機(jī)語(yǔ)言的發(fā)證過(guò)程:機(jī)器碼->匯編語(yǔ)言->c語(yǔ)言->c++->java
? ? 具象->抽象廓奕;
? ? 程序開發(fā)目的:決絕問(wèn)題;
? ? 計(jì)算機(jī)開發(fā)語(yǔ)言演變過(guò)程是一個(gè)一直在抽象的過(guò)程寻拂;從最開始的匯編,抽象了字節(jié)碼丈牢,形成動(dòng)作命令兜喻;到c語(yǔ)言,抽象了匯編赡麦;到c++,初次引入了類的概念帕识;到j(luò)ava泛粹,完全只有類的概念;這一過(guò)程將開發(fā)者逐漸的從背計(jì)算機(jī)規(guī)則束縛著去開發(fā)慢慢轉(zhuǎn)變?yōu)橹鲗?dǎo)程序規(guī)則去開發(fā)肮疗;
? ? 問(wèn)題空間和解空間始終存在晶姊,初期的開發(fā)者認(rèn)為,絕對(duì)的順序可以解決一切問(wèn)題伪货;所以在最開始有很多面向過(guò)程的語(yǔ)言们衙,同時(shí),也有人認(rèn)為絕對(duì)的算法可以解決一切問(wèn)題碱呼,也有相應(yīng)的開發(fā)語(yǔ)言蒙挑;在起初,所有編程都認(rèn)為愚臀,一切都是順序的忆蚀,一切都是算法可以解決的等等;直到面向?qū)ο缶幊陶Z(yǔ)言出現(xiàn),類這一概念的提出馋袜,使得整個(gè)行業(yè)的對(duì)自身又有了新的理解男旗;
? ? 在c++中,我們可以大致認(rèn)為問(wèn)題空間由類和類之間的關(guān)聯(lián)(類之間的動(dòng)作)構(gòu)成欣鳖,而對(duì)象則是解空間中類的投影(問(wèn)題處理之后的結(jié)果)察皇;
? ? 簡(jiǎn)單的例子,銀行柜員問(wèn)題泽台,柜員可以給用戶存錢什荣,取錢,用戶可以要求柜員存錢师痕,取錢溃睹,這樣一來(lái),問(wèn)題空間中就有起碼三個(gè)對(duì)象胰坟,柜員因篇,用戶和錢;
? ? 對(duì)象和對(duì)象之間的關(guān)系就是存錢笔横,取錢竞滓,如果再進(jìn)一步細(xì)化可以有遞交“錢”;而解空間中就是一組一組的對(duì)象吹缔,用戶A將錢B遞交給柜員C做存取動(dòng)作商佑;
? ? 這比之前面向順序編程而言,更加抽象了厢塘,盡管代碼的復(fù)雜度其實(shí)沒什么區(qū)別茶没,但是使用面向?qū)ο螅ㄒ韵潞?jiǎn)稱OOP)編程的思想更加簡(jiǎn)單,或者說(shuō)晚碾,更加的概括抓半,就像小學(xué)語(yǔ)文學(xué)的縮句,主語(yǔ)格嘁,賓語(yǔ)笛求,就夠了,頂多再加個(gè)動(dòng)詞糕簿;這就是抽象畫的過(guò)程探入;
? ? 直至java的誕生,徹底顛覆了之前的編程理念懂诗,一切都是類蜂嗽,包括之前類與類之間的動(dòng)作;這樣以來(lái)殃恒,就變得更加簡(jiǎn)單了徒爹;
? ? 銀行柜員問(wèn)題的問(wèn)題空間被抽象成幾個(gè)簡(jiǎn)單的類:用戶荚醒,柜員,錢隆嗅,動(dòng)作界阁;最后解空間里得到的結(jié)果可能就是:用戶A將錢B通過(guò)動(dòng)作C遞交給柜員D;
? ? 其中胖喳,動(dòng)作這個(gè)類抽象了c++版本中的所有動(dòng)作泡躯,可以省去很多面向過(guò)程的判斷以及邏輯代碼;
? ? 在c++中可能得這么寫
? ??If(opration==a){
? ? custom.fun(a,b)
}else if(opration=b){
? ? custom.fun(b,b)
}else {
? ? custom.fun(c,b)
}
? ? 然而在java中丽焊,可能只要三個(gè)類:
? ??Public?class ?custom{...}
? ??Public class money{...}
? ??Public class?operation{…}
? ??Public class staff{…}
最后的服務(wù)層代碼:custom.fun(opration,money);十分的簡(jiǎn)潔明了较剃;
總結(jié):
1.程序開發(fā)的目的從未改變,解決問(wèn)題技健;
2.OOP是不斷抽象的出來(lái)的結(jié)果写穴,類是組成問(wèn)題空間的基本單位,而對(duì)象是解空間中雌贱,類的投影啊送;
3.抽象不等于晦澀難懂,反而抽象可能可以讓你站在更高的角度看到更多的東西欣孤;他可以幫助你看到更多事物的共同點(diǎn)從而幫助你找出其中的規(guī)律馋没;
2019-6-21