面向对象封装
面向对象的三大特性:封装、继承、多态。
抽象的概念:
在封装的之前,还有一个概念叫抽象。如果说面向对象有四大特征的话,那么就是抽象、封装、继承和多态。抽象使我们进行封装的首要步骤。因为对象本身的状态与行为,以及对象之间的关系,都是抽象的结果。没有抽象,就没有对象。但是我们一般情况下都把抽象归为封装之内,所以我们常说的面向对象的三大特征是封装、继承、多态,从而少了抽象。
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。
例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。
共同特征是指那些能把一类事物与他类事物区分开来的特征,这些具有区分作用的特征又称本质特征。
所以抽象的过程也是一个裁剪的过程,不同的、非本质性的特征全部裁剪掉了。
所谓的共同特征,是相对的,是指从某一个刻面看是共同的。
比如,对于汽车和大米,从买卖的角度看都是商品,都有价格,这是他们的共同的特征,而从其他方面来比较是,他们则是不同的。
所以在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。
在软件开发过程中,识别稳定的需求、识别核心的需求、识别概念性的需求、设计系统的架构、定义系统中构件之间的接口关系等等都是抽象的过程,都是反应系统的本质特征的过程。
抽象的,才是稳定的,才是永恒的。 抽象的反义词是具体。人员往往会说:“你讲的太抽象了,能不能讲的具体一点?”
在开发语言中,有抽象类,有具体类,具体类可以继承自抽象类,可以实例化。抽象类可以派生出众多的不同的具体类。
所谓:“一生二,二生三,三生万物”。系统的稳定体现在抽象类,系统的变化体现在具体类。抽象类的层次要高于具体类。
系统因抽象而稳定,因抽象而生动。
我们在研究一类事物的时候,我们通常只关心我们研究该类事物中所关心的内容,比如这种事物它有什么,或者会做什么。这里的有什么指的就是他的成员字段,会什么指的是成员方法。有时候我们不想让使用者直接操作成员字段,通常我们会给字段封装用访问修饰符做限制,对于私有的字段我们可以把字段封装成属性,让使用者通过操作属性而对成员字段进行操作。
抽象的过程我们可以必做是在设计一个模具的图纸。我们要考虑到我们将要使用到哪些字段,哪些方法。
封装概念
封装:每个对象都包含有它能进行操作的所有信息,这个特性称为封装。这样的方法包含在类中,通过类的实例来实现。
封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。
通过封装使一部分成员充当类与外部的接口,而将其他的成员隐蔽起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。
封装其实可以必做是在根据模具图纸在刻画一个模具的过程。
类的定义
在面向对象的思想中最核心的就是对象,为了在程序中创建对象,首先需要定义一个类。类是对象的抽象,它用于描述一组对象的共同特征和行为。类中可以定义字段和方法,其中字段用于描述对象的特征,方法用于描述对象的行为。
比如我们来抽象一个Animal类
我们先分析对于Animal有什么,Animal会什么
[访问修饰符] [修饰符] class 类名 [: <基类名>] [ ,<接口列表>]
{
构造方法;
析构方法;
[<访问控制符>][<修饰符>] 数据类型 <变量名>;
[<访问控制符>][<修饰符>] 数据类型 <属性名>;
……
[<访问控制符>][<修饰符>] <返回值类型><方法名> ([参数列表]);
}
类的设计
在C#中,对象是通过类创建出来的。因此,在程序设计时,最重要的就是类的设计。接下来通过一个具体的案例来学习如何设计一个类。
假设要在程序中描述一个学校所有学生的信息,可以先设计一个学生类(Student),在这个类中定义两个字段name和age分别表示学生的姓名和年龄,定义一个方法Introduce()表示学生做自我介绍。
public class Student
{
public string name;
public int age;
public void Introduce()
{
//方法中打印字段name和age的值
Console.WriteLine("大家好,我叫" + name + ",我今年" + age + "岁!");
}
}
在例子的Student类中,定义了两个字段name和age,其中name字段为string类型,在C#中使用string类型的变量来引用一个字符串,具体示例如下。
string name = “李芳”;
访问修饰符
在上一个小节中出现的关键字private和public都属于修饰符,用于限定外界对类和方法的访问权限。在 C#中,访问修饰符共有四种,分别是 public、protected、internal、private,使用这四种访问修饰符可以组成五个可访问级别,具体如下。
● public:最高访问级别,访问不受限制。
● protected:保护访问级别,受保护的成员可由自身及派生类访问。
● internal:内部访问级别,只有在同一程序集中,内部类型或者成员才可访问。
● protected internal:内部保护级别,访问仅限于当前程序集,可由自身及派生类访问。
● private:私有访问,最低访问级别,私有成员只有在声明它们的类和结构中才可访问。
访问修饰符除了可以修饰类和方法,还可以修饰字段、属性、索引器,但不可以修饰命名空间、局部变量、方法参数。
对象的创建
应用程序想要完成具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。在C#程序中可以使用new关键字来创建对象,具体格式如下。
类名 对象名称= new 类名();
例如创建Person类的实例,具体代码如下。
Person p = new Person();
上面的代码中,“new Person()”用于创建Person类的一个实例对象,“Person p”则是声明了一个Person类型的变量p。中间的等号用于将Person对象在内存中的地址赋值给变量p,这样变量p便持有了Person对象的引用。为了便于描述,在本教材接下来的章节中,会将变量p引用的对象简称为p对象。内存中变量p和对象之间的引用关系如图所示。
在创建Person对象后,可以通过对象的引用来访问对象所有的成员,具体格式如下。
对象引用.对象成员