第四章.分析

情景(context),文本分析(textual analysis),属性(attribute),操作(operation)

确保事情正常运作以及真实世界不会摧毁你的应用程序的关键是分析:想出潜在的问题,然后解决那些问题——在你将应用程序发布到真实世界之前。

良好分析第一步是:

  想出潜在的问题

委托保护你的对象免受软件中其他对象实现改变的干扰。

用例中所有的名词都有可能是系统里的类。

查看用例中的名词(与动词)以整理出类与方法的动作叫做文本分析(textual analysis)

好的用例以容易理解的语言,清除且准确地解释系统在做什么

有了良好、完整的用例,文本分析是整理出系统所需类的简单且快速的方式。

用例里的动词(通常)是系统中对象的方法。

类图有助于为你需要创建的类进行建模(modeling),但它们并没有提供为系统编程所需的一切答案。

这次要修改的是:狗的叫声,原因:别家的狗叫声也可以将自家的狗门打开。

我们应该将狗叫声存在DogDoor类中,以备比对狗叫声。

项目架构:

DogDoor.java更新:

 1 package com.headfirst.dogdoor;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.Timer;
 6 import java.util.TimerTask;
 7
 8 public class DogDoor {
 9     private boolean open;
10
11     private List allowedBarks = new ArrayList();
12
13     public DogDoor(){
14         this.open = false;
15     }
16
17     public void open(){
18         System.out.println("The dog door opens.");
19         open = true;
20
21         final Timer timer = new Timer();
22         timer.schedule(new TimerTask(){
23             public void run(){
24                 close();
25                 timer.cancel();
26             }
27         }, 5000);
28     }
29
30     public void close(){
31         System.out.println("The dog door closes.");
32         open = false;
33     }
34
35     public boolean isOpen(){//返回门的状态
36         return open;
37     }
38
39     public void addAllowedBark(Bark bark){
40         allowedBarks.add(bark);
41     }
42
43     public List getAllowedBarks(){
44         return allowedBarks;
45     }
46 }

BarkRecognizer.java更新:

 1 package com.headfirst.dogdoor;
 2
 3 import java.util.Iterator;
 4 import java.util.List;
 5
 6 public class BarkRecognizer {
 7     private DogDoor door;
 8
 9     public BarkRecognizer(DogDoor door){
10         this.door = door;
11     }
12
13     public void recognize(Bark bark){
14         System.out.println("   BarkRecognizer: Heard a ‘" + bark.getSound() + "’");
15
16         List allowedBarks = door.getAllowedBarks();
17         for(Iterator i = allowedBarks.iterator(); i.hasNext();){
18             Bark otherBark = (Bark) i.next();
19             if(bark.equals(otherBark)){
20                 door.open();
21                 return;
22             }
23         }
24         System.out.println("This dog is not allowed");
25     }
26 }

添加Bark.java:

 1 package com.headfirst.dogdoor;
 2
 3 public class Bark {
 4
 5     private String sound;
 6
 7     public Bark(String sound){
 8         this.sound = sound;
 9     }
10
11     public String getSound(){
12         return sound;
13     }
14
15     public boolean equals(Object bark){
16         if(bark instanceof Bark){
17             Bark otherBark = (Bark) bark;
18             if(this.getSound().equals(otherBark.getSound())){
19                 return true;
20             }
21         }
22
23         return false;
24     }
25 }
时间: 2024-12-28 15:40:39

第四章.分析的相关文章

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

Linux内核分析第四章 读书笔记

Linux内核分析第四章 读书笔记 第一部分--进程调度 进程调度:操作系统规定下的进程选取模式 面临问题:多任务选择问题 多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这会产生多个进程在同时运行的幻觉,在多处理器机器上,这会使多个进程在不同的处理机上真正同时.并行地运行.无论在单处理器或者多处理器机器上,多任务操作系统都能使多个进程处于堵塞或者睡眠状态,也就是说,实际上不被投入执行,直到工作确实就绪. 多任务系统可以划分为两类:非抢占式多任务和抢占式多任务.Linu

第四章 自上而下分析

