深入理解面向過程和面向?qū)ο缶幊趟枷?/h1>

張 楠

面向過程和面向?qū)ο筮@是兩種編程思路扩氢。

面向過程中函數(shù)是一等公民驶赏,面向?qū)ο笾?strong>對(duì)象是一等公民炸卑,且看解釋。

以造車為例:

面向過程大致是如下思路:

1煤傍、造一個(gè)發(fā)動(dòng)機(jī)

2盖文、造四個(gè)車輪子

...

3、組裝起來

/**
 * @author zn
 * @date 2020/1/30
 */

public class BuildCar {

    public static void main(String[] args) {

        String engine;
        String[] wheels;

        //1.創(chuàng)建發(fā)動(dòng)機(jī)
        engine = buildEngine();
        //2.創(chuàng)建輪子
        wheels = buildWheels();
        //3.組裝汽車
        boolean flag = buildCar(engine,wheels);
        //4蚯姆,查看汽車是否組裝成功
        if (flag){
            System.out.println("汽車組裝成功五续,可以上路了!");
        }else{
            System.out.println("汽車缺少零件龄恋,未組裝成功疙驾!");
        }
    }


    //組裝汽車
    private static boolean buildCar(String engine, String[] wheels) {
        //組裝汽車時(shí)進(jìn)行判斷,如果沒有發(fā)動(dòng)機(jī)郭毕,沒有輪子荆萤,或者輪子數(shù)量不夠,就組裝失敗
        if (engine.equals("") || wheels == null || wheels.length < 4){
            return false;
        }
        System.out.println("開始安裝【" + engine +"】");
        for (String wheel : wheels) {
            System.out.println("開始安裝【" + wheel + "】");
        }
        return true;
    }

    //創(chuàng)建發(fā)動(dòng)機(jī)
    private static String buildEngine() {
        //省略創(chuàng)建的過程
        return "地球夢(mèng)自然吸氣發(fā)動(dòng)機(jī)";
    }

    //創(chuàng)建輪子
    private static String[] buildWheels() {
        String[] wheels = new String[4];
        wheels[0] = "左前輪";
        wheels[1] = "右前輪";
        wheels[2] = "左后輪";
        wheels[3] = "右后輪";
        return wheels;
    }
}

??通過例子來看,在面向?qū)ο蟮木幊坍?dāng)中链韭,都是一直在調(diào)用方法偏竟,在面向過程編程中一般稱為函數(shù),每個(gè)函數(shù)封裝一些功能敞峭,做事情都是按序就班一步一步來踊谋。這里都是直接調(diào)用函數(shù),所以函數(shù)是一等公民旋讹,也就是就是函數(shù)最重要的組成部分殖蚕。

??我們?cè)跊]有學(xué)習(xí)面向?qū)ο笾八鶎懙男乐速Y管理和英雄者游戲就是使用面向過程寫的,典型的面向過程語言就是c語言沉迹。

面向?qū)ο蟠笾率侨缦滤悸罚?/h4>

??相比于面向過程睦疫,面向?qū)ο笮略隽艘粋€(gè)關(guān)鍵字new,這個(gè)關(guān)鍵字鞭呕,如同一個(gè)萬能的工人一樣蛤育,能夠按照說明書,制造任何東西葫松。

??1瓦糕、搞一個(gè)發(fā)動(dòng)機(jī)的說明書(Engine類)

??2、搞一個(gè)車輪子的說明書(Wheel類)

??3腋么、搞一個(gè)汽車的說明書咕娄,首先我們要明白車子一定有,一個(gè)發(fā)動(dòng)機(jī)珊擂,四個(gè)輪子圣勒,所以我們?cè)谌绾沃圃炱嚨恼f明(構(gòu)造方法)里就去使用new這個(gè)萬能功能直接造出一個(gè)發(fā)動(dòng)機(jī)和四個(gè)輪子并裝在汽車上。那么當(dāng)我們創(chuàng)建汽車的時(shí)候所有的東西就一并創(chuàng)建好了摧扇。

