概述
面向過程:根據(jù)業(yè)務(wù)邏輯從上到下寫壘代碼
函數(shù)式:將某功能代碼封裝到函數(shù)中滞伟,日后便無需重復(fù)編寫辛掠,僅調(diào)用函數(shù)即可
面向?qū)ο螅簩?duì)函數(shù)進(jìn)行分類和封裝鹤盒,讓開發(fā)“更快更好更強(qiáng)...”
封裝是面向?qū)ο缶幊痰奶卣髦还拢彩穷惡蛯?duì)象的主要特征。封裝將數(shù)據(jù)以及加在這些數(shù)據(jù)上的操作組織在一起芙盘,成為有獨(dú)立意義的構(gòu)件驯用。外部無法直接訪問這些封裝了的數(shù)據(jù),從而保證了這些數(shù)據(jù)的正確性儒老。如果這些數(shù)據(jù)發(fā)生了差錯(cuò)蝴乔,也很容易定位錯(cuò)誤是由哪個(gè)操作引起的。
如果外部需要訪問類里面的數(shù)據(jù)驮樊,就必須通過接口(Interface)進(jìn)行訪問薇正。接口規(guī)定了可對(duì)一個(gè)特定的對(duì)象發(fā)出哪些請(qǐng)求。當(dāng)然囚衔,必須在某個(gè)地方存在著一些代碼挖腰,以便滿足這些請(qǐng)求。這些代碼與那些隱藏起來的數(shù)據(jù)叫作"隱藏的實(shí)現(xiàn)"练湿。站在過程化程序編寫(Procedural Programming)的角度猴仑,整個(gè)問題并不顯得復(fù)雜。一種類型含有與每種可能的請(qǐng)求關(guān)聯(lián)起來的函數(shù)肥哎。一旦向?qū)ο蟀l(fā)出一個(gè)特定的請(qǐng)求辽俗,就會(huì)調(diào)用那個(gè)函數(shù)疾渣。通常將這個(gè)過程總結(jié)為向?qū)ο?發(fā)送一條消息"(提出一個(gè)請(qǐng)求)。對(duì)象的職責(zé)就是決定如何對(duì)這條消息作出反應(yīng)(執(zhí)行相應(yīng)的代碼)崖飘。
若任何人都能使用一個(gè)類的所有成員榴捡,那么可對(duì)這個(gè)類做任何事情,則沒有辦法強(qiáng)制他們遵守任何約束--所有東西都會(huì)暴露無遺朱浴。
有兩方面的原因促使了類的編制者控制對(duì)成員的訪問吊圾。第一個(gè)原因是防止程序員接觸他們不該接觸的東西--通常是內(nèi)部數(shù)據(jù)類型的設(shè)計(jì)思想。若只是為了解決特定的問題赊琳,用戶只需操作接口即可街夭,無需明白這些信息。類向用戶提供的實(shí)際是一種服務(wù)躏筏,因?yàn)樗麄兒苋菀拙涂煽闯瞿男?duì)自己非常重要,以及哪些可忽略不計(jì)呈枉。進(jìn)行訪問控制的第二個(gè)原因是允許庫設(shè)計(jì)人員修改內(nèi)部結(jié)構(gòu)趁尼,不用擔(dān)心它會(huì)對(duì)客戶程序員造成什么影響。例如猖辫,編制者最開始可能設(shè)計(jì)了一個(gè)形式簡(jiǎn)單的類酥泞,以便簡(jiǎn)化開發(fā)。以后又決定進(jìn)行改寫啃憎,使其更快地運(yùn)行芝囤。若接口與實(shí)現(xiàn)方法早已隔離開,并分別受到保護(hù)辛萍,就可放心做到這一點(diǎn)悯姊,只要求用戶重新鏈接一下即可。
封裝考慮的是內(nèi)部實(shí)現(xiàn)贩毕,抽象考慮的是外部行為悯许。符合模塊化的原則,使得軟件的可維護(hù)性辉阶、擴(kuò)充性大為改觀
總結(jié)
以上就是本節(jié)對(duì)于面向?qū)ο蟪跫?jí)知識(shí)的介紹先壕,總結(jié)如下:
面向?qū)ο笫且环N編程方式,此編程方式的實(shí)現(xiàn)是基于對(duì) 類 和 對(duì)象 的使用谆甜;
? ?類 是一個(gè)模板垃僚,模板中包裝了多個(gè)“函數(shù)”供使用;
? 對(duì)象规辱,根據(jù)模板創(chuàng)建的實(shí)例(即:對(duì)象)谆棺,實(shí)例用于調(diào)用被包裝在類中的函數(shù);
? 面向?qū)ο笕筇匦裕悍庋b按摘、繼承和多態(tài)包券;
問答專區(qū)
問題一:什么樣的代碼才是面向?qū)ο螅?/b>
答:從簡(jiǎn)單來說纫谅,如果程序中的所有功能都是用 類 和 對(duì)象 來實(shí)現(xiàn),那么就是面向?qū)ο缶幊塘恕?/p>
問題二:函數(shù)式編程 和 面向?qū)ο?如何選擇溅固?分別在什么情況下使用付秕?
答:須知:對(duì)于 C# 和 Java 程序員來說不存在這個(gè)問題,因?yàn)樵搩砷T語言只支持面向?qū)ο缶幊蹋ú恢С趾瘮?shù)式編程)侍郭。而對(duì)于 Python 和 PHP 等語言卻同時(shí)支持兩種編程方式询吴,且函數(shù)式編程能完成的操作,面向?qū)ο蠖伎梢詫?shí)現(xiàn)亮元;而面向?qū)ο蟮哪芡瓿傻牟僮髅图疲瘮?shù)式編程不行(函數(shù)式編程無法實(shí)現(xiàn)面向?qū)ο蟮姆庋b功能)。
所以爆捞,一般在Python開發(fā)中奉瘤,全部使用面向?qū)ο?或 面向?qū)ο蠛秃瘮?shù)式混合使用
本文部分文章轉(zhuǎn)自簡(jiǎn)書 IT程序獅 ,多謝煮甥!