今天看了了关于设计模式的书,感觉设计模式真的好强大,我学了两年的c++,以前从没有设计模式的概念,在设计类时很少考虑它的实现方法。造成设计的失败也是有的。在看书的过程中,发现对面向对象的一些看很基本的感觉,总是含糊不清,故此做个笔记,加深理解。
首先一个问题:什么是对象?一切皆为对象,准确的说,对象是一个自包含的实体,能用一组可识别的特性和行为来标示。那类(Class)又是什么呢?,类就是具有相同的属性和功能的对象的抽象的集合,首先它是对象的集合,然后它是抽象的。而实例,就是一个真实的对象,如果Person是一个Class的话,你,我就是Person的一个实例。实例化,就是创建实例的过程。
我们知道在c++里有个特殊的函数,叫构造函数,它其实就是对类进行初始化。所有的类都有构造函数,如果没有显示的编码,系统会给你生成一个。一些类需要不同的构造函数,这时我们需要方法重载。方法重载提供创建同名的多个方法的能力,但这些方法的参数类型或参数数目要不同。方法重载的好处,可在不改变原方法的基础上,新增功能。
前面写过:类就是具有相同的属性和功能的对象的抽象的集合,那属性是什么是东西?,属性就是一个方法或一对方法,但在调用 它的代码看来,它就是一个字段(也就是一个成员变量),即属性适合于以字段的方式使用方法的调用的场合。属性有两个方法Get和Set,Get表示的意思是调用时可以得到内部字段的值或引用,Set表示可以内部字段的值或引用赋值。在c++里有三种修饰符:Public,Protected,private.它们标示着类的成员的访问权限。
我们都知道面向对象的三大特性:封装,继承,多态。
每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其它对象来完成自己的操作。封装是一种信息隐蔽技术,封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的方法来访问该对象。封装的好处:1.良好的封装可以降低耦合,2.类内部的实现可以自由的修改而不影响用户的调用,3,类具有清晰的接口,4,也就是信息隐藏。
继承,代表了一种'IS-A'的关系,如果两个对象A和B,可以描述为'B是A',则表明B可以继承A,继承者还可以理解为对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独立的个性。使用继承时要记住三句话:第一,子类拥有父类非Private的属性和功能;第二,子类具有自己的属性和功能,第三,子类还可以以自己的方式实现父类的功能(方法重写)。继承的好处:所有子类公共的部分都放在了父类,使得代码得到了共享,这就避免了重复,另外,继承可使得修改或扩展继承而来的实现都较为容易。
多态:不同的对象再接收同一个消息时产生不同的行动。而不同的行动要通过它们自己的实现代码来执行。
使用多态时要注意以下几点:第一,子类以父类的身份出现,第二,子类在工作时以自己的方式来实现,第三,子类以父类的身份出现时,子类特有的属性和方法不可以使用。
如果一个类就时为其它类继承,这种类就是抽象类,抽象有几点要注意的:第一,抽象不能实例化,第二,抽象的方法必须被子类重写的方法,第三,如果类中包含抽象方法,那么类就必须定义为抽象类。
c++里好像没有接口类的概念,但应该可以用多态,抽象类来搞定吧。