閱讀53 返回首頁    go 阿裏雲 go 技術社區[雲棲]


麵向對象編程實例

        上一篇博客主要是在理論上介紹麵向對象編程,下麵通過一個計算器的實例來學習麵向對象的好處。

       按照麵向對象的三大特征:

       1、封裝

        對事物的狀態和行為的細節封裝,這樣就形成了一個可以重複使用的“零件”,這樣就使得我們寫的代碼可複用,下麵是計算器的代碼展示,把計算器的業務邏輯與界麵邏輯分開:    

///業務邏輯——OPeration運算類
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;
        }
    }

///界麵邏輯——客戶端代碼 
static void Main (string[] args)
        {
            Operation oper;
            oper = OperationFactory.createOperate("+");
            oper.NumberA = 1;
            oper.NumberB = 2;
            double result = oper.GetResult();
            ///對界麵進行設計定義
            try 
            {
                Console.Write("請輸入數字A:");
                string strNumberA = Console.ReadLine();
                Console.Write("請選擇運算符號(+、-、*、/):");
                string strOperate = Console.ReadLine();
                Console.Write("請輸入數字B:");
                string strNumberB=Console.ReadLine();
                string strResult="";
                strResult = Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA), Convert.ToDouble(strNumberB), strOperate));
                Console.WriteLine("結果是:" + strResult);
                Console.ReadLine();
            }
            catch (Exception ex)     ///錯誤信息提示
            {
                Console.WriteLine("您的輸入有錯:" + ex.Message);   
            }
            
        }
這樣,我們就可以自由的修改類的內部,用戶如果想寫一個其他版的程序,既可以直接複用這個Operation運算類。

         2、繼承        

class OperationAdd : Operation    ///加法類,繼承運算類
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA + NumberB;
            return result;
        }
    }
    class OperationSub : Operation   ///減法類,繼承運算類
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA -NumberB;
            return result;
        }
    }
    class OperationMul : Operation   ///乘法類,繼承運算類
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA * NumberB;
            return result;
        }
    }
    class OperationDiv : Operation   ///除法類,繼承運算類
    {
        public override double GetResult()
        {
            double result = 0;
            if (NumberB == 0)
                throw new Exception("除數不能為0.");
            result = NumberA / NumberB;
            return result;
        }
    }
加減乘除是運算方法類,運行時的代碼大部分都相同,把相同的代碼都放到父類運算類(OPeration)中,這樣寫代碼的時候重複的部分就可以不用寫,直接從父類中繼承就行,而且如果不用繼承,當你修改功能,就必須在所有重複的方法中修改,代碼越多,出錯的可能就越大。

        3、多態

        我們建一個簡單運算工廠,這個工廠的功能生產各種運算,加減乘除,平方根,立方根,自然對數,正弦餘弦...

public class OperationFactory
    {
        public static Operation createOperate(string operate)
        {
            Operation oper = null;
            switch (operate )      ///定義新的運算
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationSub();
                    break;
                case "*":
                    oper = new OperationMul();
                    break;
                case "/":
                    oper = new OperationDiv();
                    break;
            }
            return oper;
        }
    }
各種運算都是子類,他們都有一個共同的父類運算類(Operation),雖然每一種運算也是一種類,但是他們的最終結果是把幾個數的運算結果算出來。

這樣我們就實現了我們所寫的程序可維護、可擴展、可複用、靈活性好的功能。

 


       

最後更新:2017-04-03 12:56:25

  上一篇:go 排錯公式-jobdu-1451
  下一篇:go 線程、進程 的創建