java基礎學習總結——面向對象1

目錄

1、面向過程的思想和麪向對象的思想html

2、簡單理解面向對象java

3、面向對象的設計思想編程

4、對象和類的概念學習

5、如何抽象出一個類?spa

6、類(對象)之間的關係設計

7、Java與面向對象code

8、爲何使用面向對象編程?htm


 

1、面向過程的思想和麪向對象的思想

       面向對象和麪向過程的思想有着本質上的區別, 做爲面向對象的思惟來講,當你拿到一個問題時,你分析這個問題再也不是第一步先作什麼,第二步再作什麼,這是面向過程的思惟,你應該分析這個問題裏面有哪些類和對象,這是第一點,而後再分析這些類和對象應該具備哪些屬性和方法。這是第二點。最後分析類和類之間具體有什麼關係,這是第三點。對象

      面向對象有一個很是重要的設計思惟:合適的方法應該出如今合適的類裏面blog

2、簡單理解面向對象

  就是在程序裏面首先分解出來的應該是注意再也不是一步一步的過程了,而是首先考慮在這個問題域裏面或者程序裏面應該具備有哪些對象,因此從如今開始考慮任何問題腦子裏不要再想着我實現這件事我第一步應該幹什麼,第二步應該幹什麼,若是這樣想,那就是面向過程的思惟了。面向對象的思惟是,當我碰到這個問題域的時候,碰到這個程序的時候,我首先應該把這個問題裏有哪些對象,對象與對象之間有什麼關係抽象出來。

3、面向對象的設計思想

  面向對象的基本思想是,從現實世界中客觀存在的事物出發來構造軟件系統,並在系統的構造中儘量運用人類的天然思惟方式。

  面向對象更增強調運用人類在平常生活的邏輯思惟中常常採用的思想方法與原則,如抽象、分類,繼承、聚合、多態等。

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

4、對象和類的概念

     對象是用於計算機語言對問題域中事物的描述,對象經過「屬性(attribute)」和「方法(method)」來分別對應事物所具備的靜態屬性和動態屬性

     類是用於描述同一類的對象的一個抽象的概念,類中定義了這一類對象所具備的靜態屬性和動態屬性

    類能夠當作一類對象的模板,對象能夠當作該類的一個具體實例

    eg.什麼叫瓶子?

     瓶子的定義:具備某些類特徵的東西就是瓶子,比分說什麼樣的形狀,比方說有個口,能倒水,能裝水,通常有個蓋等等。給瓶子下定義的過程,其實就是把瓶子裏的某些東西抽象出來了,因此瓶子在這裏是叫作一類事物的一個抽象,在你腦子裏有瓶子的概念,可瓶子的概念在你腦子裏究竟是什麼呢?瓶子的概念在你腦子裏叫作一類事物的一個抽象。怎麼抽象的呢?你每每抽象的是這兩個方面:第一個方面咱們叫它靜態的屬性,瓶子應該具備哪些特徵,比分說瓶子應有個口,這是它的具備的一個靜態屬性,瓶子通常有一個蓋,這也是它的具備一個靜態屬性,除此以外,你還可能給它總結動態的屬性,什麼動態的屬性呢?比放說瓶子能倒水,這是它的動態屬性。瓶子這個概念在你腦子裏若是你細細的思惟的話,其實你給它作了兩方面的總結,一方面是靜態的,一方面是動態的。反映到JAVA的類上,一個就是成員變量(靜態屬性),一個就是方法(動態屬性)方法是能夠執行的,能夠動的。成員變量是某一個類的靜態屬性。因此你腦子裏瓶子的概念其實是一類事物的一個抽象,這種東西咱們叫它類,椅子是類,桌子是類,學生是類。什麼是對象呢?這一類事物的具體的某個實例就叫作對象。因此一類事物的具體的某一個東西,符合這類事物具體的特徵的某個東西就叫作對象。瓶子是一個類,某個瓶子就是瓶子這個類裏面的一個對象。

