麵向對象編程實例
上一篇博客主要是在理論上介紹麵向對象編程,下麵通過一個計算器的實例來學習麵向對象的好處。
按照麵向對象的三大特征:
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
上一篇:
排錯公式-jobdu-1451
下一篇:
線程、進程 的創建
5月3日雲棲精選夜讀:乾隆會判阿爾法狗死刑嗎 ——淺談當前人工智能的技術進化
C# VS2012操作word文檔 (一).創建文檔
互聯網企業安全高級指南3.11 業務持續性管理
Data Migration Pre-Check Failures and Solutions
製造業企業轉型 機器人視覺應用升級
【轉載】阿裏雲 CodePipeline 持續集成之發布靜態網站到OSS
1.使用XMLHttPRequest控件異步獲取數據
中信集團張波:信息化已經過去,數字化剛剛到來
Java中的HashCode(2)之Hashset造成的內存泄露
木馬開啟智能識別?深度解析新型變形惡意軟件LokiBot!