作者berice152233 (WASHI)
看板C_Sharp
标题[问题] 请教 无瑕的程式码 C# 内容的问题
时间Fri Nov 15 13:58:39 2019
各位学长好
我是自学C#的新手
目前在读无瑕的程式码 敏捷完整篇 C#
在第二十章咖啡的启事中有一个疑惑
因为贴网址被判断是广告
请各位学长在GOOGLE搜寻一下
『敏捷软件开发:原则、模式与实践——第20章 咖啡的启示 JesseLZJ』
第一个就是了,里面有这一章的完整内容
他在CoffeeMaker.cs中有一行
CoffeeMakerAPI api = new M4CoffeeMakerAPI();
但他并没有M4CoffeeMaker这个类别
而CoffeeMakerAPI 是一个介面
所以如果直接CoffeeMakerAPI api = new CoffeeMakerAPI();
则会显示不能建立介面的物件这个错误
但後面的
M4UserInterface ui = new M4UserInterface(api);
M4HotWaterSource hws = new M4HotWaterSource(api);
M4ContainmentVessel cv = new M4ContainmentVessel(api);
都需要CoffeeMakerAPI来做为建构子建立
到这里我就混乱了
这是因为版本的差异吗?
还是书本内容错误呢?
如果我要使用CoffeeMakerAPI来作为其他物件的建构子
那我应该要怎麽做呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.125.120.238 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1573797523.A.F70.html
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 14:17:52
1F:推 O2000: 自己写一个实作CoffeeMakerAPI的M4CoffeeMaker类别呀 11/15 14:48
我也有想过要这麽做
但里面的
WarmerPlateStatus GetWarmerPlateStatus();
或者是
void SetWarmerState(WarmerState s);
虽然有尝试要实作,但自己弄了一下都没办法成功
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 14:58:18
2F:推 TPNEW: public class M4CoffeeMaker : CoffeeMakerAPI 11/15 15:00
首先我发现我并不了解
WarmerPlateStatus GetWarmerPlateStatus();
这个是具体来说是什麽
只知道从其他的程式码来看
如果呼叫他,可以得到目前WarmerPlateStatus的状态
但他又不像是属性的get、set结构
而
void SetWarmerState(WarmerState s);
从其他程式码来看,他可以将
他可以将呼叫这个方法的引数写入WarmerState内
例如将enum WarmerState变更成OFF等等
(但WarmerState是enum,这个状态又是存在何处?)
但他是如何运作的,以及我要如何实作我并不晓得
还请各位前辈指点一下
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 15:15:13
不好意思我打错了,是
CoffeeMakerAPI api = new M4CoffeeMakerAPI();
而非
CoffeeMakerAPI api = new M4CoffeeMaker();
已修正
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 15:16:59
3F:推 TPNEW: 我没看过书 不过他那样写就是要M4CoffeeMakerAPI 继承介面 11/15 15:21
又尝试了一下
如果是一般的属性还是方法还能实作
但这个CoffeeMakerAPI就是没办法实作出来
学长们救命啊
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 15:51:27
4F:推 TPNEW: CoffeeMakerAPI api = new CoffeeMakerAPI(); 11/15 15:55
5F:→ TPNEW: 你这行可以过吗? 11/15 15:55
不行,出现
无法建立抽象类别或介面 'CoffeeMakerAPI' 的执行个体
这个错误
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 15:59:35
6F:推 TPNEW: 我打错了CoffeeMakerAPI api = new M4CoffeeMakerAPI(); 11/15 16:13
如果没有pubil class M4CoffeeMakerAPI:CoffeeMakerAPI
会显示找不到M4CoffeeMakerAPI
如果有pubil class M4CoffeeMakerAPI:CoffeeMakerAPI
则会出现需要实作CoffeeMakerAPI
最终还是卡在需要实作的部分
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 16:21:27
7F:推 TPNEW: CoffeeMakerAPI api = new M4CoffeeMakerAPI(); 11/15 16:32
8F:→ TPNEW: M4UserInterface ui = new M4UserInterface(api); 11/15 16:32
9F:→ TPNEW: M4HotWaterSource hws = new M4HotWaterSource(api); 11/15 16:32
10F:→ TPNEW: M4ContainmentVessel cv = new M4ContainmentVessel(api); 11/15 16:32
11F:→ TPNEW: 这四行一起 你只差在M4CoffeeMakerAPI 的内容 11/15 16:33
是的,现在就差M4CoffeeMakerAPI实作不出来
WarmerPlateStatus GetWarmerPlateStatus();
这是一个方法
那我要实作的话应该要
public WarmerPlateStatus GetWarmerPlateStatus()
{
retrun ...
}
我不知道要叙述什麽
才能让他做到GetWarmerPlateStatus的功能
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 16:37:43
12F:推 TPNEW: 现在是不懂实做该做甚麽吗? 11/15 16:37
是的
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 16:37:57
13F:推 TPNEW: 我没看书可能有点浪费你的时间XD 11/15 16:43
14F:→ TPNEW: 实作看自己需求吧 还是书中有最後的结果需要达到? 11/15 16:43
15F:推 TPNEW: WarmerState在M4CoffeeMaker里面自己建立起来存 11/15 16:47
16F:→ TPNEW: 实作自己想怎麽做就怎麽做 11/15 16:48
不会不会,有讨论就有思考
我之前是想说是不是有地方可以让我抓WarmerState的目前状态
(因为咖啡机应该有外部SENSOR可以提供资讯)
所以我一直卡在要去哪边获得资讯
现在换了个思考方向
我现在是趋向在M4CoffeeMakerAPI中建立一个属性
用来给他们SET、GET存放现在状态
不知道这样是否可行就是了
他完全没有解释让我觉得有点困扰
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 16:58:39
17F:推 TPNEW: 满足需求就好 11/15 16:59
嗯,我猜想书中的M4CoffeeMakerAPI
会不会用来取得外部I/O状态的一个类别
所以我打算用属性来模拟I/O状态
用来满足他的需求
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 17:02:24
18F:→ TPNEW: 刚学程式的时候也是会这样XD 11/15 17:00
哈哈,刚学的时候有很多思考方式都要改
现在可以了
为各个方法设定属性之後
再分别给他们GET、SET的方法就可以通过编译了
只是这个做法不知道是不是正确的就是了
※ 编辑: berice152233 (59.125.120.238 台湾), 11/15/2019 17:17:29
19F:推 Litfal: 无瑕XD为什麽光是命名就让我头痛了 11/16 01:21
20F:→ samchung: P.288 有提供测试案例的程式码,可参考里面的写法 11/16 01:48
21F:→ samchung: 把 CoffeeMakerStub 类别和建构子改成 M4CoffeeMakerAPI 11/16 01:48
22F:→ samchung: 然後整段加到你的范例里试试看 11/16 01:48
23F:→ samchung: 整段是只那一整个类别喔,一直到 P.289 的中间为止 11/16 01:53
24F:→ samchung: 指 ↖(已改名的 CoffeeMakerStub 类别) 11/16 01:55
25F:→ berice152233: 好的,我礼拜一上班时试试看 11/16 10:14
26F:→ berice152233: 我已经看了P288的内容了,的确就是我要的实作内容 11/19 11:10
27F:→ berice152233: ,感谢 11/19 11:10
28F:推 aup3gj: 我知道这本书,主管上个月丢在我桌上要我看,到现在还没碰 11/30 14:02
29F:推 nickboy: 实做M4CoffeeMakerAPI就好,现在是需求问题不是技术问题 12/06 17:05