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.数据结构

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

  • 相关阅读:
    潜水一年,然后回来
    【搬运】Visual Studio vs2017 vs2019 中文离线安装包下载,替代ISO镜像
    Re0:在 .NetCore中 EF的基本使用
    Re0:在.NetCore 中Dapper的基本用法
    jdadjkgh.txt
    Android Studio打包出来的安装包是非正式发布版本
    Android Studio生成开发调试版(Debug)和正式发布版(Release)的安装包
    【unity-2】coroutine
    【ugui-1】RectTransformUtility
    [ps笔记]快捷键、快捷方式
  • 原文地址:https://www.cnblogs.com/Nobel/p/1660488.html
Copyright © 2011-2022 走看看