5、如何抽象出一個類?

       有兩個方面,一方面是它的靜態屬性,另外一方面是它的動態屬性。反映到JAVA裏面的類怎麼包裝它呢?一方面成員變量,另外一方面是方法。

  eg.職員這個類該怎麼抽象出來?也是從兩個方面,一方面是它的靜態屬性,另外一方面它的動態屬性

  職員有哪些屬性呢?有姓名,年齡,目前工資數額等屬性,他有哪些方法呢?讓這個職員來顯示姓名,顯示年齡,修改姓名,領取工資。固然顯示姓名,顯示年齡,修改姓名,領取工資這些也可讓別人來作,但面向對象的設計思惟是最合適的方法應該出如今最合適的類裏面。顯示姓名,顯示年齡,修改姓名,領取工資由誰來作更合適呢,那就是職員本身最合適。因此這些方法應該出如今職員這個類裏面。

  對於類來講,它有一些屬性或者稱爲成員變量,之後說屬性或者成員變量指的是同一回事。具體的對象他有沒有相關的一些屬性或者叫成員變量呢?有,每個人都有一份,只不過是取值不一樣而已。如從職員這個類實例化出來的兩個職員:職員A和職員B,他們都有姓名,年齡,目前工資數額這些屬性,但他們的名字,年齡,領取的工資數額都不同。這樣就能把職員A和職員B區分開來了,正是由於他們的屬性值不同,因此這個對象才能和另外的對象區分開來,因此經過屬性是能夠區分兩個對象的。貓是一個類,這隻貓是一個對象,這隻貓和另一隻貓該怎麼區分開來呢?那就得看你的貓這個類是怎麼定義的了,貓有貓毛,毛有顏色。OK,這隻貓是黑貓,另外一隻貓是白貓,這樣經過貓毛的顏色區分開來了。若是隻定義一個,如捉老鼠,白貓也能捉,黑貓也能捉,這樣就沒辦法區分出黑貓和白貓了,因此根據方法是沒辦法區分兩個對象的。因此每一個對象都有本身的屬性,屬性值和另一個對象通常是不同的

  必定要區分類和對象,什麼叫作類?什麼叫作對象?類是一類事物的一個抽象,具備共同特徵的一類事物的一個抽象。對象是這個類具體的某一個實例,因此之後說實例(instance)或者說對象(object)指的是同一回事。

6、類(對象)之間的關係

一.關聯關係(最弱的一種關係)

  類和類之間是有關係的,如學生和老師這兩個類,老師能夠教學生,學生能夠向老師學習。這就是他們之間的關係。關係和關係之間是不一樣的,你和你老婆的關係和你和你其餘女友的關係是不能混爲一談的。關係最弱的一種關係叫關聯關係。關聯關係反應到代碼上每每是一個類的方法裏面的參數是另外一個類的具體的某一個對象,好比教授教研究生,教哪一個研究生,教是教授這個類裏面的一個方法,某個研究生是研究生這個類裏面的一個具體的對象。關聯關係是最弱的一種關係,我們兩個類之間有關係,或者兩個對象之間有關係,但關係不是很緊密。

二.繼承關係(比較強的一種關係)

  繼承關係封裝了這樣一種邏輯:「XX是一種XX」,只要這東西能說通了,就能夠考慮用繼承關係來封裝它。如:游泳運動員從運動員繼承,游泳運動員是一種運動員,這能說得通,因此游泳運動員就是從運動員繼承過來的,游泳運動員和運動員就是一種繼承關係。學生是一我的,學生從人繼承,老師是一我的,老師也從人繼承,學生是一種老師,這說不通,因此學生和老師就不存在繼承關係。因此未來作設計的時候要分清繼承關係很簡單,你只要說通這麼一句話:「XX是一種XX」。OK,那他們之間就是繼承關係。籃球運動員是一種球類運動員,這說得通,因此籃球運動員從球類運動員繼承,這樣繼承頗有可能會產生一棵繼承樹,運動員派生出來,派生出來的意思是游泳運動員這個類、球類運動員這個類、射擊運動員類從它繼承,至關於運動員派生出來了這些個不一樣的運動員,包括游泳的,球類的,射擊的。球類的再派生足球的,籃球的,排球的。這就是一棵繼承樹,不過這棵樹是比較理想化的狀況,只有一個根節點。但實際當中,咱們真實世界當中的繼承關係不必定只從一個類繼承,一個類可能從多個類繼承過來,好比說:金絲猴從動物這個類繼承,這很正常,但我還有另一個專門的類:「應該受到保護的東西」,這也是一個類,金絲猴應該受到保護,因此金絲猴是一種應該受到保護的東西。因此金絲猴從「應該受到保護的東西」這個類繼承過來。因此在現實狀況當中,一個類完徹底全有可能從多個不一樣的類繼承,C++正是由於想封裝這種繼承關係,因此C++存在多重繼承。

