程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#,用面向對象思想寫一個計算器

c#,用面向對象思想寫一個計算器

編輯:C#入門知識

設計模式的第一個例子之後,我再次體會到了做一個軟件,不僅僅是為了功能的實現,更多的是“為人民服務”!

不用面向對象的方法去寫,要實現一個簡單的只有“+ - * /”計算器,那是相當簡單的,只需獲取用戶輸入的數字和運算符,然後“A運算B”得出結果顯示出來就行了。如下代碼所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
	    //輸入要運算的數字和運算符
            Console.WriteLine("請輸入數字A");
            double A =Convert .ToDouble ( Console.ReadLine());
            Console.WriteLine("請輸入運算符");
            string operate = Console.ReadLine();
            Console.WriteLine("請輸入數字B");
            double B = Convert.ToDouble(Console.ReadLine());
	    //將結果存儲到變量D裡面
            double D=0;
	    //用if條件語句判斷輸入的符號而進行相應的運算並輸出
            if (operate =="+")
            {
                D = A + B;
                Console.WriteLine("A+B=" + D);

            }
            if (operate =="-")
            {
                D = A - B;
                Console.WriteLine("A-B=" +D);
            }
            if  (operate =="*")
            {
                D = A * B;
                Console.WriteLine("A*B=" +D);
            }
            if (operate =="/")
            {
                D = A / B;
                Console.WriteLine("A/B=" + D);
            }
        }
    }
}

如果用戶的需求發生了變化了呢?比如想再加個開根號的運算,然後就加個if語句,在輸入項裡也要改動,而且當除數為零時,還會發生錯誤,直接導致程序死掉,這些變化的產生,對於修改程序是一件非常麻煩的事,小程序還好,大程序的話就特別容易導致錯誤的發生,而且不易於修改,很可能修改一個地方,卻導致了另一個地方出現問題,這種整個程序的程序塊與程序塊之間有著組合的關系,非常不利於維護和擴展,所以,有了面向對象的思想。

應該把整個程序抽象出一些類來,每個實現一部分功能,就如用於顯示的就抽象一個顯示類,運算的為運算類,還有運算符類等等,當程序需要擴展增加某項功能時候,我們只需新增一個類就行,跟別的沒關系,所以非常易於維護和擴展。修改後的代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 工廠模式_計算器2
{
    class Program
    {
        static void Main(string[] args)
        {
            try		//如果遇到錯誤,進行提示
            {
		//用於輸入
                Console.WriteLine("請輸入數字A");
                double _numA =Convert.ToDouble( Console.ReadLine());
                Console.WriteLine("請輸入運算符(+、-、*、/)");
                string _operate = Convert.ToString ( Console.ReadLine());
                Console.WriteLine("請輸入數字B");
                double _numB = Convert.ToDouble(Console.ReadLine());

                double _result;		//保存結果的變量

                Operation oper;
                oper = operationFactory.createOperate("+");
                oper.numberA = _numA;		//給類屬性賦值
                oper.numberB = _numB;

                operationFactory.createOperate(_operate);
                _result = oper.GetResult();

                Console.WriteLine(_result);	//輸出結果
            }
            catch
            {
                Console.WriteLine("輸入有誤!");
            }
            
            
        }
    }
    public class Operation			//運算父類
    {
        private double _numberA = 0;
        private double _numberB = 0;

        public double numberA
        {
            get { return _numberA; }
            set { _numberA = value; }
        }
        public double numberB
        {
            get { return _numberB; }
            set { _numberB = value; }
        }
        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }

    public class operationAdd:Operation		//繼承運算父類的加法運算
    {
        public override double GetResult()
        {
            double result = 0;
            result = numberA + numberB;
            return result;
        }
    }

    public class operationSub:Operation		//繼承運算父類的減法運算
    {
        public override double GetResult()
        {
            double result = 0;
            result = numberA - numberB;
            return result;
        }
    }

    public class operationMul:Operation		//繼承運算父類的乘法運算
    {
        public override double GetResult ()
        {
            double result = 0;
            result = numberA * numberB;
            return result;
        }
    }

    public class operationDiv :Operation	//繼承運算父類的除法運算
    {
        public override double GetResult()
        {
            double result;
            result = numberA / numberB;
            return result;
        }
    }

    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;
        }
    }
}

後的程序變得層次分明,並抽象出了幾個類,這樣以後再需要增加功能,就直接增加類就行了,別的類根本影響不到!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved