关于面向对象(OO)和面向过程(OOP),基础的概念就不赘述了,看了一下,大家都是有自己的看法的.
C语言是面向过程的,我们发现要实现某一个需求,比如说"小米回家"这个需求,先是下班,然后搭车,在然后到家,C Code Example:
public class GotoHome
{
void OffDuty()
{
// 添加下班的具体实现代码
//如判断时间,日期等等
}
void GetCar()
{
//添加搭车的具体实现代码
//如招手,上车等等
}
void GoHome()
{
//添加回家的具体实现代码
//如拿出钥匙,开门等等
}
很显然,这个是一个过程,按顺序执行到GoHome()函数时,就可以实现这样的需求了,题目虽然说"小米回家",但是好像不管小米什么事,这个就是面向过程的好处,事先设计好每个函数,也就是小米回家的过程,然后依次调用,就OK了.但是遇到了少则几十,多则几百的繁杂的工序时,难道你还要写几百个函数??所以就要说道面向对象了.
面向对象就是以事物为中心,什么东西都可以成为对象,一杯咖啡,一个包子等等,前面有位同仁说过,需求是不断变化的,为了满足客户的需求和程序员不被烦死的情况下,使用了面向对象.精力追求代码的最简化,当然是在实现功能的前提下.C# Code Example:
代码有点多,但很容易理解,这个是一个简单工厂模式,实现加,减,乘,除运算.
/// <summary>
/// Operation运算类
/// </summary>
public class Operation
{
private double numA = 0;
private double numB = 0;
public double NumberA
{
get { return numA; }
set { numA = value; }
}
public double NumberB
{
get { return numB; }
set { numB = value; }
}
public virtual double GetResult() //计算的虚方法
{
Double result=0;
return result;
}
}
/// <summary>
/// 加法运算类
/// </summary>
public class OpertionAdd:Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
/// <summary>
/// 减法运算类
/// </summary>
public class OpertionSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA -NumberB;
return result;
}
}
/// <summary>
/// 乘法运算类
/// </summary>
public class OpertionMul : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
/// <summary>
/// 除法运算类
/// 除数不能为0
/// </summary>
public class OpertionDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB==0)
{
throw new Exception("除数不能为0");
}
else
{
result = NumberA / NumberB;
}
return result;
}
}
/// <summary>
/// 运算类工厂
/// </summary>
public class OpertionFactory
{
public static Operation CreateOperate(string operate)
{
Operation opr = null;
switch (operate)
{
case "+":
opr = new OpertionAdd();
break;
case"-":
opr = new OpertionSub();
break;
case"*":
opr = new OpertionMul();
break;
case"/":
opr = new OpertionDiv();
break;
}
return opr;
}
}
/// <summary>
/// 客户端代码
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void BtnOk_Click(object sender, EventArgs e)
{
Operation opr;
opr = OpertionFactory.CreateOperate(ListBox1.SelectedItem.Text);
opr.NumberA = Convert.ToDouble(Txtnum1.Text);
opr.NumberB = Convert.ToDouble(Txtnum2.Text);
//opr.NumberA = 4;
//opr.NumberB = 2;
double result = opr.GetResult();
LblMessage.Text = result.ToString();
}
}
首先,写一个运算类Operation.得到两个数,将两个数封装,然后有一个GetResult()的虚方法,然后就是各个算法的子类都要继承:Operation类,继承它后,就重写了GetResult()方法,这样要修改任何一个算法就于其它的算法没关系,要增加开根或其它算法,只需增加一个运算子类.当然还要在运算类工厂改一下CASE语句就OK了.这个就是所谓的低耦合了吧.由于面向对象的三个特性,使得程序更容易维护,更容易扩展,不像面向过程那样戳襟见肘了.