三.聚合關係(總體和部分)(比較強的一種關係)

  什麼是聚合?聚合就是一個總體與部分的關係。咱們說「XX是XX的一部分」,只要說得通,那麼他們之間的關係就是聚合關係,隊長是球隊的一部分,隊員是球隊的一部分。因此隊長和球隊是聚合關係,隊員和球隊也是聚合關係。腦殼是人的以部分,身體和胳膊也是人的一部分,所以腦殼,身體和胳膊與人都是聚合關係。聚合關係分得再細一點的話就能夠分紅彙集關係和組合關係,好比球隊、隊長,隊員,這三者是彙集關係,假如這個隊長既是足球的隊長,同時也是籃球的隊長,一我的分屬兩個不一樣的球隊,這是能夠的,球隊與隊長之間沒有我離不了你,你離不了我這種狀況,因此若是分得更細的話,這種就叫作彙集關係。還有一種狀況叫組合,組合說的是我們倆密不可分,我是你必不可少的一部分。一我的的腦殼不可能既屬於你又屬於別人,身體也同樣,不可能既屬於你又屬於別人。因此你的身體,腦殼和你是密不可分的,這是一種更加嚴格的聚合關係,專門給它取了個名字叫組合。

四.實現關係

  做爲父類來講,我以爲我應該具備這樣一個方法,但我不知道怎麼去實現,誰去實現,個人子類去實現,這就是實現關係。和實現關係息息相關的還有一種關係叫多態。

五.多態

7、Java與面向對象

  對象和類是分不開的,必須首先定義類纔能有對象。首先定義方法才能調用。對象是JAVA裏面的核心,作任何東西你首先都得給我造出一個對象才能作。靜態屬性簡稱屬性,也叫成員變量,之後說屬性或者說成員變量它們指的都是同一回事。

  整個類能夠看做是靜態的屬性還有方法他們之間的一個綜合。怎麼抽象出一個類的概念,仍是那句話,你必須抽象出兩個方面來,第一方面是看他們的靜態屬性,他們有哪些成員變量,第二方面是看他們的有哪些方法。

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

  每個JAVA裏面的class(類)都對應了咱們現實生活中某一類事物的一個抽象。好比說要在JAVA裏面封裝一隻狗,具體怎麼封裝,如何寫代碼,代碼以下:

 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這個方法裏面有一個對象類型的參數,捉哪一隻老鼠,這個對象參數是屬於Mouse這個類的
20      * @param m
21      */
22     void CatchMouse(Mouse m){
23             //在方法體內寫捉老鼠這個過程,怎麼捉,跑着捉,走着捉
24             System.out.println("我捉到老鼠了,汪汪!,老鼠要尖叫了!");
25             /**
26              * 老鼠尖叫一聲,表示被狗咬到了,咬到了能不叫嗎,很天然而然地想到,
27              * 尖叫(scream())這個方法是屬於Mouse這個類裏面的某一個方法。
28              * 老鼠本身調用它,讓它本身尖叫。這就是面向對象的思惟。
29              */
30             m.scream();
31     }
32     
33     public static void main(String[] args) {
34         Dog  d = new Dog();//首先用new關鍵字建立一隻狗
35         Mouse m=new Mouse();//造出一隻老鼠。
36         d.CatchMouse(m);//而後用這隻狗去抓老鼠,讓狗調用CatchMouse()方法去捉某隻老鼠。
37     }
38 }
 1 package cn.javastudy.summary;
 2 /**
 3  * 封裝的老鼠類
 4  */
 5 public class Mouse {
 6     /**
 7      * 老鼠本身有一個發出尖叫的方法
 8      * 當被狗咬到時就會發出尖叫
 9      */
10     public void scream() {
11         System.out.println("我被狗咬到了,好痛啊!");
12     }
13 
14 }

     從這個意義上來說,JAVA裏面的每定義一個類實際上就至關於一種新的數據類型。就跟int ,float, String等同樣,不過是一種新定義的類型而已。

8、爲何使用面向對象編程?

  面向對象編程:一組對象互相配合經過溝通完成特定功能

  作軟件苦苦追求的一種境界是可重用性(reusable),可擴展性。若是是面向過程,通常狀況是屬性和方法它們是分開的,他們不是聚合的關係,不是合在一塊兒的,這樣要複用起來比較麻煩,複用的層次只是侷限於方法這個層次上,而面向對象則不一樣,它是把屬性和方法綜合在一個裏面。綜合在一塊兒複用的時候是整個對象進行復用。因此面向對象和麪向過程相比,前者更加容易讓咱們達到可重用性。

相關文章
相關標籤/搜索