面向對象基本概念1:類和對象


我們先介紹基本的面向對象概念,具體的使用語法也就是定義的關鍵字后面會介紹

前面我們簡單介紹了面向對象和面向過程的思維方式不同,簡單理解就是面向過程方式主要關心的是流程化,而面向對象方式主要是找參與者,也就是找類,類是面向對象中最基本的概念,是面向對象分析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();//調用人類的方法,這個名字為張繼科在打球
    }
}

通過上面的介紹也就可以理解說:類是對象的抽象,對象是類的實例化了。那抽象是什么呢?抽象其實就是把像的部分抽取出來 ,而抽象的作用就是:隔離關注點,降低復雜度。就比如設計交通工具類,不划分類別的話,都集中在一起的話,那么我們的程序得多復雜凌亂。

抽象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM