欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      學(xué)習(xí)面向切面編程的總結(jié)

      時(shí)間:2019-05-12 03:57:19下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《學(xué)習(xí)面向切面編程的總結(jié)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《學(xué)習(xí)面向切面編程的總結(jié)》。

      第一篇:學(xué)習(xí)面向切面編程的總結(jié)

      北大青鳥中關(guān)村

      AOP(面向切面編程)

      可以說是OOP(Object-Oriented Programing,面向?qū)ο缶幊蹋┑难a(bǔ)充和完善。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對象層次結(jié)構(gòu),用以模擬公共行為的一個(gè)集合。當(dāng)我們需要為分散的對象引入公共行為的時(shí)候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關(guān)系,但并不適合定義從左到右的關(guān)系。例如日志功能。日志代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關(guān)系。對于其他類型的代碼,如安全性、異常處理和透明的持續(xù)性也是如此。這種散布在各處的無關(guān)的代碼被稱為橫切(cross-cutting)代碼,在OOP設(shè)計(jì)中,它導(dǎo)致了大量代碼的重復(fù),而不利于

      各個(gè)模塊的重用。

      而AOP技術(shù)則恰恰相反,它利用一種稱為“橫切”的技術(shù),剖解開封裝的對象內(nèi)部,并將那些影響了多個(gè)類的公共行為封裝到一個(gè)可重用模塊,并將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護(hù)性。AOP代表的是一個(gè)橫向的關(guān)系,如果說“對象”是一個(gè)空心的圓柱體,其中封裝的是對象的屬性和行為;那么面向方面編程的方法,就仿佛一把利刃,將這些空心圓柱體剖開,以獲得其內(nèi)部的消息。而剖開的切面,也就是所謂的“方面”了。然后它又以巧奪天功的妙手將這些剖開的切面復(fù)原,不留痕跡。

      使用“橫切”技術(shù),AOP把軟件系統(tǒng)分為兩個(gè)部分:核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)。業(yè)務(wù)處理的主要流程是核心關(guān)注點(diǎn),與之關(guān)系不大的部分是橫切關(guān)注點(diǎn)。橫切關(guān)注點(diǎn)的一個(gè)特點(diǎn)是,他們經(jīng)常發(fā)生在核心關(guān)注點(diǎn)的多處,而各處都基本相似。

      北大青鳥中關(guān)村

      比如權(quán)限認(rèn)證、日志、事務(wù)處理。Aop的作用在于分離系統(tǒng)中的各種關(guān)注點(diǎn),將核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)分離開來。正如Avanade公司的高級方案構(gòu)架師Adam Magee所說,AOP的核心思想就是“將應(yīng)用程序中的商業(yè)邏輯同對其提供支持的通用服務(wù)進(jìn)行分離?!?/p>

      實(shí)現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動態(tài)代理技術(shù),利用截取消息的方式,對該消息進(jìn)行裝飾,以取代原有對象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼。然而殊途同歸,實(shí)現(xiàn)AOP的技術(shù)特性卻是相同的,分別為:

      1、join point(連接點(diǎn)):是程序執(zhí)行中的一個(gè)精確執(zhí)行點(diǎn),例如類中的一個(gè)方法。它是一個(gè)抽象的概念,在實(shí)現(xiàn)AOP時(shí),并不需要去定義一個(gè)join point。

      2、point cut(切入點(diǎn)):本質(zhì)上是一個(gè)捕獲連接點(diǎn)的結(jié)構(gòu)。在AOP中,可以定義一個(gè)point cut,來捕獲相關(guān)方法的調(diào)用。

      3、advice(通知):是point cut的執(zhí)行代碼,是執(zhí)行“方面”的具體邏輯。

      4、aspect(方面):point cut和advice結(jié)合起來就是aspect,它類似于OOP中定義的一個(gè)類,但它代表的更多是對象間橫向的關(guān)系。

      5、introduce(引入):為對象引入附加的方法或?qū)傩?,從而達(dá)到修改對象結(jié)構(gòu)的目的。有的AOP工具又將其稱為mixin。

      上述的技術(shù)特性組成了基本的AOP技術(shù),大多數(shù)AOP工具均實(shí)現(xiàn)了這些技術(shù)。它們也可以是研究AOP技術(shù)的基本術(shù)語。2.2.2 橫切技術(shù)

      北大青鳥中關(guān)村

      “橫切”是AOP的專有名詞。它是一種蘊(yùn)含強(qiáng)大力量的相對簡單的設(shè)計(jì)和編程技術(shù),尤其是用于建立松散耦合的、可擴(kuò)展的企業(yè)系統(tǒng)時(shí)。橫切技術(shù)可以使得AOP在一個(gè)給定的編程模型中穿越既定的職責(zé)部分(比如日志記錄和性能優(yōu)化)的操作。

      如果不使用橫切技術(shù),軟件開發(fā)是怎樣的情形呢?在傳統(tǒng)的程序中,由于橫切行為的實(shí)現(xiàn)是分散的,開發(fā)人員很難對這些行為進(jìn)行邏輯上的實(shí)現(xiàn)或更改。例如,用于日志記錄的代碼和主要用于其它職責(zé)的代碼纏繞在一起。根據(jù)所解決的問題的復(fù)雜程度和作用域的不同,所引起的混亂可大可小。更改一個(gè)應(yīng)用程序的日志記錄策略可能涉及數(shù)百次編輯——即使可行,這也是個(gè)令人頭疼的任務(wù)。

      在AOP中,我們將這些具有公共邏輯的,與其他模塊的核心邏輯糾纏在一起的行為稱為“橫切關(guān)注點(diǎn)(Crosscutting Concern)”,因?yàn)樗缭搅私o定編程模型中的典型職責(zé)界限。2.2.2.1 橫切關(guān)注點(diǎn)

      一個(gè)關(guān)注點(diǎn)(concern)就是一個(gè)特定的目的,一塊我們感興趣的區(qū)域,一段我們需要的邏輯行為。從技術(shù)的角度來說,一個(gè)典型的軟件系統(tǒng)包含一些核心的關(guān)注點(diǎn)和系統(tǒng)級的關(guān)注點(diǎn)。舉個(gè)例子來說,一個(gè)信用卡處理系統(tǒng)的核心關(guān)注點(diǎn)是借貸/存入處理,而系統(tǒng)級的關(guān)注點(diǎn)則是日志、事務(wù)完整性、授權(quán)、安全及性能問題等,許多關(guān)注點(diǎn)——即橫切關(guān)注點(diǎn)(crosscutting concerns)——會在多個(gè)模塊中出現(xiàn)。如果使用現(xiàn)有的編程方法,橫切關(guān)注點(diǎn)會橫越多個(gè)模塊,結(jié)果是使系統(tǒng)難以設(shè)計(jì)、理解、實(shí)現(xiàn)和演進(jìn)。AOP能夠比上述方法更好地分離系統(tǒng)關(guān)注點(diǎn),從而提供模塊化的橫切關(guān)注點(diǎn)。

      北大青鳥中關(guān)村

      例如一個(gè)復(fù)雜的系統(tǒng),它由許多關(guān)注點(diǎn)組合實(shí)現(xiàn),如業(yè)務(wù)邏輯、性能,數(shù)據(jù)存儲、日志和調(diào)度信息、授權(quán)、安全、線程、錯(cuò)誤檢查等,還有開發(fā)過程中的關(guān)注點(diǎn),如易懂、易維護(hù)、易追查、易擴(kuò)展等,圖2.1演示了由不同模塊實(shí)現(xiàn)的一批關(guān)注點(diǎn)組成一個(gè)系統(tǒng)。

      圖2.1 把模塊作為一批關(guān)注點(diǎn)來實(shí)現(xiàn)

      通過對系統(tǒng)需求和實(shí)現(xiàn)的識別,我們可以將模塊中的這些關(guān)注點(diǎn)分為:核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)。對于核心關(guān)注點(diǎn)而言,通常來說,實(shí)現(xiàn)這些關(guān)注點(diǎn)的模塊是相互獨(dú)立的,他們分別完成了系統(tǒng)需要的商業(yè)邏輯,這些邏輯與具體的業(yè)務(wù)需求有關(guān)。而對于日志、安全、持久化等關(guān)注點(diǎn)而言,他們卻是商業(yè)邏輯模塊所共同需要的,這些邏輯分布于核心關(guān)注點(diǎn)的各處。在AOP中,諸如這些模塊,都稱為橫切關(guān)注點(diǎn)。應(yīng)用AOP的橫切技術(shù),關(guān)鍵就是要實(shí)現(xiàn)對關(guān)注點(diǎn)的識別。

      北大青鳥中關(guān)村

      如果將整個(gè)模塊比喻為一個(gè)圓柱體,那么關(guān)注點(diǎn)識別過程可以用三棱鏡法則來形容,穿越三棱鏡的光束(指需求),照射到圓柱體各處,獲得不同顏色的光束,最后識別出不同的關(guān)注點(diǎn)。如圖2.2所示:

      圖2.2 關(guān)注點(diǎn)識別:三棱鏡法則

      上圖識別出來的關(guān)注點(diǎn)中,Business Logic屬于核心關(guān)注點(diǎn),它會調(diào)用到Security,Logging,Persistence等橫切關(guān)注點(diǎn)。public class BusinessLogic { public void SomeOperation(){ //驗(yàn)證安全性;Securtity關(guān)注點(diǎn);

      //執(zhí)行前記錄日志;Logging關(guān)注點(diǎn);

      DoSomething();//保存邏輯運(yùn)算后的數(shù)據(jù);Persistence關(guān)注點(diǎn);

      //執(zhí)行結(jié)束記錄日志;Logging關(guān)注點(diǎn);

      } }

      北大青鳥中關(guān)村

      AOP的目的,就是要將諸如Logging之類的橫切關(guān)注點(diǎn)從BusinessLogic類中分離出來。利用AOP技術(shù),可以對相關(guān)的橫切關(guān)注點(diǎn)封裝,形成單獨(dú)的“aspect”。這就保證了橫切關(guān)注點(diǎn)的復(fù)用。由于BusinessLogic類中不再包含橫切關(guān)注點(diǎn)的邏輯代碼,為達(dá)到調(diào)用橫切關(guān)注點(diǎn)的目的,可以利用橫切技術(shù),截取BusinessLogic類中相關(guān)方法的消息,例如SomeOperation()方法,然后將這些“aspect”織入到該方法中。例如圖2.3:

      圖2.3 將橫切關(guān)注點(diǎn)織入到核心關(guān)注點(diǎn)中

      通過利用AOP技術(shù),改變了整個(gè)系統(tǒng)的設(shè)計(jì)方式。在分析系統(tǒng)需求之初,利用AOP的思想,分離出核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)。在實(shí)現(xiàn)了諸如日志、事務(wù)管理、權(quán)限控制等橫切關(guān)注點(diǎn)的通用邏輯后,開發(fā)人員就可以專注于核心關(guān)注點(diǎn),將精力投入到解決企業(yè)的商業(yè)邏輯上來。同時(shí),這些封裝好了的橫切關(guān)注點(diǎn)提供的功能,可以最大限度地復(fù)用于商業(yè)邏輯的各個(gè)部分,既不需要開發(fā)人員作特殊的編碼,也不會因?yàn)樾薷臋M切關(guān)注點(diǎn)的功能而影響具體的業(yè)務(wù)功能。為了建立松散耦合的、可擴(kuò)展的企業(yè)系統(tǒng),AOP應(yīng)用到的橫切技術(shù),通常分為兩種類型:動態(tài)橫切和靜態(tài)橫切。2.2.2.2 動態(tài)橫切

      北大青鳥中關(guān)村

      動態(tài)橫切是通過切入點(diǎn)和連接點(diǎn)在一個(gè)方面中創(chuàng)建行為的過程,連接點(diǎn)可以在執(zhí)行時(shí)橫向地應(yīng)用于現(xiàn)有對象。動態(tài)橫切通常用于幫助向?qū)ο髮哟沃械母鞣N方法添加日志記錄或身份認(rèn)證。在很多應(yīng)用場景中,動態(tài)橫切技術(shù)基本上代表了AOP。

      動態(tài)橫切技術(shù)的核心主要包括join point(連接點(diǎn)),point cut(切入點(diǎn)),advice(通知)和aspect(方面)。在前面,我已經(jīng)概要地介紹了這些術(shù)語分別代表的含義。接下來,我將以一個(gè)具體的實(shí)例來進(jìn)一步闡述它們在AOP動態(tài)橫切中實(shí)現(xiàn)的意義。

      考慮一個(gè)電子商務(wù)系統(tǒng),需要對訂單進(jìn)行添加、刪除等管理操作。毫無疑問,在實(shí)際的應(yīng)用場景中,這些行為應(yīng)與權(quán)限管理結(jié)合,只有獲得授權(quán)的用戶方能夠?qū)嵤┻@些行為。采用傳統(tǒng)的設(shè)計(jì)方法,其偽代碼如下: public class OrderManager { private ArrayListm_Orders;public OrderManager(){ m_Orders = new ArrayList();} public void AddOrder(Order order){ if(permissions.Verify(Permission.ADMIN)){

      北大青鳥中關(guān)村

      m_Orders.Add(order);} } public void RemoveOrder(Order order){ if(permissions.Verify(Permission.ADMIN)){ m_Orders.Remove(order);} } } 同樣的,在該電子商務(wù)系統(tǒng)中,還需要對商品進(jìn)行管理,它采用了同樣的授權(quán)機(jī)制:

      public class ProductManager { private ArrayListm_Products;public ProductManager(){ m_Products = new ArrayList();} public void AddProduct(Product product){ if(permissions.Verify(Permission.ADMIN))

      北大青鳥中關(guān)村

      { m_Products.Add(product);} } public void RemoveProduct(Product product){ if(permissions.Verify(Permission.ADMIN)){ m_Products.Remove(product);} } } 如此以來,在整個(gè)電子商務(wù)系統(tǒng)中,核心業(yè)務(wù)包括訂單管理和商品管理,它們都需要相同的權(quán)限管理,如圖2.4所示:

      圖2.4 電子商務(wù)系統(tǒng)的權(quán)限驗(yàn)證實(shí)現(xiàn)

      毫無疑問,利用AOP技術(shù),我們可以分離出系統(tǒng)的核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn),從橫向的角度,截取業(yè)務(wù)管理行為的內(nèi)部消息,以達(dá)到織入權(quán)限管理邏輯的目

      北大青鳥中關(guān)村 的。當(dāng)執(zhí)行AddOrder()等方法時(shí),系統(tǒng)將驗(yàn)證用戶的權(quán)限,調(diào)用橫切關(guān)注點(diǎn)邏輯,因此該方法即為AOP的join point。對于電子商務(wù)系統(tǒng)而言,每個(gè)需要權(quán)限驗(yàn)證的方法都是一個(gè)單獨(dú)的join point。由于權(quán)限驗(yàn)證將在每個(gè)方法執(zhí)行前執(zhí)行,所以對于這一系列join point,只需要定義一個(gè)point cut。當(dāng)系統(tǒng)執(zhí)行到j(luò)oin point處時(shí),將根據(jù)定義去查找對應(yīng)的point cut,然后執(zhí)行這個(gè)橫切關(guān)注點(diǎn)需要實(shí)現(xiàn)的邏輯,即advice。而point cut和advice,就組合成了一個(gè)權(quán)限管理aspect。

      圖2.5 AOP動態(tài)橫切的技術(shù)實(shí)現(xiàn)

      由于aspect是一個(gè)封裝的對象,我們可以定義這樣一個(gè)aspect: private static aspect AuthorizationAspect{……}

      然后在這個(gè)aspect中定義point cut,在point cut中,定義了需要截取上下文消息的方法,例如:

      private pointcutauthorizationExecution(): execution(public void OrderManager.AddOrder(Order))||

      北大青鳥中關(guān)村

      execution(public void OrderManager.DeleteOrder(Order))|| execution(public void ProductManager.AddProduct(Product))|| execution(public void ProductManager.DeleteProduct(Product));由于權(quán)限驗(yàn)證是在訂單管理方法執(zhí)行之前完成,因此在before advice中,定義權(quán)限檢查:

      before(): authorizationExecution(){ if!(permissions.Verify(Permission.ADMIN)){ throw new UnauthorizedException();} } 通過定義了這樣一個(gè)完整的aspect,當(dāng)系統(tǒng)調(diào)用OrderManager或ProductManager的相關(guān)方法時(shí),就觸發(fā)了point cut,然后調(diào)用相應(yīng)的advice邏輯。如此以來,OrderManager和ProductManager模塊就與權(quán)限管理模塊完全解除了依賴關(guān)系,同時(shí)也消除了傳統(tǒng)設(shè)計(jì)中不可避免的權(quán)限判斷的重復(fù)代碼。這對于建立一個(gè)松散耦合、可擴(kuò)展的系統(tǒng)軟件是非常有利的。2.2.2.3 靜態(tài)橫切

      靜態(tài)橫切和動態(tài)橫切的區(qū)別在于它不修改一個(gè)給定對象的執(zhí)行行為。相反,它允許通過引入附加的方法字段和屬性來修改對象的結(jié)構(gòu)。此外,靜態(tài)橫切可以把擴(kuò)展和實(shí)現(xiàn)附加到對象的基本結(jié)構(gòu)中。在AOP實(shí)現(xiàn)中,通常將靜態(tài)橫切稱為introduce或者mixin。

      北大青鳥中關(guān)村

      靜態(tài)橫切在AOP技術(shù)中,受到的關(guān)注相對較少。事實(shí)上,這一技術(shù)蘊(yùn)含的潛力是巨大的。使用靜態(tài)橫切,架構(gòu)師和設(shè)計(jì)者能用一種真正面向?qū)ο蟮姆椒ㄓ行У亟?fù)雜系統(tǒng)的模型。靜態(tài)橫切允許您不用創(chuàng)建很深的層次結(jié)構(gòu),以一種本質(zhì)上更優(yōu)雅、更逼真于現(xiàn)實(shí)結(jié)構(gòu)的方式,插入跨越整個(gè)系統(tǒng)的公共行為。尤其是當(dāng)開發(fā)應(yīng)用系統(tǒng)時(shí),如果需要在不修改原有代碼的前提下,引入第三方產(chǎn)品和API庫,則靜態(tài)橫切技術(shù)將發(fā)揮巨大的作用。

      舉例來說,當(dāng)前已經(jīng)實(shí)現(xiàn)了一個(gè)郵件收發(fā)系統(tǒng),其中類Mail完成了收發(fā)郵件的功能。但在產(chǎn)品交付后,發(fā)現(xiàn)該系統(tǒng)存在缺陷,在收發(fā)郵件時(shí),未曾實(shí)現(xiàn)郵件地址的驗(yàn)證功能?,F(xiàn)在,第三方產(chǎn)品已經(jīng)提供了驗(yàn)證功能的接口IValidatable: public interface IValidatable { boolValidateAddress();} 我們可以利用設(shè)計(jì)模式中的Adapter模式,來完成對第三方產(chǎn)品API的調(diào)用。我們可以定義一個(gè)新的類MailAdapter,該類實(shí)現(xiàn)了IValidatable接口,同時(shí)繼承了Mail類:

      public class MailAdapter:Mail,IValidatable { public boolValidateAddress(){ if(this.getToAddress()!= null){ return true;

      北大青鳥中關(guān)村

      } else { return false;} } } 通過引入MailAdapter類,原來Mail對象完成的操作,將全部被MailAdapter對象取代。然而,此種實(shí)現(xiàn)方式雖然能解決引入新接口的問題,但類似下面的代碼,卻是無法編譯通過的: Mail mail = new Mail();IValidatable validate =((IValidatable)mail).ValidateAddress();必須將第一行代碼作如下修改: Mail mail = new MailAdapter();利用AOP的靜態(tài)橫切技術(shù),可以將IValidatable接口織入到原有的Mail類中,這是一種非常形象的introduce功能,其實(shí)現(xiàn)仍然是在aspect中完成: importcom.acme.validate.Validatable;public aspect MailValidateAspect { declare parents: Mail implements IValidatable;

      北大青鳥中關(guān)村

      publicbooleanMail.validateAddress(){ if(this.getToAddress()!= null){ return true;} else { return false;} } } 靜態(tài)橫切的方法,并沒有引入類似MailAdapter的新類,而是通過定義的MailValidateAspect方面,利用橫切技術(shù)為Mail類introduce了新的方法ValidateAddress(),從而實(shí)現(xiàn)了Mail的擴(kuò)展。因此如下的代碼完全可行。Mail mail = new Mail();IValidatable validate =((IValidatable)mail).ValidateAddress();2.3 AOP技術(shù)的優(yōu)勢

      AOP技術(shù)的優(yōu)勢是顯而易見的。在面向?qū)ο蟮氖澜缋?,人們提出了各種方法和設(shè)計(jì)原則來保障系統(tǒng)的可復(fù)用性與可擴(kuò)展性,以期建立一個(gè)松散耦合、便于擴(kuò)展的軟件系統(tǒng)。例如GOF提出的“設(shè)計(jì)模式”,為我們提供了設(shè)計(jì)的典范與準(zhǔn)則。設(shè)計(jì)模式通過最大程度的利用面向?qū)ο蟮奶匦?,諸如利用繼承、多態(tài),對責(zé)任

      北大青鳥中關(guān)村

      進(jìn)行分離、對依賴進(jìn)行倒置,面向抽象,面向接口,最終設(shè)計(jì)出靈活、可擴(kuò)展、可重用的類庫、組件,乃至于整個(gè)系統(tǒng)的架構(gòu)。在設(shè)計(jì)的過程中,通過各種模式體現(xiàn)對象的行為、暴露的接口、對象間關(guān)系、以及對象分別在不同層次中表現(xiàn)出來的形態(tài)。然而鑒于對象封裝的特殊性,“設(shè)計(jì)模式”的觸角始終在接口與抽象中大做文章,而對于對象內(nèi)部則無能為力。

      通過“橫切”技術(shù),AOP技術(shù)就能深入到對象內(nèi)部翻云覆雨,截取方法之間傳遞的消息為我所用。由于將核心關(guān)注點(diǎn)與橫切關(guān)注點(diǎn)完全隔離,使得我們能夠獨(dú)立的對“方面”編程。它允許開發(fā)者動態(tài)地修改靜態(tài)的OO模型,構(gòu)造出一個(gè)能夠不斷增長以滿足新增需求的系統(tǒng),就象現(xiàn)實(shí)世界中的對象會在其生命周期中不斷改變自身,應(yīng)用程序也可以在發(fā)展中擁有新的功能。設(shè)計(jì)軟件系統(tǒng)時(shí)應(yīng)用AOP技術(shù),其優(yōu)勢在于:

      (一)在定義應(yīng)用程序?qū)δ撤N服務(wù)(例如日志)的所有需求的時(shí)候。通過識別關(guān)注點(diǎn),使得該服務(wù)能夠被更好的定義,更好的被編寫代碼,并獲得更多的功能。這種方式還能夠處理在代碼涉及到多個(gè)功能的時(shí)候所出現(xiàn)的問題,例如改變某一個(gè)功能可能會影響到其它的功能,在AOP中把這樣的麻煩稱之為“糾結(jié)(tangling)”。

      (二)利用AOP技術(shù)對離散的方面進(jìn)行的分析將有助于為開發(fā)團(tuán)隊(duì)指定一位精于該項(xiàng)工作的專家。負(fù)責(zé)這項(xiàng)工作的最佳人選將可以有效利用自己的相關(guān)技能和經(jīng)驗(yàn)。

      (三)持久性。標(biāo)準(zhǔn)的面向?qū)ο蟮捻?xiàng)目開發(fā)中,不同的開發(fā)人員通常會為某項(xiàng)服務(wù)編寫相同的代碼,例如日志記錄。隨后他們會在自己的實(shí)施中分別對日志

      北大青鳥中關(guān)村

      進(jìn)行處理以滿足不同單個(gè)對象的需求。而通過創(chuàng)建一段單獨(dú)的代碼片段,AOP提供了解決這一問題的持久簡單的方案,這一方案強(qiáng)調(diào)了未來功能的重用性和易維護(hù)性:不需要在整個(gè)應(yīng)用程序中一遍遍重新編寫日志代碼,AOP使得僅僅編寫日志方面(logging aspect)成為可能,并且可以在這之上為整個(gè)應(yīng)用程序提供新的功能。

      總而言之,AOP技術(shù)的優(yōu)勢使得需要編寫的代碼量大大縮減,節(jié)省了時(shí)間,控制了開發(fā)成本。同時(shí)也使得開發(fā)人員可以集中關(guān)注于系統(tǒng)的核心商業(yè)邏輯。此外,它更利于創(chuàng)建松散耦合、可復(fù)用與可擴(kuò)展的大型軟件系統(tǒng)。

      第二篇:面向?qū)ο缶幊痰目偨Y(jié)

      面向?qū)ο缶幊痰目偨Y(jié)(理解與看法)面向?qū)ο蟪绦蛟O(shè)計(jì)(Object Oriented Programming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。OOP 的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。

      OOP 達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對象都能夠接收信息、處理數(shù)據(jù)和向其它對象發(fā)送信息。

      面向?qū)ο笥腥筇匦?,分別是:封裝、繼承、多態(tài)。封裝是隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別;將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成一個(gè)有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進(jìn)行有機(jī)的結(jié)合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。目的是增強(qiáng)安全性和簡化編程,使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只是要通過外部接口,以特定的訪問權(quán)限來使用類的成員。任何類都可以從另外一個(gè)類繼承,即這個(gè)類擁有它所繼承類的所有成員。被繼承的類稱為父類或基類。C# 只支持單繼承,不支持多重繼承,即在C# 中一次只允許繼承一個(gè)類,不能同時(shí)繼承多個(gè)類。在C# 中,接口允許多繼承,可以通過繼承多個(gè)接口來實(shí)現(xiàn)類似于C++中的多重繼承。

      多態(tài)是同一個(gè)類在不同場合下表現(xiàn)出不同的行為特征。

      使用抽象方法與虛方法都可以實(shí)現(xiàn)多態(tài)性。抽象方法是一個(gè)未實(shí)現(xiàn)的方法,使用abstract關(guān)鍵字修飾,含有抽象方法的類必然是抽象類。抽象方法要在其子方法中通過override關(guān)鍵字重寫。

      簡單工廠模式用于在調(diào)用者不知道對象屬于哪個(gè)自雷的情況下,創(chuàng)建不同的對象。

      第三篇:Java面向?qū)ο缶幊塘?xí)題總結(jié)

      第一章

      面向?qū)ο箝_發(fā)方法概述

      1.面向?qū)ο蟮能浖_發(fā)有哪些優(yōu)點(diǎn)?

      1)

      把軟件系統(tǒng)看成是各種對象的集合,這更接近人類的自然思維方式。

      2)

      軟件需求的變動性往往是功能的變動,而功能的執(zhí)行者——對象,一般不會有多大的變化,比結(jié)構(gòu)化更穩(wěn)定。

      3)

      對象包括屬性和行為,對象把數(shù)據(jù)及方法的具體實(shí)現(xiàn)方式一起封裝起來,使得方法與之相關(guān)的數(shù)據(jù)不再分析,提高了每個(gè)子系統(tǒng)的相對對立性,從而提高軟件的可維護(hù)性。

      4)

      支持封裝,抽象,繼承和多態(tài)。提高了軟件的可重用性,可維護(hù)性和可擴(kuò)展性。

      2.在軟件系統(tǒng)中,為什么說一個(gè)孤立的不對外提供任何服務(wù)的對象是沒有意義的?

      1)

      每個(gè)對象都具有特定的功能,相對于其他對象而言,它的功能就是為其他對象提供的服務(wù)。

      2)

      從使用者角度出發(fā),整個(gè)軟件系統(tǒng)就是一個(gè)服務(wù)的提供者。

      3)

      在系統(tǒng)內(nèi)部,每個(gè)子系統(tǒng)也都是服務(wù)的提供者,它們其他子系統(tǒng)提供服務(wù)。

      4)

      因此說一個(gè)孤立的部隊(duì)為提供任何服務(wù)的系統(tǒng)是美歐任何意義的。

      3.列舉一些現(xiàn)實(shí)生活中的例子,來說明什么是依賴關(guān)系、什么是聚集關(guān)系,以及什么是關(guān)聯(lián)關(guān)系。

      1)

      關(guān)聯(lián)關(guān)系:關(guān)聯(lián)是指類之間的特定對應(yīng)關(guān)系,可以分為單向關(guān)聯(lián)和雙向關(guān)聯(lián),也可以分為一對一關(guān)聯(lián)、一對多關(guān)聯(lián)以及多對多關(guān)聯(lián)。A關(guān)聯(lián)B,是指Class A與Class B之間存在特定的對應(yīng)關(guān)系。舉例如學(xué)生和老師,訂單和客戶。

      2)

      依賴關(guān)系:類之間的調(diào)用關(guān)系。A依賴B,Class A訪問Class B提供的服務(wù)。如Panel與Shape的關(guān)系。

      3)

      聚集關(guān)系:是整體與部分之間的關(guān)系

      4.列舉一些顯示生活中的例子,來說明什么是封裝,什么是接口。

      1)

      接口:對象中所有向使用者公開的方法的聲明構(gòu)成了對象的接口。

      2)

      封裝:隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅僅對外公開接口。

      3)

      接口的優(yōu)點(diǎn):a.提高系統(tǒng)之間松散耦合b.提高了系統(tǒng)的可擴(kuò)展性。

      4)

      封裝的有點(diǎn):

      a.便于使用者正確、方便地理解和使用系統(tǒng),防止使用者錯(cuò)誤修改系統(tǒng)的屬性。

      b.有助于建立各個(gè)系統(tǒng)之間的松耦合關(guān)系,提高系統(tǒng)的獨(dú)立性。

      c.提高軟件的可重用性,沒個(gè)系統(tǒng)都是一個(gè)相對獨(dú)立的整體,可以在多種環(huán)境中得到重用。

      d.降低構(gòu)建大型系統(tǒng)的風(fēng)險(xiǎn),即使整個(gè)系統(tǒng)不成功,個(gè)別的獨(dú)立子系統(tǒng)有可能依然有價(jià)值。

      5.抽象的最主要特征是什么?

      抽象是指從特定角度出發(fā),從已經(jīng)存在的一些事物中抽取我們所關(guān)注的特性,形成一個(gè)新的事物的思維過程。

      6.在建立對象模型時(shí),要經(jīng)歷哪些抽象思維過程?

      1)

      從問題領(lǐng)域的事物到軟件模型中對象的抽象。

      2)

      從對象到類的抽象。

      3)

      從子類到父類的抽象

      7.類就是程序員自定義的類型。這種說法是否正確?

      不正確,類是一組具有相同屬性和行為的對象的抽象。類及類的關(guān)系構(gòu)成了對象模型的主要內(nèi)容。開發(fā)人員需要根據(jù)先識別對象,然后再進(jìn)行分類(創(chuàng)建任意的數(shù)據(jù)模型)的思路來建立對象模型。

      8.小王本來體重70kg,經(jīng)過減肥,體重降到45kg,試從這個(gè)問題領(lǐng)域中識別對象、類、屬性、狀態(tài)和狀態(tài)的變化。

      1)

      類:人。

      2)

      對象:小王。

      3)

      屬性:體重。

      4)

      狀態(tài):70kg。

      5)

      狀態(tài)的變化:小王的減肥行為導(dǎo)致體重下降。

      9.在UML圖中哪些框圖描述了系統(tǒng)的動態(tài)結(jié)構(gòu),哪些框圖描述了系統(tǒng)的靜態(tài)結(jié)構(gòu)?

      1)

      用例圖、類框圖、組件圖、部署圖構(gòu)成了系統(tǒng)的靜態(tài)模型。

      2)

      狀態(tài)轉(zhuǎn)換圖、時(shí)序圖、協(xié)作圖則構(gòu)成了系統(tǒng)的動態(tài)模型。

      第二章

      第一個(gè)Java應(yīng)用

      1.把一個(gè)類放在包里有什么用?

      答:把類分包的作用:

      (1)

      能夠區(qū)分名字相同的類

      (2)

      有助于實(shí)施訪問權(quán)限控制

      (3)

      有助于劃分和組織Java應(yīng)用中的各個(gè)類

      2.JavaDoc文檔是不是為軟件的終端用戶提供的使用指南?

      答:不是的,JavaDoc文檔是供Java開發(fā)人員閱讀的,他們通過JavaDoc文檔來了解其他開發(fā)人員開發(fā)的類的用法。Java開發(fā)人員應(yīng)該養(yǎng)成經(jīng)常閱讀JavaDoc文檔的良好習(xí)慣。

      3.對于com.abc.dollapp.AppMain類,使用以下命令進(jìn)行編譯,編譯出來的.class文件位于什么目錄下?

      java –d C:classes –sourcepath C:src C:srccomabcdollappAppMain.java

      答:將會存放在C:classescomabcdollapp下。

      4.對于以上編譯出來的AppMain類,以下哪個(gè)java命令能正確運(yùn)行它?

      (a)

      java C:classescomabcdollappAppMain.class

      (b)

      java –classpath C:classes AppMain

      (c)

      java –classpath C:classescomabcdollapp AppMain

      (d)

      java –classpath C:classes com.abc.dollapp.AppMain

      答:(b)

      5.以下哪些main()方法的聲明能夠作為程序的入口方法?

      (a)

      public static void main()

      (b)

      public static void main(String[] string)

      (c)

      public static void main(String args)

      (d)

      static public int main(String[] args)

      (e)

      static void main(String[] args)

      答:(b),主函數(shù)必須以public static void形式存在,參數(shù)必須為String數(shù)組形式。

      6.假定以下程序代碼都分別放在MyClass.java文件中,哪些程序代碼能夠編譯通過?

      (a)

      import java.awt.*;package Mypackage;

      class MyClass{};

      (b)

      package MyPackage;

      import java.awt.*;

      class MyClass{};

      (c)

      /*This is comment*/

      package MyPackage;

      import java.awt.*;

      public class MyClass{};

      答:(c),程序順序必須按照import, package, class走,源文件必須以public類型的類命名。

      7.對于以下Myprog類,運(yùn)行命令”java Myprog good morning”,將會得到打印結(jié)果?

      public class Myprog {

      public static void main(String argv[])

      {

      System.out.println(argv[2]);

      } }

      答:打印結(jié)果為空。argv[0] = “good”, argv[1] = “morning”。

      8.下面哪些是Java的關(guān)鍵字?

      (a)

      default

      (b)

      NULL

      (c)

      String

      (d)

      throws

      (e)

      long

      (f)

      true

      答:(a),(d),(e),(f),java中所有的關(guān)鍵字都是小寫。

      9.當(dāng)AppMain類的main()方法創(chuàng)建了5個(gè)Doll對象時(shí),運(yùn)行時(shí)數(shù)據(jù)區(qū)的數(shù)據(jù)如何分布的?參考2.4節(jié)的圖2-13,畫出此時(shí)運(yùn)行時(shí)數(shù)據(jù)區(qū)的狀態(tài)圖。

      運(yùn)行時(shí)數(shù)據(jù)區(qū)(內(nèi)存)

      Java棧區(qū)

      執(zhí)行main()方法的主線程的方法調(diào)用棧

      局部變量beibei

      局部變量jingjing

      局部變量huanhuan

      局部變量yingying

      局部變量nini

      堆區(qū)

      Doll實(shí)例

      name:貝貝

      Doll實(shí)例

      name:晶晶

      Doll實(shí)例

      name:歡歡

      Doll實(shí)例

      name:迎迎

      Doll實(shí)例

      name:妮妮

      方法區(qū)

      Doll類型信息

      AppMain類型信息

      (包含main()方法信息)

      10.下面哪些是合法的Java標(biāo)識符?

      (a)

      #_pound

      (b)

      _underscore

      (c)

      5Interstate

      (d)

      Interstate5

      (e)

      _5_

      (f)

      class

      答:(b),(d),(e)標(biāo)識符命名規(guī)則如下:

      (1)

      標(biāo)識符首字母必須為字母、下劃線“_”、美元“$”、人民幣“¥”(2)

      標(biāo)識符由數(shù)字、大寫字母、小寫字母、下劃線以及美元等組成

      (3)

      不能把關(guān)鍵字和保留字作為標(biāo)識符

      (4)

      標(biāo)識符沒有長度的限制

      (5)

      標(biāo)識符是大小寫敏感的第三章

      數(shù)據(jù)類型和變量

      1.對于以下程序,運(yùn)行“java Abs”,將得到什么打印結(jié)果?

      public class Abs

      {

      static int a = 0x11;

      //十六進(jìn)制

      static int b = 0011;

      //八進(jìn)制

      static int c = 'u0011';

      //十六進(jìn)制數(shù)據(jù)的Unicode字符編碼

      static int d = 011;

      //八進(jìn)制

      /**

      * @param args

      */

      public static void main(String[] args)

      {

      System.out.println(“a=”+a);

      System.out.println(“b=”+b);

      System.out.println(“c=”+c);

      System.out.println(“d=”+d);

      } }

      答:輸出如下

      a=17 b=9 c=17 d=9

      2.以下哪段代碼能正確編譯通過?

      (a)

      char a = ?a?;

      char b = 1;

      char c = 08;

      (b)

      int a = ?a?;

      (c)

      long a =?u00FF?;

      (d)

      char a = ?u0FF?;

      (e)

      char d = “d”;

      答:(b)、(c)能通過編譯。(a)中“char c=08”將int賦值給char需要部分強(qiáng)制轉(zhuǎn)換,“char c=8”就正確;(d)中unicode編碼錯(cuò)誤,java采用的是UCS-2編碼,共16位;(e)字符賦值是使用單引號,字符串String賦值時(shí)才使用雙引號。

      3.下面哪些代碼能編譯通過?

      (a)

      short myshort=99S;

      (b)

      String name = ?Excellent tutorial Mr Green?;(c)

      char c = 17c;

      (d)

      int z = 015;

      答:(d)可以編譯通過。(a)中char賦值給short需要強(qiáng)制轉(zhuǎn)換;(b)中String類型賦值用雙引號;(c)中int賦值給char需要部分強(qiáng)制轉(zhuǎn)換。

      4.字符“A”的Unicode字符編碼為65.下面哪些代碼正確定義了一個(gè)代表字符“A”的變量?

      (a)

      Char ch=65;

      (b)

      Char ch=?65?;

      (c)

      Char ch =?u0041?;

      (d)

      Char ch=?A?;

      (e)

      Char ch =”A”

      答:(c)、(d)可以得到”A”。(b)的輸出為5,其他無法編譯通過。

      5.以下代碼共創(chuàng)建了幾個(gè)對象?

      String s1=new String(“hello”);

      String s2=new String(“hello”);

      String s3=s1;

      String s4=s2;

      答:共創(chuàng)建了2個(gè)對象。棧區(qū)4個(gè)局部變量分別引用了堆區(qū)的2個(gè)實(shí)例,而2個(gè)實(shí)例又引用了工作區(qū)的同一個(gè)類。

      6.以下代碼能否編譯通過?假如能編譯通過,運(yùn)行時(shí)將得到什么打印結(jié)果?

      class Test {

      static int myArg = 1;

      public static void main(String[] args)

      {

      Int myArg;

      System.out.println(myArg);

      } }

      答:無法編譯通過,因?yàn)榫植孔兞縨yArg聲明之后Java虛擬機(jī)就不會自動給它初始化為默認(rèn)值,若在使用前未被初始化,編譯會報(bào)錯(cuò)。

      7.對于以下程序,運(yùn)行“java Mystery Mighty Mouse”,將得到什么打印結(jié)果?

      public class Mystery

      {

      public static void main(String[] args)

      {

      Changer c = new Changer();

      c.method(args);

      System.out.println(args[0]+“ ”+args[1]);

      }

      static class Changer

      {

      void method(String[] s)

      {

      String temp = s[0];

      s[0] = s[1];

      s[1] = temp;

      }

      } }

      答:打印結(jié)果為“Mighty Mystery”

      8.對于以下程序,運(yùn)行“java Pass”,將得到什么打印結(jié)果?

      public class Pass

      {

      static int j = 20;

      public static void main(String[] args)

      {

      int i=10;

      Pass p = new Pass();

      p.amethod(i);

      System.out.println(“i=”+i);

      System.out.println(“j=”+j);

      }

      public void amethod(int x)

      {

      x*=2;

      j*=2;

      } }

      答:打印結(jié)果是

      i=10 j=40

      其中“int x”是傳參,作用域僅在amethod之中。

      第四章 操作符

      1.以下哪些程序代碼能夠編譯通過?

      (a)

      int i=0;if(i){

      System.out.println(“hello”);}

      (b)

      boolean b1=true;

      boolean b2=true;

      if(b1==b2){

      System.out.println(“So true”);}

      (c)

      int i=1;

      int j=2;

      if(i==1||j==i){

      System.out.println(“ok”);}

      (d)

      int i=1;

      int j=2;

      if(i==1&|j==i){

      System.out.println(“ok”);}

      答:(b)、(c)能編譯通過。(a)中int不能作為boolean出現(xiàn),(d)中不能出現(xiàn)&|該操作符。

      2.運(yùn)行以下程序,將得到什么打印結(jié)果?

      System.out.println(-1>>>1);

      System.out.println(-1>>1);

      System.out.println(2>>1);

      System.out.println(1<<<1);

      答:>>>是邏輯右移位操作符,也稱不帶符號右移位操作符,在移位的過程中二進(jìn)制數(shù)開頭填0;>>是右移位操作符,也稱帶符號右移位操作符,舍棄末尾,在開頭填符號位;<<<操作符不存在;

      11111111 11111111 11111111 11111111

      -1>>>1

      01111111 11111111 11111111 11111111

      11111111 11111111 11111111 11111111

      -1>>1

      11111111 11111111 11111111 11111111

      00000000 00000000 00000000 00000010

      2>>1

      00000000 00000000 00000000 00000001

      2147483647-1 1

      3.以下temp變量最終取值是什么?

      long temp =(int)3.9;

      temp %= 2;

      答:取值為1。

      4.以下代碼能否編譯通過?假如能編譯通過,運(yùn)行時(shí)將得到什么打印結(jié)果?

      if(5 & 7 > 0 && 5 | 2)System.out.println(“true”);

      答:int型不能作為boolean型出現(xiàn)。

      5.以下代碼能否編譯通過?假如編譯通過,運(yùn)行時(shí)將得到什么打印結(jié)果?

      int output=10;

      boolean b1 = false;

      if((b1==true)&&((output+=10)==20)){

      System.out.println(“We are equal”+output);} else {

      System.out.println(“Not equal!”+output);}

      答:Not equal!10

      6.以下代碼能否編譯通過?假如能編譯通過,運(yùn)行時(shí)將得到什么打印結(jié)果?

      int output=10;

      boolean b1 = false;

      if((b1==true)&((output+=10)==20)){

      System.out.println(“We are equal”+output);} else {

      System.out.println(“Not equal!”+output);}

      答:Not equal!20

      7.對于以下聲明:

      String s1=new String(“Hello”);

      String s2=new String(“there”);

      String s3=new String();

      下面哪些是合法的操作?

      (a)

      s3=s1+s2;

      (b)

      s3=s1-s2;

      (c)

      s3=s1&s2;

      (d)

      s3=s1&&s2;

      答:(a)是合法操作。除了“+”能用于字符串的連接以外,其他操作符(如“-”、“&”、“&&”等)都不支持String類型的操作元。

      第五章

      流程控制

      1.運(yùn)行以下代碼,將得到什么打印結(jié)果?

      int i = 3;

      int j = 0;

      double k = 3.2;

      if(i < k)

      if(i == j)

      System.out.println(i);

      else

      System.out.println(j);

      else

      System.out.println(k);

      答:0

      2.以下代碼能否編譯通過?假如能編譯通過,運(yùn)行時(shí)將得到什么打印結(jié)果?

      int i = 4;

      switch(i){

      default:

      System.out.println(“default”);

      case 0:

      System.out.println(“zero”);

      break;

      case 1:

      System.out.println(“one”);

      case 2:

      System.out.println(“two”);}

      答:可以編譯通過,打印結(jié)果是:

      default

      zero

      分析:default可以放在任何位置上,一旦符合一個(gè)case即從頭執(zhí)行到尾,不再判斷case。

      3.以下哪些是合法的

      (a)

      int i;for(i=5, int j=10;i<10;j--){}

      (b)

      int i,j;for(i=0, j=10;i<10, j>0;i++, j--){}

      (c)

      int i,k;for(i=0, k=9;(i<10 && k>0);i++, k--){}

      (d)

      int i,j;for(i=0;j=10;i<10;i++,j--){} 答:(a)for語句中int定義要放在開頭。編譯不通過。

      (b)循環(huán)判斷語句不可以用逗號連接。編譯不通過。

      (c)合法。

      (d)分號只能有2個(gè)。

      4.運(yùn)行以下代碼,將得到什么打印結(jié)果?

      int i = 1;

      switch(i){

      default:

      System.out.println(“default”);

      case 0:

      System.out.println(“zero”);

      break;

      case 1:

      System.out.println(“one”);

      case 2:

      System.out.println(“two”);}

      答:分析同1,運(yùn)行結(jié)果如下:

      one

      two

      5.以下哪些代碼合法?

      (a)

      float x=1;

      switch(x){

      case 1;

      System.out.println(“Got a 1”);

      }

      (b)

      long x=1;

      switch(x){

      case 1;

      System.out.println(“Got a 1”);

      }

      (c)

      byte x=1;

      switch(x){

      case 1/1;

      System.out.println(“Got a 1”);

      }

      (d)

      int x=1;

      int c=1;

      switch(c){

      case x;

      System.out.println(“Got a 1”);}

      (e)

      short x=1;

      switch(x){

      case 3.2/2;

      System.out.println(“Got a 1”);

      }

      (f)

      short x=1;

      switch(x){

      case 1,2,3;

      System.out.println(“Got a 1”);

      }

      答:只有(c)是合法的。

      6.以下代碼能否編譯通過?假如能編譯通過,運(yùn)行時(shí)將得到什么打印結(jié)果?

      for(int a=0, b=0;a<2;b=++a, System.out.println(“b=”+b)){

      System.out.println(“a=”+a);}

      答:可以通過編譯,打印結(jié)果:

      a=0 b=1 a=1 b=2

      7.以下代碼能否編譯通過?假如能編譯通過,運(yùn)行時(shí)將得到什么打印結(jié)果?

      int x=0;one:

      while(x<10)

      {

      two:

      System.out.println(++x);

      if(x>3)

      break two;

      }

      答:不能通過編譯。

      第四篇:C語言面向?qū)ο缶幊虒W(xué)習(xí)筆記

      C語言面向?qū)ο缶幊坦P記

      1、在底層驅(qū)動函數(shù)前加static標(biāo)識符的作用:

      a:加了static后表示該函數(shù)失去了全局可見性,只在該函數(shù)所在的文件作用域內(nèi)可見 b:當(dāng)函數(shù)聲明為static以后,編譯器在該目標(biāo)編譯單元內(nèi)只含有該函數(shù)的入口地址,沒有函數(shù)名,其它編譯單元便不能通過該函數(shù)名來調(diào)用該函數(shù),這也是對1的解析與說明

      2、底層驅(qū)動的封裝模板

      通常將存儲類,顯示類,AD-DA類的外設(shè)驅(qū)動函數(shù)封裝為以下幾個(gè)函數(shù): Void Open(void);

      此函數(shù)用于開啟外設(shè),通常函數(shù)體中包涵IO和外設(shè)的初始化 Void Close(void)此函數(shù)用于關(guān)閉外設(shè),特別是一些在休眠下功耗很大的外設(shè),可用mos管控制其Vcc的通斷,以此達(dá)到降低系統(tǒng)功耗的目的

      Void Read(unsigned int address,unsigned char *data[],unsigned int count)

      此函數(shù)用于讀取數(shù)據(jù),參數(shù)分別為:address,地址,*data[],存放數(shù)據(jù)的數(shù)組,count,要讀取的字節(jié)數(shù)

      Void Write(unsigned int address,unsigned char *data[],unsigned int count)此函數(shù)用于寫數(shù)據(jù),參數(shù)功能與讀函數(shù)中相似。

      Void control(unsigned char cmd,unsigned char data)此函數(shù)用于控制外設(shè)的工作狀態(tài),如休眠,低功耗等等

      3、命名規(guī)則

      A、宏定義全部用大寫

      如:#define OLED_CS PBout(12)B、驅(qū)動函數(shù)名稱大小寫,并且動詞放置在末尾如

      static long _OLED_Close(void)C、結(jié)構(gòu)體的名稱,結(jié)構(gòu)體名大寫,變量名小寫,“驅(qū)動”的首字母大寫

      如:struct OLED_DEVICE oledDevice;

      4、關(guān)于外設(shè)的數(shù)據(jù)手冊

      外設(shè)的數(shù)據(jù)手冊應(yīng)該去芯片的官網(wǎng)下載最新版本,特別注意芯片的是否有功耗控制方面的內(nèi)容,

      第五篇:使用java實(shí)現(xiàn)面向?qū)ο缶幊炭偨Y(jié)

      第一章:抽象和封裝

      1,為什么使用面向?qū)ο?/p>

      1.1:萬事萬物皆對象,面向?qū)ο缶褪遣捎谩艾F(xiàn)實(shí)模擬”的方法設(shè)計(jì)和開發(fā)程序。

      2,使用面向?qū)ο筮M(jìn)行設(shè)計(jì)

      2.1:面向?qū)ο笤O(shè)計(jì)三部曲

      1,發(fā)現(xiàn)類。

      2,發(fā)現(xiàn)類的屬性。

      3,發(fā)現(xiàn)類的方法。

      經(jīng)驗(yàn):在需求中找出名詞的方式確定類和屬性,找出動詞的方式確定方法。

      3,創(chuàng)建類的對象

      1,通過構(gòu)造方法來創(chuàng)建對象

      2,通過對象名.屬性名的方式調(diào)用屬性。

      3,通過對象名.方法名的方式調(diào)用方法。

      4,Static可以用來修飾屬性,方法和代碼塊。Static修飾的變

      量屬于這個(gè)類所有。即由這個(gè)類創(chuàng)建的所有對象共有同一個(gè)static變量。類屬性,類方法可以通過類名和對象名訪問,勢力屬性,實(shí)例方法只能通過對象名訪問。

      5,在方法里不可以定義static變量,類變量不能是局部變量。6,構(gòu)造函數(shù)的重載

      1,構(gòu)造方法的名字和類名相同,沒有返回值類型。構(gòu)造

      方法的作用主要就是在創(chuàng)建對象是執(zhí)行一些初始化操作,賦值。

      2,在沒有給類提供任何構(gòu)造方法時(shí),系統(tǒng)會提供一個(gè)無

      參的方法體為空的默認(rèn)構(gòu)造方法。一旦提供了自定義構(gòu)造方法,系統(tǒng)將不會提供這個(gè)默認(rèn)構(gòu)造方法,如果要使用她,必須手動添加。

      3,如果同一個(gè)類中包含了兩個(gè)或兩個(gè)以上方法,它們的方法名相同,方法參數(shù)個(gè)數(shù)或參數(shù)類型不同,則稱該方法被重載。成員方法和構(gòu)造方法都可以重載。

      4,構(gòu)造方法沒有返回值類型。如果有,就不是構(gòu)造方法,而是構(gòu)造方法同名的成員方法。

      5,封裝

      1,封裝是類的三大特性之一,就是將類的狀態(tài)信息隱

      藏在內(nèi)部。

      2,封裝的具體步驟:為每個(gè)屬性創(chuàng)建一對一賦值,在賦值方法中,加入對屬性的存取控制語句。

      3,隱藏類的實(shí)現(xiàn)細(xì)節(jié),讓使用者只能通過程序員規(guī)定的方法來訪問數(shù)據(jù),可以方便地加入存取控制語句,限制不合理操作。

      下載學(xué)習(xí)面向切面編程的總結(jié)word格式文檔
      下載學(xué)習(xí)面向切面編程的總結(jié).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        plc編程學(xué)習(xí)總結(jié)

        1:PLC編程語言有5種,即順序功能圖(SFC),梯形圖(STL),功能塊圖,指令表,和結(jié)構(gòu)文本。其中順序功能圖(SFC)是最容易理解的,按照時(shí)間的先后順序執(zhí)行。 然后轉(zhuǎn)換成梯形圖,因?yàn)樘菪螆D是PLC普遍采......

        如何學(xué)習(xí)編程

        最近看到很多朋友問到如何學(xué)習(xí)編程這個(gè)問題,我想這個(gè)問題應(yīng)該是所有初學(xué)者都非常關(guān)注的問題了,在論壇上回答了很多也講了很多,但是總是無法讓所有朋友得到一個(gè)解答,所以我想寫一......

        java語言深入:究竟什么叫面向接口編程

        Java:Java語言深入:究竟什么叫面向接口編程 [ 來源:Java | 作者:Java | 時(shí)間:2007-7-20 | 去論壇] 在一個(gè)面向?qū)ο蟮南到y(tǒng)中,系統(tǒng)的各種功能是由許許多多的不同對象協(xié)作完成的。......

        學(xué)習(xí)郭明義的十個(gè)切面

        學(xué)習(xí)郭明義的十個(gè)切面 郭明義“出名”了。他經(jīng)由無數(shù)平凡小事升華而成的非凡情懷,在這個(gè)時(shí)代彌足珍貴。我們需要郭明義,需要“郭明義精神”。宣傳他,學(xué)習(xí)他,是對一個(gè)崇尚美德社......

        數(shù)控編程與仿真實(shí)驗(yàn)室是面向數(shù)控技術(shù)

        一、數(shù)控仿真實(shí)驗(yàn)室簡介 數(shù)控仿真實(shí)驗(yàn)室為機(jī)電專業(yè)綜合實(shí)驗(yàn)室,主要服務(wù)于《數(shù)控技術(shù)》、《數(shù)控操作與編程》、車床、銑床加工實(shí)訓(xùn)等課程。通過本實(shí)驗(yàn)室的訓(xùn)練,可以增強(qiáng)學(xué)生對......

        刀具和編程總結(jié)

        ① 白鋼刀(即高速鋼刀具)因其通體銀白色而得名,主要用于直壁加工。白鋼刀價(jià)格便宜,但切削壽命短、吃刀量小、進(jìn)給速度低、加工效率低,在數(shù)控加工中較少使用。 ② 飛刀(即鑲嵌式刀......

        編程題總結(jié)(范文大全)

        C作業(yè)匯總 1. short a,b=32767; /*short類型在內(nèi)存中占2B*/ a=b+1; 問:a的值是多少?并分析原因。 2. 有一4位數(shù)整數(shù),假設(shè)用abcd表示,請把這個(gè)4位數(shù)的每個(gè)數(shù)位用表達(dá)式表示出來......

        數(shù)據(jù)庫編程總結(jié)(推薦)

        數(shù)據(jù)庫編程總結(jié) 當(dāng)前各種主流數(shù)據(jù)庫有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS A......