

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、面向?qū)ο缶幊讨械幕靖拍?桂勛guinh3@sina.com,了解什么是面向?qū)ο竺嫦驅(qū)ο蟮幕靖拍铑悓?duì)象封裝繼承多態(tài)如何定義類,如何創(chuàng)建對(duì)象成員運(yùn)算符訪問控制權(quán)限:public和private構(gòu)造方法,主要內(nèi)容,什么是面向?qū)ο螅?Object Oriendted Programming,,,,對(duì)象,以…為導(dǎo)向的,程序設(shè)計(jì),面向?qū)ο缶褪鞘褂脤?duì)象進(jìn)行程序設(shè)計(jì),簡(jiǎn)寫成OOP。,面向?qū)ο蟮木幊陶Z(yǔ)言,如今,面向?qū)ο蟮木幊趟枷?/p>
2、已經(jīng)成為主流;面向?qū)ο蟮木幊陶Z(yǔ)言正大行其道,最具代表性的有:C++JavaC#,面向?qū)ο蟮木幊趟枷?OOP,旨在計(jì)算機(jī)程序中模擬現(xiàn)實(shí)世界中的概念,在計(jì)算機(jī)程序中用相似的實(shí)體模擬現(xiàn)實(shí)世界中的實(shí)體,在OOP中,現(xiàn)實(shí)世界的所有事物全都被視為對(duì)象,設(shè)計(jì)和實(shí)現(xiàn)軟件系統(tǒng)的方法,C語(yǔ)言的編程方式,C語(yǔ)言是結(jié)構(gòu)化的編程語(yǔ)言(Structured Programming,簡(jiǎn)作SP);強(qiáng)調(diào)精巧的數(shù)據(jù)結(jié)構(gòu)和優(yōu)越的算法,關(guān)注程序的運(yùn)行效率;
3、不適合于大規(guī)模的程序開發(fā);程序模塊之間協(xié)調(diào)性差,程序的重用性、安全性、健壯性和可維護(hù)性都存在較大的缺陷。,SP和OOP對(duì)比,面向?qū)ο蟮娜笤瓌t,封 裝,繼 承,多 態(tài),對(duì)象,對(duì)象是面向?qū)ο缶幊痰暮诵牟糠?,是?shí)際存在的具體實(shí)體,具有明確定義的狀態(tài)和行為;對(duì)象其實(shí)就是“數(shù)據(jù)”和“函數(shù)”的封裝體,其中:數(shù)據(jù)表示自身的狀態(tài),也稱作“屬性”或“成員數(shù)據(jù)”;函數(shù)表示自身的功能,也稱作“方法”或“成員函數(shù)”。,,,,,狀態(tài),
4、行為,類,人們?yōu)榱烁玫卣J(rèn)識(shí)世界,將現(xiàn)實(shí)生活中的事物(對(duì)象)劃分成類;同一類中的事物總是具有一些共性;類以共同的特性和行為定義實(shí)體;類是具有相同屬性和和行為的一組對(duì)象的集合。,屬性,事物的特性在類中用變量表示;每個(gè)對(duì)象的每個(gè)屬性都擁有其特定的值;屬性名稱由類的所有對(duì)象共享;對(duì)象或?qū)嶓w擁有的特征在類中表示時(shí)稱為屬性。,方法,事物的行為和動(dòng)作在類中用函數(shù)表示;每個(gè)對(duì)象都有相同的動(dòng)作和行為;對(duì)象執(zhí)行的操作在類中表示為方法。,類
5、和對(duì)象的區(qū)別,類是用來描述實(shí)體的“模板”或“原型”;對(duì)象是實(shí)際的實(shí)體,每一個(gè)對(duì)象都是類的一個(gè)具體實(shí)例;類用來定義對(duì)象所有的屬性和方法,同一類的所有對(duì)象都擁有相同的特征和操作;可以將類理解成生產(chǎn)產(chǎn)品的模具,而對(duì)象則是根據(jù)此模具生產(chǎn)的一個(gè)個(gè)產(chǎn)品。,類與結(jié)構(gòu),最簡(jiǎn)單的理解方式:,區(qū)別在于:結(jié)構(gòu)體一般只有數(shù)據(jù)(屬性)而沒有函數(shù)(方法)。,封裝,將某些東西包裝在一起,然后以新的完整形式呈現(xiàn)出來;隱藏屬性、方法或?qū)崿F(xiàn)細(xì)節(jié)的處理方式稱為封裝;
6、封裝其實(shí)就是有選擇性地公開或隱藏某些信息,它解決了數(shù)據(jù)的安全性問題。,可以公開,無(wú)所謂,不可以公開,繼承,繼承就是重用現(xiàn)有的類來生成新類的一種特征;通俗地講就是從現(xiàn)有的類(即父類或基類)創(chuàng)建新類(子類或派生類)的過程;現(xiàn)實(shí)生活中,繼承可以達(dá)到財(cái)產(chǎn)重用的目的,而在Java/C++/C#、中,繼承可以使代碼重用。,多態(tài),多態(tài)是指同一函數(shù)在不同的類中有不同的實(shí)現(xiàn);多態(tài)的好處就是使類更靈活,更便于擴(kuò)充。,抽象,把相同的或相似的對(duì)象歸為一
7、類的這個(gè)過程就是抽象,所以,抽象就是分析問題的方法;抽象的基本原則:只關(guān)心主要問題,而不關(guān)心次要問題;只關(guān)心主要矛盾,而不關(guān)心次要矛盾;只關(guān)心相同的東西,而不關(guān)心不同的東西;只關(guān)心問題是什么,能夠完成什么,而不關(guān)心怎樣去完成。抽象的過程其實(shí)就是面向?qū)ο缶幊痰暮诵乃枷搿?在Java中定義類,/*定義學(xué)生類*/class Student{ String name; //姓名 int age; //年齡
8、 float weight; //體重 /*吃飯的方法*/ void dining() { System.out.println("吃飽了..."); weight++; } /*走路的方法*/ void walk() { System.out.println("走累了..."); weight--; }},,,定
9、義類的語(yǔ)法,習(xí)慣上,類名的首字母大寫,如:Student,在Java中創(chuàng)建對(duì)象,/*Test類,用來容納main方法*/public class Test{ /*main方法,程序入口*/ public static void main(String[] args) { Student std; //聲明Student類型的引用 std = new Student(); //創(chuàng)建Stude
10、nt類型的對(duì)象 std.name = "張三"; //為姓名賦值 std.age = 18; //為年齡賦值 std.weight = 50; //為體重賦值 std.dining(); //調(diào)用成員方法 System.out.println(std.weight); std.walk(); System.out.prin
11、tln(std.weight); }},創(chuàng)建對(duì)象的語(yǔ)法,和數(shù)組相似,對(duì)象也是引用數(shù)據(jù)類型,只能使用new運(yùn)算符從堆中分配內(nèi)存;創(chuàng)建對(duì)象的一般語(yǔ)法:類名 引用名 = new 類名();使用已經(jīng)定義好的類,創(chuàng)建該類對(duì)象的過程稱為“實(shí)例化”。,,注意:這里要有括號(hào),成員運(yùn)算符.,在C語(yǔ)言中,必須要先聲明結(jié)構(gòu)體變量,才可以訪問結(jié)構(gòu)體中的成員;同樣的,只有先實(shí)例化類的對(duì)象,才可以訪問到類中的成員(屬性和方法);使用成員運(yùn)算符(.
12、)來訪問成員屬性或成員方法;一般語(yǔ)法是:對(duì)象名.成員名如:std.age = 18; //為成員屬性賦值 std.dining(); //調(diào)用成員方法,訪問權(quán)限:public和private,C語(yǔ)言中結(jié)構(gòu)體的成員可以從任何地方進(jìn)行訪問,這將給數(shù)據(jù)的安全留下極大的隱患;為了避免從類外部直接訪問類成員而造成的數(shù)據(jù)損壞,Java對(duì)類成員的訪問制定了約束;關(guān)鍵字public和private是訪問修飾符,用來說明某個(gè)成員是
13、否可以從類外部進(jìn)行訪問;public修飾的成員可以在任何地方進(jìn)行訪問,不受任何約束;private修飾的成員只能夠被本類中的其它成員訪問,而不能從類的外部進(jìn)行訪問。,訪問權(quán)限,無(wú)法從類的外部訪問私有成員;其它類的私有成員對(duì)于當(dāng)前類也是隱藏的。,訪問權(quán)限示例,class Student { private String name; //姓名,私有的,不可以從類外部直接訪問 private int age; /
14、/年齡,私有的,不可以從類外部直接訪問 private float weight; //體重,私有的,不可以從類外部直接訪問 //吃飯的方法,公有的,可以從任何地方訪問 public void dining() { System.out.println("吃飽了..."); weight++; //dining方法是類內(nèi)部成員,可以直接訪問本類私有成員 } //走路
15、的方法,公有的,可以從任何地方訪問 public void walk() { System.out.println("走累了..."); weight--; //walk方法是類內(nèi)部成員,可以直接訪問本類私有成員 }}public class Test { public static void main(String[] args) { Student std = new
16、Student(); //實(shí)例化一個(gè)Student對(duì)象 std.age = 18; //試圖從類外部訪問私有成員,將會(huì)報(bào)出一個(gè)錯(cuò)誤 std.dining(); //允許訪問公有成員 }},,訪問權(quán)限(續(xù)),加上訪問修飾符有時(shí)候可能會(huì)給操作數(shù)據(jù)帶來不便,但可以在很大程度上保證數(shù)據(jù)的安全;一般地,我們會(huì)將成員屬性聲明為private,而將成員方法聲明為public,但這樣做并不是絕對(duì)的;有時(shí)候,類外部可能
17、要操作到某些私有數(shù)據(jù)成員,那么就可以增加一個(gè)公有的方法,再由這個(gè)方法來操作私有數(shù)據(jù),避免因類外部的誤操作而造成的數(shù)據(jù)損壞;因?yàn)閙ain方法要由類外部的虛擬機(jī)來調(diào)用,所以main方法必須聲明成public。,修改Student類,class Student { //定義學(xué)生類 private String name; //姓名,私有 private int age; //年齡,私有 private floa
18、t weight; //體重,私有 public void setName(String name) { //為姓名賦值的方法,公有 this.name = name; } public void setAge(int a) { //為年齡賦值的方法,公有 age = a; } public void setWeight(float w) { //為體重賦值的方法,公有
19、weight = w; } public void display() { //將所有信息打印出來的方法,公有 System.out.println("姓名:" + name + ",年齡:" + age + ",體重:" + weight); } public void dining() {……} //吃飯的方法,公
20、有,代碼略 public void walk() {……} //走路的方法,公有,代碼略}public class Test { public static void main(String[] args) { Student std = new Student(); //實(shí)例化學(xué)生類對(duì)象 std.setName("張三"); //為姓名賦值
21、 std.setAge(18); //為年齡賦值 std.setWeight(55); //為體重賦值 std.dining(); //調(diào)用吃飯的方法 std.display(); //將信息打印出來 }},對(duì)象初始化,在上例中,只能逐個(gè)地為數(shù)據(jù)成員賦值,如果想在對(duì)象實(shí)例化的同時(shí)就初始化成員屬
22、性,就使用到了構(gòu)造方法;構(gòu)造方法是特殊的成員方法,它與類同名,在對(duì)象實(shí)例化時(shí)由虛擬機(jī)自動(dòng)調(diào)用;請(qǐng)注意:構(gòu)造方法沒有返回值類型,也不能有返回值。,構(gòu)造方法示例,/*定義ConstructorDemo類,對(duì)構(gòu)造方法進(jìn)行測(cè)試*/class ConstructorDemo{ /*構(gòu)造方法,方法名與類名完全一致 無(wú)需指定返回值類型,也不能有返回值*/ public ConstructorDemo() { Syste
23、m.out.println("這是構(gòu)造方法"); }}/*Test類,用來容納main方法一般將包含有main方法的類聲明為public*/public class Test{ /*main方法,程序入口*/ public static void main(String[] args) { /*實(shí)例化ConstructorDemo類的對(duì)象*/ ConstructorDemo
24、 cd = new ConstructorDemo(); }},構(gòu)造方法,正是由于在實(shí)例化對(duì)象的同時(shí)會(huì)自動(dòng)調(diào)用構(gòu)造方法,所以構(gòu)造方法一般用來給數(shù)據(jù)成員分配資源或初始化數(shù)據(jù)成員;構(gòu)造方法的一般形式:訪問權(quán)限 類名(形參列表) { 方法體 }因?yàn)槭怯商摂M機(jī)來調(diào)用構(gòu)造方法,所以構(gòu)造方法一般應(yīng)定義成public。,為Student類添加構(gòu)造方法,class Student { //定義學(xué)生類 private St
25、ring name; //姓名,私有 private int age; //年齡,私有 private float weight; //體重,私有 //構(gòu)造方法,根據(jù)傳遞進(jìn)來的參數(shù),為數(shù)據(jù)成員賦值 public Student(String n, int a, float w) { //分別為每個(gè)數(shù)據(jù)成員賦初始值 name = n; age = a; weight =
26、w; } public void setName(String n) {……} //為姓名賦值的方法,公有,代碼略 public void setAge(int a) {……} //為年齡賦值的方法,公有,代碼略 public void setWeight(float w) {……} //為體重賦值的方法,公有,代碼略 public void display() {……} //將所有信息打印出來的方法
27、,公有,代碼略 public void dining() {……} //吃飯的方法,公有,代碼略 public void walk() {……} //走路的方法,公有,代碼略}public class Test { public static void main(String[] args) { //利用構(gòu)造方法,為數(shù)據(jù)成員指定初始值 Student std = new Student(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
評(píng)論
0/150
提交評(píng)論