4.后面向?qū)ο蠓椒?BR> 雖然面向?qū)ο蟪绦蛟O(shè)計方法有諸多優(yōu)點,但經(jīng)過多年的實踐摸索,人們也發(fā)現(xiàn)面向?qū)ο蠓椒ㄓ衅洳蛔?,如許多軟件系統(tǒng)不完全都能按系統(tǒng)的功能來劃分構(gòu)件, 仍然有許多重要的需求和設(shè)計決策,比如、日志等,它們具有一種“貫穿特性”(crosscutting concerns),無論是采用面向?qū)ο笳Z言還是過程型語言,都難以用清晰的、模塊化的代碼實現(xiàn)。最后的結(jié)果經(jīng)常是:實現(xiàn)這些設(shè)計決策的代碼分布貫穿于整個系統(tǒng)的基本功能代碼中,形成了常見的“代碼散布”(code scattering)和“代碼交織”(code tangling)現(xiàn)象。代碼交織現(xiàn)象是現(xiàn)有軟件系統(tǒng)中許多不必要的復(fù)雜性的核心。它增加了功能構(gòu)件之間的依賴性,分散了構(gòu)件原來假定要做的事情,提供了許多程序設(shè)計出錯的機會,使得一些功能構(gòu)件難以復(fù)用,源代碼難以開發(fā)、理解和發(fā)展。
因此,人們在面向?qū)ο蟮幕A(chǔ)上發(fā)展了更多的新技術(shù),借以彌補面向?qū)ο蠹夹g(shù)的缺陷,使得面向?qū)ο蠹夹g(shù)能夠更好的解決軟件開發(fā)中的問題。這些建立在面向?qū)ο蟮幕A(chǔ)上、并對面向?qū)ο笞龀鰯U展的新技術(shù)被廣泛應(yīng)用的時期,我們把它稱為“后面向?qū)ο髸r代”。在后面向?qū)ο髸r代,有許多新型的程序設(shè)計值得關(guān)注。
4.1 面向方面程序設(shè)計
面向方面程序設(shè)計(Aspect-Oriented programming, AOP)方法,這一概念最早是由施樂(Xerox)公司在美國加州硅谷PaloAlto 研究中心(PARC)的首席科學(xué)家、加拿大大不列顛哥倫比亞大學(xué)教授Gregor Kicgales 等人首次在1997 年的歐洲面向?qū)ο缶幊檀髸?ECOOP 97)上提出[4]。
所謂的Aspect,就是AOP提供的一種程序設(shè)計單元,它可以將上文提到的那些在傳統(tǒng)程序設(shè)計方法學(xué)中難于清晰地封裝并模塊化實現(xiàn)的設(shè)計決策,封裝實現(xiàn)為獨立的模塊。 Aspect是AOP的核心,它超越了子程序和繼承,是AOP將貫穿特性局部化和模塊化的實現(xiàn)機制。通過將貫穿特性集中到Aspect中,AOP就取得一種單一的結(jié)構(gòu)化行為---該行為在傳統(tǒng)程序中分布于整個代碼中--這樣就使Aspect代碼和系統(tǒng)目標(biāo)都易于理解。在AOP中,Aspect是AOP中的一階實體,AOP中的Aspect正如OOP中的類?,F(xiàn)有對Aspect的認(rèn)識有錯誤校驗策略、設(shè)計模式、同步策略、資源共享、分布關(guān)系和性能優(yōu)化等。
Aspect的實現(xiàn)和傳統(tǒng)開法方法中模塊的實現(xiàn)不同。Aspect之間是一種松耦合的關(guān)系,各Aspect的開發(fā)彼此獨立。主代碼的開發(fā)者甚至可能沒有意識到Aspect的存在,只是在最后系統(tǒng)組裝時刻,才將各Aspect代碼和主代碼編排融合在一起。因此,主代碼和Aspect之間可以是一種不同于傳統(tǒng)“顯式調(diào)用”關(guān)系的“隱式調(diào)用”[5]。在軟件復(fù)雜性日益增加的今天,隱式調(diào)用有巨大的優(yōu)點,因為某一應(yīng)用的領(lǐng)域?qū)<?,不太可能對分布、認(rèn)證、訪問控制、同步、加密、冗余等問題的復(fù)雜的實現(xiàn)機制很熟悉,因此就不能保證他們在程序中進行正確的調(diào)用。在當(dāng)前強調(diào)程序演化的情況下,這一點尤其重要,因為開發(fā)人員很難正確預(yù)見到未來對程序的新需求。
AOP 是一種關(guān)注點分離技術(shù),通過運用aspect 這種程序設(shè)計單元,允許開發(fā)者使用結(jié)構(gòu)化的設(shè)計和代碼,反映其對系統(tǒng)的認(rèn)識方式。要使設(shè)計和代碼更加模塊化、更具結(jié)構(gòu)化,使關(guān)注點局部化而不是分散于整個系統(tǒng)中。同時,需使關(guān)注點和系統(tǒng)其他部分保持良好定義的接口,從而真正達到“分離關(guān)注點,分而治之”的目的。
因此,人們在面向?qū)ο蟮幕A(chǔ)上發(fā)展了更多的新技術(shù),借以彌補面向?qū)ο蠹夹g(shù)的缺陷,使得面向?qū)ο蠹夹g(shù)能夠更好的解決軟件開發(fā)中的問題。這些建立在面向?qū)ο蟮幕A(chǔ)上、并對面向?qū)ο笞龀鰯U展的新技術(shù)被廣泛應(yīng)用的時期,我們把它稱為“后面向?qū)ο髸r代”。在后面向?qū)ο髸r代,有許多新型的程序設(shè)計值得關(guān)注。
4.1 面向方面程序設(shè)計
面向方面程序設(shè)計(Aspect-Oriented programming, AOP)方法,這一概念最早是由施樂(Xerox)公司在美國加州硅谷PaloAlto 研究中心(PARC)的首席科學(xué)家、加拿大大不列顛哥倫比亞大學(xué)教授Gregor Kicgales 等人首次在1997 年的歐洲面向?qū)ο缶幊檀髸?ECOOP 97)上提出[4]。
所謂的Aspect,就是AOP提供的一種程序設(shè)計單元,它可以將上文提到的那些在傳統(tǒng)程序設(shè)計方法學(xué)中難于清晰地封裝并模塊化實現(xiàn)的設(shè)計決策,封裝實現(xiàn)為獨立的模塊。 Aspect是AOP的核心,它超越了子程序和繼承,是AOP將貫穿特性局部化和模塊化的實現(xiàn)機制。通過將貫穿特性集中到Aspect中,AOP就取得一種單一的結(jié)構(gòu)化行為---該行為在傳統(tǒng)程序中分布于整個代碼中--這樣就使Aspect代碼和系統(tǒng)目標(biāo)都易于理解。在AOP中,Aspect是AOP中的一階實體,AOP中的Aspect正如OOP中的類?,F(xiàn)有對Aspect的認(rèn)識有錯誤校驗策略、設(shè)計模式、同步策略、資源共享、分布關(guān)系和性能優(yōu)化等。
Aspect的實現(xiàn)和傳統(tǒng)開法方法中模塊的實現(xiàn)不同。Aspect之間是一種松耦合的關(guān)系,各Aspect的開發(fā)彼此獨立。主代碼的開發(fā)者甚至可能沒有意識到Aspect的存在,只是在最后系統(tǒng)組裝時刻,才將各Aspect代碼和主代碼編排融合在一起。因此,主代碼和Aspect之間可以是一種不同于傳統(tǒng)“顯式調(diào)用”關(guān)系的“隱式調(diào)用”[5]。在軟件復(fù)雜性日益增加的今天,隱式調(diào)用有巨大的優(yōu)點,因為某一應(yīng)用的領(lǐng)域?qū)<?,不太可能對分布、認(rèn)證、訪問控制、同步、加密、冗余等問題的復(fù)雜的實現(xiàn)機制很熟悉,因此就不能保證他們在程序中進行正確的調(diào)用。在當(dāng)前強調(diào)程序演化的情況下,這一點尤其重要,因為開發(fā)人員很難正確預(yù)見到未來對程序的新需求。
AOP 是一種關(guān)注點分離技術(shù),通過運用aspect 這種程序設(shè)計單元,允許開發(fā)者使用結(jié)構(gòu)化的設(shè)計和代碼,反映其對系統(tǒng)的認(rèn)識方式。要使設(shè)計和代碼更加模塊化、更具結(jié)構(gòu)化,使關(guān)注點局部化而不是分散于整個系統(tǒng)中。同時,需使關(guān)注點和系統(tǒng)其他部分保持良好定義的接口,從而真正達到“分離關(guān)注點,分而治之”的目的。

