每日一题:详解面向对象

面向对象与面向过程

最初,软件开发所使用的思想都是面向过程,面向过程的模式更适合计算机运算,或者说更贴近于人类大脑的理解模式。然而随着时代的发展,软件系统也愈来愈复杂,规模愈来愈大,面向过程的弊端逐渐显现出来,最关键的在于面向过程开发出的软件系统更难维护,代码耦合度较高,当需求变动后,每次都须要修改大量的代码。html

面向对象的出现则解决了这些问题,固然有付出才有回报,相比与面向过程,面向对象思想下的代码也有如下缺点:java

  • 可读性相对于面向过程更差一些,主要是由于面向对象的代码较为零散
  • 性能比面向过程的代码要低,由于面向对象的代码执行过程当中须要不断的处理类的建立和销毁之类的操做,资源占用比面向过程要大。

总而言之,面向过程和面向对象并无谁优谁劣,只是适用范围不一样,若是说项目比较简单,也不太须要关心后期变动的问题,面向过程可让你更快的构建项目,若是说项目规模比较大,后期项目会有较长的维护期,那从需求分析开始,你就须要以面向对象的思想来处理。性能

面向对象的三个特色

  • 封装
    以前提到须要以面向对象的思想来处理问题,首先的第一步就是抽象,将这个花花世界中咱们关心的东西抽象为一个类,一个能够描述咱们关心的东西的类。任何一件物品从不一样角度来看都能抽象出不一样的属性,由于关注点不同,一我的若是从医生的角度去抽象,咱们可能关心的是身高、体重、身体情况、睡眠状况、饮食状况等等,而从一个设计师的角度去抽象,咱们关心的可能就是身高、体重、性别、性格、喜欢的颜色、三围等等

抽象就是以某一个视角来看待这个世界中的东西并将其封装为类,将咱们关心的属性做为类的属性,咱们关心的动做做为方法,而后经过控制其属性和方法是否为私有来控制是否能够被外界访问设计

  • 继承
    继承实如今封装的基础之上,咱们在封装类时会遇到多个类拥有重复的属性或方法,而继承可让一个类彻底拥有另外一个类的公共属性和公共方法,这样咱们能够减小封装时的重复内容,也能够在不修改类代码的状况下对类进行扩展。

被继承的类咱们通常称之为超类、基类或父类,而继承父类的类咱们通常称之为子类。继承在设计中通常都是大类到小类的过程,父类和子类的关系为“is a”,例如封装一个动物类,而后经过继承实现一个子类,例如狗,这样狗拥有动物的全部特征,以后即可在子类中继续编写狗特有的属性和方法,父子类的关系可描述为狗是一种动物。htm

注:虽说继承是众多开发语言都具有的功能,但继承也存在很大的代码耦合问题,父类的代码一旦变动则会致使全部子类都会跟着改变,因此开发过程当中尽量的使用接口来代替继承。对象

  • 多态
    多态是在继承基础之上衍生出的,变量所引用的对象类型在运行期间由程序决定。多态的必要条件为继承,多态双方必须为父子类,父类在运行期间决定由哪一个子类来执行具体操做,换句话说父类变量在程序运行期间决定指向哪一个子类对象。一样,由于子类继承了父类的全部方法且存在自定义方法的可能,因此多态的状况下父类没法获取或执行只存在于子类中的属性或方法。

详细了解可参考《java提升篇(四)-----理解java的三大特性之多态blog

相关文章
相关标签/搜索