zoukankan      html  css  js  c++  java
  • 面向对象的反思

    <p$1$2$3$4$5$6> 

    面向对象有三个特性:封装、继承、多态。

    封装是不容置疑的,就算不是面向对象,一样有封装的开发思想。

    多态,是能够减少阅读难度的方法,对合作开发有很大的帮助。

    <p$1$2$3$4$5$6> 

    最让人质疑,也是最有特色的是继承。

    面向对象用很形象的思维,创造性的将现实世界的种类关系纳入开发指导中,但是正是这种类比,让我产生了一种忧虑。是不是这个目标太过理想,反而让人们忽视了其实质。

    肯定的,现实世界的种类关系确实很普遍,我们完全有理由相信,编程使用类似的思想是有价值的,但是对于如何借鉴值得研究。

    现在的面向对象继承方法,实质是什么?举例说:有个类D,继承自类B,类D实质上就是类B的简单修改版。用面向对象的语言来说,就是“使用原有功能,保持接口,添加功能”,或者“修正基类的功能”。

    第一、接口基本一致。

    第二、功能稍作改变。

    因此,一般来说,继承就是为了建立一组“类族”,他们有很强的相似性。

    为什么说继承有问题,在于继承极为容易被滥用。

    最近我重新思考了这个问题,得出来的结论是:继承是一项高层应用,而不是一个基本设计概念。将一个具体的应用策略作为基础设计思想,是相当危险的,降低了设计的成效。

    我认为,面向对象其实质是模块化的组件思想,其中“封装”作为基础,“接口”作为通信手段,“多态”作为“接口”的基本属性,从而达到组件于组件之间的松耦合,搞内聚状态。如果,没有封装,就不可能达到高内聚的设计要求,如果没有接口,或者接口不具备多态,组件和组件之间就没有真正意义上的分离,封装也没有任何意义,也不能达到松耦合的设计目标。

    因此,我觉得,“面向对象”这个提法,着眼于将概念模型实例化这个角度,虽说有一定的合理性,但是从另一个角度,称作“面向组件”编程或者更能概括其设计思想。

    总结:

    面向对象有几个相关的理论。

    1.概念模型。所谓的概念模型,就是将现实中的一组相关操作和对应的数据,组成一个单一的概念来描述的思想。比如,吃,喝,拉,撒,就可以组成人这个概念来描述。概念模型是将现实的事物,抽象化成一组操作和数据的方法。

    2.组件化思想。根据建立的概念模型,引入封装,接口等技术手段,实现组件化,达到高内聚松耦合的设计目标。

    3.设计模式。设计模式基于组件化,建立一套卓有成效的,关于组件和组件之间的结构关系的设计方案。

    面向对象理论不包含:

    1.算法

    2.数据结构

    我们知道“程序=算法+数据结构”,面向对象却不包含这两个,说明面向对象只是上层建筑,而不包含其底层支持。学习面向对象,是无法“做程序”的,但是对于本身懂得“做程序”的人来说,他就是一个有力的帮手。

  • 相关阅读:
    ubuntu远程windows桌面
    spring boot 给返回值加状态 BaseData
    spring boot 拦截异常 统一处理
    IntelliJ IDEA spring boot 远程Ddbug调试
    IntelliJ IDEA 常用插件
    spring boot 请求地址带有.json 兼容处理
    spring boot 接口返回值去掉为null的字段
    spring boot 集成disconf
    Spring boot 自定义拦截器
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/Nobel/p/1660488.html
Copyright © 2011-2022 走看看