面向对象(类,面向对象三大特性)

面向对象的编程区别于面向过程的编程,其操作的单元是类,而面向过程操作的单元是方法。即面向过程的编程是由一个又一个的方法组成的。而面向对象的编程是由一个又一个类

面向对象的编程区别于面向过程的编程,其操作的单元是类,而面向过程操作的单元是方法。即面向过程的编程是由一个又一个的方法组成的。而面向对象的编程是由一个又一个类组成的。相对于面向过程,面向对象的代码复用性更好,代码的隐蔽性更高,并且更加符合人类思维的方式。

  面向对象的最基础的单元就是类。类(Class)是一个抽象的概念,是对某一类事物的描述。例如:猫,狗,人。而对象(object)就是类的实例化。即符合类描述的具体的单个成员。例如我就是Person类实例化的对象。我是符合人描述的具体的单个成员。在创造对象的过程就叫做类的实例化。

  类包含描述某种事物的状态(例如姓名,性别)和行为(唱歌,跳舞,写代码)。

  在.net平台而言,最基本的编程结构就是类类型。正式的说,类是由字段数据(通常叫做成员变量)以及操作这个数据的成员(如构造函数,属性,方法,事件等)所构成的自定义类型。其中字段数据表示状态。

1
2
3
4
5
6
7
8
9
10
Class Person
{
        //表示自身状态的字段
    String Name;
    String Sex;
        //表示行为的方法
    Public void Sing();
    Public void Dance();
    Public void Coding();
}

面向对象编程(OOP)的三个特性:

1.封装性

   封装是将对象用户(用你编写的类进行编程的人)不必了解的实现细节隐藏起来的一种语言能力。

1     //DatabaseReader封装了数据库操作的细节
2     DatabaseReader dbReader = new DatabaseReader();
3     dbReader.Open(@"C:\AutoLot.mdb");

  和封装编程逻辑紧密相关的概念就是数据的保护概念。理想情况下对象的状态数据都应该是隐蔽的,外部不能直接的访问,只能通过访问函数来进行“有礼貌的访问”。

2.继承性

  继承指的是基于已有的类型来创建心类的语言能力。通过继承,子类可以继承基类(或称父类)的核心功能,并且扩展了基类的行为。

  

  从图中我们可以看出“矩形是图形,图形是对象”这就构建成了一种“is - a”的关系,Is- a关系又称为继承关系。

我们会认为Shape定义了许多派生类都公有的成员(颜色,高度)。由于Rectangle扩展了Shape,它也就继承了由ShapeObject定义的核心功能。同时它还有属于自己独特的功能。

  区别于C++C#不支持多重继承的概念(所以引入了接口的概念)继承的一个很大的优点就是提高了代码的复用性,OOP中还有另外的一种形式的代码重用:包含/委托模型(has-a关系,也成聚合)这种重用的形式不是用来建立父类和子类关系的。它意味着,一个类可以定义另一个类的成员变量,并向对象用户间接的公开它的功能。

例如构建一个汽车(Car)的类,想表达一辆车中有一个(has-a)收音机的概念。让Car继承Radio类显然是不符合逻辑的。需要的是两个类一起合作,其中Car类创建并公开了Radio的功能。

 

复制代码
1 Class Car
2 {
3     Radio _Radio;
4 }
5 Class Radic
6 {
7     
8 }
复制代码

 

3.多态性

  同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

  实际上就是同一个类型的实例调用“相同”的方法,产生的结果是不同的。这里的“相同”打上双引号是因为这里的相同的方法仅仅是看上去相同的方法,实际上它们调用的方法是不同的。

  当CirCleRectangle都调用Draw()的时候,看似这两个实例调用了“相同”的方法,但是实际上,它们是调用各自的Draw()方法。所以只是看似相同,实际上是不同的方法。并且产生了不同的执行结果,这就是多态性。

  同时,这里讲的多态性也只是简单的多态性。多态性用来当基类规定好一些实现的方法时,子类只需要重写这些方法就好。这样增强了代码的复用性。