国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

對象軟件復(fù)用機制的研究

2018-08-13 11:46李頌
教育·學(xué)習(xí) 2018年1期
關(guān)鍵詞:接口繼承

李頌

摘要:軟件復(fù)用是軟件開發(fā)中非常重要的思想,掌握軟件復(fù)用思想和面向?qū)ο笳Z言的實現(xiàn)機制,對設(shè)計合理的軟件體系結(jié)構(gòu)具有很強的指導(dǎo)意義。繼承和合成是面向?qū)ο笞畛S玫膬煞N復(fù)用機制,本文針對當(dāng)前比較流行的面向?qū)ο笳Z言Java,論述各自的實現(xiàn)機制。

關(guān)鍵詞:繼承;接口;軟件復(fù)用

1 引言

1977年出現(xiàn)的結(jié)構(gòu)化設(shè)計方法學(xué)曾給軟件產(chǎn)業(yè)帶來了巨大進(jìn)步,在一定程度上緩解了軟件危機,但是由于結(jié)構(gòu)化方法是基于功能分析和分解,軟件結(jié)構(gòu)依賴于系統(tǒng)功能,這對一些功能非常明確的而且不會輕易改變的軟件系統(tǒng)是非常有效的,但是現(xiàn)實中存在大量系統(tǒng),其功能往往是模糊易變的,而功能的變化常會引起軟件結(jié)構(gòu)的整體修改,結(jié)構(gòu)化設(shè)計方法學(xué)無法承擔(dān)快速高效的開發(fā)這類復(fù)雜軟件系統(tǒng)的重任。20世紀(jì)80年代逐漸成熟的面向?qū)ο蠓椒▽W(xué),使軟件軟件的分析、設(shè)計和編程等方面都有了全新的認(rèn)識。其用面向?qū)ο蟮母拍顏砻枋霈F(xiàn)實世界,“對象”的概念是將數(shù)據(jù)和對數(shù)據(jù)操作的方法封裝在一起,從而提高了模塊的聚合度,降低了模塊之間的耦合度,更大程度上的支持軟件復(fù)用,從而十分有效地降低了軟件的復(fù)雜度。面向?qū)ο蠹夹g(shù)和結(jié)構(gòu)化技術(shù)相比,最大的優(yōu)勢在于它實現(xiàn)了最大程度上的軟件復(fù)用[1]。軟件復(fù)用綜合了面向?qū)ο蠹夹g(shù)中最重要的概念,本文將全面分析面向?qū)ο蠹夹g(shù)是如何實現(xiàn)軟件復(fù)用機制的。

2 面向?qū)ο蠓椒▽W(xué)概述

Peter Coad和Edward Yourdon提出了下列等式[2]:

面向?qū)ο?對象(objects)+類(classes)+繼承(inheritance)+消息通訊(communication with messages)

只有同時使用了對象、類、繼承和消息通訊才是真正面向?qū)ο蟮姆椒ā?/p>

(1) 對象與封裝

對象是系統(tǒng)中用來描述客觀事物的實體,它是構(gòu)成系統(tǒng)的基本單位。對象由三個要素組成:對象標(biāo)識、屬性和方法。對象標(biāo)識,是對象的名字,供系統(tǒng)內(nèi)部唯一識別;屬性,也稱狀態(tài)和數(shù)據(jù),是用來描述對象的靜態(tài)特征;方法,也稱操作、行為或服務(wù),用來描述系統(tǒng)的動態(tài)特征。對象的重要設(shè)計原則:封裝。封裝具有兩層含義:首先,對象是其全部屬性和全部服務(wù)緊密結(jié)合而形成的不可分隔的整體;其次,對象是一個不透明的黑盒子,表示對象狀態(tài)的數(shù)據(jù)和對象服務(wù)的實現(xiàn)被封裝在黑盒子里,對象本身對外部的訪問者具有一定的權(quán)限控制,同時訪問者只需知道被訪問者向外提供的接口的形式,無須知道它的數(shù)據(jù)結(jié)構(gòu)細(xì)節(jié)和實現(xiàn)操作的算法。

(2) 類

