第21講類
快樂喬巴的部落格
類是物件導向程式設計的核心部分,在邏輯上它是一些相依的功能(或稱方法)和資料的組合體。
說到類,我們不得不談一下物件導向,物件導向(object oriented),在程式設計中這是乙個非常重要的概念,如今很多人去應聘程式設計師的時候都會被問到乙個問題,「談談你對物件導向的理解」,要闡述這個問題可以從很多個角度很多的方法來闡述。在這裡我提供乙個角度或者說乙個方法,就是可以從oo(object oriented的縮寫)的特點來入手,物件導向最主要的幾個特點就是繼承,封裝,多型。
繼承簡而言之就是復用,使我們寫的**可以重複使用。
封裝就是隱藏細節。我們不必去關心乙個類或者元件它是如何實現其功能的,我們就只要知道怎麼樣去使用它就行了,拿過來用就好比銀行的取款機,我們去取錢,取款機上就那麼幾個按鈕,我們只要按照它的提示進行操作就能把錢取出來了,至於說這個錢是怎麼取出來的它實現了多少複雜的操作,這個不是我們所要關心的問題。封裝,隱藏了實現的細節。
多型,是指不同型別的物件可以對相同的機率做出適當的不同的響應能力,多型豐富了物件的內容,擴大了物件的適應性,改變了物件單一繼承的關係。好比說,馬會跑步袋鼠也會跑步鴕鳥呢也會跑步,它們都有跑步這個動作,但是它們跑步完全不同,馬是四條腿在跑,袋鼠是兩條腿在跑而且是在跳,而鴕鳥也是兩條腿在跑,它跟袋鼠有很大的不同,這個就是多型。對於同乙個動作,它所呈現的是多種不同的形態。
下面我們來談一下,為什麼要使用物件導向的程式設計方法?我們知道工業的生產是從手工作坊式的小規模生產演化到現在的大規模的現代化的機器生產,程式設計也一樣,它也是朝著這個方向進行演化,最早的程式設計是使用的面向過程的程式設計方法,當然一直到現在很多人還是在使用面向過程的方法,只是它是基於物件導向的開發工具之上。當然這裡不是說面向過程就一定不好,物件導向和面向過程有它各自的優缺點,也有它們不同的適用範圍。當年求伯君單槍匹馬開發wps,他成為了中國程式設計師第一人,在那個時代,也被封為英雄,但是隨著it業的飛速發展,新技術的層出不窮,現在乙個人去開發這樣乙個系統根本就是不可能的事。讓我們來看微軟的最新作業系統vista(當時是最新的,現在是windows 7),參與vista系統開發的核心工程師就9000名,歷時5年,**超過5千萬行。我們可以想象得到,個人的力量在這裡面會顯得多麼的渺小。
這裡我們用汽車的生產來做個比喻。汽車有成千上萬個零件組成,裡面小到螺釘大到發動機。裡面大部分的零件都是採購而來,或者承包給別的專業廠商進行加工,汽車製造廠商只會加工部分的核心部件,最後會把所有的這些部件包括採購而來的放到生產線上裝配,最後汽車就生產出來了。我們可以想象一下,如果汽車生產廠商連輪胎,螺釘甚至於玻璃都要自己生產,那他要建多少的廠房,耗費多少的人力物力,而且這也是不可能辦得到的。汽車產業之所以能夠成為乙個國家的工業的標誌,就是因為它可以帶動很多相關產業的發展。物件導向程式設計方法的出現,極大的提高了生產力,降低了編寫的難度,並使得程式設計師之間分工合作變得更加簡單。
物件導向給程式設計師帶來的好處,在visual studio視覺化程式設計介面裡得到了淋漓盡致的體現。比如說工具欄裡有很多的控制項,每個控制項它的本質上都是乙個類,我們不必關心它是怎麼寫出來的,而只是需要了解它的這些屬性,甚至說只需要了解幾個屬性就行了,並通過更改這些屬性以達到我們不同的要求。這些控制項就好比乙個個的汽車零件,我們只需要把這些汽車零件進行適當的組合,在生產線上進行裝配就可以得出我們的程式,當然**的邏輯部分還是需要我們自己去寫。
但是,正是由於這種開發方式的轉變,使得我們可以更加專注於程式邏輯的編寫。從而大大地提高了生產力。物件導向程式設計方法的出現使得分工協作成為可能,我們拿資料庫的多層開發來舉例。三層結構,四層結構甚至五層結構它的本質其實就是以物件導向的方法進行資料庫應用程式的開發。我們來看一下這張圖:
第一層是資料展示層,也就是我們所說的介面或者說前台。使用分層開發以後,進行資料展示層開發的程式設計師他不必知道怎麼去寫sql語句,怎麼樣去訪問資料庫等,這不是他需要關心的。編寫這一塊的程式設計師更加關心的是如何把介面做的更漂亮,讓使用者使用更順手。有一些人可能做美工做地很漂亮,這時候他就適合在這一層,而另為一些人可能程式寫的很棒,但是他的美工不是很好,做出來的東西不是很漂亮,這個時候他就適合在中間層或者資料庫層工作。
中間層又叫業務邏輯層,在這裡實現了業務邏輯,當然資料庫的訪問也是在這一層實現的。
最後一層是資料層,有些人可能很少寫程式,但是他對資料庫非常地了解。能設計出非常好的資料庫,儲存過程也寫的非常棒,這時候他就可以專注於資料庫的開發,而不用去理會**是如何寫出來的。
社會需要分工,程式設計師也是一樣,要求乙個人經常精通裡面所有的東西那是根本不可能的,在分工協作這一點上,印度就就做的比較好,在我們國家的一些中小型公司,老闆都喜歡的是十項全能的程式設計師,甚至於有的時候從分析到編碼到資料庫的設計到介面都是由乙個人來完成,人的精力是有限的,樣樣精通就意味著一樣都不精通。所以我們應該是對每個技術都有所了解,然後精通其中的一門。
正是由於物件導向技術的不斷的發展,使得我們可以只專注於一門技術而不必去樣樣精通,好,扯遠了(-_-!)。我們接著繼續往下講。
類和物件。
什麼是類?什麼是物件?類可以描述為對現實事物的乙個抽象,或者說它是乙個在我們腦子裡面的乙個定義。打個比方,說到人我們馬上可以聯想到兩個手兩個腳,然後有鼻子有眼睛這個就是人。這些特徵就是在我們腦子裡形成的對人的抽象。比如說2公尺24的姚明跟乙個1公尺的小孩站在一起,你會馬上聯想到這兩個都是人,你不可能認為那個小孩是猴子。雖然說姚明和那個小孩的身高相差非常遠,但是他們都符合你腦袋裡面所定義的那個人的形象,所以你會認為他們都是人。所以類其實是一種型別的定義,而什麼是物件的呢?物件就是實實在在的東西,比如說姚明站在那裡,他就是乙個物件,他實實在在的存在,小孩也是一樣,他也是乙個物件,他實實在在的存在於那裡。
好,我們來寫一段**來理解:
**中person就是類,baby和yaomin他們都是物件,baby是乙個物件,yaomin是另外乙個物件,他們都是person類的物件。物件也叫做類的例項,也就是說乙個類被new了以後也就是例項化以後它就成為了物件。person類中的name和height叫做成員變數,eat叫做成員方法或者說是類的方法,類的定義使用class關鍵字,當然可以在前面加上修飾符。修飾符我們會在後面的課程中專門用一章來講,類的例項化使用**中person baby = new person(); 這種格式,首先是類名,然後是物件名,接著就是new乙個person加上2個括號就可以行了,當然,有的時候在類名的括號裡面會有一些引數,這個我們後面再講。在c#中,類可以包括許多中不同的成員,它可以是變數,方法,屬性,常數,索引器,事件和運算子。c#是乙個完全物件導向的程式語言,甚至於它的main函式也就是入口函式也必須宣告在乙個類裡面,在這物件導向的支援上c#無疑是最強大的。
這節課我們對物件導向和類進行了乙個概述,好,先講到這裡。
由快樂喬巴聽課摘寫筆記
C 教學第19講字元1 學習筆記
第19講字元1 快樂喬巴的部落格 現在我們來講講電腦螢幕上的文字,螢幕上的字是由乙個個畫素點組成的。每乙個字元用乙個畫素點拼接出來,這些畫素點組成影象變成了我們的文字,我們可以用windows自帶的放大鏡來看 在左下角的開始 程式 附件 輔助工具中找到 然後放大倍數可以看到文字是由畫素點組成的,如圖...
C 教學第20講字元2 學習筆記
第20講字元2 快樂喬巴的部落格 在上一節課中我們已經講過,在.net framework中字元總是表示成16位的unicode 值,這樣就簡化了我們的開發。在以前的開發中,有些程式語言它英文所占用的是乙個位元組,而中文是2個位元組,在c 中不管是英文還是中文它統一都是占用2個位元組,這樣就使得我們...
C 教學第9講事件1 學習筆記
第9講 事件1 快樂喬巴的部落格 事件是類在發生其關注的事情時來提供通知的一種方式。例如,封裝使用者介面控制項的類可以定義乙個在使用者單擊該控制項時發生的事件。控制項類不關心單擊按鈕時發生了什麼,但它需要告知派生類單擊事件已發生。然後,派生類可選擇如何響應。說到事件,就得談談2個角色 事件發行者 p...