Soft_Job 板


LINE

如题 看了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(); 请问多型的用途是? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.226.11.41 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1614828057.A.414.html
1F:→ tnfshjcc: 给个箭头等Job警察03/04 11:22
2F:→ tnfshjcc: 洗杯子机器如果可以接受Cup而非每种Cup 就省很多功夫03/04 11:25
3F:→ bbser: 不是每个class都需要measure这个方法03/04 11:27
4F:推 hanshsu: Google一下啊 QQ 03/04 11:27
5F:推 alihue: dependency injection 03/04 11:37
6F:→ umum29: 岔题一下 用动物或物体当例子实在让初学者摸不着头绪03/04 11:41
7F:→ umum29: 为什麽不拿实际有用的例子 像logger可以存档案也可存DB03/04 11:42
8F:推 YahooTaiwan: 本版接纳多元问题讨论,反正文章已经够少了,不用管03/04 11:43
9F:→ meowyih: 哈哈真的,教科书老是用甚麽动物还颜色的,明明真实例子03/04 11:43
10F:→ meowyih: 的很多就是不用03/04 11:43
11F:→ umum29: 或是DataBaseConnection可以多型成SQL MySQL ProsGre....03/04 11:44
12F:→ umum29: 去stackoverflow查 一堆乡民用的例子都比这些还经典03/04 11:45
13F:推 hanshsu: 初学者可能连db都不知道啊...03/04 11:45
14F:→ meowyih: 像写2d游戏会用各种不同的geometry,然後统一用同一个母03/04 11:45
15F:→ meowyih: 类型画上萤幕不好吗?大家都爱写游戏呀~03/04 11:45
16F:推 gn1943141: 你家国际牌插座如果只能用国际牌电器,就是GG思密达,03/04 11:50
17F:→ gn1943141: 抽象化/标准化,搭配多型才能让系统弹性适应变化03/04 11:50
18F:推 jknm0510a: 插头通常用adapter处理(开新战场)03/04 11:53
19F:推 gn1943141: Adapter比较像处理不同插座(欧规、中国、台湾)的问题03/04 11:59
20F:推 vi000246: 买本设计模式看一下吧03/04 12:00
21F:→ gn1943141: 讲极端一点,想像如果每个电器的插头都是不一样的...03/04 12:03
22F:推 OriginStar: 想成 human.washCup(Cup c) 是不是比较好懂阿 03/04 12:08
23F:→ OriginStar: 不用为每种杯子都宣告一个method,也少了型态转换的03/04 12:10
24F:→ OriginStar: code,程式码会更简洁好维护03/04 12:10
O大的意思是,万一没有宣告method在 Cup 中,也可以做的意思? 但我的想法是直接把measure放在 Cup中 那麽所有子类别的Cup都可以用 ※ 编辑: empireisme (101.12.69.35 台湾), 03/04/2021 12:14:36
25F:→ alihue: 楼上 这样会变成人在洗 c 罩杯 03/04 12:13
26F:推 theedge: 发文请 implement Job介面 03/04 12:21
27F:→ OriginStar: 主要是程式码越变越胖时,要考量维护和扩充性 03/04 12:22
28F:→ OriginStar: 例如之後有个robot.washCup(Cup c)出现,也比较好维护 03/04 12:23
29F:→ OriginStar: 当然要作在Cup Class 本身也不是不行,有时要考量类别 03/04 12:24
30F:推 soheadsome: 现在都马pattern matching谁跟你多型 03/04 12:24
31F:→ OriginStar: 的互动,有点难解释就是了 03/04 12:25
32F:推 taipoo: 推25楼QQ 03/04 12:30
33F:→ jej: 多型 你的例子确实用处不多 03/04 12:38
34F:→ jej: 但实作用在资料库 可确保存取正确资料表 或栏位 03/04 12:38
35F:→ jej: 在逻辑上 更是很多OO的基石 例如前几篇策略模式 取代if else 03/04 12:38
36F:→ jej: 或是复杂逻辑运算decorate 03/04 12:38
37F:→ jej: 或是侦测变化observer 03/04 12:38
38F:→ jej: 就是你看到设计模式中的那几个常用模式 好处太多 缺点也有 03/04 12:38
39F:→ jej: 缺点是能力不到位 维运复杂 03/04 12:38
40F:→ jej: 或是撰写者设计模式中毒 维运时名称和物件运作不相关 混乱 03/04 12:38
41F:→ jej: 总之就是观察你们老板 03/04 12:52
42F:→ jej: 如果他是属於找刚毕业 或是巨匠专业 免洗工程师的 03/04 12:52
43F:→ jej: 劝你还是不要用OO甚至到OO的多型 03/04 12:52
44F:→ jej: 如果老板的老板有鸿图大业的抱负,老板倾向找资深工程师 03/04 12:52
45F:→ jej: OO就很有用了,在很多开放原始码的套件都用的很凶 03/04 12:52
46F:→ jej: 甚至套件EOS之後你还能透过原始码了解功能 03/04 12:52
47F:→ shooter555: 杯子自己又不会算 怎麽能把他放在杯子里 除非你的杯子 03/04 12:53
48F:→ shooter555: 内建计算机功能 03/04 12:53
49F:→ shooter555: 物件都不物件了怎麽还能算物件导向 03/04 12:57
50F:推 tttkkk: 你的问题症结点是不是在 new 那个陈述?你是不是在想如果 03/04 13:02
51F:→ tttkkk: 为了改变 c 是属於那种杯子,还要去改 code,那好像省不 03/04 13:02
52F:→ tttkkk: 了太多时间?你还要找到整个专案其中相关的程式码全部把 03/04 13:02
53F:→ tttkkk: Coffee Cup() 改为 TeaCup(),这样似乎没有比写成 Coff 03/04 13:02
54F:→ tttkkk: eeCup c = new CoffeeCup() 省掉太多时间,也没有真的很 03/04 13:02
55F:→ tttkkk: 好维护对吗?我相信每个刚接触多型且心思比较细腻的人都 03/04 13:02
56F:→ tttkkk: 会有跟你一样的疑问。会有这种疑问是因为这些范例都只讲 03/04 13:02
57F:→ tttkkk: 了一半,进阶的後半段是如何利用多型的概念往上叠加其他 03/04 13:02
58F:→ tttkkk: 作法使其变成好维护的专案。你可以查一下上面有人提到的 03/04 13:02
59F:→ tttkkk: dependency injection,或是再加上 Spring 关键字可能会 03/04 13:02
60F:→ tttkkk: 有更清楚的范例。 03/04 13:02
61F:推 shadow10230: 你讲的写法也可以没错,两个各有优缺。measure 定义 03/04 13:22
62F:→ shadow10230: 在 cup 的好处是,新增 cup 的的时候,其他 measur 03/04 13:22
63F:→ shadow10230: e 不会被修改到,坏处是,新增 method,比方说 cle 03/04 13:22
64F:→ shadow10230: anup() 的时候,所有 cups 都需要被修改。相反地, 03/04 13:22
65F:→ shadow10230: 把 measure 定义在外的话,新增 cup,measure 就需 03/04 13:22
66F:→ shadow10230: 要修改,但新增 wash 的时候,所有 cup 都不用被修 03/04 13:22
67F:→ shadow10230: 改。 03/04 13:22
68F:推 shadow10230: 你可以根据你开发的功能重视新增 class 还是新增 m 03/04 13:31
69F:→ shadow10230: ethod,决定适合哪一种写法 03/04 13:31
70F:推 ucrxzero: 请问楼上 工厂模式不就是这样吗? 03/04 14:43
71F:→ ucrxzero: 我可不可以说多型的应用层面就是工厂模式 03/04 14:44
72F:→ ucrxzero: 先不说动态binding那些东东 03/04 14:44
73F:→ ucrxzero: 光以code的可扩展性与复用性 03/04 14:44
74F:推 ucrxzero: 开放封闭原则 03/04 14:47
75F:→ empireisme: 对谢谢tt大 03/04 15:39
76F:推 qrtt1: https://bit.ly/3q9bd1m 参考一下 Java 版的讨论吧 03/04 17:41
77F:推 pichubaby: toString() 通常都是多型的最佳案例 03/04 17:56
78F:→ Hsins: haha 哥怎麽没出现 03/04 18:39
79F:推 jackflu: YT搜: 4.7: Introduction to Polymorphism 03/04 19:38
80F:→ jackflu: 影片长 8:46 频道:The Coding Train 03/04 19:39
81F:推 wulouise: measure的主词不是cup, 可能是人或机器,至於用base typ 03/04 21:11
82F:→ wulouise: e的原因,是逻辑共用,只有实作有差 03/04 21:11
83F:→ jackflu: 网址支援: https://youtu.be/qqYOYIVrso0 03/04 23:18
84F:→ empireisme: 谢谢 03/05 00:07
85F:→ virnux: 你讲的没有错 是这个例子太单纯 你提出的方法跟他的方法差 03/05 01:08
86F:→ virnux: 异不大 但是如果measure方法换成比较复杂的计算它就不适合 03/05 01:09
87F:→ virnux: 放在cup类别里 03/05 01:10
88F:推 internetms52: 把measure放在cup中没有不可以,前提是大家的meas 03/05 08:06
89F:→ internetms52: ure方法都一样,如果有人不一样,就要override方法 03/05 08:06
90F:→ internetms52: ,如果有人不只不一样,还刚好有一群是用那个不一 03/05 08:06
91F:→ internetms52: 样的方法,你就会写一样的东西写到怀疑人生,最後 03/05 08:06
92F:→ internetms52: 把他拉成一个interface,叫measurable 03/05 08:06
93F:推 aidansky0989: 因为你不会希望不同物件耦合在一起 03/05 09:27
94F:→ shooter555: 我觉得多型这个翻译很容易让人无法理解 为什麽不翻多 03/05 13:16
95F:→ shooter555: 态呢 明明是仿造自然界的变态行为 03/05 13:17
96F:→ shooter555: 父类别 蛙 行为 移动 子类别蝌蚪 幼蛙 成蛙 03/05 13:20
97F:→ shooter555: 蝌蚪.移动() 幼蛙.移动() 成蛙.移动() 行为界面一样 03/05 13:22
98F:→ shooter555: 但内容动作不同不就是多型(态)了 03/05 13:23
99F:推 youtuuube000: 蛮意外这个主题会这麽多人回... 03/05 16:12
100F:推 terrybob: 感谢各方高手的说法,受教了… 03/05 16:34
101F:→ GoodFriday: 好多佛心大大~ 03/06 00:49
102F:→ longlongint: 因为给初学者的范例不能太难,所以会有这种疑惑 03/06 17:39
103F:→ superpandal: 培训机构? 反覆推敲是基本 03/09 06:03
104F:→ superpandal: 真的无自学力可以考虑适不适合 03/09 06:07
105F:→ superpandal: 连推说多人... 03/09 06:37







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP