面相对象编程原则 讲面相

2024-09-04 14:47:49
版权说明:以下内容来自网友投稿,若有侵权请联系: 处理。

浅谈对面向对象的理解

为什么要使用面向对象的思想来看待问题?

1.面向对象更利于我们看待问题,它使得我们看待问题变得清晰化。对于问题我们只需要了解问题所牵扯到的对象有哪些,它们在这个问题中都有着哪些行为即可。

2.面向对象最大的改变应该是我们看待问题高度发生改变。在利用面向过程的思想看待问题时只是关注程序的变量,语句,表达式的合理性,关注代码块的功能。而利用面向对象的思想进行设计时,我们只需关注对象与对象之间关系。而具体的实现细节是由对象的方法来实现的。但并不是说面向过程就一无是处,对于对象里的方法还是要利用面向过程的思想的。

面向对象的特性

继承是面向对象编程思想中重要的一部分。简单的讲就是从一个已有的类中派生出新的类。来实现一些父类没有的功能。父类允许子类继承它的方法,如果父类中有些方法和子类中的方法发生冲突,子类可以重写该方法。子类也可以实现父类的所有功能。对于基类的设计过程,我们应该根据实际情况包含各种可能性。比如说有一个狗的类,任何一个品种的狗都可以继承它,去实现自己细节。但如果要实现猫的行为方式,显然狗这个类就不适合了,应该在往上走,去实现一个动物的类,就可以继承这个类来实现猫的行为属性。这样做的目的是使程序具有较高的可扩展性。继承的优点是,提高代码的复用性,降低工作量。缺点是,如果父类的大部分功能子类都用不上,那么子类就显得比较冗余了。

面向过程的实现过程就是变量在函数之间的不断传递,使得函数之间进行信息的交流来实现编程的需要的。这样的后果就是如果变量在某一函数中被改变了,会导致整个程序出错。对于面向对象来说,信息之间的交流是以对象做为参数的,调用的类只能使用该类的某些功能来实现自己的功能。里面的信息对外界来说是不可见的,也无法改变类中的属性。因为类中的属性大多都是私有的或保护的。这就体现了封装性,封装是将属性和方法“打包”,属性私有化或保护化,方法公有化,只能使用该类的方法来使用和改变该类的属性。就好像人一样,比如吃饭是一个方法,那么吃多吃少是自己的事,与别人无关。别人也不可能改变这个事实。

对于面向对象来说,类相当于一个模板,一个抽象的概念,对象才是类的实例化体现,即是程序代码的组成部分。对于继承了父类的多个子类而言,重写了父类的某些方法,方法名虽然相同,方法体不同,实现过程不同,即不同子类的该方法不同。使用父类类型定义的子类对象。调用不同子类的方法,产生的了不同结果,这种变化就叫多态性。尤其对于父类是抽象类来说,由于父类中的方法未定义,不同子类继承父类后,可以重写父类的方法。抽象类不能实例化对象,只能被继承,一般作为基类。

面相对象的原则

一.单一原则

就一个类来说,类的功能应该较为单一一点,不应该是各种功能都包含在一起,这样不利于代码的维护,容易产生BUG,也破坏了类的本质。应该是类中的所有方法都为某一功能服务。但并不是类分的越详细越好,根据实际情况而定。

二.开闭原则

对于一个类来说,应该是扩展是开放的,修改是关闭的。随着人们的对软件功能的不断期待和改变,我们总是避免不了的要在原有的代码的基础上进行变化,但我们不可能对原有的代码进行修改,因为这可能使原有出现BUG,所以扩展是理所当然的。这个就要通过继承来实现了。

三.迪米特原则

一个类应该降低对其它类的耦合度,如果避免不了要与其它类产生关联的话,应该避免对其它类的了解。保持类的封装性特点。如果两个类之间耦合度较高的话,一个类的改变会影响另一个类,而面向对象的原则是程序之间的类应该是很少关联的各个类执行自己的功能就好。

对象之间的关系

面相对象跟非面相对象区别

泛化关系是对象之间耦合度最大的一种关系,就是继承关系。在JAVA中接口就类似于抽象类,它是方法说明的集合,子类继承接口,并实现接口中的方法,就是实现关系。在程序中,有时候避免不了的要把某一个对象做为参数,局部变量,返回值,让另一个对象调用完成该类的某些功能。这就是依赖关系。聚合关系是整体包含局部的概念。例如班级与学生之间的关系。组合关系是一种强烈的包含关系。例如学校和班级之间的关系,公司和部门之间的关系。聚合关系和组合关系的区别就在于,聚合关系中的的局部可以独立存在,例如这个班级被取消了,不能说明班里的学生就不是学生了。组合关系而言,整体的生命周期和局部的生命周期是息息相关的,如果整体不存在了,局部肯定不存在了,例如公司倒闭了,那么它其中的某一个部门肯定也不会存在。

所谓面向对象编写的程序,就是通过不同对象的实现来实现整个功能。重点还是如何合理的设置对象,以及对程序的包容性,即你要考虑将来可能会改变某一功能或添加某一功能。对程序的升级。还有就是在满足程序功能的前提下保持低耦合度。

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

扩展资料

面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象,这方面的文章非常多。但是,明确地给出对象的定义或说明对象的定义的非常少,至少现在还没有发现。起初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计。

面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。“面向过程”也可称之为“面向记录”编程思想,他们不支持丰富的“面向对象”特性(比如继承、多态),并且它们不允许混合持久化状态和域逻辑。

参考资料

百度百科_面向对象

百度百科_面向过程

1、易维护

采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。

2、质量高

在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。

3、效率高

在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。

4、易扩展

由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。