小菜編程成長記(一 面試受挫——代碼無錯就是好?)第2/3頁
更新時間:2006年10月17日 00:00:00 作者:
三 復(fù)制VS復(fù)用
小菜:“我明白了,他說用任意一種面向?qū)ο笳Z言實現(xiàn),那意思就是要用面向?qū)ο蟮木幊谭椒ㄈ崿F(xiàn),對嗎?OK,這個我學過,只不過當時我沒想到而已。”
大鳥:“所有編程初學者都會有這樣的問題,就是碰到問題就直覺的用計算機能夠理解的邏輯來描述和表達待解決的問題及具體的求解過程。這其實是用計算機的方式去思考,比如計算器這個程序,先要求輸入兩個數(shù)和運算符號,然后根據(jù)運算符號判斷選擇如何運算,得到結(jié)果,這本身沒有錯,但這樣的思維卻使得我們的程序只為滿足實現(xiàn)當前的需求,程序不容易維護,不容易擴展,更不容易復(fù)用。從而達不到高質(zhì)量代碼的要求?!?
小菜:“鳥哥呀,我有點糊涂了,如何才能容易維護,容易擴展,又容易復(fù)用呢,能不能具體點?”
大鳥:“比如說,我現(xiàn)在要求你再寫一個windows的計算器,你現(xiàn)在的代碼能不能復(fù)用呢?”
小菜:“那還不簡單,把代碼復(fù)制過去不就行了嗎?改動又不大,不算麻煩?!?br>
大鳥:“小菜看來還是小菜呀,有人說初級程序員的工作就是Ctrl+C和Ctrl+V,這其實是非常不好的編碼習慣,因為當你的代碼中重復(fù)的代碼多到一定程度,維護的時候,可能就是一場災(zāi)難。越大的系統(tǒng),這種方式帶來的問題越嚴重,編程有一原則,就是用盡可能的辦法去避免重復(fù)。想想看,你寫的這段代碼,有哪些是和控制臺無關(guān)的,而只是和計算器有關(guān)的?”
四 業(yè)務(wù)的封裝
小菜:“你的意思是分一個類出來? 哦,對的,讓計算和顯示分開?!?br>
大鳥:“準確的說,就是讓業(yè)務(wù)邏輯與界面邏輯分開,讓它們之間的耦合度下降。只有分離開,才容易達到容易維護或擴展。”
小菜:“讓我來試試看?!?BR>
復(fù)制代碼 代碼如下:
class Program
{
static void Main(string[] args)
{
try
{
Console.Write("請輸入數(shù)字A:");
string strNumberA = Console.ReadLine();
Console.Write("請選擇運算符號(+、-、*、/):");
string strOperate = Console.ReadLine();
Console.Write("請輸入數(shù)字B:");
string strNumberB = Console.ReadLine();
string strResult = "";
strResult = Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA),Convert.ToDouble(strNumberB),strOperate));
Console.WriteLine("結(jié)果是:" + strResult);
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("您的輸入有錯:" + ex.Message);
}
}
}
public class Operation
{
public static double GetResult(double numberA,double numberB,string operate)
{
double result = 0d;
switch (operate)
{
case "+":
result = numberA + numberB;
break;
case "-":
result = numberA - numberB;
break;
case "*":
result = numberA * numberB;
break;
case "/":
result = numberA / numberB;
break;
}
return result;
}
}
小菜:“鳥哥,我寫好了,你看看!”
大鳥:“哈,孺鳥可教也,:),寫得不錯,這樣就完全把業(yè)務(wù)和界面分離了?!?
小菜心中暗罵:“你才是鳥呢。” 口中說道:“如果你現(xiàn)在要我寫一個Windows應(yīng)用程序的計算器,我就可以復(fù)用這個運算類(Operation)了?!?
大鳥:“不單是Windows程序,Web版程序需要運算可以用它,PDA,手機等需要移動系統(tǒng)的軟件需要運算也可以用它呀?!?
小菜:“哈,面向?qū)ο蟛贿^如此。下會寫類似代碼不怕了?!?
大鳥:“別急,僅此而已,實在談不上完全面向?qū)ο?,你只用了面向?qū)ο笕筇匦缘囊粋€,還兩個沒用呢?”
小菜:“面向?qū)ο笕筇匦圆痪褪欠庋b、繼承和多態(tài)嗎,這里我用到的應(yīng)該是封裝。這還不夠嗎?…………我實在看不出,這么小的程序如何用到繼承。至于多態(tài),其它我一直也不太了解它到底有什么好處,如何使用它。”
大鳥:“慢慢來,有的東西好學了,你好好想想吧,我要去“魔獸”了,改時聊?!?
相關(guān)文章
C#實現(xiàn)ListView選中項向上或向下移動的方法
這篇文章主要介紹了C#實現(xiàn)ListView選中項向上或向下移動的方法,通過兩個按鈕點擊事件實現(xiàn)ListView選中項的上下移動功能,需要的朋友可以參考下2015-06-06
c# SqlDataAdapter中的Fill是怎么實現(xiàn)的
這篇文章主要介紹了c# SqlDataAdapter中的Fill是怎么實現(xiàn)的,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-07-07
C#實現(xiàn)軟件開機自動啟動的兩種常用方法總結(jié)
這篇文章主要為大家詳細介紹了C#實現(xiàn)軟件開機自動啟動的兩種常用方法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下2023-07-07

