国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java基礎(chǔ)學(xué)習(xí)總結(jié)——面向?qū)ο?/h1>
2019-11-06 07:10:00
字體:
供稿:網(wǎng)友

學(xué)習(xí)java的同學(xué)注意了!!! 學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交流群,群號碼:523047986  我們一起學(xué)Java!

一、面向過程的思想和面向?qū)ο蟮乃枷?/strong>

       面向?qū)ο蠛兔嫦蜻^程的思想有著本質(zhì)上的區(qū)別, 作為面向?qū)ο蟮乃季S來說,當(dāng)你拿到一個問題時,你分析這個問題不再是第一步先做什么,第二步再做什么,這是面向過程的思維,你應(yīng)該分析這個問題里面有哪些類和對象,這是第一點,然后再分析這些類和對象應(yīng)該具有哪些屬性和方法。這是第二點。最后分析類和類之間具體有什么關(guān)系,這是第三點。

      面向?qū)ο笥幸粋€非常重要的設(shè)計思維:合適的方法應(yīng)該出現(xiàn)在合適的類里面

二、簡單理解面向?qū)ο?/h2>

  就是在程序里面首先分解出來的應(yīng)該是注意不再是一步一步的過程了,而是首先考慮在這個問題域里面或者程序里面應(yīng)該具有有哪些對象,所以從現(xiàn)在開始考慮任何問題腦子里不要再想著我實現(xiàn)這件事我第一步應(yīng)該干什么,第二步應(yīng)該干什么,如果這樣想,那就是面向過程的思維了。面向?qū)ο蟮乃季S是,當(dāng)我碰到這個問題域的時候,碰到這個程序的時候,我首先應(yīng)該把這個問題里有哪些對象,對象與對象之間有什么關(guān)系抽象出來。

三、面向?qū)ο蟮脑O(shè)計思想

  面向?qū)ο蟮幕舅枷胧牵瑥默F(xiàn)實世界中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),并在系統(tǒng)的構(gòu)造中盡可能運用人類的自然思維方式。

  面向?qū)ο蟾訌?qiáng)調(diào)運用人類在日常生活的邏輯思維中經(jīng)常采用的思想方法與原則,如抽象、分類,繼承、聚合、多態(tài)等。

  人在思考的時候,首先眼睛里看到的是一個一個的對象。

四、對象和類的概念

     對象是用于計算機(jī)語言對問題域中事物的描述,對象通過“屬性(attribute)”和“方法(method)”來分別對應(yīng)事物所具有的靜態(tài)屬性和動態(tài)屬性

     類是用于描述同一類的對象的一個抽象的概念,類中定義了這一類對象所具有的靜態(tài)屬性和動態(tài)屬性

    類可以看成一類對象的模板,對象可以看成該類的一個具體實例

    eg.什么叫瓶子?

     瓶子的定義:具有某些類特征的東西就是瓶子,比分說什么樣的形狀,比方說有個口,能倒水,能裝水,一般有個蓋等等。給瓶子下定義的過程,其實就是把瓶子里的某些東西抽象出來了,所以瓶子在這里是叫做一類事物的一個抽象,在你腦子里有瓶子的概念,可瓶子的概念在你腦子里到底是什么呢?瓶子的概念在你腦子里叫做一類事物的一個抽象。怎么抽象的呢?你往往抽象的是這兩個方面:第一個方面我們叫它靜態(tài)的屬性,瓶子應(yīng)該具有哪些特征,比分說瓶子應(yīng)有個口,這是它的具有的一個靜態(tài)屬性,瓶子一般有一個蓋,這也是它的具有一個靜態(tài)屬性,除此之外,你還可能給它總結(jié)動態(tài)的屬性,什么動態(tài)的屬性呢?比放說瓶子能倒水,這是它的動態(tài)屬性。瓶子這個概念在你腦子里如果你細(xì)細(xì)的思維的話,其實你給它做了兩方面的總結(jié),一方面是靜態(tài)的,一方面是動態(tài)的。反映到JAVA的類上,一個就是成員變量(靜態(tài)屬性),一個就是方法(動態(tài)屬性)方法是可以執(zhí)行的,可以動的。成員變量是某一個類的靜態(tài)屬性。所以你腦子里瓶子的概念實際上是一類事物的一個抽象,這種東西我們叫它類,椅子是類,桌子是類,學(xué)生是類。什么是對象呢?這一類事物的具體的某個實例就叫做對象。所以一類事物的具體的某一個東西,符合這類事物具體的特征的某個東西就叫做對象。瓶子是一個類,某個瓶子就是瓶子這個類里面的一個對象。

五、如何抽象出一個類?

       有兩個方面,一方面是它的靜態(tài)屬性,另一方面是它的動態(tài)屬性。反映到JAVA里面的類怎么包裝它呢?一方面成員變量,另一方面是方法。

  eg.職員這個類該怎么抽象出來?也是從兩個方面,一方面是它的靜態(tài)屬性,另一方面它的動態(tài)屬性

  職員有哪些屬性呢?有姓名,年齡,目前工資數(shù)額等屬性,他有哪些方法呢?讓這個職員來顯示姓名,顯示年齡,修改姓名,領(lǐng)取工資。當(dāng)然顯示姓名,顯示年齡,修改姓名,領(lǐng)取工資這些也可以讓別人來做,但面向?qū)ο蟮脑O(shè)計思維是最合適的方法應(yīng)該出現(xiàn)在最合適的類里面。顯示姓名,顯示年齡,修改姓名,領(lǐng)取工資由誰來做更合適呢,那就是職員自己最合適。所以這些方法應(yīng)該出現(xiàn)在職員這個類里面。

  對于類來說,它有一些屬性或者稱為成員變量,以后說屬性或者成員變量指的是同一回事。具體的對象他有沒有相關(guān)的一些屬性或者叫成員變量呢?有,每一個人都有一份,只不過是取值不同而已。如從職員這個類實例化出來的兩個職員:職員A和職員B,他們都有姓名,年齡,目前工資數(shù)額這些屬性,但他們的名字,年齡,領(lǐng)取的工資數(shù)額都不一樣。這樣就能把職員A和職員B區(qū)分開來了,正是因為他們的屬性值不一樣,所以這個對象才能和另外的對象區(qū)分開來,所以通過屬性是可以區(qū)分兩個對象的。貓是一個類,這只貓是一個對象,這只貓和另外一只貓該怎么區(qū)分開來呢?那就得看你的貓這個類是怎么定義的了,貓有貓毛,毛有顏色。OK,這只貓是黑貓,另一只貓是白貓,這樣通過貓毛的顏色區(qū)分開來了。如果只定義一個,如捉老鼠,白貓也能捉,黑貓也能捉,這樣就沒辦法區(qū)分出黑貓和白貓了,所以根據(jù)方法是沒辦法區(qū)分兩個對象的。所以每個對象都有自己的屬性,屬性值和另外一個對象一般是不一樣的

  一定要區(qū)分類和對象,什么叫做類?什么叫做對象?類是一類事物的一個抽象,具有共同特征的一類事物的一個抽象。對象是這個類具體的某一個實例,所以以后說實例(instance)或者說對象(object)指的是同一回事。

六、類(對象)之間的關(guān)系

一.關(guān)聯(lián)關(guān)系(最弱的一種關(guān)系)

  類和類之間是有關(guān)系的,如學(xué)生和老師這兩個類,老師可以教學(xué)生,學(xué)生可以向老師學(xué)習(xí)。這就是他們之間的關(guān)系。關(guān)系和關(guān)系之間是不同的,你和你老婆的關(guān)系和你和你其他女朋友的關(guān)系是不能混為一談的。關(guān)系最弱的一種關(guān)系叫關(guān)聯(lián)關(guān)系。關(guān)聯(lián)關(guān)系反應(yīng)到代碼上往往是一個類的方法里面的參數(shù)是另一個類的具體的某一個對象,比如教授教研究生,教哪個研究生,教是教授這個類里面的一個方法,某個研究生是研究生這個類里面的一個具體的對象。關(guān)聯(lián)關(guān)系是最弱的一種關(guān)系,咱們兩個類之間有關(guān)系,或者兩個對象之間有關(guān)系,但關(guān)系不是很緊密。

