買了書
也看了書
看不懂
何謂封裝、多型、抽象
能否舉例說明一下
謝謝
目前只看懂何謂繼承
封裝的話,它基本上是代表class之間的依賴性要降到最低,如此一來萬一那些程式碼被更動,就不會影響其它不相干的class。
用國王、軍官、士兵來做比喻:
國王::attack()
{
軍官->遠遠的打() ;
}
軍官::遠遠的打()
{
士兵->裝小子彈()
士兵->發射()
士兵->清槍膛()
}
以上是處於只有來福槍可以用的時代
接下來如果大砲被發明的話
國王::attack()
{
軍官->遠遠的打() ;
}
軍官::遠遠的打()
{
士兵->裝大砲彈()
士兵->發射()
士兵->清砲管()
}
所以,士兵的行為明明被改變了,卻沒有影響到國王攻擊的命令。因為國王只會跟軍官溝通,它並不會直接地命令士兵,這大概就是封裝的精神。
rgly wrote:
我不是大師,我也不敢...(恕刪)
我自己看書
看了好久
認為封裝是這樣
但不知對不對
按紐是個物件
因為它已經經過封裝而成的物件
按紐可以改變一些屬性
但無法改變按紐本身的程式碼
這就是封裝的特性
不知這樣說對不對
麻煩解說
謝謝
pinget9 wrote:
屬性是什麼東西?
屬性例如:
按紐的顏色
顏色就是屬性
看來rgly大大可能跟我一樣本身是從C或C++學的,所以對於屬性這種東西會不熟...或許換個說法會更快,就是class裡的資料成員餔。類似下面這種感覺,只是在VB.net的那些按鈕控件都已經包裝起來,所以就是所謂的按鈕.color,所以更具體而言個人認為說是屬性也沒錯。
class 按鈕
{
int color;
}
--------------------------------------------------------------------
其實封裝多型抽象沒啥難的,算是簡單的概念,要如何實踐規劃才超難的囧。這種情況你只要多寫程式,多看程式就會有感覺了。
個人認為封裝就是把一些不必要公開的過程包裝成class或是struct的感覺,關於這點其實rgly大大就講過了,在此不再贅述。
再來是多型,其實多型也算是個很簡單的概念,比如這樣好了,我想設計個函數可以幫我算出圓面積,但我有可能要丟進去的半徑是1,有可能是1.5,有可能是0.XXXXX,遇到這種情況,以往沒有多型的話,應該會做出這種下面這樣。
int GetArea_int(int radius)
float GetArea_float(float radius)
呼叫時,就會要呼叫:
GetArea_int(1);
GetArea_float(1.0f);
但有了多型就可以變成這樣:
int GetArea(int radius)
float GetArea(float radius)
呼叫時,就直接:
GetArea(1);
GetArea(1.0f);
好處就是會根據你呼叫函數時,傳入的參數來判斷你是呼叫哪個函式,這就是多型。當然傳入參數的數量也可以不一樣囉,也可以多加計算直徑呀,之類的。
--------------------------------------------------------------------
至於虛擬等到你先把以上兩個都搞定再說,不然overload和override傻傻搞不清楚就慘了,虛擬也一直是不少人反對的東西,他有時反而使的程式更複雜,前陣子在研究這兩個的時候,看到有不少人相當反對在引擎中反覆使用繼承和virtual,關於這點個人覺得見仁見智,不過個人也是覺得與其搞這些不如好好學好設計模式才是。
以上,還是國三學生的不負責任解說,錯的機率很大,有錯還請指教。
pinget9 wrote:
個人認為封裝就是把一...(恕刪)
總覺得你跟我有點像XD不過跟你說,當你對於理論感到不確定,就去實踐吧!從實踐中,再回頭看一看,我想你會有感覺的。封裝個人的想法中也是物件導向中的一步,除了把不需要公開的過程藏起來以外,更可以有把它包裝成一個系統的感覺,就好像一個人的手和腳,這些都是器官,最後都成為一個人的個體中的一部份,你會叫一個人去拿東西,可是你不會叫一隻手幫你拿東西,這中間的過程就是牽涉到物件,但物件其實就是在封裝概念下所提出的產物,就像你的手部都把自己該有的骨頭跟血管管理好了,你手部的神經細胞不會去跟腦部的神經細胞混在一起吧?就是類似這種感覺囉
我想多看文章,多寫小程式你就會有概念的。
可愛的卡比 wrote:
int GetArea(int radius)
float GetArea(float radius)
這東西被叫做function overloading,是多型的其中一種手法,屬於靜態連結(static-binding)
動態連結(dynamic-binding)我不確定在vb中有沒有,不過在c++中倒是很常用
多型簡單的說就是把一些明明不同的東西,卻讓它們有共通的介面。
另外,物件導向的東西我是覺的要等程式經驗多一點之後再學會比較好。不然會很難了解到書上所教的概念的用途。如果是還是學生的話,建議去找老師問會比較好,因為這些東西沒有說很好教。不用個幾百字加上程式範例是很難讓人了解的。
還有,居然有人國三就在寫程式了....,這讓我蠻意外的,想當年我第一次寫hello world是讀大一的時候。
內文搜尋

X