台灣最大程式設計社群網站
線上人數
1774
 
會員總數:241166
討論主題:186825
歡迎您免費加入會員
討論區列表 >> VB.NET >> Class裡面一定要有屬性或欄位嗎?
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Class裡面一定要有屬性或欄位嗎?
價值 : 50 QP  點閱數:620 回應數:46

樓主

city
初學者
30 24
592 153
發送站內信

請問各位前輩們:

先說一下為什麼我會這麼問...

先上個程式碼:



以上是一個[類別] 裡面包含一個[方法]
它滿足了物件導向的部分條件:
1.它寫在Class裡面
2.它是個共用的方法

若以[封裝]來看:
如果這個方法寫成Private 它就算是封裝了
(外界讀不到Class1裡面的CreatDirectory方法)

若以[繼承]來看:
它可以繼承 不過沒什麼必要

若以[多型]來說:
它似乎無法多型
不過若是把Shared拿掉 它似乎就可以多型了
不過也沒什麼必要
(以上若有錯誤請指正)



類別裡的方法 似乎是只存在一份
(不會因為有很多的物件 然後每個物件都有自己的方法)
(若有錯誤請指正)

這樣看來
如果要每個物件都有屬於自己的東西 看來也只有屬性或欄位了

也就是說:
如果要滿足物件導向的封裝 繼承 多型
類別裡面就"必須"要有屬性(或欄位)?



由以上的論述所產生的問題如下:

[問題一]
類別裡面一定要有屬性(或欄位)嗎?

[問題二]
類別裡面可以只有方法嗎?

[問題三]
大大們所寫的成千成百的Class裡面 "每一個"Class裡面都有欄位(或屬性)嗎?



PS.以上是個人的想法 若大大們覺得我的想法是錯誤的 也歡迎指正
謝謝

搜尋相關Tags的文章: [ Class ] , [ 屬性 ] , [ 欄位 ] ,
本篇文章發表於2017-11-12 12:10
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
31樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
#29
唉~~~~人家再說的東西你還是聽不下去。

我來回答你的問題好了

1.「個人覺得大大說的很好...」
我感覺不出來你覺得哪邊很好,原因繼續看下去。

===========================================================
2.[最後再由最上層或最外部的類別將所有的小型類別整合在一起變成一套系統]
這個大大可以簡單示範一下嗎? 謝謝
class -> class -> class ->class
這樣的範例夠嗎???還是我需要寫成樹狀的??
其實真的給你範例你也沒辦法正常搞清楚的。
要知道class的東西是什麼,它可以什麼都是什麼都不是。
重點在於你想要讓它是什麼。

========================================================
3.類別名稱:Class新增資料夾
只做一件事:新增一個資料夾
類別名稱是個動詞
這樣算是好類別 好設計嗎?

還是回來之前給你的那句話。
沒有什麼好跟不好,只有適合不適合。
而這些適不適合就得要靠經驗。
同一種寫法,再不同的領域。就會有可行跟不可行的做法。
============================================================
4.[類別提供這麼多種方式來讓你設計內容]
這麼多種方式指的是什麼方式?

各程式語言的應用方式百百種。
你希望全部列出來???根本對你沒用處。(話說我也不知道該怎麼列)
請先下手動作寫程式,累積經驗了,你才能知道適合的寫法是什麼。
師父只是帶入門,該如何出師還是要靠自已。

本篇文章回覆於2017-11-14 10:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
32樓
作者回應

city
檢舉此回應
To:浩瀚星空

#31
因為覺得#27的內容寫得很好 所以我說:個人覺得#27的內容很好...


個人也覺得大大很熱心 說的也蠻有道理的
可能是個人的悟性太差了...哈哈
本篇文章回覆於2017-11-14 10:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
33樓
回應

誰是誰
檢舉此回應
自己出題目給自己做啊,比方自己寫一個 "個人所得稅計算系統",這個絕對是個好教材。
本篇文章回覆於2017-11-14 14:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
34樓
作者回應

city
檢舉此回應
To:誰是誰

