




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章
面向對象程序設計導論本章提供背景性、補充性的材料。讓大家看清面向對象程序設計方法的完整面貌,在沒有理解大背景之前就去編寫面向對象的程序,會有點不舒服。因此會對許多概念進行介紹。本章內容比較C和JAVA的不同面向對象的特征 封裝與信息隱藏
繼承
多態性
JAVA其他特征JAVA技術及應用領域為什么不是C++1.1C和JAVA的不同C是面向過程,java是面向對象。intmax(intnum1,intnum2){if(num1>num2)returnnum1;elsereturnnum2;}1.1C和JAVA的不同面向對象其實是現實世界模型的自然延伸。現實世界是由一個一個對象組成;對象之間通過消息(請求和服務)相互協作,完成系統的功能.1.1C和JAVA的不同C和java應用的范圍不同c主要應用在比較底層的一些東西,比如操作系統,驅動程序,嵌入式開發。
java應用比較表層,主要在網絡,企業級應用ERP,大型信息系統等。
學習c和java沒有任何沖突,學好了c和java幾乎可以解決計算機所有的問題。抽象化的過程所有的編程語言都提供抽象。匯編語言是對計算機的抽象,隨后許多語言(例如FORTRAON,BASIC和C)是對匯編語言的抽象,但是這是一種初級的抽象。仍然要求你從計算機的角度,而不是從待解決的問題的角度來考慮。另外一種建立機器模型的方式,就是建立待解決問題的模型。LISP和PROLOG抽象化過程面向對象法更進一步,提供各式各樣的工具,讓程序員能在問題空間表述各種元素。這樣程序員就不會被被限制在特殊問題上了。我們將問題空間的元素同它在解決空間的表述稱為“對象”。面向對象方法的特征萬物皆對象。理論上可以將待解決問題總的所有觀念性組成都變成程序中的對象。程序就是一組互相之間傳遞消息,告訴對方該干什么的對象。消息是調用專署某個對象的方法的請求。每個對象都利用別的對象來組建它自己的記憶。可以通過將已有的對象打成一個包,來創建新的對象。面向對象方法的特征對象都有類型。任何對象都是某個類的實例。所有屬于同一類型的對象都能接受相同的信息。每個對象都有接口Lightlt=newLight();lt.on();接口(interface)規范了你能夠對對象發出的請求。不過還要有程序代碼來滿足這些請求。這些程序代碼加上被隱藏的數據,構成了實現(implementation)被隱藏的實現細節java使用三個關鍵字來設定class的訪問權限:public、private、protected。Public定義后,每個任都可以使用Private除了類型開發者可以在該類型的memberfunctions中使用,沒有任何人可以使用。Protected和private相似,不過class的繼承者可以訪問protectedmembers,確無法訪問privatememberJava缺省的是friendly訪問權限,在同一個package中可以訪問其他的calsses重復運用實現代碼程序代碼的重復運用,是面向對象程序設計最大的優點之一。重復運用某個class最簡單的方式就是直接使用其產生的對象。此外也可以把某個class對象置于另一個class內。繼承:重復運用接口當你繼承既有的類型時,便創造了新的類型,后者不僅可以包含前者所有的成員(但是private成員會被隱藏起來,而且無法訪問),更重要的是它同時也復制了基類的接口。繼承:重復運用接口繼承:在已有類(父類或超類)的基礎上派生出新的類(子類),新的類能夠吸收已有類的屬性和行為,并擴展新的能力。改變繼承來的方法定義一個幾何圖形類Shape,它具有“畫圖”行為,用draw()表示。但具體畫什么圖并不確定;
定義Shape類的一些子類如Circle圓和Rectangle矩形。
在子類中“畫圖”的具體行為draw()可重新定義為:圓類中draw()畫圓;矩形類中draw()畫矩形。
定義:Shapes;//s作為引用變量可指向Circle圓類的對象,也可指向Rectangle矩形類的對象。執行代碼:s.draw();
//s調用draw()方法,s指向對象不同會
畫出不同的圖形(圓或矩形)JAVA其他特征上面我們介紹了OOP的幾個最基本特征,既封裝、繼承和多態。下面我們繼續介紹一些問題,他們的重要性不亞于上述幾點。對象的創建,使用和生命周期對象的生成和毀滅,C++認為效率是最重要的,將對象置于stack或靜態存儲區中,于是程序編寫是便要決定對象的存儲空間和壽命第二種方法是從一塊名為heap的內存中去動態的產生對象Java使用了第二種方法,當要產生對象時就用new來動態的產生對象的實體。對象的壽命,
c++必須自行編寫代碼來摧毀對象,這樣會產生內存泄漏Java使用了所謂的“垃圾回收器機制”,當對象不在被使用的時候會被自動察覺并消滅。Collection和迭代器(iterator)如果你不知道將用到多少個對象,或者不知道該對象該存活多久,才能解決某個問題,那么你同樣無法知道該如何存儲這些對象。解決方法對于大多數面向對象程序設計問題:產生另一種類型的對象,這個新類型對象存儲著一些reference,代表其他對象。通過array完成同樣的事情。Java使用第一個方法,這個新類型稱為容器,這個新式對象會適當擴展自己的容量,以便容納你置入的所有的對象,你不需要知道將來會置入多少個對象于容器中,只要產生容器,它就會自行料理細節。Collection和迭代器(iterator)Java提供了許多不同的容器來符合各類需求。例如vertor(arraylist,linkedlist,set,queues,hashtables、trees等。迭代器用戶可以通過迭代器操作或者比較一組元素,迭代器的作用就是用來選擇容器中的元素,并將這些元素呈現給迭代器使用者。可將”容器實現細節”和”對容器進行訪問動作之程序代碼”分離開來。單根繼承體系1.單根繼承體系中的所有對象都有共通接口,所以最終它們都屬于相同的type。2.單根繼承體系保證所有對象都擁有某些功能。3.單根繼承體系也使垃圾回收器的實現更加容易。4.由于所有的對象保證會有執行期型別信息(RTTI)所以我們不會因為無法判斷對象的確切型別而陷入動纏不得的僵局。異常處理:面對錯誤的產生異常處理機制將錯誤處理問題直接內嵌于程序語言中,有時甚至直接內嵌于操作系統中。所謂異常(exception)是一種對象,可在錯誤發生點被拋出(throw),并在適當的吃力程序中被捕捉。多線程將問題切割為多個可獨立執行的片斷,便能夠讓整個程序更具反應力。這些”可獨立執行的片斷”便是所謂的線程(threads),而上述這種觀念便被成為”多線程”持久性對象生成之后,只要你還需要它,它就會持續存在。但是一旦程序結束,它就不再有生存環境了。持久性就是讓對象可以在程序非執行狀態下依舊存在,依舊保有其信息。Java提供了”輕量級持久性”,可以輕松將對象存儲于磁盤,并于日后取出,但是還是要自己調用存儲、取回動作。1.2類與對象面向對象程序設計:將客觀事物(或實體)看作具有屬性和行為(或稱服務)的對象(object),通過抽象找出同一類對象的共同屬性(靜態特征)和行為(動態特征),而形成類(class)的概念。程序的執行,表現為一組對象之間的交互通信。對象之間通過公共接口進行通信,從而完成系統功能。類是相同對象的集合的描述。例如,類Human就是現實世界中人(對象)的集合,我、你、他都是Human的對象。分析類Human的所有對象——人,得到對象的共同的數據屬性和行為,如下所示:數據屬性:編號、姓名、年齡,…
行為:吃飯、走路、跳舞,…抽象是對具體對象進行概括,抽象出這一類對象的公共性質并加以描述的過程。先注意問題的本質及描述,其次是實現過程或細節。1.2類與對象(續)定義Human類:classHuman{intno;Stringname;intage;…voideat(){…}
…}Human被稱作類名。no,name,age被稱作域(fields)或變量,eat()被稱作方法(methods),它們都是類的成員。1.2類與對象(續)在面向對象的編程語言中,類是一個數據類型對象是類的實例(instance)。引用變量:具有類類型的變量被稱作對象引用(objectreference)。例如,Humanp1=newHuman(1,“張三”,20,…);p1被稱作對象引用變量,newHuman(1,”張三“,20,…)被稱作Human的對象。對象對象:是用來描述現實世界中實際存在的事物的實體,它是用來構成系統的一個單位。對象由一組屬性和一組行為(操作或服務)構成。對象具有固定的對外接口.一組屬性和操作的集合.對象之間通過公共接口進行通信.對象的狀態:對象的屬性值表示了它所處于的狀態;對象的操作是用來改變對象狀態。1.3封裝與信息隱藏封裝(Encapsulation)是面向對象方法的重要原則。就是把對象的屬性和操作(或服務)結合為一個獨立的整體(系統單位),并盡可能隱藏對象的內部實現細節。封裝有兩個含義:其一,把對象的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位—類。其二,“信息隱蔽”,盡可能隱蔽對象的內部細節,對外界形成一個邊界,只保留有限的對外接口使之與外部發生聯系。1.3封裝與信息隱藏(續)Java語言中,定義類時通過大括號{}封裝了類的成員:域(fields)和方法(methods),使用private和public等關鍵字來控制對類的成員的訪問,其中private修飾的成員是隱藏的,而public修飾的成員則定義了類對外的公共接口。類作為一個抽象的數據類型允許用戶從底層實現細節中抽象出來,提供給用戶的是在公共接口上的上層操作。這是抽象性的含義。1.4繼承Inheritance繼承:在已有類(父類或超類)的基礎上派生出新的類(子類),新的類能夠吸收已有類的屬性和行為,并擴展新的能力。繼承機制中,往往從一組類中抽象出公共屬性放在父類。繼承支持著軟件代碼的復用,是提高軟件開發效率的重要因素之一。
繼承的例子
例如,給定類Car、Motocycle和Truck,我們把它們的公共屬性放在一個稱為Vehicle的公共父類中。VehicalCarMotocycleTruck繼承的例子蘋果梨西瓜水果繼承的例子CircleRectangleShape1.4繼承(續)Java中繼承的一個例子:給定一個Window類,通過繼承擴展它而得到一個子類MenuWin。classWin{…
//Win的成員定義}classMenuWinextendsWin{…
//MenuWin新增加成員的定義}1.4繼承(續)繼承分為:單繼承是指一個子類最多只能有一個父類。多繼承是一個子類可有二個以上的父類。由于多繼承會帶來二義性,在實際應用中應盡量使用單繼承。Java語言中的類只支持單繼承,而接口支持多繼承。如何設計繼承并完成繼承層次是面向對象設計和編程的核心問題。繼承是多態性的前提條件。objectWinDialogWin單繼承,injavaClass1Class4Class2Class3多繼承,inC++單繼承與多繼承例子1.5多態性多態性(Polymorphism):指在超類中定義的屬性或行為,被子類繼承之后,可以具有不同的數據類型或表現出不同的行為。這使得同一個屬性或行為在超類及其各個子類中具有不同的語義。1.5多態性(續)例如:定義一個幾何圖形類Shape,它具有“畫圖”行為,用draw()表示。但具體畫什么圖并不確定;定義Shape類的一些子類如Circle圓和Rectangle矩形。在子類中“畫圖”的具體行為draw()可重新定義為:圓類中draw()畫圓;矩形類中draw()畫矩形。定義:Shapes;
//s作為引用變量可指向Circle圓類的對象,也可指向Rectangle矩形類的對象。執行代碼:
s.draw();//s調用draw()方法,s指向對象不同會畫出不同的圖形(圓或矩形)
本節小結面向對象方法的顯著特性封裝性、抽象性、繼承性和多態性將面向對象設計方法應用于程序的開發工具和開發過程中,不僅可以加快開發的速度,還可極大地增強程序的可維護性和可擴展性,提高代碼重用率。1.6面向對象的建模和UML統一建模語言(UnifiedModelingLangua
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省泰州市相城區黃橋中學2025屆初三下學期4月份月考物理試題含解析
- 牡丹江大學《生化工程》2023-2024學年第二學期期末試卷
- 鄭州商學院《地籍測量學》2023-2024學年第二學期期末試卷
- 環保法規在環境治理技術創新中的推動作用考核試卷
- 玻璃基板電路印刷技術考核試卷
- 豬的飼養飼料添加劑研發考核試卷
- 創業空間人才選拔培養機制考核試卷
- 玻璃熔爐節能減排技術考核試卷
- 11.1.2 三角形的高、中線與角平分線 11.1.3 三角形的穩定性
- 2025江西省建筑安全員知識題庫附答案
- 04S519小型排水構筑物(含隔油池)圖集
- 統編版語文六年級下冊10 古詩三首《石灰吟》公開課一等獎創新教學設計
- 《刨花板介紹》課件
- 垃圾清運服務投標方案技術標
- 吞咽障礙膳食營養管理中國專家共識(2019)解讀
- 新聞采訪與寫作-馬工程-第二章
- 國開可編程控制器應用形考實訓任務六
- 高考地理一輪專題復習課件+地貌的形成過程
- 2024年藥學服務技能大賽(省賽)備考試題庫(含答案)
- 教科版科學四下《1.8鳳仙花的一生》課件
- 第10課 養成遵紀守法好習慣(課時2)(課件)-【中職專用】中職思想政治《職業道德與法治》高效課堂課件+教案(高教版2023·基礎模塊)
評論
0/150
提交評論