二.繼承關(guān)系(比較強(qiáng)的一種關(guān)系)

  繼承關(guān)系封裝了這樣一種邏輯:“XX是一種XX”,只要這東西能說通了,就可以考慮用繼承關(guān)系來封裝它。如:游泳運動員從運動員繼承,游泳運動員是一種運動員,這能說得通,所以游泳運動員就是從運動員繼承過來的,游泳運動員和運動員就是一種繼承關(guān)系。學(xué)生是一個人,學(xué)生從人繼承,老師是一個人,老師也從人繼承,學(xué)生是一種老師,這說不通,所以學(xué)生和老師就不存在繼承關(guān)系。所以將來做設(shè)計的時候要分清繼承關(guān)系很簡單,你只要說通這么一句話:“XX是一種XX”。OK,那他們之間就是繼承關(guān)系。籃球運動員是一種球類運動員,這說得通,所以籃球運動員從球類運動員繼承,這樣繼承很有可能會產(chǎn)生一棵繼承樹,運動員派生出來,派生出來的意思是游泳運動員這個類、球類運動員這個類、射擊運動員類從它繼承,相當(dāng)于運動員派生出來了這些個不同的運動員,包括游泳的,球類的,射擊的。球類的再派生足球的,籃球的,排球的。這就是一棵繼承樹,不過這棵樹是比較理想化的情況,只有一個根節(jié)點。但實際當(dāng)中,我們真實世界當(dāng)中的繼承關(guān)系不一定只從一個類繼承,一個類可能從多個類繼承過來,比如說:金絲猴從動物這個類繼承,這很正常,但我還有另外一個專門的類:“應(yīng)該受到保護(hù)的東西”,這也是一個類,金絲猴應(yīng)該受到保護(hù),所以金絲猴是一種應(yīng)該受到保護(hù)的東西。所以金絲猴從“應(yīng)該受到保護(hù)的東西”這個類繼承過來。所以在現(xiàn)實情況當(dāng)中,一個類完完全全有可能從多個不同的類繼承,C++正是因為想封裝這種繼承關(guān)系,所以C++存在多重繼承。

三.聚合關(guān)系(整體和部分)(比較強(qiáng)的一種關(guān)系)

  什么是聚合?聚合就是一個整體與部分的關(guān)系。我們說“XX是XX的一部分”,只要說得通,那么他們之間的關(guān)系就是聚合關(guān)系,隊長是球隊的一部分,隊員是球隊的一部分。所以隊長和球隊是聚合關(guān)系,隊員和球隊也是聚合關(guān)系。腦袋是人的以部分,身體和胳膊也是人的一部分,因此腦袋,身體和胳膊與人都是聚合關(guān)系。聚合關(guān)系分得再細(xì)一點的話就可以分成聚集關(guān)系和組合關(guān)系,比如球隊、隊長,隊員,這三者是聚集關(guān)系,假如這個隊長既是足球的隊長,同時也是籃球的隊長,一個人分屬兩個不同的球隊,這是可以的,球隊與隊長之間沒有我離不了你,你離不了我這種情況,所以如果分得更細(xì)的話,這種就叫做聚集關(guān)系。還有一種情況叫組合,組合說的是咱們倆密不可分,我是你必不可少的一部分。一個人的腦袋不可能既屬于你又屬于別人,身體也一樣,不可能既屬于你又屬于別人。所以你的身體,腦袋和你是密不可分的,這是一種更加嚴(yán)格的聚合關(guān)系,專門給它取了個名字叫組合。

四.實現(xiàn)關(guān)系

  作為父類來說,我覺得我應(yīng)該具有這樣一個方法,但我不知道怎么去實現(xiàn),誰去實現(xiàn),我的子類去實現(xiàn),這就是實現(xiàn)關(guān)系。和實現(xiàn)關(guān)系息息相關(guān)的還有一種關(guān)系叫多態(tài)。

五.多態(tài)

七、Java與面向?qū)ο?/h2>

  對象和類是分不開的,必須首先定義類才能有對象。首先定義方法才能調(diào)用。對象是JAVA里面的核心,做任何東西你首先都得給我造出一個對象才能做。靜態(tài)屬性簡稱屬性,也叫成員變量,以后說屬性或者說成員變量它們指的都是同一回事。

  整個類可以看作是靜態(tài)的屬性還有方法他們之間的一個綜合。怎么抽象出一個類的概念,還是那句話,你必須抽象出兩個方面來,第一方面是看他們的靜態(tài)屬性,他們有哪些成員變量,第二方面是看他們的有哪些方法。

  寫JAVA程序時,我們一上來寫的就是public class(聲明一個類),在這個class里面我們寫的是成員變量和方法。

  每一個JAVA里面的class(類)都對應(yīng)了我們現(xiàn)實生活中某一類事物的一個抽象。比如說要在JAVA里面封裝一只狗,具體怎么封裝,如何寫代碼,代碼如下:

