1.1 面試受挫
1.2 初學者代碼毛病
1.3 代碼規范
1.4 面向對象編程
1.5 活字印刷 面向對象
喝酒唱歌+人生真爽,對酒當歌+人生真爽,對酒當歌+人生幾何,
可維護,可復用,可擴展,靈活性好,
1.6 面向對象好處
通過封裝,繼承,多態把程序的耦合度降低,
設計模式使程序更加靈活,容易修改且易於復用,
1.7 復制VS服用
計算與顯示分開,
1.8 業務的封裝
1.9 緊耦合VS松耦合
1.10 簡單工廠模式
運算類:
namespace OperationLibrary { /// <summary> /// 運算類 /// </summary> public class Operation { private double _numberA = 0; private double _numberB = 0; /// <summary> /// 數字A /// </summary> public double NumberA { get { return _numberA; } set { _numberA = value; } } /// <summary> /// 數字B /// </summary> public double NumberB { get { return _numberB; } set { _numberB = value; } } /// <summary> /// 得到運算結果 /// </summary> /// <returns></returns> public virtual double GetResult() { double result = 0; return result; } /// <summary> /// 檢查輸入字符串是否准確 /// </summary> /// <param name="currentNumber"></param> /// <param name="inputString"></param> /// <returns></returns> public static string checkNumberInput(string currentNumber, string inputString) { string result = ""; if (inputString == ".") { if (currentNumber.IndexOf(".") < 0) { if (currentNumber.Length == 0) result = "0" + inputString; else result = currentNumber + inputString; } } else if (currentNumber == "0") { result = inputString; } else { result = currentNumber + inputString; } return result; } } /// <summary> /// 加法類 /// </summary> class OperationAdd : Operation { public override double GetResult() { double result = 0; result = NumberA + NumberB; return result; } } /// <summary> /// 減法類 /// </summary> class OperationSub : Operation { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } } /// <summary> /// 乘法類 /// </summary> class OperationMul : Operation { public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; } } /// <summary> /// 除法類 /// </summary> class OperationDiv : Operation { public override double GetResult() { double result = 0; if (NumberB == 0) throw new Exception("除數不能為0。"); result = NumberA / NumberB; return result; } } /// <summary> /// 平方類 /// </summary> class OperationSqr : Operation { public override double GetResult() { double result = 0; result = NumberB * NumberB; return result; } } /// <summary> /// 平方根類 /// </summary> class OperationSqrt : Operation { public override double GetResult() { double result = 0; if (NumberB < 0) throw new Exception("負數不能開平方根。"); result = Math.Sqrt(NumberB); return result; } } /// <summary> /// 相反數類 /// </summary> class OperationReverse : Operation { public override double GetResult() { double result = 0; result = -NumberB; return result; } } /// <summary> /// 運算類工廠 /// </summary> 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; } case "sqr": { oper = new OperationSqr(); break; } case "sqrt": { oper = new OperationSqrt(); break; } case "+/-": { oper = new OperationReverse(); break; } } return oper; } } }
控制台:
namespace 計算器控制台 { class Program { static void Main(string[] args) { try { Console.Write("請輸入數字A:"); string strNumberA = Console.ReadLine(); Console.Write("請選擇運算符號(+、-、*、/):"); string strOperate = Console.ReadLine(); Console.Write("請輸入數字B:"); string strNumberB = Console.ReadLine(); string strResult = ""; Operation oper; oper = OperationFactory.createOperate(strOperate); oper.NumberA = Convert.ToDouble(strNumberA); oper.NumberB = Convert.ToDouble(strNumberB); strResult = oper.GetResult().ToString(); Console.WriteLine("結果是:" + strResult); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("您的輸入有錯:" + ex.Message); } } } }
WinForm:
namespace 計算器 { public partial class Form1 : Form { bool bOperate = false; Operation oper; public Form1() { InitializeComponent(); } private void button0_Click(object sender, EventArgs e) { if (bOperate) { txtShow.Text = ""; bOperate = false; } string number = ((Button)sender).Text; txtShow.Text = Operation.checkNumberInput(txtShow.Text, number); } private void buttonClear_Click(object sender, EventArgs e) { txtShow.Text = ""; } private void buttonAdd_Click(object sender, EventArgs e) { if (txtShow.Text != "") { oper = OperationFactory.createOperate(((Button)sender).Text); oper.NumberA = Convert.ToDouble(txtShow.Text); bOperate = true; } } private void buttonEqual_Click(object sender, EventArgs e) { if (txtShow.Text != "") { if (((Button)sender).Text != "=") oper = OperationFactory.createOperate(((Button)sender).Text); oper.NumberB = Convert.ToDouble(txtShow.Text); txtShow.Text = oper.GetResult().ToString(); bOperate = true; } } } }
1.11 UML類圖
