⾯向对象(类,⾯向对象三⼤特性)
⾯向对象的编程区别于⾯向过程的编程,其操作的单元是类,⽽⾯向过程操作的单元是⽅法。即⾯向过程的编程是由⼀个⼜⼀个的⽅法组成的。⽽⾯向对象的编程是由⼀个⼜⼀个类组成的。相对于⾯向过程,⾯向对象的代码复⽤性更好,代码的隐蔽性更⾼,并且更加符合⼈类思维的⽅式。
⾯向对象的最基础的单元就是类。类(Class)是⼀个抽象的概念,是对某⼀类事物的描述。例如:猫,狗,⼈。⽽对象(object)就是类的实例化。即符合类描述的具体的单个成员。例如我就是Person类实例化的对象。我是符合⼈描述的具体的单个成员。在创造对象的过程就叫做类的实例化。
类包含描述某种事物的状态(例如姓名,性别)和⾏为(唱歌,跳舞,写代码)。
在平台⽽⾔,最基本的编程结构就是类类型。正式的说,类是由字段数据(通常叫做成员变量)以及操作这个数据的成员(如构造函数,属性,⽅法,事件等)所构成的⾃定义类型。其中字段数据表⽰状态。
1 2 3 4 5 6 7 8 9 10Class 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,它也就继承了由Shape和Object定义的核⼼功能。同时它还有属于⾃⼰独特的功能。
区别于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.多态性
同⼀操作作⽤于不同的对象,可以有不同的解释,产⽣不同的执⾏结果,这就是多态性。
实际上就是同⼀个类型的实例调⽤“相同”的⽅法,产⽣的结果是不同的。这⾥的“相同”打上双引号是因为这⾥的相同的⽅法仅仅是看上去相同的⽅法,实际上它们调⽤的⽅法是不同的。
当CirCle和Rectangle都调⽤Draw()的时候,看似这两个实例调⽤了“相同”的⽅法,但是实际上,它们
是调⽤各⾃的Draw()⽅法。所以只是看似相同,实际上是不同的⽅法。并且产⽣了不同的执⾏结果,这就是多态性。
同时,这⾥讲的多态性也只是简单的多态性。多态性⽤来当基类规定好⼀些实现的⽅法时,⼦类只需要重写这些⽅法就好。这样增强了代码的复⽤性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论