道法自然-面向对象实践指南

  • 需求分析:追求完美 vs. 容忍缺陷
  • 用例分析:海底总动员 vs. 云中漫步
  • 设计方法:面向过程 vs. 面向对象

    • 设计方法

      • 面向过程

        • 优点

          • 结构简单
          • 开发速度快
        • 缺点
          • 全局变量多,各个功能函数共同访问,需求变更时改动量大,易遗漏
          • 函数耦合度大,提取公共函数则导致函数数量剧增,调用关系繁冗不堪
          • 回调函数无法预知,管理困难
      • 面向对象
        • 优点

          • 真实模拟现实事务特征
          • 耦合度低
          • 复用性、扩展性高
        • 缺点
          • 结构复杂
          • 初期开发速度相对较慢
      • 剑在我心
        • 面向对象

          • 软件需要较强的复用性
          • 软件需要较强的扩展性
        • 面向过程
          • 规模小
          • 没必要考虑扩张性,复用性
    • 设计质量
      • 衡量标准

        • 是否满足功能性需求
        • 可读性
        • 可复用性
        • 可扩展性
        • 可维护性
      • 具体标准
        • 高内聚

          • 一个模块、类或函数所承担职责的自相关程度
        • 低耦合
          • 模块&模块之间、类&类之间、函数&函数之间关系的亲密程度
      • 实际操作
        • 单元测试

          • 测试环境是否可独立
    • 误入歧途
      • 与面向过程的设计方法相比,使用面向对象的方法设计出来的软件一定具有更高的质量
      • 只要学好某门面向对象语言,就能精通面向对象的设计方法
    • 对象&模式
      • 面向对象

        • 封装

          • 聚合同一责任的相关信息
          • 反映某一事物的共性
        • 继承
          • 正向理解

            • 子承父业
          • 反向理解[注1]
            • 泛化(Generalization)
            • 为了能统一处理各个具体的事物而抽象出来的此类事物具有的共同特征
        • 多态性[注2]
          • 貌似调用抽象类的方法
          • 实际执行具体类的真实处理过程
      • 设计原则
        • 开闭原则(OCP)

          • 一个模块对扩展应该是开放的,对修改应该是关闭的
        • 完全替换原则(里氏代换原则LSP)
          • 派生类应该能完全替换掉基类
        • 依赖倒置原则(DIP)
          • 依赖于抽象,而不依赖于具体
        • 非循环依赖原则
          • 包&包之间不能有循环依赖关系
        • 只实现你真正需要的,不要去实现你认为需要的
        • 不要重复自己
          • 任何代码都只出现一次
        • 保持简化的设计(KISS原则)
        • 为人写代码,而不是为机器写代码
          • 最好是写自注释的代码
    • 生命周期
      • 瀑布模型

        • 需求分析
        • 概要设计
        • 详细分析
        • 编码实现
        • 单元测试
        • 继承测试
        • 运行维护
      • 迭代模型
        • 迭代周期1

          • 分析
          • 设计
          • 编码
          • 测试
        • 迭代周期2
          • 分析
          • 设计
          • 编码
          • 测试
        • 迭代周期N
          • 分析
          • 设计
          • 编码
          • 测试
    • 参考资料
      • 注1

        • idior

          • 面向对象乱弹(一)

            • http://idior.cnblogs.com/archive/2004/12/11/75772.html
          • 面向对象乱弹(二)
            • http://idior.cnblogs.com/archive/2004/12/12/75981.html
      • 注2
        • Allen Lee

          • 今天你多态了吗?

            • http://allenlooplee.cnblogs.com/archive/2004/11/02/59519.html
          • 多态与 new
            • http://allenlooplee.cnblogs.com/archive/2006/03/13/348760.html
          • 当多态遇上数组
            • http://allenlooplee.cnblogs.com/archive/2005/04/01/129968.html

图示:

转载于:https://www.cnblogs.com/walkingboy/archive/2006/04/14/375152.html

