显示标签为“面向对象思想”的博文。显示所有博文
显示标签为“面向对象思想”的博文。显示所有博文

2009年4月19日星期日

面向对象必知:继承本质论

面向对象必知:继承本质论
每个人开始学习面向对象的时候,基本上都感觉自己很能理解什么是“继承”,可是我相信没有多少个人是真正地理解了“继承的本质”。
继承,就是面向对象中的类与类直接的关系,继承的类叫做子类或者派生类,而被继承的泪叫做父类、基类或者超类。通过继承,子类可以拥有父类的属性、方法,同时子类也可以添加新的属性或者方法,还可以修改父类的方法和属性等。
在《你必须知道的.NET》中,作者列举了下面几个关于继承的要点:
1、继承是可以传递的,子类是对父类的扩展,必须继承父类方法,同时可以添加新方法;
2、子类可以调用父类的方法、属性和字段,但是父类不能够调用子类的方法、属性和字段;
3、虚方法如何实现覆写操作,使得父类指针可以指向子类对象成员;
4、子类不仅继承了父类公共成员,也继承了私有成员,只是在子类中不被访问;
5、new在虚方法继承中起阻断作用。
上面这五条几乎可以说是继承的本质,深刻理解了这些,基本可以说对继承掌握了,不过还有一个比较重要的地方需要注意,请看:
#region 深入理解继承机制、多态、封装
public abstract class Animal
{
public abstract void ShowType();
public void Eat()
{
Console.WriteLine("All Animals need eating!");
}
}
public class Bird : Animal
{
private string type = "Bird";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
private string color;
public string Color
{
get { return this.color; }
set { this.color = value; }
}
}
public class Chicken : Bird
{
private string type = "Chicken";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
public void ShowColor()
{
Console.WriteLine("Color is {0}", Color);
}
}
#endregion
上面是定义了一个抽象父类和两个子类,下面是调用方法:
#region 深入理解OO思想
//Bird bird 创建的是一个Bird类型的引用,而new Bird()完成的是创建Bird对象,分配内存空间和初始化操作
Bird bird = new Bird();
Chicken chicken = new Chicken();
Bird bird2 = new Chicken();//请注意上面这里的区别
bird.ShowType();
chicken.ShowType();
bird2.ShowType();
#endregion
如果你能够了解为什么上面得到的结果,你就深刻理解了什么是继承了

2009年4月12日星期日

面向对象必知:深入理解对象

面向对象必知:深入理解对象
上一节讲到了类,这次讲对象。一个类可以创建对象,对象可以操作类里面的方法,也可以操作类从父类继承的合法方法,还可以操作其他类的共用方法。
在程序设计(这里都以C#语言为准)中的对象和人类世界中的是类似的,人类世界中每一个人都是一个对象,一个人有自己的姓名、身高等属性,一个人可以做很多事情,也受到很多约束;而程序设计里的对象就是模拟了人类世界的对象,一个对象必须要创建,这个对象在创建之时就确定了它的属性,这个对象可以有很多方法,这个对象受到访问权限的约束。
人类生活在人类社会这个时间里,而对象生存在.NET中的CLR环境;人类在社会里受到法律、风俗等约束,对象在CLR里也同样有着自己的一套约定,比如类型、语法等。
对象最为重要的是:有自己的属性(有如一个人的属性)、有自己可以访问的方法(有如一个人可以做的事情)、访问权限(有如一个人做什么事情受到的权限限制)。

2009年4月9日星期四

面向对象程序设计必知:深入理解类

面向对象必知:深入理解类
“人以类聚”,这个成语说明了类的概念,在面向对象设计中的类也是如此,一个类是一组东西的抽象,类可以有抽象出来的类(抽象类),也可以是具体的类,抽象类往往都有具体类,具体类负责实现抽象类定义的方法。一个类,里面定义了属于这个类别的东西共同拥有的属性和方法,比如Duck鸭子类,里面有叫声,羽毛等鸭子都有的属性,有游泳,叫等鸭子都有的方法。
在C#里类还分静态类和非静态类,最大的区别是静态类里必须都是静态方法,静态类必须用类名去访问里面的方法,静态类是编译时就确定的;非静态类必须先创建一个实例对象,然后才能去访问类里的成员和方法,非静态类是动态绑定的,也就是在执行的时候才确定要执行什么方法。
类有修饰它的关键字:Public、Protected,Private。这几个关键字代表的意思是:
1、Public:公共的类,这个类可以在外面的类被访问到;
2、Protected:私有的类,这个类可以在继承它的类被访问到;
3、Private:私有的类,这个类不能在任何其他外面的被类访问到。

面向对象思想研究心得体会

封装、继承、多态,这三个是面向对象最重要的概念,抽象则是灵魂与核心。但是真正的面向对象决不是通过简单的继承、通过实现简单的多态来实现的,面向对象的核心在于它的几个指导原则(单一职责原则,接口隔离原则,依赖倒置原则,Liskov原则,开发封闭原则)下设计出相互作用的类。

面向对象还有两个特别的名词:类,对象。类与类之间的相关联系(聚合、泛化、依赖、关联),对象与对象之间的转换关系,这两者是真正考验一个人面向对象设计能力的指标。

在一个面向对象系统中,大量的类在一起,它们不可能都没有相互关系,如果这样的话就无法完成优秀的面向对象设计架构。在C#中,对象与之间的关系,主要在于处理好父类对象和之类对象之间的引用关系。

1、单一职责原则:一个类,最好只做一件事,只有一个引起它变化的原因;

2、开放封闭原则:软件实体应该是可扩展,而不可修改的。也就是说扩展是开放的,修改是封闭的;

3、依赖倒置原则:依赖于抽象,而不是依赖与具体;

4、接口隔离原则:使用多个小的专门的接口,而不要使用一个大的总接口;

5、Liskov原则:子类必须能够替换其基类。 以上这五个原则在面向对象设计中非常关键,只有灵活地运用了才可以真正地掌握好面向对象思想。