??4圣贸、直接創(chuàng)建一個(gè)汽車,或者讓汽車工廠生產(chǎn)一個(gè)汽車

/** 發(fā)動(dòng)機(jī)的說明書扳剿,這種更高級(jí)的封裝旁趟,分裝了發(fā)動(dòng)機(jī)的一些屬性比如品牌名稱,還有一些發(fā)動(dòng)機(jī)的功能庇绽,也叫行為锡搜,
  * 也叫方法如發(fā)動(dòng)機(jī)要運(yùn)行。有了這個(gè)說明書我們就能使用new關(guān)鍵字瞧掺,隨意創(chuàng)建多個(gè)發(fā)動(dòng)機(jī)耕餐,并且所有的創(chuàng)建出來的   * 發(fā)動(dòng)機(jī)都有這些屬性和方法。
**/
public class Engine {

    private String name;
    public void run(){
        System.out.println("【" + name + "】引擎發(fā)動(dòng)了辟狈!");
    }
    public Engine(String name) {
        this.name = name;
    }
}

//輪子的說明書
public class Wheel {
    private String position;
    public void run(){
        System.out.println("【"+ position +"】開始轉(zhuǎn)動(dòng)了肠缔!");
    }

    public Wheel(String position) {
        this.position = position;
    }
}

//汽車的說明書
public class Car {

    //汽車的品牌
    private String type;
    //汽車肯定有發(fā)動(dòng)機(jī)
    private Engine engine;
    //汽車還有幾個(gè)輪子
    private Wheel wheels[];

    //Car的構(gòu)造方法夏跷,定義了汽車是怎么被構(gòu)造的,造車時(shí)要有發(fā)動(dòng)機(jī)和輪子
    public Car(String type) {
        this.type = type;
        this.engine = new Engine("地球夢(mèng)");
        this.wheels = new Wheel[4];
        this.wheels[0] = new Wheel("左前輪胎");
        this.wheels[1] = new Wheel("右前輪胎");
        this.wheels[2] = new Wheel("左后輪胎");
        this.wheels[3] = new Wheel("右后輪胎");
    }

    //讓汽車跑起來的方法
    public void run(){
        System.out.println("----------第一步明未,啟動(dòng)發(fā)動(dòng)機(jī)----------");
        this.engine.run();
        System.out.println("------第二步槽华,發(fā)動(dòng)機(jī)帶動(dòng)輪胎轉(zhuǎn)動(dòng)-------");
        for (Wheel wheel : wheels) {
            wheel.run();
        }
        System.out.println("---【"+ this.type +"】汽車跑起來了---");
    }
}


public class Test {
    public static void main(String[] args) {
        //這里邊一般不直接調(diào)用方法
        System.out.println("------------------第一輛車-----------------");
        //一般使用new這個(gè)萬能工匠,去創(chuàng)建一個(gè)對(duì)象
        Car car = new Car("日產(chǎn)奇駿");
        //我們使用對(duì)象去調(diào)用方法
        car.run();
        
        System.out.println("------------------第二輛車-----------------");
        Car crv = new Car("本田CRV");
        crv.run();
    }
}

結(jié)果:
------------------第一輛車-----------------
----------第一步趟妥,啟動(dòng)發(fā)動(dòng)機(jī)----------
【地球夢(mèng)】引擎發(fā)動(dòng)了猫态!
------第二步,發(fā)動(dòng)機(jī)帶動(dòng)輪胎轉(zhuǎn)動(dòng)-------
【左前輪胎】開始轉(zhuǎn)動(dòng)了披摄!
【右前輪胎】開始轉(zhuǎn)動(dòng)了亲雪!
【左后輪胎】開始轉(zhuǎn)動(dòng)了!
【右后輪胎】開始轉(zhuǎn)動(dòng)了疚膊!
---【日產(chǎn)奇駿】汽車跑起來了---
------------------第二輛車-----------------
----------第一步义辕,啟動(dòng)發(fā)動(dòng)機(jī)----------
【地球夢(mèng)】引擎發(fā)動(dòng)了!
------第二步寓盗,發(fā)動(dòng)機(jī)帶動(dòng)輪胎轉(zhuǎn)動(dòng)-------
【左前輪胎】開始轉(zhuǎn)動(dòng)了灌砖!
【右前輪胎】開始轉(zhuǎn)動(dòng)了!
【左后輪胎】開始轉(zhuǎn)動(dòng)了贞让!
【右后輪胎】開始轉(zhuǎn)動(dòng)了周崭!
---【本田CRV】汽車跑起來了---

