第四章.分析

Posted lanshanxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章.分析相关的知识,希望对你有一定的参考价值。

情景(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 }

 

以上是关于第四章.分析的主要内容,如果未能解决你的问题,请参考以下文章

第四章-语法分析之认识树节点

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

第四篇 函数

蓝桥杯算法竞赛系列第四章——二分算法

OOP第四次到第六次作业总结

Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段