W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
次日,小菜再來(lái)找大鳥,問(wèn)道:“你昨天說(shuō)計(jì)算器這樣的小程序還可以用到面向?qū)ο笕筇匦??繼承和多態(tài)怎么可能用得上,我實(shí)在不可理解?!?/p>
大鳥:“小菜很有鉆研精神嗎?好,今天我讓你功力加深一級(jí)。你先要考慮一下,你昨天寫的這個(gè)代碼,能否做到很靈活的可修改和擴(kuò)展呢?”
小菜:“我已經(jīng)把業(yè)務(wù)和界面分離了呀,這不是很靈活了嗎?”
大鳥:“那我問(wèn)你,現(xiàn)在如果我希望增加一個(gè)開根(sqrt)運(yùn)算,你如何改?”
小菜:“那只需要改Operation類就行了,在switch中加一個(gè)分支就行了?!?/p>
大鳥:“問(wèn)題是你要加一個(gè)平方根運(yùn)算,卻需要把加減乘除的運(yùn)算都得來(lái)參與編譯,如果你一不小心,把加法運(yùn)算改成了減法,這不是大大的糟糕。打個(gè)比方,如果現(xiàn)在公司要求你為公司的薪資管理系統(tǒng)做維護(hù),原來(lái)只有技術(shù)人員(月薪),市場(chǎng)銷售人員(底薪+提成),經(jīng)理(年薪+股份)三種運(yùn)算算法,現(xiàn)在要增加兼職工作人員的(時(shí)薪)算法,但按照你昨天的程序?qū)懛?,公司就必須要把包含有的原三種算法的運(yùn)算類給你,讓你修改,你如果心中小算盤一打,‘TMD,公司給我的工資這么低,我真是郁悶,這會(huì)有機(jī)會(huì)了’,于是你除了增加了兼職算法以外,在技術(shù)人員(月薪)算法中寫了一句
那就意味著,你的月薪每月都會(huì)增加10%(小心被抓去坐牢),本來(lái)是讓你加一個(gè)功能,卻使得原有的運(yùn)行良好的功能代碼產(chǎn)生了變化,這個(gè)風(fēng)險(xiǎn)太大了。你明白了嗎?”
小菜:“哦,你的意思是,我應(yīng)該把加減乘除等運(yùn)算分離,修改其中一個(gè)不影響另外的幾個(gè),增加運(yùn)算算法也不影響其它代碼,是這樣嗎?”
大鳥:“自己想去吧,如何用繼承和多態(tài),你應(yīng)該有感覺(jué)了。”
小菜:“OK,我馬上去寫。”
Operation運(yùn)算類
加減乘除類
小菜:“大鳥哥,我按照你說(shuō)的方法寫出來(lái)了一部分,首先是一個(gè)運(yùn)算類,它有兩個(gè)Number屬性,主要用于計(jì)算器的前后數(shù),然后有一個(gè)虛方法GetResult(),用于得到結(jié)果,然后我把加減乘除都寫成了運(yùn)算類的子類,繼承它后,重寫了GetResult()方法,這樣如果要修改任何一個(gè)算法,都不需要提供其它算法的代碼了。但問(wèn)題來(lái)了,我如何讓計(jì)算器知道我是希望用哪一個(gè)算法呢?”
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: