Head FIrst OOAD & 期中project的反思

论如何优雅地在实验报告吹水…

(大雾:明明实验报告基本都写完了…)

project反思等稍微空闲一些再补充

  • 伟大软件的三大步骤

    1. 确认软件做客户要它做的事
    2. 运用基本的OO原则增加软件的灵活性
    3. 努力实现可维护,可重用设计
  • 任何时候看到重复的程序代码,就找个地方进行封装

    1. 委托

      • 保护你的对象免受其他对象的改变而干扰
    2. 低耦合
  • 为错误作规划
    • 替换路径
    • 用例use case
    • clear value
    • starting point & stopping point & condition
    • external initiator
  • 需求改变
    • 设计决策 ≠ 运作形式(取决于顾客)
  • 场景
    • 从第一部到最后一步通过的用例
    • 用例可以适用于不同场景,但有相同的客户目标
  • 确保软件运行在真实世界里

    • 文本分析:
    • 用例 名词 => 类,动词 => 方法,
  • 抽象类是实际实现类的占位符(placeholder)

    • 每当在两个以上地方找到共同行为时候,小心的抽象到一个类里面重用
  • 编码一次,查看两次
    • 愿意改变自己的设计以及从其他程序那里继承而来的设计

软件架构

有时候编写伟大程序代码的最佳方式

是在允许的情况下将程序代码的编写往后顺延

  • 化整为零成单独的功能片段

  • 封装变化之物

  • 对接口编码

  • 了解系统应该去做什么

  • 分析真实情景,注意交互

    • 做客户的翻译
  • 架构的要点是减少风险和建立次序

设计原则

OO原则

  • 接口

    • 对接口编码而不是对于实现(基类)
  • 封装
    • 保护类免于不必要的改变
    • 把变化之物封装起来
  • 变更(内聚性)
    • 确保每个类只有一个改变的理由
    • 让每个类只做一件事

开闭原则OCP

  • 禁止为修改 而关闭

    • 比如private方法
  • 允许为扩展 而开放
    • 子类可以改变行为

不自我重复原则DRY

将共同之物抽取出来并置于单一地方避免重复的程序代码

  • 让系统中每一个信息和行为都保存在单一/合理的地方

    • 对于AI minmax的封装依旧有重复的代码

单一职责原则SRP

  • 每一个对象只有一个改变的理由
  • 内聚力
  • the ___ ___ itself读起来是否顺畅
    • 这里反思: 期中pro中棋盘的设定
    • 不应该模拟”下棋”,下棋是人去下棋,
    • 但是player又不能随意修改棋盘,
    • 所以player应该得到棋盘的一个code来下棋
    • 棋盘不应该提供下棋的接口.只应该作棋盘
    • 所以game类应该保护棋盘,提供下棋的接口

Liskov替换原则LSP

  • 子类型必能替换其基类型选择继承
  • 想要使用另一个类的功能性,但是又不想改变改功能性,用委托(delegation)代替继承(把行为委托出去)
  • 使用组合(composition)代替继承 : 重用一个或多个类的行为
  • 聚合(aggregation): 当一个类用作另一个类的一部分是,仍然可以存在于该类之外(对象确实独立存在)

伟大软件

  • 伟大软件是自顶向下迭代编写的

    • 面向功能型聚焦
    • 面向流程型聚焦
  • 编写测试场景,扮演客户
  • 契约式编程
    • 防御性编程(exception)
  • 只暴露于用户交互的类给用户
    • 不与用户交互的类可以在对客户端影响程度最小的程度的情况下被改变

生命周期

  1. 功能列表(应该做什么)
  2. 用例图(如何被使用)
  3. 分解问题
  4. 迭代开发
    1. 需求
    2. 领域分析
    3. 初步设计
    4. 实现
  5. 教辅

十大主题

  • IS-A(继承) HAS-A(组合,聚合)
  • 用例格式->聚焦于交互
  • 反设计模式
  • CRC卡实现单一职责原则
  • 度量抽象化密度
  • UML顺序图
  • UML状态图
  • 单元测试
  • 编码要求(代码风格)
  • 重构: 改变程序代码的内部结构而不影响行为

Head FIrst OOAD 读书笔记相关推荐

  1. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  2. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  3. 《编程匠艺》读书笔记

    <编程匠艺>读书笔记之一 <编程匠艺>读书笔记之二 <编程匠艺>读书笔记之三 <编程匠艺>读书笔记之四 <编程匠艺>读书笔记之五 <编 ...

  4. 《Java: The Complete Reference》等书读书笔记

    春节期间读了下<Java: The Complete Reference>发现这本书写的深入浅出,我想一个问题,书中很多内容我们也知道,但是为什么我们就写不出这样一本书,这么全面,这么系统 ...

  5. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  6. 《JavaScript面向对象精要》读书笔记

    JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...

  7. 《The Art of Readable Code》 读书笔记 01

    放假前在学校图书馆借了一本新书<The Art of Readable Code>,寒假回来看看,写写其中的Key Idea .summary和一些读书笔记. Preface 前言部分主要 ...

  8. 读书笔记(2) OpenLayers中的图层

    OpenLayers有多个不同的图层类,每一个都可以连接到不同的地图服务器.例如通过Layer.WMS类可以连接到WMS地图服务器,通过Layer.Google类可以连接到谷歌地图服务器.OpenLa ...

  9. 《Microsoft Sql server 2008 Internals》读书笔记--第九章Plan Caching and Recompilation(10)

    <Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...

最新文章

  1. Python3中__call__方法介绍
  2. 源码0306-手势解锁
  3. Py之pywin32:Python库之pywin32的简介、安装、使用方法之详细攻略
  4. sap 预制凭证与暂存凭证的区别
  5. DotNetNuke出错:“Runat 属性必须具有值 Server(The Runat attribute must have the value Server Error)...
  6. eclipse插件安装,万能方法
  7. java judgefilecode_VScode出现无法打开“X”: 找不到文件(file:///XXXX) 的解决办法
  8. Matplotlib学习---用matplotlib画箱线图(boxplot)
  9. Ansible Tower - 使用入门 3 - 通过模板运行 Git 上的 Playbook 和 Role
  10. msql查询姓名不带r的员工姓名_《MySQL数据库》关联查询
  11. 电脑硬盘数据不小心格式化后,恢复数据的方法介绍
  12. 在Outlook 2013中发送给多个收件人时如何隐藏电子邮件地址
  13. VPP-20.09版本安装教程(联网版)
  14. TextCNN(文本分类)
  15. Orcad allegro 安装补丁
  16. PSIFT:Pore Scale-invariant feature transform;毛孔尺度不变特征点
  17. ASM、AAM算法介绍
  18. 待办工作是什么意思?
  19. node.js在2018年能继续火起来吗?我们来看看node.js的待遇情况
  20. python获取图片名称_python提取图像的名字*.jpg到txt文本的方法

热门文章

  1. NepCTF web-little_trick
  2. Linux下smba服务端的搭建和客户端的使用
  3. 【珠穆朗玛峰编程练习题】
  4. 提高linux经验的15个小技巧
  5. Typora数学公式符号
  6. 霍尔效应传感器特殊用法
  7. IFS认证|国际食品IFS认证优势与审核标准
  8. el表达式ne什么意思_EL表达式的基本语法及运算符
  9. 1.简述一个Activity跳转到另一个Activity时,两个Activity生命周期方法的执行过程。2.编写一个程序,要求在第一个界面中输入两个数字,在第二个界面显示第一个界面两个数字的和。
  10. storm和vgj vgj_DOTA2:VGJ改名J.Storm专注北美赛区,收编Forev新队进军Major