第四章.分析

情景(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 }
原文地址:https://www.cnblogs.com/lanshanxiao/p/7197216.html