程式大牛由淺入深,帶你學習物件導向程式設計

2022-09-17 12:24:14 字數 4326 閱讀 9984

物件導向的j**a語言具備「一次程式設計,任何地方均可執行」的能力,使其成為服務提供商和系統整合商用以支援多種作業系統和硬體平台的首選解決方案。j**a作為軟體開發的一種革命性的技術,其地位已被確定。如今,j**a 技術已被列為當今世界資訊科技的主流之一。

物件導向開發方法概述

一般說來,軟體開發都會經歷以下生命週期:

●軟體分析:分析問題領域,了解使用者的需求。

●軟體設計:確定軟體的總體架構,把整個軟體系統劃分成大大小小的多個子系統,設計每個子系統的具體結構。

●軟體編碼: 用選定的程式語言來編寫程式**,實現在設計階段勾畫出的軟體藍圖。

●軟體測試: 測試軟體是否能實現特定的功能,以及測試軟體的執行效能。

● 軟體部署:為使用者安裝軟體系統,幫助使用者正確地使用軟體。

●軟體維護:修復軟體中存在的bug,當使用者需求發生變化時(增加新的功能,或者修改已有功能的實現方式),修改相應的軟體。

為了提高軟體開發效率,降低軟體開發成本,乙個優良的軟體系統應該具備以下特點:

●可重用性: 減少軟體中的重複**, 避免重複程式設計。

●可擴充套件性:當軟體必須增加新的功能時,能夠在現有系統結構的基礎上,方便地建立新的子系統,不需要改變軟體系統現有的結構,也不會影響已經存在的子系統。

●可維護性:當使用者需求發生變化時,只需要修改區域性的子系統的少量程式**,不會牽一髮而動全身,修改軟體系統中多個子系統的程式**。

如何才能使軟體系統具備以上特點呢?假如能把軟體分解成多個小的子系統,每個子系統相對獨立,把這些子系統像搭積木樣靈活地組裝起來就構成了整個軟體系統,這樣的軟體系統便能獲得以上優良特性。軟體中的子系統具有以下特點:

●結構穩定性: 軟體在設計階段,在把.個系統劃分成更小的子系統時,設計合理,使得系統的結構比較健壯,能夠適應使用者變化的需求。

●可擴充套件性: 當軟體必須增加新的功能時,可在現有子系統的基礎上建立出新的子系統,該子系統繼承了原有子系統的些特性,並且還具有一些新的特性,從而提高軟體的可重用性和可打展性。

●內聚性: 每個子系統只完成特定的功能,不同子系統之間不會有功能的重疊。為了避免子系統之間功能的重疊,每個子系統的粒度在保持功能光整性的前提下都盡可能小,按這種方式構成的系統結構被稱為精粒度系統結構。子系統的內聚性會提高軟體的可重用性和可維護性。

●可組合性: 若干精粒度的子系統經過組合,就變成了大系統。子系統的可組合性會提高軟體的可重用性和可維護性,並且能夠簡化軟體的開發過程。

●松耦合: 子系統之間通過設計良好的介面進行通訊,但是盡量保持相互獨立,修改乙個子系統,不會影響到其他的子系統。當使用者需求發生變化時,只需要修改特定子系統的實現方式,從而提高軟體的可維護性。

物件導向的軟體開發方法簡介

物件導向的開發方法把軟體系統看成是各種物件的集合,物件就是最小的子系統,一組相關的物件能夠組合成更複雜的子系統。物件導向的開發方法具有以下優點:

●把軟體系統看成是 各種物件的集合,這更接近人類認識世界的自然思維方式。

●軟體需求的變動往往是功能的變動,而功能的執行者一物件- -般不會有大的變化。這使得按照物件設計出來的系統結構比較穩定。

●物件包括屬性(資料)和行為(方法),物件把資料及方法的具體實現方式一起封裝起來,這使得方法和與之相關的資料不再分離,提高了每個子系統的相對獨立性,從而提高了軟體的可維護性。

