首先來(lái)解釋一下什么是OOP: OOP: Object Oriented Programming,面向?qū)ο蟮某绦蛟O(shè)計(jì)。
所謂“對(duì)象”就是一個(gè)或一組數(shù)據(jù)以及處理這些數(shù)據(jù)的方法和過(guò)程的集合。面向?qū)ο蟮某绦蛟O(shè)計(jì)完全不同于傳統(tǒng)的面向過(guò)程程序設(shè)計(jì),它大大地降低了軟件開發(fā)的難度,使編程就像搭積木一樣簡(jiǎn)單,是當(dāng)今電腦編程的一股勢(shì)不可擋的潮流。面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。OOP 的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。
OOP 達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。OOP 主要有以下的概念和組件:
組件 - 數(shù)據(jù)和功能一起在運(yùn)行著的計(jì)算機(jī)程序中形成的單元,組件在 OOP 計(jì)算機(jī)程序中是模塊和結(jié)構(gòu)化的基礎(chǔ)。
抽象性 - 程序有能力忽略正在處理中信息的某些方面,即對(duì)信息主要方面關(guān)注的能力。
封裝 - 也叫做信息封裝:確保組件不會(huì)以不可預(yù)期的方式改變其它組件的內(nèi)部狀態(tài);只有在那些提供了內(nèi)部狀態(tài)改變方法的組件中,才可以訪問(wèn)其內(nèi)部狀態(tài)。每類組件都提供了一個(gè)與其它組件聯(lián)系的接口,并規(guī)定了其它組件進(jìn)行調(diào)用的方法。
多態(tài)性 - 組件的引用和類ji hui涉及到其它許多不同類型的組件,而且引用組件所產(chǎn)生的結(jié)果得依據(jù)實(shí)際調(diào)用的類型。
繼承性 - 允許在現(xiàn)存的組件基礎(chǔ)上創(chuàng)建子類組件,這統(tǒng)一并增強(qiáng)了多態(tài)性和封裝性。典型地來(lái)說(shuō)就是用類來(lái)對(duì)組件進(jìn)行分組,而且還可以定義新類為現(xiàn)存的類的擴(kuò)展,這樣就可以將類組織成樹形或網(wǎng)狀結(jié)構(gòu),這體現(xiàn)了動(dòng)作的通用性。
由于抽象性、封裝性、重用性以及便于使用等方面的原因,以組件為基礎(chǔ)的編程在腳本語(yǔ)言中已經(jīng)變得特別流行。Python 和 Ruby 是最近才出現(xiàn)的語(yǔ)言,在開發(fā)時(shí)完全采用了 OOP 的思想,而流行的 Perl 腳本語(yǔ)言從版本5開始也慢慢地加入了新的面向?qū)ο蟮墓δ芙M件。用組件代替“現(xiàn)實(shí)”上的實(shí)體成為 JavaScript(ECMAScript) 得以流行的原因,有論證表明對(duì)組件進(jìn)行適當(dāng)?shù)慕M合就可以在英特網(wǎng)上代替 HTML 和 XML 的文檔對(duì)象模型(DOM)。 解釋來(lái)源:http://baike.baidu.com/view/63596.htm
程序開發(fā)的這種思想非常好,讓我們web前端開發(fā)人員看到了希望,那做為一個(gè)WEB前端開發(fā)如何將這些思想進(jìn)行移植呢?插句話:“思想是好的,但現(xiàn)在卻是跨領(lǐng)域了我們不可能直接將其思想完美無(wú)缺地進(jìn)行移植”,我覺(jué)得值得說(shuō)一下:“一、WEB標(biāo)準(zhǔn)興起的時(shí)間不是很長(zhǎng),也沒(méi)有這方面的經(jīng)驗(yàn)供大家借鑒。二、CSS樣式和HTML不可能像程序那樣有封裝,組件化CSS樣式可以做,但也要根據(jù)實(shí)際情況進(jìn)行取舍,為什么?樣式組件化我個(gè)人認(rèn)為有其局限性,它適用于高擴(kuò)展性頁(yè)面,但這樣做對(duì)于開發(fā)人員來(lái)說(shuō)將是麻煩的,樣式表中的選擇器被無(wú)限的獨(dú)立化,無(wú)法做繼承,而HTML在調(diào)用選擇器時(shí)也會(huì)增加很多的選擇器,一旦后期更新過(guò)頻HTML結(jié)構(gòu)勢(shì)必要做大量調(diào)整,有違WEB標(biāo)準(zhǔn)思想中,只更新樣式不動(dòng)結(jié)構(gòu)!同時(shí)WEB標(biāo)準(zhǔn)也沒(méi)有抽象性這個(gè)概念,WEB標(biāo)準(zhǔn)還比較弱小……CSS并不是萬(wàn)能的也沒(méi)那么神化!WEB標(biāo)準(zhǔn)需要的是過(guò)程,用心去體會(huì)其思想,只看到其表面是不行的,明白它的思想和核心加以強(qiáng)化就已經(jīng)提升到了一個(gè)高度。
OOP思想移植到WEB標(biāo)準(zhǔn)中來(lái),不僅是思想,更多的我想應(yīng)該是現(xiàn)實(shí)與否的問(wèn)題,我們當(dāng)然要這種思想,但我們?cè)趺醋瞿??分解,轉(zhuǎn)化……分解:首先對(duì)OOP主要的思想的個(gè)特性進(jìn)行分解,樣式有組件化、繼承性,模塊化要結(jié)合HTML結(jié)構(gòu)來(lái)做!重用性當(dāng)然也要靠樣式來(lái)完成,定義最基礎(chǔ)的樣式,后邊再根據(jù)各模塊實(shí)際情況進(jìn)行,當(dāng)然是重用最基礎(chǔ)及普通共存的屬性,對(duì)于浮動(dòng)、寬度、背景之類的,后繼再加以擴(kuò)展定義與之前的基礎(chǔ)類選擇器配合使用就完成了新模塊了,列表就可以這樣進(jìn)行處理,我在2007年12月酷6網(wǎng)新版時(shí)視頻列表全是基于這種手法進(jìn)行處理!樣式組件是要根據(jù)實(shí)際情況進(jìn)行采納,不存在包含或繼承關(guān)系,這樣做就給結(jié)構(gòu)增加更多的選擇器來(lái)組合完成效果,也給樣式增加負(fù)擔(dān),樣式表會(huì)很大,也有一個(gè)好處就是選擇器不會(huì)有沖突,最多只是同樣式的屬性,后邊的會(huì)覆蓋前邊的同個(gè)屬性,但組織好樣式是會(huì)避免沖突的產(chǎn)生!
利用OOP思想進(jìn)行WEB標(biāo)準(zhǔn)開發(fā)會(huì)給整個(gè)開發(fā)以及維護(hù)帶來(lái)便捷,但目前還很有限,路還很長(zhǎng),也許再過(guò)幾年會(huì)有另外的技術(shù)來(lái)取帶!
新聞熱點(diǎn)
疑難解答