C#面向对象概念
一、面向对象的概念:
以接近现实的处理手法来处理项目中的设计。一个例子:
请描述一下森林中一只狮子捕食一只兔子的场景。
用结构化编程实现 | 用面向对象方式实现 |
strut Lion { int lId; string name; } strut Rubbit{ int 1Id; string name; } 定义函数: void lionRunning(Lion); void lionCatch(Lion,Rubbit) void lionEating(Lion,Rubbit ) void lionHappy(Lion); void rubbitCrying(Rubbit) void rubbitRunning(Rubbit) bool rubbitIsDead(Rubbit); | Class Lion { int lIdl string name; public void Running(){}; public void Catch(Rubbit); public void Eating(Rubbit); public void Happy(); } class Rubbit { int rId; string name; public void Running() public void Crying() public bool Isdead() } |
主程序: Lion fatty; Rubbit may; lionRunning(fatty); rubbitRunning(may); lionCatch(fatty,may); rubbitCrying(may); lionEating(fatty,may); if (rubbitIsDead(may)) lionHappy(fatty); | 主程序 Lion fatty=new Lion(); Rubbit may = new Rubbit(); Fatty.Running(); May.Running(); Fatty.Catch(may); May.Crying(); Fatty.Eating(may); If (may.IsDead()) Fatty.Happy(); |
1.从左边的设计,我们看出代码是一系列的函数构成,有以下几点:
不直观,程序的组织性不强,函数调用时不容易确定具体调用哪一个
要传的参数太多
2.右边代码,看起来要好一些,函数的参数少,而且都被组织到类的内部,要调用函数时只要确定是哪一个对象要调用,就很容易找到,从程序调用来进右边的主程序更接近现实世界的处理方式
二、面向对象的特点
1. 封装
从上表右边看来,函数代码写在类的内部,只能被类的对象所调用,别人不可随便访问,这样可以保护你的代码,而且函数与对象相关,方便调用
2. 继承
从代码重用方面,我们可以把共性的特征,和行为抽象出来,比如,程序的需求要我们实现所有的食肉动物都能捕食食草类动物,对于上表左边程序,我们要全面修改代码,而对于右边的程序我们可做如下抽象:
Class Carnivore
{
int aId;
string name;
public void running()
public void Catching(Vegetarian)
public void Eating(Vegetarian);
public void Happy();
}
class Vegetarian
{
int aId;
string name;
public void running()
public void crying()
public bool Isdead()
}
然后,我们使用继承 class Lion : Carnivore
Class Rubbit : Vegetarian
这样,我们不用构造两个类,就能使用它们公共的特征和函数了
这样一来,我们可以完成所有食肉动物与食草动物的捕食关系了
如果,我们要实现老虎捕食猎物,那也很容易了,
我们只要定义下面代码:
Class Tigger : Carnivore
就可以了
3. 多态
从上面的继承中我们可以看出,实现一个新的类是那么容易,
但大家想一个问题,老虎与狮子,毕竟不是一种动物,那们的方法不可能完全相同,针对不同的子类,它的方法也不可能相同。比如它们的happy方法可能是这样的
public void happy()
{
Console.WriteLine(“我高兴,所以我发出虎啸”); //如果是狮子,就可能发出的是狮吼
}
这个问题我们放在下一课中祥细讨论
三、面向对象设计程序的作用
1. 重用代码
2. 可维护性高
3. 可插入性(这个特点与多态相关,下次课重点讲述)
意为:程序不需修改或少做修改,就可实现用户提出的新的问题
如上面
4. 直观,更接近现实
5. 方便调用
四、综合
对象是什么
从概念层面讲,对象是某种拥有责任的抽象。(职能)
从规格层面讲,对象是一系列可以被其他对象使用的公共接口。(对象交互)
从语言实现层面来看,对象封装了代码和数据。(数据和程序)