●支援封裝、 抽象、繼承和多型等各種特徵,提高了軟體的可重用性、可維護性和可擴充套件性。這些特徵將在後面的章節中詳述。

物件模型

在物件導向的分析和設計階段,致力於建立模擬問題領域的物件模型。建立物件模型既包括自底向上的抽象過程。也包括自項向下的分解過程。

(1)自底向上的抽象。

建立物件模型的第一-步是從問題領域的陳述入手。分析需求的過程與物件模型的形成過程一致,開發人員與使用者的交談是從使用者熟悉的問題領域中的事物(具體例項)開始的,這就使使用者與開發人員之間有了共同語言,使得開發人員能徹底搞清使用者需求,然後再建立正確的物件模型。開發人員需要進行以下自底向上的抽象思維:

●把問題 領域中的事物抽象為具有特定屬性和行為的物件。比如乙個模擬動物園的程式中,存在各種小動物物件,比如各種小貓、小狗等。

●把具有相同屬性 和行為的物件抽象為類。比如儘管各種小貓、小狗等物件各自不同,但是它們具有相同的屬性和行為,所以可以將各種小貓物件抽象為小貓類,而各種小狗物件抽象為小狗類。

●當多個類之間存在一 些共性(具有相同屬性和行為)時,把這些共性抽象到父類中。比如在前面的例子中,小貓類和小狗類又可以進一步歸於哺乳動物類。在自底向上的抽象過程中,為使子類能更合理地繼承父類的屬性和行為,可能需要自頂向下的修改,從而使整個類體系更加合理。由於這種類體系的構造是從具體到抽象,再從抽象到具體的,符合人類的思維規律,因此能更快、更方便地完成任務。這與自項向下的結構化開發方法構成鮮明的對照。在結構化開發方法中,構造系統模型是最困難的一步,因為自項向下的「頂" (即系統功能)是-乙個空中樓閣,缺乏堅實穩定的基礎,而且功能分解有相當大的任意性,因此需要開發人員有豐富的軟體開發經驗。而在物件導向建模中,這一工作可由- -般開發人員較快地完成。

(2)自頂向下的分解。

在建立物件模型的過程中,也包括自項向下的分解。例如對於計算機系統,首先識別出主機物件、顯示器物件、鍵盤物件和印表機物件等。接著對這些物件再進一一步分解,例如主機物件由處理器物件、記憶體物件、硬碟物件和主機板物件等組成。系統的進一步分解因有具體的物件為依據,所以分解過程比較明確,而且也相對容易。所以物件導向建模也具有自項向下開發方法的優點,既能有效地控制系統的複雜性,又同時避免了結構化開發方法中功能分解的困難和不確定性。

類的生命週期

j**a虛擬機器為j**a程式提供執行時環境,其中一項重要的任務就是管理類和物件的生命週期。類的生命週期從類被載入、連線和初始化開始,到類被解除安裝結束,當類處於生命週期中時,它的二進位制資料位於方法區內,在堆區內還會有乙個相應的描述這個類的class物件。只有當類處於生命週期中時, j**a 程式才能使用它,比如,呼叫類的靜態屬性和方法,或者建立類的例項。

j**a虛擬機器及程式的生命週期

當通過j**a命令執行乙個j**a程式時,就啟動了乙個j**a虛擬機器程序。j**a虛擬機器程序從啟動到終止的過程,稱為j**a虛擬機器的生命週期。在以下情況,j**a 虛擬機器將結束生命週期:

●程式正常執行結束。

程式在執行中因為出現異常或錯誤而異常終止。

●執行了 system.cxit0)方法。

由於作業系統出現錯誤而導致j**a虛擬機器程序終止。當j**a虛擬機器處於生命週期中時,它的總任務就是執行j**a程式,j**a程式從開始執行到終止的過程稱為程式的生命週期,它和j**a虛擬機器的生命週期是一致的。

