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

樓主

city
初學者
30 23
556 140
發送站內信

請問各位前輩們:

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

先上個程式碼:



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

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

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

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



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

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

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



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

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

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

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



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

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

香帥
檢舉此回應
一二的問題很簡單,編譯行程式碼就知,類別裡面不一定要有屬性(或欄位),只有方法,也可以編譯執行。(目前版本都可以,將來改版,若創造者要改為不可以,您也只有遵照它的規則)
大大們所寫的成千成百的Class裡面 "每一個"Class裡面都有欄位(或屬性)嗎? 個人所寫的,大部分都有,若只有一個方法,我的習慣會放在module裡頭。
本篇文章回覆於2017-11-12 13:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

city
檢舉此回應
To:香帥

[一]
請問[編譯行程式碼]是什麼?


我解讀一下大大的意思 不知是否:
只要程式碼運行沒出現錯誤 就代表Class可以沒有屬性(或欄位)?

我問題的原意不是[Class沒有屬性(或欄位)會不會出錯?]
而是:[以物件導向理論來說 Class允不允許沒有屬性(或欄位)?]
或是:[以物件導向理論來說 只有方法的Class 這樣的Class該不該存在?]

[二]
如果大大會把只有一個方法的Class放在Module裡面

我的解讀是:
1.大大不認同Class裡面只有方法
2.只有一個方法的Class 大大會認為它是副程式 而且不該寫在Class裡面
3.那如果一個Class裡面有3個方法 沒有屬性也沒有欄位 那大大會認可這樣的Class嗎?

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

香帥
檢舉此回應
請問[編譯行程式碼]是什麼?[編譯執行程式碼]
只要程式碼運行沒出現錯誤 就代表Class可以沒有屬性(或欄位)? 是的
我的解讀是:
1.大大不認同Class裡面只有方法
2.只有一個方法的Class 大大會認為它是副程式 而且不該寫在Class裡面
3.那如果一個Class裡面有3個方法 沒有屬性也沒有欄位 那大大會認可這樣的Class嗎?
這沒有標準答案,不管裡面有多少方法或屬性欄位等等。我意思是class是要可以引用或者可以單獨販售,很少在改,意思是說可以不提供原始程式碼,只提供說明功能。
本篇文章回覆於2017-11-12 15:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

香帥
檢舉此回應
再補充一下,若編譯器規定class一定要有屬性欄位,您的例子本就一個方法就好,不必要有屬性欄位,那就要用一個假屬性欄位去騙過編譯器。
本篇文章回覆於2017-11-12 15:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
不錯的參考

羅伯斯
檢舉此回應
建議樓主別急著撰寫程式碼,並把以往在GWBASIC中的程式導向觀念涼到一旁
先看看有關物件導向的相關說明,把物件導向觀念先建立起來
不然在撰寫程式碼的過程中,會被舊的程式導向觀念影響,而進入死胡同

學習物件導向程式設計的步驟:
首先要建立正確的物件導向觀念
再來則去觀摩研究他人的程式
最後才是試著自己撰寫



本篇文章回覆於2017-11-13 00:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實~~~~你的問題一二三。
我都只會統一一個答案。

也可以也不行,一切看你的設計。

要知道,程式碼是死的,如何去應用他才是你要學的。
你並不需要去太個專研這個部份的問題。
因該說,你的問題找錯了方向了。

除非今天你打算開發一種新的程式語言。
因為無論是相關的屬性、類別、方法。無論在任何一個程式語言內
其方向都是比較統一不變的。

在參數的變數領域的部份,也大多是那四種。

認真來說,你要學的並不是這些。畢竟你並不是想要做程式語言。
你是要拿他來做開發。你是要去尊守他的使用規範。

一開始可能用錯也沒關係,一回生二回熟。
本篇文章回覆於2017-11-13 11:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

city
檢舉此回應
To:香帥

[不提供原始程式碼,只提供說明功能]

這句我不太懂 不過我很有興趣

不提供原始程式碼...指的是只提供.dll檔案嗎?

只提供說明功能...[說明功能]指的又是什麼?
本篇文章回覆於2017-11-13 11:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

city
檢舉此回應
To:香帥

看了大大3樓的回答 我的解讀是:

[第一階段]
只要執行過程中沒有出現錯誤訊息 這個Class就是一個[沒有錯誤程式碼的Class]

廣義來說 一個什麼都沒有的空白Class1 它也是一個[沒有錯誤程式碼的Class]


[第二階段]
在第一階段中 有錯誤程式碼的Class就不說了 因為它連第一階段都過不了

