zoukankan      html  css  js  c++  java
  • 第四章.分析

    情景(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 }
  • 相关阅读:
    Tkinter之Label部件
    Tkinter编码风格
    GUI之tkinter视窗设计模块
    绘制函数图像
    backbone学习总结(一)
    实习两个月,写在辞职的今天
    Spark SQL 编程初级实践2- 编程实现利用 DataFrame 读写 MySQL 的数据
    Spark SQL 编程初级实践1-Spark SQL 基本操作
    spark创建DataFrame的几种方式
    python-with open() as file相关参数以及常用打开方式
  • 原文地址:https://www.cnblogs.com/lanshanxiao/p/7197216.html
Copyright © 2011-2022 走看看