面向对象编程的优点、特性、原则
1、面向对象编程的优点
(1)优点如下
①易扩展:由于面向对象编程封装、继承、多态的三大特性,使得设计出来的系统高内聚、低耦合,整个系统灵活、易扩展,而且成本较低。
②程序的鲁棒性好:开发过程中可以重用已有的并在相关领域经过长期测试的代码,这对系统的鲁棒性有良好的促进作用。
③效率高:在软件开发时,根据需要将现实世界的事物抽象成类,类的属性表示事物的特有性质、类的方法表示事物的行为。一个类对象表示一个事物的实例。这种方式更贴近人类的日常思维,能够提高程序的开发效率和质量。
2、面向对象编程的特性
(1)封装
即隐藏对象的属性和实现细节,仅对外公开接口。
封装的优点如下:
①防止使用者有意无意地篡改重要的系统属性
②提高了各个子系统之间的松耦合性,提高系统的独立性。当一个系统内部发生改动时,只要对外提供的接口不变,就不会影响到其他的系统。
③提高软件的可重用性。每个系统都是一个相对独立的整体,可以在多种环境中得到重用。
④降低了建构大型系统的风险。即使整个系统不成功,个别独立的子系统依然是有价值的。
(2)继承
子类可以继承父类的属性和方法。同时,子类中还可以扩展出新的属性和方法。
继承的优点如下:
提高了系统的可重用性和可扩展性。
(3)多态
多态指当系统A访问系统B的服务时,系统B可以通过多种实现方式来提供服务。主要包括:重载(overload)和重写(override)两种方式。
重载必须满足以下条件:
①方法名相同
②参数的个数、顺序、类型至少有1项不同
③返回类型可以不同(两个方法不能仅有返回类型不同!!!)
④修饰符可以不同
重写发生在父类与子类之间,必须满足以下条件:
①方法名、参数、返回值一定要相同
②子类方法不能缩小父类方法的访问权限
③子类方法不能比父类抛出更多的异常
④父类的非静态方法不能被子类覆盖为静态方法
⑤父类的静态方法不能被子类覆盖为非静态的方法
⑥子类可以定义与父类静态方法同名的静态方法
⑦子类不能覆盖父类的私有方法
注:重载与重写的区别:
①重载要求两个函数的函数名相同,但参数的个数、种类或者类型不同、返回类型不同(可以仅仅参数不同,不能仅仅只有返回类型不同);重写要求两个函数的返回值类型、函数名、参数完全相同。
3、面向对象编程的原则
(1)单一职责原则:设计一个类时要考虑好类的属性和方法。不要有多余的方法,否则会出现权责不明,对程序的开发和维护都十分不利。
(2)开放封闭原则:对类的扩展是开放的(可以创建子类继承父类或者抽象方法、也可以创建类来实现接口,这样可以提高代码的可重用性),对类的更改是封闭的(尽量减少对已有类的更改,否则可能会引发一系列错误)。
(3)依赖倒置原则:在MVC设计模式中,Control层依赖于Service层,Service层依赖于Dao层,这叫依赖实现编程,这种方式有一个缺点就是各层之间的耦合性太强; 现将MVC各层抽象,在Control层通过依赖注入的方式引入Service层的对象,在Service层通过依赖注入的方式引入Dao层的对象,这叫依赖抽象编程,这种方式降低了各层之间的耦合性,提高了独立性。
从“依赖实现编程”到“依赖抽象编程”的转变,即是依赖倒置原则
(4)里氏代换原则:子类必须能够替换掉他们的父类,而且不会产生任何异常。比如:如果甲说自己喜欢动物,那么甲一定喜欢小猫;但如果甲说自己喜欢小猫,不代表甲喜欢所有动物。在使用里氏代换原则时,尽量把父类设计为抽象类或者接口,在程序中尽量使用父类类型来定义对象,在运行过程中再确定其子类类型,用子类对象来替换父类对象。
(5)迪米特原则:两个没有直接联系的类之间要发生相互作用,可以通过第三个类来实现。
(6)组合原则:尽量少用类之间的继承,尽量使用组合。过多的继承会是整个系统变得复杂。而组合是一种将多个简单子系统组装出复杂系统的有效手段。