从一个实例看面向对象编程

面向过程到面向对象的实现过程(封装,继承,多态)

Code1:

class Program 



{ 



 static void Main(string[] args) 



 { 



 Console.Write("请输入数字A:"); 



 string A = Console.ReadLine(); 



 Console.Write("请选择运算符号(+、-、*、/):"); 



 string B = Console.ReadLine(); 



 Console.Write("请输入数字B:"); 



 string C = Console.ReadLine(); 



 string D = ""; 



 



 if (B == "+") 



 D = Convert.ToString(Convert.ToDouble(A) + Convert.ToDouble(C)); 



 if (B == "-") 



 D = Convert.ToString(Convert.ToDouble(A) - Convert.ToDouble(C)); 



 if (B == "*") 



 D = Convert.ToString(Convert.ToDouble(A) * Convert.ToDouble(C)); 



 if (O == "/") 



 D = Convert.ToString(Convert.ToDouble(A) / Convert.ToDouble(C)); 



 



 Console.WriteLine("结果是:" + D); 



 } 



}

code2:封装

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 = ""; 



 



switch (strOperate) 



{ 



 case "+": 



 strResult = Convert.ToString 



 (Convert.ToDouble(strNumberA) + Convert.ToDouble(strNumberB)); 



 break; 



 case "-": 



 strResult = Convert.ToString 



 (Convert.ToDouble(strNumberA) - Convert.ToDouble(strNumberB)); 



 break; 



 case "*": 



 strResult = Convert.ToString 



 (Convert.ToDouble(strNumberA) * Convert.ToDouble(strNumberB)); 



 break; 



 case "/": 



 if (strNumberB != "0") 



 strResult = Convert.ToString 



 (Convert.ToDouble(strNumberA) / Convert.ToDouble(strNumberB)); 



 else 



 strResult = "除数不能为0"; 



 break; 



} 



 





Console.WriteLine("结果是:" + strResult); 



 



 Console.ReadLine(); 



 



 



 } 



 catch (Exception ex) 



 { 



 Console.WriteLine("您的输入有错:" + ex.Message); 



 } 



 } 



}

code3:进一步分离业务层和界面层的封装实现

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 = ""; 



 



 strResult = Convert.ToString( 



 Operation.GetResult(Convert.ToDouble(strNumberA), 



 Convert.ToDouble(strNumberB), strOperate)); 



 



 Console.WriteLine("结果是:" + 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; 



 } 



}  

code4:(继承,多态的OOP应用和实现Demo)

/// <summary> 



 /// 运算类 



 /// </summary> 



 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> 



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



 oper = OperationFactory.createOperate("+"); 



 oper.NumberA = 1; 



 oper.NumberB = 2; 



 double result = oper.GetResult(); 

 

你可能感兴趣的:(面向对象)