[請益] 多型用在哪
如題
看了stackoverflow的一個例子
class Cup {
int capacity
}
class TeaCup : Cup {
string flavour
}
class CoffeeCup : Cup {
string brand
}
Cup c = new CoffeeCup();
public int measure(Cup c) {
return c.capacity
}
他的解釋是
you can pass just a Cup instead of a specific instance. This aids in
generality because you don't have to provide a specific measure() instance
per each cup type
問題是我不是只要
在Cup 類別中定義 measure這個方法 不就可以了嗎
為何不要在宣告物件的時候都
使用
CoffeeCup c= new CoffeeCup();
請問多型的用途是?
--
給個箭頭等Job警察
洗杯子機器如果可以接受Cup而非每種Cup 就省很多功夫
不是每個class都需要measure這個方法
Google一下啊 QQ
dependency injection
岔題一下 用動物或物體當例子實在讓初學者摸不著頭緒
為什麼不拿實際有用的例子 像logger可以存檔案也可存DB
本版接納多元問題討論,反正文章已經夠少了,不用管
哈哈真的,教科書老是用甚麼動物還顏色的,明明真實例子
的很多就是不用
或是DataBaseConnection可以多型成SQL MySQL ProsGre....
去stackoverflow查 一堆鄉民用的例子都比這些還經典
初學者可能連db都不知道啊...
像寫2d遊戲會用各種不同的geometry,然後統一用同一個母
類型畫上螢幕不好嗎?大家都愛寫遊戲呀~
你家國際牌插座如果只能用國際牌電器,就是GG思密達,
抽象化/標準化,搭配多型才能讓系統彈性適應變化
插頭通常用adapter處理(開新戰場)
Adapter比較像處理不同插座(歐規、中國、台灣)的問題
買本設計模式看一下吧
講極端一點,想像如果每個電器的插頭都是不一樣的...
想成 human.washCup(Cup c) 是不是比較好懂阿
不用為每種杯子都宣告一個method,也少了型態轉換的
code,程式碼會更簡潔好維護
O大的意思是,萬一沒有宣告method在 Cup 中,也可以做的意思? 但我的想法是直接把measure放在 Cup中 那麼所有子類別的Cup都可以用
※ 編輯: empireisme (101.12.69.35 臺灣), 03/04/2021 12:14:36樓上 這樣會變成人在洗 c 罩杯
發文請 implement Job介面
主要是程式碼越變越胖時,要考量維護和擴充性
例如之後有個robot.washCup(Cup c)出現,也比較好維護
當然要作在Cup Class 本身也不是不行,有時要考量類別
現在都馬pattern matching誰跟你多型
的互動,有點難解釋就是了
推25樓QQ
多型 你的例子確實用處不多
但實作用在資料庫 可確保存取正確資料表 或欄位
在邏輯上 更是很多OO的基石 例如前幾篇策略模式 取代if else
或是複雜邏輯運算decorate
或是偵測變化observer
就是你看到設計模式中的那幾個常用模式 好處太多 缺點也有
缺點是能力不到位 維運複雜
或是撰寫者設計模式中毒 維運時名稱和物件運作不相關 混亂
總之就是觀察你們老闆
如果他是屬於找剛畢業 或是巨匠專業 免洗工程師的
勸你還是不要用OO甚至到OO的多型
如果老闆的老闆有鴻圖大業的抱負,老闆傾向找資深工程師
OO就很有用了,在很多開放原始碼的套件都用的很兇
甚至套件EOS之後你還能透過原始碼了解功能
杯子自己又不會算 怎麼能把他放在杯子裡 除非你的杯子
內建計算機功能
物件都不物件了怎麼還能算物件導向
你的問題癥結點是不是在 new 那個陳述?你是不是在想如果
為了改變 c 是屬於那種杯子,還要去改 code,那好像省不
了太多時間?你還要找到整個專案其中相關的程式碼全部把
Coffee Cup() 改為 TeaCup(),這樣似乎沒有比寫成 Coff
eeCup c = new CoffeeCup() 省掉太多時間,也沒有真的很
好維護對嗎?我相信每個剛接觸多型且心思比較細膩的人都
會有跟你一樣的疑問。會有這種疑問是因為這些範例都只講
了一半,進階的後半段是如何利用多型的概念往上疊加其他
作法使其變成好維護的專案。你可以查一下上面有人提到的
dependency injection,或是再加上 Spring 關鍵字可能會
有更清楚的範例。
你講的寫法也可以沒錯,兩個各有優缺。measure 定義
在 cup 的好處是,新增 cup 的的時候,其他 measur
e 不會被修改到,壞處是,新增 method,比方說 cle
anup() 的時候,所有 cups 都需要被修改。相反地,
把 measure 定義在外的話,新增 cup,measure 就需
要修改,但新增 wash 的時候,所有 cup 都不用被修
改。
你可以根據你開發的功能重視新增 class 還是新增 m
ethod,決定適合哪一種寫法
請問樓上 工廠模式不就是這樣嗎?
我可不可以說多型的應用層面就是工廠模式
先不說動態binding那些東東
光以code的可擴展性與複用性
開放封閉原則
對謝謝tt大
https://bit.ly/3q9bd1m 參考一下 Java 版的討論吧
toString() 通常都是多型的最佳案例
haha 哥怎麼沒出現
YT搜: 4.7: Introduction to Polymorphism
影片長 8:46 頻道:The Coding Train
measure的主詞不是cup, 可能是人或機器,至於用base typ
e的原因,是邏輯共用,只有實作有差
謝謝
你講的沒有錯 是這個例子太單純 你提出的方法跟他的方法差
異不大 但是如果measure方法換成比較複雜的計算它就不適合
放在cup類別裡
把measure放在cup中沒有不可以,前提是大家的meas
ure方法都一樣,如果有人不一樣,就要override方法
,如果有人不只不一樣,還剛好有一群是用那個不一
樣的方法,你就會寫一樣的東西寫到懷疑人生,最後
把他拉成一個interface,叫measurable
因為你不會希望不同物件耦合在一起
我覺得多型這個翻譯很容易讓人無法理解 為什麼不翻多
態呢 明明是仿造自然界的變態行為
父類別 蛙 行為 移動 子類別蝌蚪 幼蛙 成蛙
蝌蚪.移動() 幼蛙.移動() 成蛙.移動() 行為界面一樣
但內容動作不同不就是多型(態)了
蠻意外這個主題會這麼多人回...
感謝各方高手的說法,受教了…
好多佛心大大~
因為給初學者的範例不能太難,所以會有這種疑惑
培訓機構? 反覆推敲是基本
真的無自學力可以考慮適不適合
連推說多人...
爆
[正妹] AV 巨乳小隻馬 十選一誰最正? 1. 天音まひな 145cm G cup 2. 奧田咲 148cm G cup爆
[正妹] 兇 T E N1.未梨一花 (H cup) 2.園都 (G cup)爆
[情報] Laver Cup 合照剛剛看到ATP分享了這次Laver Cup 合照 本屆Laver Cup移師到美國波士頓舉行37
[問卦] 第一次摸H CUP的奶是什麼感覺不是那種常見的B C CUP 幹你娘擊敗直接給你巨大的奶 H CUP的奶 都快比你頭還大 整個臉埋進去有多爽29
[閒聊] G CUP有多大?我對英文沒啥概念 JK說他有G CUP 那G CUP有多大 手可以像這樣19
Re: [閒聊] G CUP有多大?日本G CUP 英國 G CUP 台灣G CUP13
[問題] 如果按照罩杯分位階 那露西亞呢?團長的ㄋㄟㄋㄟ是K cup 所以團長自稱Knight Cup ㄋㄟ的ㄋㄟㄋㄟ是G cup- 代PO 【CR CUP】第五回CR CUP大賽倒數4天! 大家好我是APEX成癮來自魔界的魔妻Ruly 我會在CR CUP當天直播中文同步觀看即時翻譯解說! CR CUP除了一些Youtuber跟遊戲實況主之外,共有16位Vtuber會參賽。