類的載入、 連線和初始化

當j**a程式需要使用某個類時,j**a 虛擬機會確保這個類已經被載入、連線和初始化。其中連線過程又包括驗證、準備和解析這了個子步驟。如圖下圖所示。從圖中可以看出,這些步驟必須嚴格地按以下順序執行:

(1)載入:查詢並載入類的二進位制資料。

(2)連線:包括驗證、準備和解析類的二進位制資料。

①驗證:確保被載入類的正確性。

②準備:為類的靜態變數分配記憶體,並將其初始化為預設值。

③解析:把類中的符號引用轉換為直接引用。

(3)初始化:給類的靜態變數賦予正確的初始值。

在類或介面被載入和連線的時機上.j**a虛擬機器規範給實現提供了-一定的靈活性,但是它嚴格定義了初始化的時機,所有的j**a虛擬機器實現必須在每個類或介面被j**a程式「首次主動使用"時才初始化它們。j**a 程式對類的使用方式可分為兩種:主動使用和被動使用,本章第10.2.6節(類的初始化的時機)對此做了介紹。

類的載入

類的載入是指把類的.class檔案中的二進位制資料讀入到記憶體中,把它存放在執行時資料區的方法區內,然後在堆區建立乙個 j**alang.class物件,用來封裝類在方法區內的資料結構。

j**a虛擬機器能夠從多種**載入類的二進位制資料,包括:

●從本地檔案 系統中載入類的class檔案,這是最常見的載入方式。

●從zip、jar或其他型別的歸檔檔案中提取.class檔案。

●從乙個專 有資料庫中提取.class檔案。

●把乙個j**a原始檔動態編譯為.class檔案。

類的載入的最終產品是位於執行時資料區的堆區的class物件,class 物件封裝了類在方法區內的資料結構,並且向j**a程式提供了訪問類在方法區內的資料結構的介面,如下圖所示:

類的載入是由類載入器完成的。類載入器可分為兩種:

●j**a 虛擬機器自帶的載入器:包括啟動類載入器、擴充套件類載入器和系統類載入

奇。●使用者自定 義的類載入器:是j**a.lang.classl oader類的子類的例項,使用者可以通過它來定製類的載入方式。

類載入器並不需要等到某個類被「首次主動使用」時再載入它,j**a虛擬機器規範允許類載入器在預料某個類將要被使用時就預先載入它,如果在預先載入過程中遇到.class檔案缺失或者存在錯誤,類載入器必須等到程式首次主動使用該類時才報告錯誤(丟擲乙個linkageerror例項)。如果這個類一直沒 有被程式主動使用,那麼類載入器將不會報告錯誤。

黑馬程式設計師 物件導向學習

1.類 物件。人 是類,張三 是 人 這個類的物件。類是抽象的,物件是具體的。按鈕就是類,某個按鈕就是物件。物件可以叫做類的例項 instance 類就像int,物件就像10。欄位field 和某個物件相關的變數 字段就是類的狀態。人這個類有姓名 年齡 身高等字段。類不佔記憶體,物件才佔記憶體。2....

黑馬程式設計師 物件導向 學習(二)

一,塊 1 區域性 塊,寫在區域性方法中 2 構造 塊,寫在類中,優先於構造方法執行,屬於物件,可以進行物件呼叫 3 靜態 塊,寫在類中,屬於類,可以進行類名呼叫 演示 class codedemo 靜態 塊 static 優先執行 只執行一次 僅僅一次 二,繼承 1 定義 就是說子類擁有父類的成員...

我在學習物件導向時對他的理解

1。何為物件導向?答 對現實生活中概念通過程式進行模擬。2。何為物件?答 現實世界中的某個具體的事物。3。類的形成 物件具有屬性和行為,而同一類事物都有他的共性 屬性和行為 為了更好的描述這一類事物,對這些共性進行歸納,形成了類。這個過程也稱為 抽象 4。類就是物件的模板 template 物件就是...