大话设计模式——附录A

版权声明:转载请注明出处 https://blog.csdn.net/weixin_39918693/article/details/89448300

面向对象基本知识点的生动讲解

A2、类与实例

一切事物皆为对象(类的实例)

类是具有相同的属性和功能的对象的抽象描述

类名称首字母需要大写,多个单词的类名称则各个字母大写

实例化是通过类创建对象的过程


A3、构造方法

和C++中的构造函数一样


A4、函数重载

函数重载提供了创建多个同名函数的能力,但这些函数需要使用不同类型的参数(参数的类型或个数必须有所不同)

函数重载可在不改变原方法的基础上,新增功能


A5、属性与修饰符

私有的变量叫字段;公有的变量是属性(这里的书写语法与C++不同,理解起来也不同)

C#里面的修饰符只是C++中修饰符的一部分


A6、封装

代码有大量重复不会是什么好事情

面向对象的三大特性

  • 1、封装
  • 2、继承
  • 3、多态

每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作

封装的好处:

  • 1、良好的封装能够减少耦合
  • 2、类内部的实现可以自由地更改
  • 3、类具有清晰的对外接口

A7、继承

类的继承代表了一种is-a的关系

  • 1、子类拥有父类非private的属性和方法
  • 2、子类具有自己特有的属性和方法
  • 3、子类可以对父类的虚函数进行重写

子类从父类中继承的成员有方法、域、属性、事件、索引指示器;但对于构造函数,其不能被子类继承,只能被子类调用

继承是一种类与类之间的强耦合关系

has-a关系


A8、多态

多态表示不同的对象可以执行相同的动作,但是动作的不同细节是通过它们自己的实现代码来执行的

多态的原理是当方法被调用时,无论对象是否被转换为其父类,都只有位于当前对象继承链最末端的方法实现会被调用

虚函数是按照其运行时类型而非编译时类型进行动态绑定调用的

没有学过设计模式,那么对多态、乃至对面向对象的理解多半都是肤浅和片面的


A9、重构

通过更改代码的结构来优化代码的结构(减少代码的重复量只是其中的一小部分)


A10、抽象类

  • 1、抽象基类不能实例化
  • 2、纯虚函数必须被子类重写(如果该子类想实例化对象的话)
  • 3、如果类中包含纯虚函数,那么类就必须定义为抽象基类,无论是否还包含其他一般的函数

在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点均应当是抽象基类

具体类不是用来被继承的(被继承的类均应该是抽象基类),这是编程设计者应该努力做到的一点


A11、接口

接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合

一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。实现接口的类必须要实现接口中的所有方法和属性(类实现接口)

声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式

一个类可以支持多个接口,多个类也可以支持相同的接口。接口的命名,前面要加一个大写字母I

不论是接口、抽象基类、类甚至对象,都是在不同层次、不同角度进行抽象的结果,它们的共性就是抽象

抽象基类和接口的异同点:

  • 1、类是对对象的抽象;抽象基类是对类的抽象;接口是对行为的抽象
  • 2、如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象基类
  • 3、从设计角度讲,抽象基类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类;而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义

实现接口和继承抽象基类并不冲突

抽象基类是自底而上抽象出来的,而接口则是自顶向下设计出来的

.NET Framework中的继承功能没有C++中的继承功能强大


A12、集合

其实就是STL中容器

STL的容器不存在耗费资源和时间的装箱和拆箱操作,因为STL中的容器一般都是模板容器(泛型)


A13、泛型

和C++11中的模板思想是一样的

巨人也会有走弯路的时候,何况我们常人


A14、委托与事件

和具体的软件框架相关

可以理解为是事件驱动和消息响应的底层实现


学无止境,需要不断地练习实践才可能真正成为优秀的软件工程师

猜你喜欢

转载自blog.csdn.net/weixin_39918693/article/details/89448300