第四章 词法分析——自上而下分析 4.1语法分析器功能 语法分析是编译过程的核心部分. 它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则. 自上而下分析面临的问题: 1.文法的左递归问题 2.回溯的不确定性,浪费时间 3.虚假匹配的问题 4.不能准确地确定输入串中出错的位置 5.效率低 解决方案: 文法的左递归问题: 例如文法:p => p a,在没有识别任何输入符号的情况下,就会产生无限匹配p的情况造成死循环. 回溯的不确定性,要求我们将已经完成工作推倒从

XSS的原理分析与解剖:第四章(编码与绕过)*******************未看**********************

0×01前言 很抱歉,这第四章被我推了几个月,今天是元旦难得有空,就把第四章写下.我先把主要使用的编码说下,介绍完会说下绕过. 本文建议与<杂谈如何绕过WAF>一同阅读. 0×02 URL编码 URL只允许用US-ASCII字符集中可打印的字符(0×20-0x7x),其中某些字符在HTTP协议里有特殊的意义,所以有些也不能使用.这里有个需要注意的,+加号代表URL编码的空格,%20也是. URL编码最长见的是在用GET/POST传输时,顺序是把字符改成%+ASCII两位十六进制(先把字符串转成

2017.06.29数据挖掘基础概念第四章

第四章39.为什么在进行联机分析处理(OLAP)时,我们需要一个独立的数据仓库,而不是直接在日常操作的数据库上进行 1.提高两个系统的性能 2.操作数据库支持多事务的并发处理,需要并发控制和恢复机制,确保一致性和事务的鲁棒性 3.两者有着不同的数据的结构.内容和用法40.什么是数据仓库 数据仓库是一种数据库,它与单位的操作数据库分别维护,数据仓库系统允许将各种应用系统集成在一起,为统一的历史数据分析提供坚实的平台,对信息处理提供支持,是一个面向主题的.集成的.时变得.非易失的数据集合,支持管理者

掌握需求分析第四章读后感

第四章的标题是,事件驱动的用况,首先我们先来理解一下什么是用况,那么什么是用况,通读本章给出的解释是:由产品完成的那一部分工作称为用况,因为是分析业务事件的响应来得到用况的,因此有事件驱动的用况这个术语. 在项目启动阶段我们需要将系统分解成为一些小块,并找出符合以下条件的部分:“自然的”部分即工作明显的的部分,与工作的其他部分连接数目最少,有一些规则来定义他们的范围,有可以描述和量化的边界,可以使用业务专家熟悉的名称来命名,业务专家指客户,顾客和用户,他们的存在可以很容易地确定:用户知道:我们可

大道至简第四章阅读感想

大道至简第四章感想 大道至简第四章标题为流于形式的沟通,主要内容可见说的是关于沟通的问题. 第一节的标题是:客户不会用C,难道就会用UML吗?程序员不能要求客户需要精通C语言,因为在客户(的代表)学会用C语言来向开发人员描述他们的需求之前,可能他就已经被老板开掉了.因此没有客户会笨到愿意用C语言来描述他们的需求.C语言是程序员与计算机交流的语言,而不是他与客户交流的语言.程序员面对的是计算机,但计算机不是客户.因此开发经理有一种优势,可以让开发人员以需求调研的身份出现在客户面前.要深入项目的需求

第四章 初步进入linux世界

第四章 初步进入linux世界 [Linux 系统启动过程] Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而linux启动时我们会看到许多启动信息,例如某个服务是否启动. Linux系统的启动过程大体上可分为五部分:内核的引导:运行init:系统初始化:建立终端 :用户登录系统. A 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动.紧接着由启动设备上的grub程序开始引导linux,当引

R in action读书笔记(19)第十四章 主成分和因子分析

第十四章:主成分和因子分析 本章内容 主成分分析 探索性因子分析 其他潜变量模型 主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分.探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法.它通过寻找一组更小的.潜在的或隐藏的结构来解释已观测到的.显式的变量间的关系. PCA与EFA模型间的区别 主成分(PC1和PC2)是观测变量(X1到X5)的线性组合.形成线性组合的权重都是通过最大化各主成分所解释的方差来获得,同时还要保证个