五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

到底JavaScript算不算面向?qū)ο笳Z言?

2021-01-28 11:36 作者:極客小俊GeekerJun  | 我要投稿

前言

?

這一章節(jié)的內(nèi)容不僅僅適合JavaScript ?也適合其他面向?qū)ο缶幊陶Z言!

?


什么是面向?qū)ο?

?

==官方摘要==

**面向?qū)ο?Object Oriented): ** 是軟件開發(fā)當(dāng)中的一種方法 或者說 方式,更加可以說成是一種思維方式、它是一種對現(xiàn)實(shí)世界理解和抽象的方法, 面向?qū)ο笫窍鄬τ诿嫦蜻^程來講的,面向?qū)ο蠓椒ǎ严嚓P(guān)的數(shù)據(jù)和方法組織為一個(gè)整體來看待,從更高的層次來進(jìn)行系統(tǒng)建模,更貼近事物的自然運(yùn)行模式

它現(xiàn)在的應(yīng)用領(lǐng)域也不僅僅局限于程序設(shè)計(jì)和軟件開發(fā)了,它擴(kuò)展到了數(shù)據(jù)庫、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、交互式界面、等領(lǐng)域!

?

面向?qū)ο髮?dǎo)論

隨著計(jì)算機(jī)技術(shù)的不斷提高,計(jì)算機(jī)被用于解決越來越復(fù)雜的問題。
????
一切事物皆對象,通過面向?qū)ο蟮姆绞?,將現(xiàn)實(shí)世界的事物抽象成對象,
現(xiàn)實(shí)世界中的關(guān)系抽象成類、繼承,幫助人們實(shí)現(xiàn)對現(xiàn)實(shí)世界的抽象與數(shù)字建模。
通過面向?qū)ο蟮姆椒ǎ谟萌死斫獾姆绞綄?fù)雜系統(tǒng)進(jìn)行分析、設(shè)計(jì)與編程。
????
同時(shí),面向?qū)ο竽苡行岣呔幊痰男?,通過封裝技術(shù),消息機(jī)制可以像搭積木的一樣快速開發(fā)出一個(gè)全新的系統(tǒng)。
面向?qū)ο笠彩侵敢环N程序設(shè)計(jì)范型,同時(shí)也是一種程序開發(fā)的方法。
????
對象指的是類的集合。它將對象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性。
????
????
面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開發(fā)的各個(gè)方面。
????面向?qū)ο蟮姆治???(OOA,Object?Oriented?Analysis)
????面向?qū)ο蟮脑O(shè)計(jì)???(OOD,Object?Oriented?Design)
????面向?qū)ο蟮木幊虒?shí)現(xiàn)(OOP,Object?Oriented?Programming)

面向?qū)ο笃鹪幢尘?/span>

?

面向?qū)ο笫窃诮Y(jié) ==構(gòu)化設(shè)計(jì)方法== 出現(xiàn)了很多問題之后 才應(yīng)運(yùn)而生的。

==結(jié)構(gòu)化設(shè)計(jì)方法==求解問題的基本策略是從「功能」的角度審視問題! 也就是 解決“做什么 怎么做 ?從行為的角度出發(fā)!

