物件導向程式設計與面向過程程式設計

2022-10-22 04:06:04 字數 1597 閱讀 3160

面向過程程式設計都會把程式**放在main()裡面。對於物件導向程式設計,我們就是離開過程化的世界,將事物抽象成物件,對物件的屬性抽象成變數,動作、行為等抽象成方法。就像自然界一樣,子代繼承父輩的屬性和方法;同時介面可以更靈活的重寫多個類的方法,體現了多型性。

老闆娘兼專案經理要求阿珠和阿花兩個程式設計師比賽,給她們出了一道題

阿珠先完成程式編寫,阿珠的是面向過程的程式設計;阿花是物件導向的編寫

然道阿珠贏了?!但是,老闆娘說規格改了

阿珠還是領先阿花,但是,老闆娘又提出了要修改了

程式必然是不斷地修改除錯的,面向過程程式設計方法在這方面不靈活,工作量大而且容易把以前除錯正確的**弄巧成拙了。所以阿花贏了,對嗎?

其實阿花的程式也是存在缺陷的,

回到比賽,阿珠覺得阿花的4個shape物體中都有rotate過程,認為阿花必須要同時維護4個不同的rotate方法,這樣一點效率也沒有。

封裝:封裝就是將客戶端不應看到的資訊包裹起來。使內部執行對外部來看不一種不透明的、是乙個黑箱,客戶端不需要內部資源就能達到他的目的。

1.事物的內部實現細節隱藏起來

2.對外提供一致的公共的介面――間接訪問隱藏資料

3.可維護性

封裝的目的是增強安全性和簡化程式設計,使用者不必了解具體的實現細節,而只是要通過外部介面,一特定的訪問許可權來使用類的成員。

繼承:允許存在父子類的關係,乙個子類有且只有乙個直接的父類(j**a中的繼承是類之間的單繼承.)而且子類可以加入自己的方法和例項變數,也可以覆蓋掉繼承自父類的方法。

但j**a不支援多重繼承,即乙個類從多個超類派生的能力。在開發中儘量減少繼承關係,這樣做是為了把程式的耦合度降低。

用繼承可以防止子類**現重複的程式**。要改共同部分則只要改父類乙個就行,同時其他特定部分只要覆蓋自己繼承的部分就行。

繼承雖好,可不要濫用哦

private 私有,本類內部不能繼承

(default) 本類+同包同包子類可繼承

protected 本類+同包+子類可以繼承

public 公開任何地方都可以訪問能繼承到子類

多型(介面和抽象類)

通過繼承覆蓋重寫,可以實現一定程度的多型,但是繼承只能繼承乙個父類,對於現實需求可能不夠,所以還需要介面的支援。乙個類可以實現多個介面,表現形式多樣。(介面是100%的抽象類,不能被初始化)

貓,又是寵物同時也是貓科動物,但是j**a裡乙個類是不能繼承兩個父類的

如何判斷應該是設計類、子類、抽象類或介面呢?

(1)如果新類無法對其他的類通過is-a測試時,就設計不繼承其他類的類。

(2)只有在需要某類的特殊化版本時,以覆蓋或增加新的方法來繼承現有的類。

(3)當你需要定義一群子類的模板,又不想讓其他人初始化此模版時,設計出抽象的類給他們用。

(4)如果想要只定義出類可以扮演的角色,使用介面。(介面主要涉及跨平台、跨語言、移植性要求較高的程式設計)

多型實現

a 編譯時多型性---過載 (引數個數不同或引數型別不同)對於類的方法(包括從父類中繼承的方法),方法名相同,引數列表不同的方法之間就構成了過載關係。

b 動態多型性----覆蓋也叫重寫,就是在當父類中的某些方法不能滿足要求時,子類中改寫父類的方法。當父類中的方法被覆蓋了後,除非用super關鍵字,否則就無法再呼叫父類中的方法了。

物件導向程式設計

第1頁共2頁 9 編寫乙個控制台程式,要求 編寫乙個函式get scores 接受使用者輸入的語文 數學 物理 化學和英語5科成績,在main 中利用get scores 接受輸入,然後計算總成績與平均成績,main 與get scores 之間不得使用全域性變數通訊。10 編寫乙個控制台程式,使用...

物件導向程式設計複習

1.宣告乙個複數類complex,過載運算子 使之能用於複數的加 減,運算子過載函式作為complex類的成員函式。請程式設計序實現。2.分別宣告teacher 教師 類和cadre 幹部 類,採用多重繼承方式由這兩個類派生出新類teacher cadre 教師兼幹部 要求 1 在兩個基類中都包含姓...

物件導向程式設計實習報告

實習報告 學年 20010 2011學年第一學期 試驗名稱 物件導向程式設計 姓名 李芳 班級 電子商務 本 0902班 學號 0902110206 一 實習目的 1 了解sql server的整合環境 系統的選單 工具欄 企業管理器 查詢分析器的使用方法。2 掌握建立資料庫 資料表的方法 掌握資料...