1. 程式人生 > >面向物件的基本理論1:類和物件

面向物件的基本理論1:類和物件

> 我們先介紹基本的面向物件概念,具體的使用語法也就是定義的關鍵字後面會介紹 前面我們簡單介紹了面向物件和麵向過程的思維方式不同,簡單理解就是面向過程方式主要關心的是流程化,而面向物件方式主要是找參與者,也就是找類,類是面向物件中最基本的概念,是面向物件分析OOA和麵向物件設計OOD的基石,另一個基石是物件。 類和物件其實分不開的關係,就像雞和蛋的關係,無法具體知道哪個先產生。只是我們設計類的時候先定義類,所以我們先介紹類的概念。 ### 一、類 類是物件的模板,但是什麼物件呢?這個我們留個花絮,在介紹物件之前我們先給類一個通俗的定義吧! 那就是多個相似事物的通稱,是不是還有點難理解,那我就一個詞一個詞的解釋一下。 [多個]()這個詞容易理解,就是有很多事物;單個事物不能形成類; [相似]()代表有相同的特徵,但是也有不同的地方,比如: 張繼科和林丹,他倆必定有相同的特徵,都有鼻子眼睛嘴等等。但是也有不同的地方,比如他倆的身高體重等不一定完全相同, 他倆還有各自的功能,張繼科打乒乓球的,林丹打羽毛球的。 這就是我們說相似而不是相同; [通稱]()也比較好理解,還拿張繼科和林丹舉例子,他倆都可以統稱為人類,但是不能說統稱為張繼科,張繼科那就是具體的人了。按照上面的理解知道什麼是類了吧。奧迪和寶馬是不是一類呢,他倆都屬於車,所以就是一個車類。 再比如波音和空機都統稱為飛機,所以就是一個飛機類。我們再想一個問題,飛機和車是不是一個類呢,它倆都有發動機,可以統稱為交通工具。說到這就有答案了,飛機和車是一個交通工具類。 說到這你可能就想到了所有的事物最終都可以有大的統稱。那為啥還分那麼多類呢,就設計一個大類唄。這就失去了面向物件思想的一個好處,可擴充套件性,舉一個例子,如果只設計一個交通工具類,原先的需求就有飛機和汽車。 某天需要添加個輪船類呢,就要修改類的結構。反之只需要新增輪船類就好。通過上面的介紹,都知道類到底是個啥,設計類的時候按照具體的需求就好,需求和觀察角度不同,設計出來的類可能都不同。 比如:設計一個交通工具類和設計一個汽車類都不一樣。 我們上面是拿文字大概介紹的,拿張繼科和林丹舉例子他倆都有靜態特性,是一個名詞,比如年齡、性別等等。也還有動態的功能,是一個動詞,比如都能打球、訓練等等。 張繼科和林丹不是類,是具體的個體,所以就需要抽取共同的部分抽取成人類。 可是對應到面向物件中咋設計一個類呢,分別用**屬性和方法**表示,[屬性]()就是指靜態特性,[方法]()就是指動態的功能;簡單判斷標準就是*名詞是屬性*,*動詞是方法*。我們用一個程式看一下。 ```java /** * 人類 */ public class Person { //屬性,人具有的特徵 String name; //名字 int age; //年齡 float height; //身高 float weight; //體重 String gender; //性別 //方法,人具有的功能 //方法可以訪問屬性 public String getName() { return name; } public void playBall(){ System.out.println("打球!"); } public void train(){ System.out.println("訓練!"); } } ``` 上面的程式碼寫出來我們並不能執行,一個類不能做事情,就比如一個人類能打球嗎,顯然不能,都是某個人能打球,所以我們需要一個類的實體來做事情。 ### 二、物件 接下來我們該介紹什麼是物件了,上面我們說過類是物件的模板,類都知道是什麼了。對應的模板都知道是什麼吧,一個使物體成固定型狀的模具; 比如做蛋糕,你可以拿一個模具,然後把做好的麵糊倒在裡面放入入微波爐製作,製作完成之後模具中就有了一個具體的蛋糕。這個蛋糕和模具的形狀基本就是相同的。 對應到面向物件思想中,這個做出來的每個蛋糕就是一個個物件,這每個蛋糕放在一起就是一個統稱蛋糕,這其實就是一個蛋糕類。 蛋糕類是抽象的,也就是沒有具體的實體,只是通過這個蛋糕模板可以知道大概的形狀而已,通過微波爐製作的過程對應程式中就是例項化。 另外物件和類其實是相對的概念,上面談過觀察角度不同,類的設計不同,這樣的話對應的物件也不同。比如以車作為參照標準來說,車是一個類,具體的奧迪就是一個車的物件,它是一個車的具體品牌。 ok說到這我們要說一下類和物件的聯絡:現實物件(歸納概括)--->現實類(抽象模擬)--->軟體類(例項化)--->軟體物件--->程式 ![類和物件的聯絡](https://img2020.cnblogs.com/blog/1913298/202011/1913298-20201113225810223-2073690871.png) 現實類和物件就是我們現實世界能看到的東西嗎,軟體類和軟體物件就是軟體設計和執行中產生的 我們對上面的類進行一下例項化,建立具體的物件,先用圖展示一下 ![類和物件](https://img2020.cnblogs.com/blog/1913298/202011/1913298-20201113224609620-1538262933.png) ```java /** * 建立一個張繼科的物件 */ public class TestPerson { public static void main(String[] args) { //先建立一個具體的空人,也就是空物件 Person person=new Person(); person.name="張繼科"; //設定名字為張繼科 person.play();//呼叫人類的方法,這個名字為張繼科在打球 } } ``` 通過上面的介紹也就可以理解說:類是物件的抽象,物件是類的例項化了。那抽象是什麼呢?抽象其實就是把像的部分抽取出來 ,而抽象的作用就是:隔離關注點,降低複雜度。就比如設計交通工具類,不劃分類別的話,都集中在一起的話,那麼我們的程式得多複雜凌亂。 ![抽象](https://img2020.cnblogs.com/blog/1913298/202011/1913298-20201113230446684-8100208