==結(jié)構(gòu)化設(shè)計(jì)方法==將應(yīng)用程序看成實(shí)現(xiàn)某些特定任務(wù)的功能模塊,在這個(gè)應(yīng)用程序中的每一個(gè)模塊,都是實(shí)現(xiàn)應(yīng)用程序某項(xiàng)具體操作的底層功能和具體的操作過程! 如果說應(yīng)用程序系統(tǒng)比較小那么還好,如果是復(fù)雜的應(yīng)用系統(tǒng) 那么這種做法顯然是有弱點(diǎn)的,如下:

  1. 「審視問題的視角」

    結(jié)構(gòu)化設(shè)計(jì)方法所采用的設(shè)計(jì)思路是以==功能==為目標(biāo)來設(shè)計(jì)構(gòu)造應(yīng)用系統(tǒng),也就是行為, 比如說: 要做一個(gè)企業(yè)站系統(tǒng),功能有發(fā)布文章、顯示文章、添加文章、這些都是行為功能, ==但行為是不穩(wěn)定的!== 因?yàn)檫@些每一樣功能所實(shí)現(xiàn)的過程有很多種 并且還有其他的功能 這些是不能確定的!

    通俗點(diǎn)說就是:確定的功能、確定模塊、以及每個(gè)模塊算法和編寫具體的代碼就寫在一堆,或?qū)懺谝粋€(gè)函數(shù)中 直接使用! 初學(xué)者就習(xí)慣這樣干!

    ==結(jié)構(gòu)化設(shè)計(jì)方法==設(shè)計(jì)建立在不穩(wěn)定的操作之上,使得應(yīng)用程序的日后維護(hù)和擴(kuò)展相當(dāng)困難,甚至一個(gè)微小的變動(dòng),都會(huì)波及到整個(gè)系統(tǒng), 所以這就是誕生面向?qū)ο缶幊痰氖滓?/p>

  2. 「抽象級(jí)別」

    好的抽象策略可以控制問題的復(fù)雜程度,增強(qiáng)系統(tǒng)的通用性和可擴(kuò)展性

    抽象主要分: ==過程抽象==和==數(shù)據(jù)抽象==

    ==結(jié)構(gòu)化設(shè)計(jì)方法==應(yīng)用的是「過程抽象」 就是將問題中具有明確功能定義的操作代碼抽取出來 直接寫上 并看成一個(gè)整體

    過程抽象級(jí)別對于軟件系統(tǒng)結(jié)構(gòu)的設(shè)計(jì)顯得有些武斷,并且穩(wěn)定性差

    一旦某個(gè)表示方式發(fā)生了變化,就有可能牽扯到已有系統(tǒng)的很多部分。

    ==數(shù)據(jù)抽象==是,將描述主體[「客體」]的屬性和行為綁定在一起,實(shí)現(xiàn)統(tǒng)一的抽象,從而達(dá)到對現(xiàn)實(shí)世界主體對象的真正模擬。

  3. 「封裝的體現(xiàn)」

    ==結(jié)構(gòu)化設(shè)計(jì)方法==沒有做到客觀事物主體的整體封裝,只是封裝了各種功能模塊,就從代碼書寫的角度來將, 比如你寫了很多功能獨(dú)立的函數(shù)一樣, 或者說就把一些代碼裸露的寫在一個(gè)頁面上一行一行的執(zhí)行下來!

    而每個(gè)功能模塊又有可能操作到?jīng)]有保護(hù)能力主體事物代碼, 也就是說其他的功能代碼的 屬性變量 或者執(zhí)行流程被 實(shí)施操作覆蓋等等!!

    并且==結(jié)構(gòu)化設(shè)計(jì)方法==是把描述屬性的數(shù)據(jù)與行為被分割開的,

    一旦某個(gè)主體事物屬性的表達(dá)方式發(fā)生了變化,或某個(gè)行為效果發(fā)生了改變,可能就是對整個(gè)系統(tǒng)產(chǎn)生巨大影響, 也就是改一個(gè)地方其他很多地方都需要改動(dòng)的原因

    「面向?qū)ο蟆?/strong>就把封裝體現(xiàn)得很好,把該邏輯單元負(fù)責(zé)將所描述的屬性隱藏起來,外界對主體事物內(nèi)部屬性的所有訪問只能通過提供的用戶接口來實(shí)現(xiàn)

    這樣做既可以實(shí)現(xiàn)對主體對象屬性的保護(hù)作用,又可以提高軟件系統(tǒng)的可維護(hù)性。

    只要用戶接口不改變,任何封裝體內(nèi)部的改變都不會(huì)對軟件系統(tǒng)的其他部分造成影響!

  4. 「可重用性」

    ==重用性==是衡量一個(gè)軟件產(chǎn)品成功與否的重要標(biāo)志!

    然而,==結(jié)構(gòu)化程序設(shè)計(jì)方法==的基本單位是模塊,每個(gè)模塊只是實(shí)現(xiàn)特定功能的過程描述, 因此,它的可重用單位只能是模塊。

    所以在軟件開發(fā)的時(shí)候必須要考慮代碼的==重用性==是必然也是必須的!!

    例如,在PHP語言編寫程序時(shí)使 寫一些標(biāo)準(zhǔn)函數(shù)或者自定義函數(shù), 但對于今天的軟件開發(fā)來說,這樣的重用力度顯得微不足道,而且當(dāng)參與操作的某些數(shù)據(jù)類型發(fā)生變化時(shí),就不能夠再使用那些函數(shù)了 ?因?yàn)椴粔蜢`活

    因此,渴望更大力度的可重用構(gòu)件是如今應(yīng)用領(lǐng)域?qū)浖_發(fā)提出的新需求,

    這些弱點(diǎn)驅(qū)使人們尋求一種新的程序設(shè)計(jì)方法, 來適應(yīng)現(xiàn)代社會(huì)對軟件開發(fā)的更高要求, 因此==面向?qū)ο?=由此誕生了!

?

面向?qū)ο?和 基于對象的區(qū)別

?

很多人在這個(gè)問題上是分不清楚的,甚至也可以說是他們已經(jīng)是混淆概念

?

==面向?qū)ο?= 必然有三大特點(diǎn)(封裝,繼承,多態(tài))

==基于對象== 是使用對象, 就是無法利用現(xiàn)有的對象產(chǎn)生新的對象類型,繼而產(chǎn)生新的對象,也就是說基于對象沒有繼承的特點(diǎn)!

而且 “多態(tài)”表示為父對象的子對象實(shí)例,沒有了繼承的概念也就無從談?wù)摗岸鄳B(tài)”。

所以當(dāng)你判斷一個(gè)新的技術(shù)是否是面向?qū)ο蟮臅r(shí)候,通常可以使用后兩個(gè)特性來加以判斷,也就是 ==繼承==和==多態(tài)==

“面向?qū)ο蟆焙汀盎趯ο蟆倍紝?shí)現(xiàn)了“封裝”的概念,但是面向?qū)ο髮?shí)現(xiàn)了“繼承和多態(tài)”,而“基于對象”沒有實(shí)現(xiàn)這些

面向?qū)ο?和 面向過程

?

==面向過程==就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了!

==面向?qū)ο?=是把構(gòu)成問題事務(wù)分解成各個(gè)方法行為,建立對象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問題的步驟中的行為。

?

面向?qū)ο蟮娜筇匦耘c五大原則

三大特性

1、「封裝」隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對外提供公共訪問方式,將變化隔離,便于使用,提高復(fù)用性和安全性。 2、「繼承」提高代碼復(fù)用性;繼承是多態(tài)的前提。 3、「多態(tài)」父類 或 接口定義的引用變量可以指向子類或具體實(shí)現(xiàn)類的實(shí)例對象。提高了程序的拓展性

五大原則

1、==單一功能原則==SRP (Single Responsibility Principle) 類的功能要單一,不能包羅萬象,跟雜貨鋪似的

2、==開放封閉原則==OCP(Open-Close Principle)

開放封閉原則主要體現(xiàn)在兩個(gè)方面:

1、對擴(kuò)展開放,意味著有新的需求或變化時(shí),可以對現(xiàn)有代碼進(jìn)行擴(kuò)展,以適應(yīng)新的情況。

2、對修改封閉,意味著類一旦設(shè)計(jì)完成,就可以獨(dú)立完成其工作,而不要對其進(jìn)行任何嘗試的修改。

也就是說一個(gè)模塊對于拓展是開放的,對于修改是封閉的,想要增加功能熱烈歡迎,想要修改,哼,一萬個(gè)不樂意。

3、==里氏替換原則==LSP(the Liskov Substitution Principle LSP) 子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。

子類可以實(shí)現(xiàn)父類的抽象方法,但是不能覆蓋父類的非抽象方法。

子類中可以增加自己特有的方法。

當(dāng)子類覆蓋或?qū)崿F(xiàn)父類的方法時(shí),方法的前置條件(即方法的形參)要比父類方法的輸入?yún)?shù)更寬松。

4、==依賴反轉(zhuǎn)原則==DIP(the Dependency Inversion Principle DIP) 高層次的模塊不應(yīng)該依賴于低層次的模塊,他們都應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于具體實(shí)現(xiàn),具體實(shí)現(xiàn)應(yīng)該依賴于抽象。

聽起來更像是“針對接口編程,而不是針對實(shí)現(xiàn)編程”

?

**問題由來:**類A直接依賴類B,假如要將類A改為依賴類C,則必須通過修改類A的代碼來達(dá)成。這種場景下,類A一般是高層模塊,負(fù)責(zé)復(fù)雜的業(yè)務(wù)邏輯;類B和類C是低層模塊,負(fù)責(zé)基本的原子操作;假如修改類A,會(huì)給程序帶來不必要的風(fēng)險(xiǎn)。

「解決方案:」 將類A修改為依賴接口I,類B和類C各自實(shí)現(xiàn)接口I,類A通過接口I間接與類B或者類C發(fā)生聯(lián)系,則會(huì)大大降低修改類A的幾率。

?

在java、php中,抽象指的是接口或者抽象類,細(xì)節(jié)就是具體的實(shí)現(xiàn)類,使用接口或者抽象類的目的是==制定好規(guī)范和契約==,而不去涉及任何具體的操作,把展現(xiàn)細(xì)節(jié)的任務(wù)交給他們的實(shí)現(xiàn)類去完成。

依賴倒置原則的核心思想是「面向接口編程」

5、==接口分離原則==ISP(the Interface Segregation Principle ISP)

接口隔離原則的含義是:建立單一接口,不要建立龐大臃腫的接口,盡量細(xì)化接口,接口中的方法盡量少。

為什么有人說JavaScript是基于對象的語言?

JavaScript不是面向?qū)ο蟮恼Z言, 并且上面我也闡述了面向?qū)ο?和 基于對象的區(qū)別,

「因?yàn)镴avaScript沒有繼承的概念,進(jìn)而也沒有多態(tài)的概念,缺少了繼承和多態(tài)的特性,所以我們就可以判定JavaScript就只是個(gè)基于對象的語言」

簡單地講,“面向?qū)ο缶褪前熏F(xiàn)實(shí)中的事物抽象化”

面向?qū)ο蠓椒ㄊ且环N運(yùn)用對象、類、封裝、繼承、多態(tài)和消息等概念來構(gòu)造、測試、重構(gòu)軟件的方法。

簡言之,面向?qū)ο缶褪敲嫦蚴虑楸旧恚嫦驅(qū)ο蟮姆治鲞^程就是認(rèn)識(shí)客觀世界的過程。



極客小俊

大家的支持就是我堅(jiān)持下去的動(dòng)力!

在這里插入圖片描述


到底JavaScript算不算面向?qū)ο笳Z言?的評(píng)論 (共 條)

分享到微博請遵守國家法律
北流市| 方城县| 肃南| 通海县| 呼伦贝尔市| 绥江县| 盱眙县| 翼城县| 深泽县| 通城县| 绥中县| 正宁县| 满城县| 甘洛县| 观塘区| 台中县| 天祝| 隆化县| 阳东县| 东宁县| 三门峡市| 正定县| 阳曲县| 石门县| 寻甸| 手游| 吴堡县| 渭源县| 英吉沙县| 越西县| 梅河口市| 淮南市| 霍城县| 罗江县| 阳山县| 朝阳市| 余江县| 宁明县| 巴彦淖尔市| 成都市| 芷江|