[浪子学编程][读书笔记]-道法自然之设计方法相关推荐

  1. [浪子学编程][读书笔记]-道法自然之用例分析

    道法自然-面向对象实践指南 需求分析:追求完美 vs. 容忍缺陷 用例分析:海底总动员 vs. 云中漫步 UML 工具 表达设计思想 交流&沟通 剑在我心 点到为止 能充分表达设计的意图 方便 ...

  2. [浪子学编程][读书笔记]-道法自然之需求分析

    道法自然-面向对象实践指南 需求分析:追求完美 vs. 容忍缺陷 设计方案 鱼和熊掌 小鱼 优点 开发&维护代价小 结构简单 缺点 缺乏灵活性 熊掌 优点 灵活 易扩展 缺点 结构复杂 开发& ...

  3. 大数据之路读书笔记-10维度设计

    大数据之路读书笔记-10维度设计 文章目录 大数据之路读书笔记-10维度设计 10.1 维度设计基础 10.1.1 维度的基本概念 10.1.2 维度的基本设计方法 10.1.3 维度的层次结构 10 ...

  4. wyy课堂cmos模拟设计课学习笔记-gm/Id设计方法介绍及曲线仿真

    wyy课堂cmos模拟设计课学习笔记-gm/Id设计方法及曲线仿真 总思路 需要的图像曲线 软件操作 举例说明 总思路 这在b站上也有教学视频:https://www.bilibili.com/vid ...

  5. 正面管教读书笔记 01 正面的方法

    正面管教读书笔记 01 正面的方法 正面管教 作者:简·尼尔森(Jane Nelsen) 第1章 正面的方法 社会的变化造成了孩子的变化 社会进步导致服从和顺从不在重要了 今天的孩子很少有机会培养责任 ...

  6. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

  7. mozart-oz中有限域编程读书笔记

    mozart-oz自带文档: <Finite Domain Constraint Programming in Oz. A Tutorial.>读书笔记 http://www.mozart ...

  8. Python编程读书笔记

    Chapter 2. python编程概述 2.1. 知识点 raw_input是python的内建函数,要求用户输入,输入结果是一个字符串. example: test = raw_input(&q ...

  9. 《Linux就该这么学》读书笔记

    开源文档地址: https://www.linuxprobe.com/docs/LinuxProbe.pdf 对linux感兴趣的小伙伴可以移步到我的专栏:https://blog.csdn.net/ ...

最新文章

  1. PHPNow升级PHP版本为5.3.5的方法
  2. asp.net添加电子地图
  3. JSP脚本实现登录验证功能
  4. Redmi 卢伟冰:要做就做真旗舰 绝不通过简配压低成本
  5. Spring提供的iBatis的SqlMap配置
  6. Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image acquis
  7. Multisim14基本介绍(上)
  8. 论文-基于深度学习的视频中 人体动作识别技术的分析
  9. kero control 防火墙
  10. 面向对象六大原则——依赖倒置原则
  11. 统计之均值中位数众数全距四分位数以及箱线图展示
  12. 信也科技2021年Q3财报:科技助力小微迸发新活力 践行ESG实现可持续发展
  13. 在MySQL中insert时生成UUID
  14. MySQL连接查询,子查询,union(合并),分页
  15. 【FJOI2016】【BZOJ4408】神秘数
  16. 前端算法js:跳格子游戏
  17. 论文中稿 IEEE ACCESS 期刊
  18. 手把手教你搭建网站(零基础,不用写代码)
  19. node.js实现文件和数据的压缩与解压缩
  20. 获取表中以某个拼音开头的记录

热门文章

  1. ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别
  2. Cesium 材质模块开发流程——方式2
  3. 好佳居窗帘十大品牌 窗帘风格你知道多少?
  4. FastAPI框架诞生的缘由(上)
  5. try-catch-finally
  6. 定义asyncExportFile服务,通过异步下载导出文件
  7. web前端期末大作业 html+css+javascript网页设计实例 企业网站制作
  8. [教程] [经验技巧] 任意手机移植ROM 教程,超详细ROM 技术学习
  9. Striving for Excellence
  10. android7.0nexus,羡慕!谷歌Nexus用户喜迎Android 7.0正式版更新