1. 程式人生 > >5--黑馬程式設計師--技術總結之面向物件

5--黑馬程式設計師--技術總結之面向物件

、期待與您交流! ----------------------

一.什麼是面向物件?

1.面向物件的定義

        面向物件是一種對現實世界理解和抽象的方法,是計算機程式設計技術發展到一定階段後的產物。早期的計算機程式設計是基於面向過程的方法,例如實現算術運算1+1+2 = 4,通過設計一個演算法就可以解決當時的問題。隨著計算機技術的不斷提高,計算機被用於解決越來越複雜的問題。一切事物皆物件,通過面向物件的方式,將現實世界的事物抽象成物件,現實世界中的關係抽象成類、繼承,幫助人們實現對現實世界的抽象與數字建模。通過面向物件的方法,更利於用人理解的方式對複雜系統進行分析、設計與程式設計。同時,面向物件能有效提高程式設計的效率,通過封裝技術,訊息機制可以像搭積木的一樣快速開發出一個全新的系統。面向物件是指一種程式設計範型,同時也是一種程式開發的方法。物件指的是類的集合。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充套件性。
       起初,“面向物件”是專指在程式設計中採用封裝、繼承、多型等設計方法。現在面向物件的思想已經涉及到軟體開發的各個方面。如,面向物件的分析(OOA,Object Oriented Analysis),面向物件的設計(OOD,Object Oriented Design)、以及我們經常說的面向物件的程式設計實現(OOP,Object Oriented Programming)。
       面向物件的分析根據抽象關鍵的問題域來分解系統。面向物件的設計是一種提供符號設計系統的面向物件的實現過程,它用非常接近實際領域術語的方法把系統構造成“現實世界”的物件。面向物件程式設計可以看作一種在程式中包含各種獨立而又互相呼叫的物件的思想,這與傳統的思想剛好相反:傳統的程式設計主張將程式看作一系列函式的集合,或者直接就是一系列對電腦下達的指令。面向物件程式設計中的每一個物件都應該能夠接受資料、處理資料並將資料傳達給其它物件,因此它們都可以被看作一個小型的“機器”,即物件。


2.面向物件三大特點(封裝、繼承、多型)

1)封裝性
 
     面向物件程式設計核心思想之一就是將資料和對資料的操作封裝在一起。通過抽象,即從具體的例項中抽取共同的性質形成一般的概念,比如類的概念。在實際生活中,我們每時每刻都與“物件”在打交道,如日常用的鋼筆、騎的自行車、乘的公共汽車等。而經常見到的卡車、公共汽車、轎車等都會涉及以下幾個重要的物理量:可乘載 的人數、執行速度、發動機的功率   、耗油量、自重、輪子數目等。另外,還有幾個重要的功能:加速、減速、制動、轉彎等。也可以把這些功能稱為它們具有的方法,而物理量是它們的狀態描述,僅僅用物理量或功能不能很好地描述它們。在現實生活中,用這些共有的屬性和功能給出一個概念:機動車類。也就是說,人們經常談到的機動車類就是從具體的例項中抽取共同的屬性和功能形成的一個概念,那麼一個具體的轎車就是機動車類的一個例項,即物件。一個物件將自己的資料和對這些資料的操作合理有效地封裝在一起,例如,每輛轎車呼叫”加速功能“改變的都是自己的執行速度。

2)繼承性
   
       繼承性是子類自動共享父類資料結構和方法的機制,這是類之間的一種關係。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義    的內容作為自己的內容,並加入若干新的內容。繼承體現了一種先進的程式設計模式。。了類可以繼承父類的屬性和功能,即子類繼承了父類所具有的資料和資料上的操作,同時又可以增添子   類獨有的資料和資料上的操作。比如,“人類”自然繼承了“哺乳類”的屬性和功能,同時又增添了人類獨有的屬性和功能採用繼承性,提供了類的規範的等級結構。通過類的繼承關係,   使公共的特效能夠共享,提高了軟體的重用性。

3)多型性(多形性)

        多型是面向物件程式設計的又一重要特徵。有兩種意義的多型,一種是操作名稱的多型,即有多個操作具有相同的名字,但這 些操作所接收的訊息型別必須不同。例如,讓一個人執行“ 求面積”操作時,他可能會問你求什麼面積?所謂操作名稱的多型是指 可以向操作傳遞不同訊息,以便讓物件根據相應的訊息來產生~定的行為。另一種多型是和繼承有關的多型,是 指同一個操作被不同型別物件呼叫時可能產生不同的行為。例如,狗和貓都具有哺乳類的功能:“喊叫”。當狗操作“喊叫”時產生的聲音是“汪汪 ……,,,而當貓操作“喊叫”時產生的聲音 是“喵喵……”。  
    多型性允許每個物件以適合自身的方式去響應共同的訊息。