類是具有相同屬性和服務(wù)的一個或一組對象的抽象定義。一個具體的對象稱為類的一個實例,通過new 關(guān)鍵字創(chuàng)建類的實例。

(3) 繼承與多態(tài)[3]

繼承,其定義為:特殊類(或稱子類、派生類)的對象擁有一般類(或稱父類、基類)非私用屬性和方法。繼承是提高軟件開發(fā)效率的重要原因之一,同時也面向?qū)ο笾袑崿F(xiàn)軟件復(fù)用的重要機制。

多態(tài),一個對象從外面被訪問時,根據(jù)外部環(huán)境的訪問形式的變化,對象內(nèi)部能夠提供相應(yīng)的多種狀態(tài)(服務(wù))。多態(tài)性不僅可以增加了面向?qū)ο筌浖到y(tǒng)的靈活性,進(jìn)一步減少冗余,而且顯著提高了軟件的可重復(fù)性和可擴充性。

(4) 消息通訊

如果把每個對象看作是能夠向外部提供服務(wù)的個體,那么對象之間的的聯(lián)系就是通過消息通訊聯(lián)系在一起的,面向?qū)ο笙到y(tǒng)的運作就是系統(tǒng)內(nèi)部各個對象之間消息通信實現(xiàn)的。消息就是對象給其他對象發(fā)出的一個服務(wù)請求,它包括:提供服務(wù)的對象標(biāo)識、消息名稱(如方法名稱)、輸入信息(如參數(shù))和回答信息(如方法調(diào)用后返回的數(shù)據(jù))。在這里消息的接收者不僅僅是向往提供某種服務(wù),更重要的是它接受信息是為利用接收到的信息激活內(nèi)部的操作。消息通訊是面向?qū)ο蠓椒▽W(xué)中的一個重要原則,它與對象的封裝密不可分。封裝使對象成為各司其職、互不干擾的獨立單元;消息通訊則為它們提供了惟一合法的動態(tài)聯(lián)系途徑,使它們的行為能夠互相配合,構(gòu)成一個有機的整體。

3 面向?qū)ο筌浖?fù)用機制

3.1 繼承

在Java中繼承有兩套不同的實現(xiàn)機制--接口和子類實例化[4]。在繼承體系中父類對子類是一般和特殊的關(guān)系。子類共享父類的非私有屬性和方法,同時擁有和父類不一樣的屬性和方法。在設(shè)計系統(tǒng)時,對具有繼承體系的問題域,只要有良好的繼承結(jié)構(gòu),軟件的開發(fā)是高效的。繼承按照服務(wù)實現(xiàn)的程度,可分為代碼繼承和行為繼承,當(dāng)父類中提供了方法(服務(wù))的實現(xiàn)時,子類對父類的繼承(使用extends關(guān)鍵字)成為代碼繼承,如果父類只是提供方法的定義,而沒有提供實現(xiàn)時,子類的繼承稱為行為繼承。一般代碼繼承選擇繼承機制,行為繼承時選擇接口繼承(使用implements)。如果父類中是抽象類,那么子類可以同時兼?zhèn)浯a繼承和行為繼承(使用 extends 關(guān)鍵字)。繼承之所以實現(xiàn)了軟件復(fù)用的功能,最根本上是它認(rèn)為,現(xiàn)實世界中,屬于同一個問題域的實體,共享相同的概念。在用類來描述這些實體的時候,繼承機制把共享的部分抽象出來作為父類,其他特殊的問題域用子類來描述。當(dāng)從別的類繼承了某種行為之后,就不需要重寫這種行為的代碼。

3.2 合成

合成是基于這樣的一個概念,一個問題域直接由其他一個或多個問題域提供的功能參與組成

3.3 合成和繼承的綜合應(yīng)用

通常繼承和合成同時應(yīng)用于類的設(shè)計,最近出現(xiàn)的一些新的軟件復(fù)用的新形式[4]:動態(tài)合成、內(nèi)部類的繼承和未命名類。

(1) 動態(tài)合成

