好吧,又是很久沒寫東西了!
前兩天問乙個技術人說物件導向是什麼,他打趣說就是面對著我物件(男朋友)。。。囧了一下!呵呵,今天恰好看到《編寫高質量**》的物件導向程式設計。記錄之!
首先給乙個**本的例子:
//定義**本1
var phonebook = [,,
//定義**本2
var phonebook2 = [,,
//查詢**
function gettel(ophonebook,oname)}}
//新增記錄
……//刪除記錄
……//從**本中查詢「niaoren」的**
var str = gettel(phonebook,"niaoren");
alert(str);
//在**本中新增niaoren的**
……//在**本中刪除niaoren的**
……//在**本2中查詢niaoren的記錄
……這種程式設計方式把程式分為「資料」和"處理函式"兩部分,程式以「處理函式」為核心,如果要執行什麼函式,就將「資料」傳給相應的「處理函式」,返回我們需要的結果,這種程式設計方式就是面向過程程式設計
面向過程的的思路很好上手,但是它存在三方面的問題:
1.資料和處理函式沒有直接的關聯,在執行操作的時候,我們不但要選擇相應的處理函式,還要自己準備處理函式需要的資料,也就是說我們在執行操作是要同時關注處理函式和資料。
2.資料和處理函式都暴露在同一作用域內,沒有私有和公有的概念,整個程式中所有的資料和處理函式都可以相互訪問,在開發階段也許開發速度會很快,但是到了開發後期和維護階段,由於整個程式耦合的非常緊,任何乙個處理函式和資料都有可能關聯到其他的地方,容易牽一髮而動全身,從而加大了修改難度。
3.面向過程的思維方式是典型的計算機思維方式--輸入資料飛處理器,處理器內部執行運算,處理器返回結果。而實際生活中,我們的思路卻不是這樣的--實際生活中所有的東西都是有狀態有動作的。這用物件導向過程思維來描述書很難做到的。因為面向過程的思維方式是在描述乙個個「動作」,有動作的起點(初始資料),有動作的過程(初始資料傳給處理函式進行執行),有動作的終點(處理函式返回處理結果),而客觀世界存在的卻是乙個個「物件」,物件有狀態有動作,物件本身只是乙個客觀的存在,沒有起點沒有終點。能用面向過程思維描述的只能是物件的動作。
接下來,我們說物件導向程式設計,
什麼是物件導向程式設計呢?物件導向程式設計就是逃開計算機思維,使生活中的思維進行程式設計的程式設計方式。面向過程的思維就是描述乙個個「動作」,而面相物件思維對映到程式中--如果你使用的程式語言支援物件導向,在程式中我們管「物件」叫做「物件」,物件由兩部分組成:「屬性」和「行為」,對應客觀世界中的物件的「狀態」和「動作」。用面向過程的方式來描述給大家。
面相過程方式程式設計
var name = "adang";
var state = "awake";
var say = function(oname)
var sleep = function(ostate)
say(name);
sleep(state);
首先呼叫物件adang,然後呼叫函式說出描述出adang說,adang睡覺。
屬性本質其實是變數,也就是面向過程中的資料,而行為的本質其實是函式,也就是面向過程中處理的函式。不用的是,物件導向講資料和處理函式定義到了物件的內部,作為這個物件的屬性和行為存在,在物件外部,屬性和行為可以用物件的屬性和物件的行為來呼叫,從而讓程式有了按真實世界的思維方式經行描述的能力。在物件內部,物件的屬性和行為通過this關鍵字(或者其他的關鍵字)關聯起來,例如say這個行為在呼叫name屬性的時候就可以使用this.name來呼叫自己物件的屬性。
面向過程程式設計所有的資料和處理函式都是公有的,整個程式設計的思維就是定義資料,定義處理函式,然後將資料傳給處理函式進行處理,處理函式之間也可以相互呼叫,資料和處理函式緊密耦合。面相物件程式設計的思維過程是定義乙個個物件,物件有自己的屬性和行為,因為屬性和行為都是從屬於物件的,於是有了「物件內」和「物件外」的概念,整個程式可以是由一堆物件組成,物件與物件之間可能有會通訊,為了實現這種通訊,物件會將自己的部分屬性和行為設計成公有,暴露出來成為通訊的藉口。物件和物件之間的通訊都是建立在介面的基礎上的。當然我們可以將物件所有的屬性和行為都設為公有的,全部都作為介面,但介面越多,會讓物件之間耦合的越緊密,增加維護的難度。所以一般情況下我們都會盡量將物件的屬性和方法設為私有,只要將必要的屬性設為公有。但物件的公有屬性和公有行為越少,整個程式的擴充套件性就會越差,所以我們在設計公有和私有的時候需要權衡一下。在不影響擴充套件性的前提下,盡量將屬性和行為設為私有。(未完待續)
web前端開發修煉之道 物件導向程式設計 二
好吧,還是先說一些p話,昨天說好這兩天的 面試是下午四五六點的。結果今天早上10點就給我打來 表示還準備早上準備一下的,畢竟有一段時間沒搞頁面了。面試完之後問結果怎麼樣的時候,那邊說如果我是廣州本地的就直接給offer了。這,武漢的孩子傷不起呀。可是我真的想去廣州。好,p話結束。面向過程程式設計所有...
web 前端修煉之道
1.塊級元素和行內元素的區別 塊級元素即使設定了寬度,仍然是獨佔一行的,塊級元素可以設定margin和padding屬性。行內元素的margin和padding屬性只有水平邊距,沒有豎直邊距。豎直方向的padding雖然增大了行內元素的面積,但並沒有和相鄰元素拉開距離。2.display inlin...
Web前端開發修煉之道 學習筆記一
1 前期的構思很重要,是乙個先慢後快的過程 2 制定規範 3 團隊的分工與合作 2.1 語義化標籤,那如何評判?2.2 語義化的標題和內容模組 html部分 更多 段落一的內容根據瀏覽器的預設樣式 段落二的內容 css部分 title title h2 p strong2.3 語義化的表單模組 ht...