張皓焱 鄭州大學(xué)國際學(xué)院
隨著各類軟件系統(tǒng)的廣泛應(yīng)用,基于Java編程語言的系統(tǒng)生態(tài)也在不斷地發(fā)展壯大。目前,基于Java程序開發(fā)的大型系統(tǒng)軟件以及移動應(yīng)用已經(jīng)占據(jù)了互聯(lián)網(wǎng)的半壁江山。包括企業(yè)級管理應(yīng)用軟件、主流Web網(wǎng)站建設(shè)以及Android移動應(yīng)用軟件中,都能見到Java發(fā)揮關(guān)鍵作用的身影。作為經(jīng)典且強大的面向?qū)ο笳Z言之一,Java基于類與對象的思想,在實踐應(yīng)用中展現(xiàn)了很好的封裝性、繼承性和多態(tài)性。與此同時,Java在實際的面向?qū)ο蟪绦蛟O(shè)計過程中也通過自身特有的方式為開發(fā)者提供了良好的開發(fā)提高,從而在實現(xiàn)開發(fā)效率提高的基礎(chǔ)上,還為應(yīng)用軟件的質(zhì)量提供了良好的技術(shù)支持。
Java語言的應(yīng)用十分廣泛,關(guān)鍵在于Java語言本身強大的功能和特性。無論是在網(wǎng)站建設(shè)、企業(yè)級管理軟件、工業(yè)級交易系統(tǒng)中,還是在移動互聯(lián)網(wǎng)應(yīng)用和嵌入式應(yīng)用中,Java都占據(jù)著重要且關(guān)鍵的位置。作為構(gòu)建大型復(fù)雜系統(tǒng)的利器,Java已經(jīng)在工程實踐中實現(xiàn)了連續(xù)多年的統(tǒng)治級表現(xiàn)。在新技術(shù)和新需求層出不窮的今天,Java面對著新環(huán)境中出現(xiàn)的全新問題,也展現(xiàn)除了日趨提升的強大適應(yīng)能力。作為面向?qū)ο笳Z言的代表,Java的持久性成功表明了面向?qū)ο笏枷胫畯姶竽軌蚪?jīng)歷各種現(xiàn)實問題的考驗,從而實現(xiàn)復(fù)雜的現(xiàn)實需求和業(yè)務(wù)邏輯。
實際上,早期的程序設(shè)計主要基于面向過程,即是將需要解決的問題分解為需要解決的各個步驟,隨即通過程序按部就班地完成相應(yīng)的步驟。換言之,流程化是面向過程的主要設(shè)計思路之一。而面向?qū)ο笤谠O(shè)計時的初衷則與之不同,面向?qū)ο蟾⒅啬P突?、抽象化的設(shè)計思路。面向?qū)ο蟮脑O(shè)計方案是,將涉及業(yè)務(wù)的所有主體和對象先抽象成類,類中包含了主體的特征和操作。其中,主體的特征和操作分別對應(yīng)著類中的屬性和方法。作為類的實例,對象自然也具有相對應(yīng)的,但具備自身特性的屬性和方法實例。因此,面向?qū)ο蟮幕A(chǔ)實際上是類和對象。而其中的面向?qū)ο筇匦裕ǚ庋b性、繼承性和多態(tài)性都是在類和對象的相互關(guān)系以及特征表現(xiàn)的基礎(chǔ)上實現(xiàn)的。實際上,面向?qū)ο笠廊皇菍γ嫦蜻^程的一種升級和創(chuàng)新。
總之,在主流和生態(tài)的角度上看,面向?qū)ο蟪绦蛟O(shè)計是應(yīng)用最廣,即最流行的。因為,它更符合人類的思考習(xí)慣并能夠很好地將復(fù)雜的問題簡單化。綜上所述,Java語言通過面向?qū)ο蟮姆椒ê吞匦詫崿F(xiàn)了自身業(yè)務(wù)能力的不斷發(fā)展,在使得現(xiàn)實需求得到充分滿足的基礎(chǔ)上,也發(fā)展充實了面向?qū)ο蟪绦蛟O(shè)計的解決方案和經(jīng)驗理論。
在面向?qū)ο筇匦苑矫妫琂ava有著一套成熟的解決方案。要了解這套解決方案,首先需要明曉其中的主要概念和關(guān)鍵特性。
作為面向?qū)ο笞罨A(chǔ)的概念,類是對現(xiàn)實世界對象的一種抽象和提煉。而對象對應(yīng)的則是現(xiàn)實世界或業(yè)務(wù)邏輯中真實存在的具體個體及其內(nèi)容。簡言之,現(xiàn)實業(yè)務(wù)邏輯中的每個實體都對應(yīng)著一個對象,而類是對同一類對象做的抽象化描述。在特點方面,對象包括了屬性和方法,分別對應(yīng)著現(xiàn)實世界中的實體特征或狀態(tài)和實體動作或操作。對象具有唯一性,并且每一個實體都可形成對象,而且對象的狀態(tài)是動態(tài)可變的。
在明確類和對象的基礎(chǔ)概念以及相互關(guān)系之后,對于面向?qū)ο蟪绦蛟O(shè)計的理解將會更加容易且輕松。這是因為封裝性、繼承性和多態(tài)性不僅本身相互存在一定的依賴,它們的實現(xiàn)還需要基于類之間或者說和對象之間的關(guān)系進(jìn)行描述和呈現(xiàn)。
封裝是在程序設(shè)計中十分常見的一種思想。因此,面向?qū)ο笾械姆庋b性也和自然地成為了最基礎(chǔ)的特性之一。封裝的本質(zhì)思想實際上是在不影響業(yè)務(wù)邏輯實現(xiàn)的基礎(chǔ)上,通過隱藏?zé)o關(guān)細(xì)節(jié)來保障數(shù)據(jù)和對象安全的一種程序設(shè)計方法。具體的方法就是將對象內(nèi)部的內(nèi)部變量進(jìn)行私有化,而通過方法訪問的方式,使得外部主體在不直接接觸對象內(nèi)部數(shù)據(jù)的情況下,完成需要實現(xiàn)的操作。
繼承是為了響應(yīng)現(xiàn)實中的實體關(guān)系而設(shè)計出的類和對象關(guān)系。通俗地講,為了描述不同類之間的承接關(guān)系,繼承性通過實現(xiàn)子類繼承父類數(shù)據(jù)結(jié)構(gòu)的方法來完成子類對父類的繼承或綁定關(guān)系。比例來說,若將“人”作為一個類,那么“學(xué)生”和“教師”這兩個類雖然代表著不同的一類對象,但是他們都應(yīng)當(dāng)繼承自“人”這個類。需要特別指出的是,Java中并不支持多繼承。也就是說,Java不支持一個子類繼承了不止一個父類。但是由于現(xiàn)實業(yè)務(wù)中會存在需要應(yīng)用到多繼承的情況,因此Java使用implements關(guān)鍵字來解決上述問題。
多態(tài)性實際上分為靜態(tài)多態(tài)和動態(tài)多態(tài)兩種情況,分別對應(yīng)著不同的場景。其中,靜態(tài)多態(tài)性指的是類對于方法的重載。方法的重載意味著方法的命名相同,但是參數(shù)不能相同。靜態(tài)重載也稱為編譯時多態(tài),而動態(tài)多態(tài)性又稱為運行時多態(tài)。動態(tài)多態(tài)通過子類重寫父類方法來實現(xiàn),因此運行時多態(tài)也要求存在繼承關(guān)系。通過重寫父類方法,相同的方法會在不同的子類中呈現(xiàn)出不同的表現(xiàn)形式。與此同時,通過這種方式,父類的引用可以指引子類對象。與此同時,這種關(guān)系只有在運行時才得以顯現(xiàn)。換言之,運行時才動態(tài)決定執(zhí)行哪個方法,因此這種特性又稱為運行時多態(tài)。總之,動態(tài)多態(tài)性需要具備繼承關(guān)系,方法重寫以及父類引用指向子類對象的條件。綜上所述,多態(tài)性實現(xiàn)了代碼的靈活調(diào)用,不僅可以通過傳入不同參數(shù)實現(xiàn)不同的方法操作,還可以對所有類的對象進(jìn)行通用處理,從而實現(xiàn)代碼的擴展性。
總而言之,封裝性實現(xiàn)了對于對象內(nèi)容的封裝,繼承性描述了類與類之間的從屬關(guān)系,實現(xiàn)了數(shù)據(jù)結(jié)構(gòu)的繼承,而多態(tài)性通過重載和重寫的方式擴展了代碼的靈活性和統(tǒng)一性。
在Java中,創(chuàng)建一個對象十分簡單,只需要通過new關(guān)鍵字即可完成。例如我們想要創(chuàng)建一個學(xué)生類的對象實例,只需要new Student()即可。其中括號中可以傳入構(gòu)造方法對象的參數(shù),若需要將當(dāng)前對象保存,應(yīng)當(dāng)使用引用來存儲。因此,完整的語句應(yīng)當(dāng)是“Student stu = new Student();”其中stu是自定義的變量。
封裝是通過隱藏局部變量的細(xì)節(jié),通過公共方法暴露信息來保護初始數(shù)據(jù)變量的方法。為此,可以在局部變量之前加上訪問修飾符private,隨后編寫響應(yīng)的公共訪問方法,比如get或set方法。以Student類中的姓名變量為例,完整的代碼應(yīng)當(dāng)是:”private String name;”、“public String getName(){return name};”。
繼承的實現(xiàn)方法則比較簡單,只需要在子類創(chuàng)建時加上extends關(guān)鍵詞。比如Student繼承自Person類,那么代碼應(yīng)當(dāng)是“public class Student extends Person{}”。而implements的方法是為了實現(xiàn)接口,它的實現(xiàn)方法是在實現(xiàn)的接口或抽象類前加上implements關(guān)鍵字。
多態(tài)的實現(xiàn)方法主要分為兩個,對于方法重載來說,只需要主體方法命名相同但參數(shù)不相同即可,比如方法1“func(String name)”和方法1“func(String name,int age)”,其中的方法 2 就實現(xiàn)了對方法1的重載。而重寫指的是子類重寫父類方法,比如父類方法“public String say(){return “我是一個人”}”以及子類方法“public String say(){return “我是一個學(xué)生”}”。此時,若我們通過父類指引子類對象,即“Person p = new Teacher();”,那么該方法將會在運行時綁定子類方法,輸出結(jié)果應(yīng)當(dāng)為“我是一個老師”。
綜上所述,Java能夠完整全面地實現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的核心思想,并依然保留著專屬于自身的思想,以此實現(xiàn)了Java在解決實際的復(fù)雜業(yè)務(wù)邏輯過程中表現(xiàn)出來的強大能力。