而在第一階段中 沒有錯誤程式碼的Class又可以分成:[好的Class]與[壞的Class]

因此第二階段是 如何區分一個Class是好的Class 還是壞的Class
本篇文章回覆於2017-11-13 11:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

羅伯斯
檢舉此回應
to樓主7F:

說明功能,簡單的說,就好比是操作說明。
一套系統開發完成後,最後就是編寫操作說明,用於引導使用者
而這類操作說明,通常是以紙本操作說明書,或是操作說明檔來呈現

本篇文章回覆於2017-11-13 12:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

羅伯斯
檢舉此回應
何者為好的Class?何者又為壞的Class?
應該不能這樣分類,只要能達到預期的結果,就沒有好壞之分
若真要分好壞,只能從執行的效能來區分
本篇文章回覆於2017-11-13 12:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

city
檢舉此回應
[第二階段]-如何區分一個Class是好的Class 還是壞的Class

首先得定義什麼是[好的Class] 什麼是[壞的Class]

我想了一個方法

這個方法的前提是:假設大大們都是了解物件導向 並有物件導向實作經驗的專業工程師


以這個前提下 好的Class可以定義為:
大大們認為這個Class是個物件導向的Class 或
大大們覺得這個Class是OK的 是沒有問題的 或
大大們會覺得 如果我來寫 也會寫成這樣的Class 或
...
...
例如:香帥大大提到的[可販售的Class] 我就會定義成是好的Class

不好的Class則定義為:
大大們會說:這不是個物件導向寫法的Class
大大們會說:Class不應該寫成這樣
大大們會說:這根本就不是Class 這根本只是個副程式 直接寫在模組就可以了
...
...
例如:最上面我舉的Class新增資料夾 應該很多大大都不認為它是一個物件導向該有的Class


以上論述 可以得到一個更直白的說法:

所謂好的Class 就是大大們[寫過的Class]

因此 最開始的3個問題 也可以說成是:

以大大們寫過的Class當中 是否有以下情形:
1.Class裡面沒有屬性 也沒有欄位
2.Class裡面沒有方法
3.發生以上兩種情形的Class是罕見 還是常見?
4.什麼樣的Class會是沒有屬性欄位?
5.什麼樣的Class會是沒有方法?
本篇文章回覆於2017-11-13 12:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

city
檢舉此回應
To:羅伯斯

#9
感謝大大對於操作說明的解釋
[操作說明檔]是像word檔 txt檔 pdf檔那樣嗎?


#10
[只要能達到預期的結果,就沒有好壞之分]

所以大大認為以下Class是好的Class?

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

羅伯斯
檢舉此回應
樓主執著於何者為好的Class?何者又為壞的Class?個人在10樓已然回應
樓主12樓的程式碼,預期的結果為何?它能達到你要的結果嗎?
若不行當然是壞的Class,若可以你認為它是好是壞?
本篇文章回覆於2017-11-13 12:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
不錯的參考

小魚
檢舉此回應
不管黑貓白貓,
只要能抓老鼠就是好貓,
不能抓老鼠的貓長再漂亮也沒用,
(你是說招財貓嗎? @@)
本篇文章回覆於2017-11-13 12:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

city
檢舉此回應
To:羅伯斯 + 浩瀚星空

先說明一下為什麼我會遇到沒有屬性及欄位的Class:

元件事件中的程式碼(例如:寫在Button_Click中的程式碼)

我會想說 看有沒有可以被提取出來的程式碼
這些程式碼在每個專案中都可以使用
這些可重複使用的程式碼 我就會把它寫成副程式 並放入Class中

很多的情況下 這些重複的程式碼的功能都是:做一件事情
例如:新增資料夾

把這樣子的程式碼寫成副程式 再放入Class中
可想而知:
這個Class的功能就是做一件事 也就是說 這個Class是動詞

這應該就是羅伯斯大大所說的:以程式導向的觀念來寫Class

像這樣的Class 無法避免的 很容易出現沒有屬性也沒有欄位

原因是:

這樣的Class 所需要的變數 太模稜兩可了

以這個範例來說:



這個Class需要一個字串變數 這個字串變數就是資料夾的完整路徑

那..這個[資料夾的完整路徑] 該設定成一個屬性嗎?
還是只要是一個Sub的Byval值就可以了?

設定成屬性是否會太做作?
因為它只要是個Byval值就可以了 為什要把它變成屬性?

由於 我目前的Class大部分都是用這個想法來切割出來的
所以我大部分的Class 都沒有屬性 也沒有欄位
本篇文章回覆於2017-11-13 12:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   

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