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