iT邦幫忙

1

關於共用方法的整理

各位好
class中有些與別的class有一樣的方法(功能一樣)
如果想有較好的做法該怎麼做
我的想法
1.寫一個共用class 把有重複的方法都放進去 然後每個class都繼承它
2.一樣寫個class 把有重複的方法都放進去, 然後每個class都new一個實例出來使用它
3.不用整理出來 之後若需修改再一一修改就好
不知我這幾個想法的實用性怎樣
想請問在職場上/團隊上一般會怎麼做比較好,謝謝

class classA{
method_A1(){...}
method_A2(){...}
method_AB(){...}//與classB有相同功能的方法
method_AD(){...}//與classD有相同功能的方法
}

class classB{
method_B1(){...}
method_B2(){...}
method_AB(){...}//與classA有相同功能的方法
method_BC(){...}//與classC有相同功能的方法
}

class classC{
method_C1(){...}
method_C2(){...}
method_BC(){...}//與classB有相同功能的方法
}

class classD{
method_D1(){...}
method_D2(){...}
method_AD(){...}//與classA有相同功能的方法
}
w4560000 iT邦新手 4 級 ‧ 2020-04-28 10:35:57 檢舉
要先確定一下 方法是否與該class 有關聯,
若有關聯的話 你可以在新建一個 BaseClass ,把重複利用的方法寫入,再由其餘class繼承後來使用。

若沒有關聯的話,比如說是處理字串或是跟原本物件無關聯的事,可以再另開一個Extension檔來專門寫這種擴充方法,通常這種通常這種擴充都是static類型可以直接使用。
xSummer iT邦新手 4 級 ‧ 2020-04-28 12:24:46 檢舉
謝謝回答 我會研究看看這方面的做法

2 個回答

1
浩瀚星空
iT邦超人 1 級 ‧ 2020-04-28 10:05:59

很不錯的想法,就初學者而言來說。
只是,這樣子也代表了你對物件的不熟悉。

正常來說,做出一樣的功能不同的物件名是沒有意義的事。
但考量多重覆性的可能性。
的確可以用一個主class。重覆性高的class就來去繼承。

會說你的想法不錯的原因,是因為本來就該這樣做。
但在規劃上的思考。則不是你所想的那樣簡單處理。
架構要先搞好。

但對你來說,你首先要先去了解何謂繼承。再來談這方面的事。

看更多先前的回應...收起先前的回應...
xSummer iT邦新手 4 級 ‧ 2020-04-28 10:44:14 檢舉

我原本是用繼承方式來整理重複方法
這樣之後要改也不用改多個地方
不過看了很多文章也逐漸發現用繼承方法不太合理
所以才有這篇疑問

基本上先教你一件事。
不要認為程式的繼承不合理。

而是你架構規劃的繼承不合理。

使用繼承是一定的方式。但要怎麼使用繼承去架構及規劃,則又是另外一門學問。

我最後說的「但對你來說,你首先要先去了解何謂繼承。再來談這方面的事。」
就是你還不了解繼承,所以才會覺得繼承不合理。

xSummer iT邦新手 4 級 ‧ 2020-04-28 12:24:30 檢舉

恩...好 我會去多看看這方面的文章 謝謝

星空大的回答真的浩瀚XD

4
通靈亡
iT邦研究生 5 級 ‧ 2020-04-28 13:09:08

可以用方法和資料之間的關聯性,來決定怎麼切分類別、方法

  1. 用物件類別封裝關聯的方法與屬性
    舉例來說,一個遊戲角色有血量、魔力、攻擊力...... 等「變數屬性」
    角色可透過「施放技能」、「使用道具」等「方法」改變他的變數屬性

變數屬性和方法彼此環環相扣,適合用物件類別封裝這些屬性和方法

  1. 非物件類別封裝靜態方法
    舉例來說,數學的Log計算、開根號計算、次方計算,都是數學性質的處理運算
    雜湊的MD5、SHA

不需要依賴其他變數,直接透過傳入任意參數便能得到結果
就適合用這個方式封裝共用的靜態方法

  1. 繼承父物件共用類別的屬性與方法
    一個遊戲角色,底下會有不同的職業
    但這些職業除了武器、技能、成長數值有所差異
    都會用到遊戲角色的「血量」、「魔力」、攻擊力」
    也都會「移動」、「跳躍」等相同的事情

各個職業便可繼承「角色」的屬性和方法

  1. 抽象、介面實作
    狼、狗跟貓雖然同樣都是會叫的哺乳類
    但是狼的叫法、狗的叫法跟貓的叫法不一樣

這種無法直接透過父類別決定差異極大的叫聲動作
就適合透過抽象、介面實作

另外以HR系統為例,加班申請作業跟請假申請作業都是申請作業
但是審核的過程和資料條件完全不一樣
就適合用介面的方式實作各自的審核方法

這四種往下玩,就是設計模式
用多深取決於你的情境和架構

好會比喻唷!

xSummer iT邦新手 4 級 ‧ 2020-04-28 16:02:25 檢舉

謝謝你的講解

就差點沒說到多工應用的方式了。

我要發表回答

立即登入回答