前言
接着上篇文章的内容,本篇文章主要介绍c#总结第二部分——面向对象方面的内容,这也是学习c#过程中一个很基础的学习内容。
正文
面向对象
什么是面向对象?
面向对象(Object Oriented,简称OO)是指行为的主体是对象。
什么是面向对象编程?
面向对象编程(Object Oriented Programming,简称OOP)是指使用对象进行程序设计,以对象作为基本的结构单位。比如Smalltalk、EIFFEL、C++、C#、JAVA等。
为什么要面向对象?
解决程序可能存在的一些问题:不易维护,不易复用,不易扩展,灵活性差。
下面以“活字印刷术”为例(第一次印刷“大好河山”,第二次印刷“山清水秀”,第三次印刷“山清水秀 鸟语花香”),介绍一下面向对象的四种特性:
(1)可维护:关键词是“改”,只需更改变化的部分,即第二次在第一次刻好的四个字的基础上加刻“清”“水”“秀” 即可。
(2)可复用:关键词是“用”,重复使用相同的部分,即第二次使用第一次刻好的“山”。
(3)可扩展:关键词是“扩”,可以增加新的内容,即第三次可以在第二次的基础上加印四个字“鸟”“语”“花”“香”。
(4)灵活性好:关键词是“活”,可以灵活排列内容,即这些字的顺序是可以变化的。
面向对象VS面向过程
举一个简单的例子就可以很容易区分开这两者——下五子棋。
面向对象——研究主体:白棋子、黑棋子、棋盘、规则、下棋双方
面向过程——研究过程:游戏开始-白棋走-绘制画面-判断输赢-黑棋走--绘制画面-判断输赢-...(循环)-一方胜利-游戏结束
对象与类
概念
对象:是一个自包含的实体,用一组可识别的特性和行为来标识。(通俗的说,所有的东西都是对象,它可以被看到、听到、感觉到。。。)
类:具有相同的属性和功能的对象的抽象的集合。(比如说猫,狗,猪等它们不同于人,所以可以把它们抽象成一个“动物”类。)
延伸概念——实例与构造方法
实例:是一个真实的对象(猫是动物的实例,猫也是一个对象。)
实例化:创建对象的过程(创建猫这个实例的过程)
构造方法:也叫构造函数,是对类进行初始化,与类同名。
类的组成——属性,方法
区别 | 属性 | 方法 |
1 | 公开类成员字段的结构 | 定义类可以执行的操作 |
2 | 解决对象是什么 | 解决对象能做什么 |
3 | 封装对象数据 | 封装对象行为 |
4 | 获取对象字段的值 | 改变对象的行为 |
5 | 名词 | 动词 |
(1)属性格式
public 数据类型 属性名称
{
get{return 字段;}//读访问器,为属性赋值
set{字段=value;}//写访问器,从属性获取值
}
举例
class Person
{
private int _age;
public int Aget
{
get { return _age; }
set { _age = value; }
}
}
(2)方法格式
访问修饰符/static 返回类型 方法名(参数列表)
{
方法主体
}
举例
class Cat
{
public void SayHello()//定义无参无返回类型
{
Console.WriteLine("hello world");
}
static void main()//创建对象,调用方法
{
Cat cat = new Cat();
cat.SayHello();
}
}
面向对象的三大特性
封装
(1)定义:把事物抽象为类,对外接口暴露,将实现和内部数据隐藏。
每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其他对象来完成自己的操作。
(2)好处:良好的封装能够减少耦合;
类内部的实现可以自由地修改;
类具有清晰的对外接口
继承
(1)定义:在原有类基础上定义一个新类,新类可以直接使用原有类的功能,也可以对这些功能进行扩展,原有类称为“父类”或“基类”,新类称为“子类”或“派生类”。继承体现了从一般到特殊的关系,子类具备父类和自己的双重特性。
(对象的继承指“is-a”的关系,如果两个对象A和B,可以描述成B是A,则表明B可以继承A。比如猫、狗与动物的关系,猫和狗都是动物的一种,因此他们之间就是继承关系。)
(2)内容:子类可以从父类中继承——方法、域、属性、事件、索引指示器。
构造方法不能被继承,只能被调用,调用时,使用base关键字。
(3)特点:子类拥有父类非private的属性和功能
子类具有自己的属性和功能(子类可以扩展父类没有的属性和功能)
子类还可以以自己的方式实现父类的功能(方法重写)
(4)优缺点:
优点:所有子类公共的部分都放在父类,使代码得到共享,避免了重复
使修改或继承而来的实现都较为容易
缺点:父类变,子类不得不变
破坏包装,父类实现细节暴露给子类
多态
(1)定义:表示不同的对象可以执行相同的操作,但要通过他们自己的实现代码来执行。通俗的说,就是一个行为可以以多种不同的状态实现,比如先定义一个动物叫的方法,猫、狗、猪都可以叫,但叫声不同。
(2)特点:子类以父类的身份出现
子类在工作时以自己的方式来实现
子类以父类的身份出现时,子类特有的属性和方法不可以使用
(3)实现:子类接替父类的类成员时,父类必须将该成员声明为虚拟的,通过在返回类型前加virtual实现;
子类可以选择使用override(方法重写/覆写),将父类实现替换为它自己的实现
(4)作用:把子类对象当做父类来看,可以屏蔽不同子类对象之间的差异,写成通用的代码,减少工作量,提高效率。
小结
每次总结都会发现学习过程中很多理解的不够或理解有误的地方,这就是总结提高我们能力的一个方面,珍惜每一次总结的过程,回头看,点点滴滴都是甘甜。
欢迎指正