在刚开始看设计模式的时候,对面向对象的思想还不理解,就看了一下课本的后半部分,进一步去理解了一下,感觉现在七窍通了几窍了,不是一窍不通了,现在看着也是越来越有感觉。
一、封装
每个对象都包含了它能够进行操作所需要的所有信息,这个特性成为封装。因此对象不必依赖其他对象来完成自己的操作。这样方法和属性包装在类中,通过类的实例来实现。
好处:1.良好的封装能够减少耦合,如栗例子中我们让Cat 和Form的耦合分离。2.类内部的实现可以自由的修改,这也是显而易见的,如从简单的猫叫,到后来构造方法等的加入等,我们已经对Cat类做了很大的修改。同样房屋内部装饰的改变,不会影响他人。3、类有清晰的对外接口,这其实就是指的是定义的Public的各种属性和方法。再如房屋的门窗,就是封装对象暴漏在外的属性和方法,专门供人的进出,以及流通空气,带来阳光。其实,我们每个人,就是一个封装,我们有自己Private的方法和属性,我们也能够随时被调用。
二、继承
对象的继承代表了一种“is —a"的关系,如果两个对象A和B,可以描述B是A,则表明B可以继承A。如果子类继承父类,第一,子类拥有父类非Private的属性和功能。第二,子类拥有自己的属性和功能,即子类可以拓展父类没有的属性和功能。第三、子类还可以以自己方式实现父类的功能(方法重写)。子类从它的父类中继承的成员有方法、域、属性、事件、索引指引器,对于构造方法,有一些特殊,它不能被继承,只能被调用。对于调用父类的成员,可以使用base关键字。
好处:如果不用继承的话,如果要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能就会越大。但是如果有了继承,继承使得所有的子类公共的部分都放在了父类,使得代码得到了共享,这就避免了重复,另外,继承可使得修改或拓展而来的实现都较为容易。
缺点:使用要慎重。因为如果父类变化,则子类不得不变。继承会破坏包装,父类实现细节暴漏给子类,这其实是增大了两个类之间的耦合性。继承是一种类和类之间强耦合的关系。
三、多态:
多态表示不同的对象可以执行相同的动作,单要通过他们自己的实现代码来执行。有以下几点,我们需要注意,1、子类以父类的身份出现,儿子代表父亲表演,化妆之后就是以父亲的身份出现了。2、子类在工作时以自己的方式来实现,儿子模仿的再好,那也是表演,儿子只能是用自己的表现方式来模仿父亲的作品。3、子类以父类的身份出现时,子类特有的属性和方法不可以使用。
同样的是叫的方法,不同的动物叫的声音不同。猫是“喵喵”,狗是“汪汪”,同一种方法不同的对象实现的具体形式不同。同样是演奏乐器的Play方法,不同的乐器会发出不同的声音,吉它、钢琴、小提琴的声音不同,这也就是实现了多态。
与多态的实现 相关的,就要涉及到虚方法和重写。为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。这是通过在该成员的返回类型之前添加Virtual关键字来实现。通常虚拟的是方法,但其除了字段不能是虚拟的,属性、事件和索引器都可以是虚拟的。子类可以选择使用Override关键字,将父类实现替换为它自己的实现,这就是方法重写Override,或者叫方法覆写。同样是书中的例子,Cat和Dog都有shout的方法,只是叫的声音不同,所以我们可以让Animal有一个Shout的虚方法,然后Cat和Dot去重写这个shout,用的时候,就可以让 猫或狗代替Animal叫唤,来达到多态的目的。
小结:
顺着课本的思路,整理了一下,通过和面向过程的对比,觉得面向对象真的很方便。还记得刚看设计模式课本的时候,看过一遍,在过程中又看过一遍,敲完例子又看了一遍,现在才觉得能够理解它的美妙和来龙去脉了。真心是书读百遍起义自见。想起了师傅曾经说过的,不要说学不会,关键是看你学习了多少遍。虽然对设计模式还有很多的不理解,但是我相信,在后边的学习中还会再看的,相信在后边的学习中,也会理解的越来越深刻的。
其实我们学习过程中,也是用到了面向对象的这三个特性。我们学习完旧知识,要及时的总结,找联系,找关系,总结学习的方法,这其实就是封装的过程。我们在学习新知识的时候,对于旧的知识和好的学习,就可以直接去继承,然后再去学习新的知识。同样,好的学习方法,以后在具体的学习中,不同的场景会有不同的利用,这就实现了知识的多态。仔细想想,这些思想生活学习中是无处不不再,现在有有点理解米老师提倡的在生活中学习的思想了。