3.面向物件思想的特點

1)它是一種更符合人們思考習慣的思想
2)它是複雜的內容簡單化
3)它使我們從執行者變成了指揮者     

二.類

1.類的概念

      類是組成Java程式的基本要素。類封裝J,一類物件的狀態和方法。類是用來定義物件的模板。
     類的實現包括兩部分:類宣告和類體。基本格式為:
     class 類名 {

          類體的內容
    }
    其中: class是關鍵字,用來定義類。"class類名”是類的宣告部分,類名必須是合法的Java識別符號。兩個大括號以及之間的內容是類體。

2.類的宣告
    以下是兩個類宣告的例子。
    class People {
            ···
    }
    class植物 {
         ···
    }
    class People和class 植物稱為類宣告,People和“植物”是類名。習慣上類名的第一個字母大寫,但這不是必需的。類的名字不能是Java中的關鍵字,要符合識別符號規定,即名字可以由字母、下劃線、數字或美元符號組成,並且第一個字元不能是數字。但給類命名時,最好遵守下列習慣:
    (1)如果類名使用拉丁字母,那麼名字的首寫字母使用大寫字母,如Hello、Time、People等。
    (2)類名最好容易識別,當類名由幾個“單詞”複合而成時,每個單詞的首寫字母使用大寫,如BeijingTime、AmericanGame、HeIIoChina等。
3.類體

     編寫類的目的是為了描述一類事物共有的屬性和功能,描述過程由類體來實現。類宣告之後的一對大括號“{"、“}”以及它們之間的內容稱為類體,大括號之間的內容稱為類體的內容。
     類體的內容由兩部分構成:一部分是變數的定義,用來刻畫屬性:另一部分是方法的定義,用來刻畫功能。

程式碼示例

  1. public class ObjectDemo1 {  
  2.     /**  
  3.      * 定義一個植物類,包含顏色,葉子數量兩個方法,並在主函式呼叫  
  4.      * @param args  
  5.      */  
  6.     public static void main(String[] args) {  
  7.         // TODO Auto-generated method stub  
  8.         Plant p = new Plant();    //建立一個植物類物件p  
  9.         p.colorDisplay("red");    //呼叫植物類的顏色方法  
  10.         p.numberDisplay(6);       //呼叫植物類的數量方法  
  11.     }  
  12. }  
  13. class Plant {  
  14.     String color;    //定義顏色變數  
  15.     int number;      //定義葉子數量變數  
  16.     public void colorDisplay(String color) {  
  17.         System.out.println("my color is" + color);   //輸出要傳遞的變數並列印  
  18.     }  
  19.     public void numberDisplay(int number) {  
  20.         System.out.println("my number is" + number);  //輸出要傳遞的變數並列印  
  21.     }  
  22. }  


三.成員變數和區域性變數

      類體分為兩部分。變數定義部分所定義的變數被稱為類的成員變數,在方法體中定義的變數和方法的引數被稱為區域性變數。
      1)成員變數和區域性變數的型別可以是Java中的任何…種資料型別,包括基本型別:整型、浮點型、字元型;引用型別:陣列型別、物件。成員變數和區域性變數的名字必須符合識別符號規定,遵守習慣:名字如果使用拉丁字母,首寫字母使用小寫;如果由多個單片語成,從第2個單詞開始的其他單詞的首寫字母使用大寫。
      2)成員變數在整個類內都有效,區域性變數只在定義它的方法內有效。

程式碼示例

  1. public class ObjectDemo2 {  
  2.     /**  
  3.      * 展示成員變數和區域性變數的區別  
  4.      * @黑馬ZWF  
  5.      */  
  6. }  
  7. class Sun {  
  8.     int distance;  //定義成員變數distance  
  9.     int find() {  
  10.         int a = 12;    //定義區域性變數a  
  11.         distance = a;  //這樣是合法的,因為distance是成員變數,在整個類中都有用  
  12.         return distance;  
  13.     }  
  14.     void g() {  
  15.         int y;  
  16.         y = a;    //這樣定義是錯誤的,因為a沒有在g中定義  
  17.     }  
  18. }  

    3)如果區域性變數的名字與成員變數的名字相同,則成員變數被隱藏,即這個成員變數在這個方法內暫時失效。

