討論區快速選單
知識庫快速選單
軟體開發過程中有哪些資安漏洞? 網路投保旅行平安險 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
請問以下的狀況,你會如何設計
更改我的閱讀文章字型大小
作者 : nothingtodo(沒事)
[ 貼文 47 | 人氣 8436 | 評價 40 | 評價/貼文 0.85 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/4/27 下午 06:48:49
以下有兩個類別 CRectangleA 和 CRectangleB,其中不同的是
DrawRectangle 的寫法,一個是用傳參數,一個是直接用 member
的值,應該用哪一個方式比較理想呢? 還是其實都一樣。

class CRectangleA {
  private:
    int left, top, width, height;


    void DrawRectangle(int x, int y, int w, int h) {
    
     //依據 x, y, w, h 來畫矩形
     ...
    }
    
  public:
    void Draw(void) {
     ...
     DrawRectangle(x, y, w, h);
     ...
    }

};

class CRectangleB {
  private:
    int left, top, width, height;


    void DrawRectangle(void) {

     //依據 left, top, width, height 來畫矩形
     ...
    }
    
  public:
    void Draw(void) {
     ...
     DrawRectangle();
     ...
    }

};
作者 : kaber(阿仁)
[ 貼文 52 | 人氣 22 | 評價 50 | 評價/貼文 0.96 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/5/3 下午 04:19:55
>以下有兩個類別 CRectangleA 和 CRectangleB,其中不同的是
>DrawRectangle 的寫法,一個是用傳參數,一個是直接用 member
>的值,應該用哪一個方式比較理想呢? 還是其實都一樣。

CRectangleA的物件,如果要畫的話,必須接受參數,也就是說,它是以外界的
座標資料來畫矩形,至於物件本身的座標資料,就沒用到了………
CRectangleB的物件,如果要畫的話,就是以物件本身所擁有的座標資料來畫矩
形,在繪圖函式的介面上,不接受任何的參數………

我的感覺是……這兩個類別都很理想,但是,它們可是大大的不同哦……^_^

首先是CRectangleA,它是“接受座標來畫矩形”,站在呼叫此函式的立場,呼叫
者就像是一個“委託者”,而CRectangleA的物件,就是“接受委託然後畫矩形”
,讓這樣的一個物件儲存座標是沒有什意義在的,因為既然是“接受委託”,那麼
,此物件就是一種“行為化”的物件,而行為模式為“接受座標,畫出矩形”……

再來是CRectangleB,它是“根據自身所存的座標來畫矩形”站在呼叫此函式的立
場,就像呼叫者是發出命令說“畫出你自己吧”的情形,而CRectangleB的物件,
就好比自己有責任一樣,而這個責任就是“畫出自己”,這是一種物件對自己負責
的情況,再說,物件也應該擁有“表現自我”這種對自己負責的能力呀………

以上是我的一點見解…………^_^
作者 : kaber(阿仁)
[ 貼文 52 | 人氣 22 | 評價 50 | 評價/貼文 0.96 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/5/3 下午 04:33:49
對了,我忘了說………

你的程式中,CRectangleA中的成員函式Draw,將會呼叫接受參數並且直接以參數
畫矩形的成員函式DrawRectangle。在物件使用者的立場,我呼叫了Draw,但
是Draw會直接呼叫DrawRectangle,但是,這時並沒有接受參數的時機,所以,
程式就當掉啦……

另一方面,直接呼叫DrawRectangle的話,Draw這個成員函式就完完全全是多餘
的囉,因為DrawRectangle已經畫出矩形了嘛……

這是我對你的程式的一些看法………
作者 : nothingtodo(沒事)
[ 貼文 47 | 人氣 8436 | 評價 40 | 評價/貼文 0.85 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/5/6 下午 09:59:22

>對了,我忘了說………
>
>你的程式中,CRectangleA中的成員函式Draw,將會呼叫接受參數並且直接以參數
>畫矩形的成員函式DrawRectangle。在物件使用者的立場,我呼叫了Draw,但
>是Draw會直接呼叫DrawRectangle,但是,這時並沒有接受參數的時機,所以,
>程式就當掉啦……
>
>另一方面,直接呼叫DrawRectangle的話,Draw這個成員函式就完完全全是多餘
>的囉,因為DrawRectangle已經畫出矩形了嘛……
>
>這是我對你的程式的一些看法………


不好意思 CRectangleA 有一點寫錯,應該是

class CRectangleA {
private:
``int left, top, width, height;
``void DrawRectangle(int x, int y, int w, int h) {
````//依據 x, y, w, h 來畫矩形
``}

public:
``void Draw(void) {
````DrawRectangle(left, top, width, height);
``}
};

class CRectangleB {
private:
``int left, top, width, height;
``void DrawRectangle(void) {
````//依據 left, top, width, height 來畫矩形
``}

public:
``void Draw(void) {
````DrawRectangle();
``}
};

因為縮排沒有效果,所以可能看起來不太清楚,我再用`代替空白來做縮排,
看起來比較清楚一點。

我很同意你「物件自己有責任一樣,而這個責任就是“畫出自己”」
所以兩個類別在 Draw() 的時候,都不用傳參數。
只是我比較疑惑的是屬於 private 的 DrawRectangle(),在設計時
到底應不應該傳參數。
作者 : kaber(阿仁)
[ 貼文 52 | 人氣 22 | 評價 50 | 評價/貼文 0.96 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/5/10 下午 01:40:11
比較起來…CRectangleA和CRectangleB和畫矩形的結果是一樣的,但真要說起來
的話,我是認為CRectangleB讓我覺得比較好……

因為如果能傳參數的話,意思就是說,除了自己之外,也能接受外來的數值,雖然
在你的程式中,如果要使用物件的話,是沒有機會讓物件public成員函式接受參數
啦……

既然結果是一樣的,就不如把它設計的嚴謹些,將來在維護時也比較好維護……
 板主 : Clark
 > 物件導向程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 物件導向程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
物件導向程式設計
1 Arthur 180 
2 藍色LED 150 
3 長長 100 
4 Linkin 100 
5 love seeker 100 
6 Raymond 90 
7 Nets 80 
8 nop 70 
9 Huah 70 
10 矇矇 60 
物件導向程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125