??在面向?qū)ο蟮乃枷氘?dāng)中柳譬,在main方法中喳张,一般不直接調(diào)用方法,而是通過new創(chuàng)建很多對(duì)象美澳,通過對(duì)象去使用方法销部,這也就解釋了為什么對(duì)象是一等公民。

面向?qū)ο罄餂]有面向過程嗎制跟?

??不對(duì)舅桩,我的理解是,面向?qū)ο笫欠庋b的也是過程雨膨,每一個(gè)方法都是封裝了一些過程擂涛,這不過使用面向?qū)ο笫刮覀兙幊痰慕嵌劝l(fā)生了改變,他更加適合完成一些大型的復(fù)制項(xiàng)目聊记。

比如拿我們的英雄者游戲舉例:

這里一定要重理解撒妈,重感受,閉著眼睛想排监,怎么寫慢慢來狰右。

我們脫離了面向過程,使用面向?qū)ο笪覀儜?yīng)該怎么寫舆床?

大致是:

定義一個(gè)英雄類棋蚌,他有屬性比如名字嫁佳,血量等,他還有方法谷暮,比如走路蒿往,攻擊,技能等能

再定義一個(gè)boss類湿弦,他依然有屬性熄浓,有方法。

最后在main方法里省撑,我們只需要new幾個(gè)英雄赌蔑,new幾個(gè)boss讓他們打架就行了。

注:在面向?qū)ο笾形覀円话悴唤泻瘮?shù)竟秫,這里的區(qū)別在于理朋,方法是有所屬的,他是屬于某個(gè)對(duì)象的方法兔魂,而函數(shù)是獨(dú)立的弛作,他不屬于任何其他的東西。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末馒稍,一起剝皮案震驚了整個(gè)濱河市皿哨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纽谒,老刑警劉巖证膨,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鼓黔,居然都是意外死亡央勒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門澳化,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崔步,“玉大人,你說我怎么就攤上這事缎谷【簦” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵列林,是天一觀的道長(zhǎng)瑞你。 經(jīng)常有香客問我,道長(zhǎng)席纽,這世上最難降的妖魔是什么捏悬? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮润梯,結(jié)果婚禮上过牙,老公的妹妹穿的比我還像新娘甥厦。我一直安慰自己,他們只是感情好寇钉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布刀疙。 她就那樣靜靜地躺著,像睡著了一般扫倡。 火紅的嫁衣襯著肌膚如雪谦秧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天撵溃,我揣著相機(jī)與錄音疚鲤,去河邊找鬼。 笑死缘挑,一個(gè)胖子當(dāng)著我的面吹牛集歇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播语淘,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼诲宇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了惶翻?” 一聲冷哼從身側(cè)響起姑蓝,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吕粗,沒想到半個(gè)月后纺荧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溯泣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年虐秋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榕茧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垃沦。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖用押,靈堂內(nèi)的尸體忽然破棺而出肢簿,到底是詐尸還是另有隱情,我是刑警寧澤蜻拨,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布池充,位于F島的核電站,受9級(jí)特大地震影響缎讼,放射性物質(zhì)發(fā)生泄漏收夸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一血崭、第九天 我趴在偏房一處隱蔽的房頂上張望卧惜。 院中可真熱鬧厘灼,春花似錦、人聲如沸咽瓷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茅姜。三九已至闪朱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钻洒,已是汗流浹背奋姿。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留素标,地道東北人胀蛮。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像糯钙,于是被迫代替她去往敵國和親粪狼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容