程式碼示例

  1. public class ObjectDemo3 {  
  2.     /**展示成員變數和區域性變數的區別  
  3.      * @黑馬ZWF  
  4.      */  
  5.     public static void main(String[] args) {  
  6.         // TODO Auto-generated method stub  
  7.         Sam s = new Sam();  
  8.         s.d();   //輸出結果是3,因為方法d中定義了x,則Sam類中的x = 98 暫時失效  
  9.     }  
  10. }  
  11. class Sam {  
  12.     int x = 98, y;   //定義成員變數x,y。其中x = 98 ,y沒有賦值  
  13.     void d() {  
  14.         int x = 3;  //定義區域性變數x,其中x = 3
  15.         y = x;  
  16.         System.out.println(y);  
  17.     }  
  18. }  

      4)如果區域性變數的名字與成員變數的名字相同,則成員變數被隱藏。這時如果想在該方法內使用成員變數,必須使用關鍵字this。
程式碼示例

  1. class Triangle {  
  2.     float sideA,sideB,sideC,lengthSum;  
  3.     void setSide(float sideA, float sideB, float sideC) {  
  4.         this.sideA = sideA;         //這個sideA才表示成員變數sideA,下同  
  5.         this.sideB = sideB;  
  6.         this.sideC = sideC;  
  7.     }  
  8. }  

四.方法

    1.概念

      一個類的類體由兩部分組成:變數的定義和方法的定義。方法的定義包括兩部分:方法宣告和方法體。
     一般格式為:
     方法宣告部分{
           方法體的內容
    }

   2.方法的宣告

      最基本的方法宣告包括方法名和方法的型別,如:
      float area() {
           …
      }

     方法的型別可以是任意的Java資料型別,當一個方法不需要返回資料時,方法的型別必須是voido很多的方法宣告中都給出方法的引數,引數是用逗號隔開的一些變數宣告。方法的引數可以是任意的Java資料型別。
     方法的名字必須符合識別符號規定。在給方法起名字時應遵守良好的習慣:名字如果使用拉丁字母,首寫字母使用小寫。如果由多個單片語成,從第2個單詞開始的其他單詞的首寫字母使用大寫。例如:
     float getrrrangleArea();
     void setCircleRadius (double  radius);

     3.方法體
    方法宣告之後的一對大括號“{”、“}”以及之間的內容稱為方法的方法體。方法體的內容應包括區域性變數的定義和合法的Java語句。例如上例中的void setSide(float sideA, float sideB, float sideC) {}就是一個方法,()裡的內容代表要傳遞的引數。

     4.方法的過載

        方法過載是多型性的一種,例如,讓一個人執行“求面積”操作時,他pJ能會問你求什麼面積?所謂功能多型性是指可以向功能傳遞不同的訊息,以便讓物件根據相應的訊息來產生相應的行為。物件的功能通過類中的方法來體現,那麼功能的多型性就是方法的過載。方法過載的意思是:一個類中可以有多個方法具有相同的名字,但這些方法的引數必須不同,即或者是引數的個數不同,或者是引數的型別不同。
程式碼示例

  1. public class ObjectDemo4 {  
  2.     /**用三個名字相同引數不同的方法實現方法的過載  
  3.      * @黑馬ZWF  
  4.      */  
  5.     float getArea(float r) {    //求園的面積  
  6.         return 3.14f * r * r;  
  7.     }  
  8.     double getArea(float x, int y) { //求長方形的面積  
  9.         return x * y;  
  10.     }  
  11.     float getArea (int x, float y) {    //求長方形的面積,長和寬的精度與上個方法不同  
  12.         return x * y;  
  13.     }  
  14.     double  getArea (float  x, float  y, float  z) {  //求長方體的面積  
  15.         return (x * y + y * x + x * z) * 2.0;  
  16.     }  
  17. }  

      
     5.構造方法
          構造方法是一種特殊方法,用於對類的成員變數進行初始化。它有以下幾個特點:
    (1)構造方法名與類名相同.
    (2)構造方法不返回任何值,也沒有返回型別.
    (3)每個類可以有零個或多個構造方法.
    (4)構造方法在建立物件時自動執行,一般不能顯式地直接呼叫.
    (5)構造方法可以過載。

程式碼示例

  1. public class ObjectDemo5 {  
  2.     /**使用構造方法,分別呼叫含參和無參的構造方法  
  3.      * @黑馬ZWF  
  4.      */  
  5.     public static void main(String[] args) {  
  6.         // TODO Auto-generated method stub  
  7.         Human h1 = new Human();   //呼叫無參的構造方法  
  8.         Human h2 = new Human("李四",14);   //呼叫含參的構造方法  
  9.     }  
  10. }  
  11. class Human {  
  12.     String name;  
  13.     int age;  
  14.     Human () {  
  15.         name = "張三";  
  16.         age = 12;  
  17.         System.out.println("我的名字叫" + name + " 今年" + age + "歲了");  
  18. 相關推薦

    5--黑馬程式設計師--技術總結面向物件

    、期待與您交流! ---------------------- 一.什麼是面向物件? 1.面向物件的定義         面向物件是一種對現實世界理解和抽象的方法,是計算機程式設計技術發展到一定階段後的產物。早期的計算機程式設計是基於面向過程

    8--黑馬程式設計師---技術總結抽象類、內部類

    、期待與您交流! ---------------------- 一.抽象類       1.抽象類的概念       在面向物件的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果一個類中沒有 包含足夠的資訊來描繪一個具體的物

    7--黑馬程式設計師--技術總結幾個重要的關鍵字

    、期待與您交流! ---------------------- 一.static關鍵字           static表示“全域性”或者“靜態”的意思,用來修飾成員變數和成員方法,也可以形成靜態static程式碼塊,但是Java語言中沒有全域性變數的概念。   

    黑馬程式設計師 java程式設計面向物件學習筆記總結

    ---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- 繼承: 在java中,在我們要對一個事物進行封裝時,發現有某一個類的特性和要封裝的這個 類的特性相同,而我們可以在這個

    9--黑馬程式設計師--技術總結多執行緒

    、期待與您交流! ---------------------- 一.多執行緒的概念 以往開發的程式大多是單執行緒的,即一個程式只有一條從頭至尾的執行線索。然而現實世界中的很多過程都具有多條線索同時動作的特性:例如,我們可以一邊看電視,一邊活動胳膊,如果

    4--黑馬程式設計師--技術總結陣列

    <span style="white-space: pre; color: rgb(68, 68, 68); font-family: 'Microsoft Yahei', 微軟雅黑, Tahoma, Arial, Helvetica, STHeiti; font-

    黑馬程式設計師----Java基礎面向物件(最終篇)

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

    黑馬程式設計師----Java基礎面向物件(封裝 繼承 多型)(二)

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

    黑馬程式設計師----Java基礎面向物件(封裝 繼承 多型)

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

    黑馬程式設計師----java基礎面向物件

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

    黑馬程式設計師 java程式設計面向物件學習筆記

    ---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ----------------------面向物件:以前學習過C語言,C語言是面向過程,裡面功能的實現都是由呼叫一個個的函式來完成的,而java是面向物件的程式語

    黑馬程式設計師——OC語言基礎——面向物件三大特性多型

    繼前兩篇博文梳理了一下我對OC中面向物件三大特性的封裝、繼承之後。最重要也是最不容易理解的多型概念終於到來。 個人認為多型在三大特性中是最為重要的,但是由於它的概念性不容易用語言描述清楚,所以我還是想引用視訊教程中老師說的那句經典。 多型的實質就是: 父類的指標 指向了

    黑馬程式設計師——方法總結網編

    ------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ------- /* 1.IP地址類 InetAddress 所在包:java.net.InetAddress

    黑馬程式設計師技術部落格哲學家吃飯問題

    ----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! ------------ 哲學家就餐:有五個哲學家繞著圓桌坐,每個哲學家面前有一碗麵,兩人之間有一支筷子,這樣每個哲學家左右各有一支筷子。哲學家有2個狀態,思考或者拿起筷子吃

    黑馬程式設計師——Java高新技術反射學習總結

                                                                                        反射學習總結 基礎補充: Java程式中的各個Java類屬於同一類事務,描述這類事務的Java類名就是C

    黑馬程式設計師----Java基礎反射

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

    黑馬程式設計師----Java基礎GUI

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

    黑馬程式設計師----Java基礎IO包中其它類

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

    黑馬程式設計師----Java基礎集合類(一)

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g

    黑馬程式設計師----Java基礎String類

    ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a&g