合成和繼承相比有一個優(yōu)點,就是可以推遲綁定時間。對于繼承來說,子類與父類的連接是在編譯時就已確定下來,以后不能在改變。而對于合成,構(gòu)建類和原類的連接是在運行時刻才進(jìn)行,因此這種連接比較弱,在運行時刻還可以改變,合成的這種特性叫動態(tài)合成。為了說明這個概念,設(shè)想模擬青蛙行為的類Frog。青蛙行為在整個生命周期中假設(shè)就有兩種行為,一個是成長,一個是隨著年齡的增長游泳本領(lǐng)的成長。但是在青蛙的行為在整個生命周期中是變化的。針對這類動態(tài)問題,我們一般的解決方式是轉(zhuǎn)換為靜態(tài)處理,也就是按照年齡分段處理,每個年齡段呈現(xiàn)出靜態(tài)的行為。

(2) 內(nèi)部類的繼承

在類的內(nèi)部定義類,并且內(nèi)部類繼承其他類,這個時候,內(nèi)部類融合了繼承和合成兩方面的特性。

內(nèi)部類part1 和part2是model類的私有組件,這些組件保存在model實例中,其對象的生命周期在model類對象的生命周期內(nèi)。

(3) 未命名類

這里以對按鈕(button)的事件監(jiān)聽為例說明,當(dāng)我們從鍵盤上按下某個按鈕這一事件時,應(yīng)用程序里需要把這一按鈕事件注冊到事件監(jiān)聽器里,當(dāng)事件監(jiān)聽器監(jiān)聽到這一事件發(fā)生時,做出相應(yīng)的動作。

定義button事件監(jiān)聽器。

在這里使用類定義表達(dá)式把類的定義和實例的創(chuàng)建合二為一,另外它省去了給類起名字。因為整個類的定義被封裝在一個表達(dá)式里,所以可讀性差。

4 總結(jié)

面向?qū)ο蠹夹g(shù)最大限度的提高了軟件的復(fù)用型,這非常有利于縮短軟件系統(tǒng)開發(fā)的周期,同時也使大大提高了軟件的可維護(hù)性。本文從綜合了面向?qū)ο筌浖?fù)用最常用的兩種技術(shù),繼承和合成,從面向?qū)ο笳Z言Java的角度分析了他們各自實現(xiàn)的具體實現(xiàn)形式。

參考文獻(xiàn)

[1] 李增智,王宇,李剛等.面向?qū)ο罂蓮?fù)用軟件設(shè)計思想分析[J].小型微型計算機系統(tǒng),2003.5,24 (5):1~5.

[2] 飛思考試中心.軟件設(shè)計師考試考點分析與真題詳解[M].北京:電子工業(yè)出版社,2004,169~174.

[3] 吳東曉.Java程序設(shè)計基礎(chǔ)[M].北京:清華大學(xué)出版社,2002,84~110.

[4] [美]Timothly Budd 著.面向?qū)ο驤AVA編程思想.北京:清華大學(xué)出版社, 2002,141~154.

猜你喜歡
接口繼承
現(xiàn)場采購代表與總部及現(xiàn)場各部門的接口關(guān)系
某電站工程設(shè)計管理與施工、質(zhì)量控制接口關(guān)系研究
西門子SPPA—T3000在委內(nèi)瑞拉燃機電廠中的應(yīng)用與接口
淺談杜審言、杜甫的祖孫關(guān)系:推崇、繼承、發(fā)展
探討私小說中的“自我”
論電影《暮光之城》的哥特文化
評析張學(xué)英訴蔣倫芳遺產(chǎn)繼承案
氣象科技史研究領(lǐng)域又一重要學(xué)術(shù)成果
中俄網(wǎng)絡(luò)語言編碼接口問題的研究
广西| 汾西县| 黔江区| 吉安县| 康马县| 曲靖市| 沅江市| 临武县| 巴林右旗| 咸阳市| 常熟市| 麟游县| 铜陵市| 伽师县| 建德市| 广汉市| 那曲县| 东乡族自治县| 华坪县| 吴忠市| 秀山| 宁陕县| 康马县| 陆丰市| 永城市| 黄山市| 金秀| 荣成市| 固镇县| 青海省| 灵川县| 长乐市| 泸西县| 饶河县| 太仓市| 博爱县| 观塘区| 寿宁县| 慈利县| 什邡市| 黄陵县|