復(fù)制代碼
 1 package cn.javastudy.summary; 2 /** 3  * 一類事物封裝到JAVA里面首先得寫class,定義這個類,類名是什么可以自己取。 4  * 這里把類名叫做Dog 5  */ 6 public class Dog { 7     /** 8      * 接下來就是寫這個狗這個類的屬性或者叫成員變量, 9      * 比如說狗這個類的毛的顏色,怎么定義這個屬性呢,10      * 首先得定義毛的一個類型,如使用int來定義毛的顏色類型11      */12     int furcolor; //定義屬性:毛的顏色13     float height; //定義屬性:狗的高度14     float weight; //定義屬性:狗的體重15     16     /**17      * 狗的顏色,高度,體重這些屬性定義完了,接下來要定義的就是方法了。18      * 如寫一個CatchMouse()方法,捉老鼠的方法。19      * CatchMouse這個方法里面有一個對象類型的參數(shù),捉哪一只老鼠,這個對象參數(shù)是屬于Mouse這個類的20      * @param m21      */22     void CatchMouse(Mouse m){23             //在方法體內(nèi)寫捉老鼠這個過程,怎么捉,跑著捉,走著捉24             System.out.PRintln("我捉到老鼠了,汪汪!,老鼠要尖叫了!");25             /**26              * 老鼠尖叫一聲,表示被狗咬到了,咬到了能不叫嗎,很自然而然地想到,27              * 尖叫(scream())這個方法是屬于Mouse這個類里面的某一個方法。28              * 老鼠自己調(diào)用它,讓它自己尖叫。這就是面向?qū)ο蟮乃季S。29              */30             m.scream();31     }32     33     public static void main(String[] args) {34         Dog  d = new Dog();//首先用new關(guān)鍵字創(chuàng)建一只狗35         Mouse m=new Mouse();//造出一只老鼠。36         d.CatchMouse(m);//然后用這只狗去抓老鼠,讓狗調(diào)用CatchMouse()方法去捉某只老鼠。37     }38 }復(fù)制代碼復(fù)制代碼
 1 package cn.javastudy.summary; 2 /** 3  * 封裝的老鼠類 4  */ 5 public class Mouse { 6     /** 7      * 老鼠自己有一個發(fā)出尖叫的方法 8      * 當(dāng)被狗咬到時就會發(fā)出尖叫 9      */10     public void scream() {11         System.out.println("我被狗咬到了,好痛啊!");12     }13 14 }復(fù)制代碼

     從這個意義上來講,JAVA里面的每定義一個類實際上就相當(dāng)于一種新的數(shù)據(jù)類型。就跟int ,float, String等一樣,不過是一種新定義的類型而已。

八、為什么使用面向?qū)ο缶幊蹋?/h2>

  面向?qū)ο缶幊蹋阂唤M對象互相配合通過溝通完成特定功能

  做軟件苦苦追求的一種境界是可重用性(reusable),可擴(kuò)展性。如果是面向過程,一般情況是屬性和方法它們是分開的,他們不是聚合的關(guān)系,不是合在一起的,這樣要復(fù)用起來比較麻煩,復(fù)用的層次只是局限于方法這個層次上,而面向?qū)ο髣t不同,它是把屬性和方法綜合在一個里面。綜合在一起復(fù)用的時候是整個對象進(jìn)行復(fù)用。所以面向?qū)ο蠛兔嫦蜻^程相比,前者更加容易讓我們達(dá)到可重用性。

學(xué)習(xí)Java的同學(xué)注意了!!! 學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交流群,群號碼:523047986  我們一起學(xué)Java!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

主站蜘蛛池模板: 潮安县| 黎平县| 武威市| 自治县| 嘉义市| 南丹县| 饶平县| 黄石市| 丽江市| 额敏县| 若羌县| 涿州市| 新宾| 玛曲县| 拉萨市| 临城县| 英吉沙县| 进贤县| 汝阳县| 密云县| 尉氏县| 东乡| 古蔺县| 浦江县| 靖远县| 莱芜市| 合肥市| 广昌县| 肇州县| 商河县| 鸡泽县| 黄大仙区| 尖扎县| 灌阳县| 宜丰县| 海门市| 沁阳市| 丰都县| 榆林市| 深州市| 巨鹿县|