抽象是軟件設(shè)計(jì)中的重要手段和方法妈拌,合理地使用抽象可以提升設(shè)計(jì)的簡(jiǎn)單性迟杂,改善軟件開發(fā)的質(zhì)量。通常在軟件設(shè)計(jì)中使用到兩種抽象方法缀蹄,基于過(guò)程的抽象和基于數(shù)據(jù)的抽象峭跳。
過(guò)程抽象
基于過(guò)程做抽象時(shí),會(huì)將待解決的問題分解為一個(gè)個(gè)小的子問題缺前,每一個(gè)子問題分別由一個(gè)獨(dú)立的模塊蛀醉、函數(shù)、類等來(lái)完成衅码。這種分解策略不僅僅是把一個(gè)系統(tǒng)或模塊拆分為一個(gè)一個(gè)的代碼塊拯刁,其意義在于分解出來(lái)的模塊、函數(shù)或者類能夠完成一個(gè)相對(duì)獨(dú)立的功能逝段,并且能夠在其它的系統(tǒng)或模塊中被重復(fù)引用垛玻。
在基于過(guò)程的抽象中,不同層次的過(guò)程在實(shí)現(xiàn)上相互獨(dú)立奶躯;良好抽象的系統(tǒng)在其中某一個(gè)部分的實(shí)現(xiàn)被替換的情況下帚桩,不需要修改設(shè)計(jì)仍然能正常工作。同時(shí)巫糙,基于設(shè)計(jì)良好的抽象朗儒,我們可以通過(guò)組合的方式,構(gòu)建出功能更加強(qiáng)大和復(fù)雜的系統(tǒng)。
數(shù)據(jù)抽象
相應(yīng)地醉锄,在基于數(shù)據(jù)抽象的方法中乏悄,我們可以將復(fù)雜數(shù)據(jù)結(jié)構(gòu)的使用和它的構(gòu)造分離開來(lái),通過(guò)使用“抽象數(shù)據(jù)”的方式恳不,具體數(shù)據(jù)結(jié)構(gòu)的用戶可以通過(guò)明確定義的一系列接口對(duì)其進(jìn)行訪問和操作檩小。
對(duì)于不同的問題,其解決的方式不同烟勋,選擇的抽象方式也不同规求。選擇合適的抽象方式可以使得軟件的設(shè)計(jì)更加簡(jiǎn)單、合理卵惦。如果選擇了不適合問題本質(zhì)的抽象方式阻肿,不僅會(huì)影響軟件設(shè)計(jì)的簡(jiǎn)單性,可能給軟件的可維護(hù)性帶來(lái)負(fù)面的影響沮尿。
數(shù)據(jù)抽象將數(shù)據(jù)對(duì)象的表示以及數(shù)據(jù)對(duì)象的使用分離開來(lái)丛塌,隱藏了所描述對(duì)象的內(nèi)部特征,對(duì)于外部環(huán)境而言是透明的畜疾。而外部環(huán)境只有通過(guò)使用該對(duì)象所提供的操作來(lái)表現(xiàn)對(duì)象的動(dòng)態(tài)特征赴邻。在定義具體的數(shù)據(jù)表示時(shí),不用關(guān)心該數(shù)據(jù)被使用的方式啡捶,兩者相互獨(dú)立姥敛。
數(shù)據(jù)的定義和使用分別被稱為選擇器(selectors)和構(gòu)造器(constructors),基于選擇器和構(gòu)造器瞎暑,可以構(gòu)造出一套新的適用于此領(lǐng)域的新的“語(yǔ)言”彤敛,提升業(yè)務(wù)代碼開發(fā)中的概念層次。
更多內(nèi)容了赌,可以參考SICP臊泌。