学习面向对象编程这么久,那么到底什么是面向对象呢?
什么是面向对象:
面向对象是计算机科学里的一种编程思想。它根据现实世界事物的特性,即现实中的事物具有其对应的属性与行为。在计算机中就将现实世界中事物的属性和行为抽象成一个类,这个类中描述就这一类对象的属性与行为,也就是我们所说的类的数据与方法。当我们在计算机中需要执行现实世界中某一对象事物要做的事情时,就可以实例化一个对象,通过对这个对象发布命令,来模拟现实世界中事物的行为操作。也正是因为面向对象有与现实世界事物对应的特性,所以说面向对象编程更符合人类的思维习惯。
面向对象三大特征:
封装
封装就是把现实世界中的一类事物的属性与行为对应到一个类中的过程,当在编程中需要使用这类事物时,就可以实例化对应类的实例,然后通过公用接口对这个对象发布命令,让他自己去完成需要的操作。站在调用者的角度,不需要去关心这个对象是怎样完成,这就大大提高了开发的效率,而且降低了不同模块之间的耦合度。站在类的设计者方面,调用者无法看到对象的数据,这就保证了数据的安全性问题。
这类现实世界的例子很多,比如你用遥控器切换电视频道时,你只用直到按哪个键会有怎样的反应,而不需要去关心这个过程是怎样实现的。
继承
继承就是去继承已有的数据与方法。当两个类有既有同样的数据与方法,又有自己特有的数据与方法时,这时就可以把这两个类相同的数据与方法抽象成一个新的类,让这个两个类去继承抽象出的类。
这样的做法,提高了代码的复用度并且降低了冗余度,相同的数据与实现不用再重复编码。同时也增强了可扩展性,当需要在这一类事物添加新的数据与方法时,只需要去继承已有的类,并添加自己的数据与方法就行。
多态
多态就是执行同样的方法会产生的不同的行为。
多态的3个前提:
1.必须有继承或实现关系
2.子类必须重写父类的方法(实现接口的方法)
3.父类的引用引用了子类对象
父类的引用引用了子类对象时,在编译时期只能决定该引用引用的数据,不能决定其引用的方法。
面向对象7大设计原则:
单一职责原则:类的职责要单一,一个类中应该只描述一组相关的操作,不要把太多的职责放在一个类中
开闭原则:软件对扩展时开放的,对修改是关闭,在设计类时要考虑到在不修改已有类的前提下进行类的功能扩展,当需要扩展新的功能时去继承已有的基类,然后添加自己新的功能需求
里氏替换原则:在软件系统中,任何一个接受父类的地方都可以用子类来替换
依赖倒转原则:要针对接口编程,把功能需求放在接口或者基类中定义,把具体的实现让子类去实现,接口只需要关心需要的业务功能
接口隔离原则:使用多个专门的接口来取代一个统一的接口,在保证单一职责的前提下,一个接口的功能尽可能少。这样可以保证再使用一个接口时,只会用到自己需要的功能
合成复用原则:在系统中尽量多用聚合与组合,而少用继承。复用有两种方式。
继承复用:实现简单,易于扩展。从积累扩展来的实现是静态的,不可能在运行时改变,灵活性较低。
组合/聚合复用:耦合度较低,可以选择性的调用成员的操作。在需要用到另一个类的功能而不需要进行功能扩展时,应该尽可能使用组合/聚合的方式
迪米特法则:两个软件实体的相互引用越少越好,或者说两个类之间不应该直接通信,而是引用一个第三者间接交互。
类的划分上,应当尽量创建松耦合的类,类之间的耦合越低,就越容易复用。一个处在松耦合中的类的修改对其关联类的变动很小