#33
哈哈 大大的建議蠻有趣的
我相信[個人所得稅計算系統]會是好的練習教材

不過:
1.需要先了解計算公式
2.已經有政府版本的軟體及線上版本
3.如果政府計算稅率的公式改了 程式就要重改
4.寫這專案應該也不用半年一年
5.就算寫好了 這程式一年頂多使用一次
...
...

重點是第5點..哈哈
本篇文章回覆於2017-11-14 17:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
35樓
回應

誰是誰
檢舉此回應
不想做,都有很多的理由。
寫程式,要捲起袖子做下去才會有所體會。
如果你永遠只寫幾百行的專案,是體會不了在幾萬行的專案裡面如何靠著物件導向的概念讓程式碼好懂好維護。

本篇文章回覆於2017-11-14 17:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
36樓
回應

羅伯斯
檢舉此回應
TO:#34
2.已經有政府版本的軟體及線上版本
 #33 只是提供你一個練習的題材,並不是真的要你開發一個"個人所得稅計算系統"拿去賣$
 何況政府已經提供了免費版本,這東西真的想賣$,應該也很難賣,

3.如果政府計算稅率的公式改了 程式就要重改
 這倒未必,只要先設計一個表單,讓使用者輸入課稅的級距稅率、相關的免稅額....等資料
 當做計算的參數使用,應該不需要每年打掉重新寫程式。


本篇文章回覆於2017-11-14 17:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
37樓
作者回應

city
檢舉此回應
To:誰是誰

#35
贊同大大說的 : )
本篇文章回覆於2017-11-14 18:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
38樓
作者回應

city
檢舉此回應
To:羅伯斯

#37
[誰是誰]大大的意思應該是說寫大一點的專案 而不是寫小專案
小專案比較難體會物件導向的精神

[個人所得稅計算系統]裡面應該有蠻多東西可以寫的
我也覺得[誰是誰]大大應該真的有寫過[個人所得稅計算系統]...
本篇文章回覆於2017-11-14 18:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
39樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實我個人倒是認為,先寫個行事曆出來吧。然後再將其延伸排課表。

不需要再來狗腿這些話。

誰說小專案就很難了解物件導向的。

光我上面說的行事曆,你就得了解日期跟時間的物件處理。
如果還要延伸到排班表,那就又得要開始處理塊狀結構跟資料庫相關物件。

現有的物件先學著使用。再去延伸自已要的物件。
這才是物件導向的重要精神。

一味的再這說「你說的很好」「大大說的不錯」「..............」等廢話。都是沒用的。
所得稅計算,說真的還真的不是很難。那只是數學的運算應用。
公式什麼的都是屁了啦~~~~~~隨便財政部都可以看到。還需要了解???(是需要了解也沒錯)

難不成你想要人家寫好程式碼的公式嗎??

講一堆理由還不動作。有用嗎??
你要知道,如果你還是有那麼多理由,你真的不適合做程式。
本篇文章回覆於2017-11-14 19:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
40樓
不錯的參考

練武功
檢舉此回應
小程式也可以寫得很"物件",我曾經在網路上看過利用繼承、複寫等方法來寫兩個數的加減乘除。
如果你沒看過這個例子,不妨可以試試。
輸入兩個數,然後點選加減乘除等按鈕後,用TextBox顯示結果,要用到繼承與覆寫。
本篇文章回覆於2017-11-14 19:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
41樓
作者回應

city
檢舉此回應
To:練武功

在書上有看過...是用4個RadioButton來切換加減乘除...用繼承+多型
本篇文章回覆於2017-11-14 20:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
42樓
回應

誰是誰
檢舉此回應
To 39樓:
倒不是說小專案不能練物件導向,我的意思是在大專案的情形下,會讓開發者痛的事情比較多,有痛比較容易讓初學者體會 "為什麼該這樣寫"。

本篇文章回覆於2017-11-14 22:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
43樓
回應

羅伯斯
檢舉此回應
這個主題大伙洋洋灑灑談了三個頁面(快要第四個頁面了)
總覺得樓主本身還是沒抓住方向,要學的是啥?要從何處開始?
以樓主目前的狀況,是有點程式基礎,並非是個完全沒接觸過的人
目前錯的就是未能掌握物件導向的特性,而以程式導向的觀點,看待物件導向
以至認為Class與Module好似差不多,彼此可以相互取代,這就錯了
現今的VB之所以還保留Module,是為了向下相容,其實它完全可以用Class取代
但Module絶對無法取代Class,因為Class可以繼承、多型,它有物件導向的特性,但Module沒有
(當然啦!以樓主寫Class的方式,用Module來取代,是可行的)

最後還是老話,建議樓主若真的想走物件導向這條路
就先把程式導向的觀念涼到一旁,從物件導向的基礎學起
有了正確的物件導向基礎觀念後,再來撰寫程式碼
不然樓主會很容易的走入死胡同,而處處碰壁


本篇文章回覆於2017-11-15 00:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
44樓
作者回應

city
檢舉此回應
To:浩瀚星空


先說一下我會說好的原因好了 以#27為例:

[物件導向講求的是用類別來設計專職專責的元件來處理某些事情, 每個小類別在運作時,可能需要一些資料或是需要和其它的類別實體進行配合, 這些可以用屬性或是方法參數來傳遞,最後再由最上層或最外部的類別將所有的小型類別整合在一起變成一套系統]

[你可以回頭仔細看看自己設計的類別中, 那一個你能講出他一項最主要的功能, 而且這個類別只負責這功能相關的程式,而且他的名稱讓人一目了然, 又接近自然語言的 那就是個好類別, 好設計]

[每張考卷的資料都有一個 Score 的實體屬性呢? 還是寫一個靜態方法在類別裡, 每次要知道分數就要把考卷中所有答案都送去這個靜態方法算一次呢?
想也知道, 成績算完了, 當然直接存入實體裡, 沒必要每次要取得分數, 都得把考卷送去都重算分數一次,在這個範例中當然是有個實體的property是最好, 每張考卷都可以儲存不一樣的分數]

[又如果你寫了一個類別 Math, 想要存放所有跟數學運算有關的方法,這時你如果 把Add(int a, int b) 做成類別實體方法那就是個爛設計了
1. Add 方法日後需要override的機會等於零, 除非這世界的加法被重新定義了
2. 考量其它人在調用此方法的方便性, 不用每次要做個加法, 還得先new 一個Math物件出來
3. Math物件, 有沒有可能被當成參數來傳遞給其它類別? 好像也沒啥必要
4. 參數a, 參數b 儲存在Math裡的再利用性價值太低, 也不會儲存在Math裡
基於以上三點, 我會決定把Add做成靜態方法。]


像這樣子的內容 能夠說不好嗎?
至少 在我看來 這些內容很精彩
看得出是這位大大對物件導向的個人見解
並且也舉出了範例
可以讓初學者一看就懂

而其他大大的內容 基本上 也都有很多可取之處
有些是直接針對問題的回答 有些是建議性的回答
而我就是從這些內容 吸取一些我想要的東西 有可能一兩句 也可能是一小段

事實上 會直接給我答案的很少
(可能是我問的問題比較奇怪?)
大多是建議性的回答 或指引方向性的回答

不過這些都沒關係
我就從這些大大們的回答中 挑出幾句 來了解別人的想法
這也是我覺得收穫最多的地方


至於程式碼呢
從我開始問問題到現在 有給我程式碼的少之又少 幾乎沒有
而我也幾乎沒有跟人要過程式碼
(反而是我在po程式碼...= =)


實作的話呢
基本上每天都有在key code
不過可能是悟性或環境的關係 進步得很慢
不過這也沒關係 慢慢學也是一種樂趣 哈哈
本篇文章回覆於2017-11-15 00:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
45樓
作者回應

city
檢舉此回應
To:羅伯斯

哈哈 其實原本就預計明天早上結束發問

中間有人Po文 我自然就得回了


大大說的很精確 有在慢慢接觸物件導向了

感謝大大的建議喔 ^^
本篇文章回覆於2017-11-15 00:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   

回覆
如要回應,請先登入.