DogDoorSimulator.java
/**
*
* 강아지 문 시뮬레이터
*
* @author 장선웅
*
*/
public class DogDoorSimulator {
@SuppressWarnings("static-access")
public static void main(String[] args) {
DogDoor door = new DogDoor();
door.addAllowedBark(new Bark("멍")); // 브루스의 음성들
door.addAllowedBark(new Bark("멍멍"));
door.addAllowedBark(new Bark("왈왈"));
door.addAllowedBark(new Bark("bowbow"));
BarkRecognizer recognizer = new BarkRecognizer(door);
Remote remote = new Remote(door);
System.out.println("브루스가 짖기 시작합니다.");
recognizer.recognize(new Bark("왈왈")); // 안에서 급할때(?) 브루스가 짖는 음성
System.out.println("브루스가 밖으로 나갔습니다.");
try {
System.out.println("");
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Bark smallDog = new Bark("워리워리");
System.out.println("옆집의 작은개가 짖기 시작합니다.");
recognizer.recognize(smallDog);
try {
System.out.println("");
Thread.currentThread().sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("브루스가 짖기 시작합니다.");
recognizer.recognize(new Bark("멍멍")); // 밖에서 들어오고 싶을때 브루가 짖는 음성
System.out.println("브루스가 안으로 들어갑니다..");
}
}
DogDoor.java
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
/**
*
* 강아지 문
*
* @author 장선웅
*
*/
public class DogDoor {
boolean open;
List<Bark> barkLst;
public DogDoor() {
barkLst = new ArrayList<Bark>();
close();
}
public void open() {
System.out.println("강아지문이 열렸습니다.");
open = true;
// 5초뒤 자동으로 닫힙니다.
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
close();
timer.cancel();
}
}, 5000);
}
public void close() {
System.out.println("강아지문이 닫혔습니다.");
open = false;
}
public boolean isOpen() {
return open;
}
public void addAllowedBark(Bark b) {
barkLst.add(b);
}
List<Bark> getAllowedBarks() {
return barkLst;
}
}
Bark.java
/**
*
* 강아지 소리
*
* @author 장선웅
*
*/
public class Bark {
String sound;
public Bark(String sound) {
this.sound = sound;
}
String getSound() {
return sound;
}
public boolean equal(Bark b) {
// 음성을 비교합니다.
return this.getSound().equalsIgnoreCase(b.getSound());
}
}
BarkRecognizer.java
import java.util.Iterator;
import java.util.List;
/**
*
* 음성인식기
*
* @author 장선웅
*
*/
public class BarkRecognizer {
DogDoor door;
public BarkRecognizer(DogDoor door) {
this.door = door;
}
public void recognize(Bark bark) {
System.out.println("음성인식기에서 \"" + bark.getSound() + "\"를 인식합니다.");
List<Bark> lst = door.getAllowedBarks();
Iterator<Bark> iter = lst.iterator();
boolean isTrue = false;
while(iter.hasNext()) {
if(iter.next().equal(bark)) {
isTrue = true;
break;
}
}
if(isTrue && !door.isOpen()) {
System.out.println("등록되어있는 음성입니다.");
door.open();
}
else {
System.out.println("등록되어있지 않은 음성입니다.");
}
}
}
Remote.java
/**
*
* 강아지문 리모콘
*
* @author 장선웅
*
*/
public class Remote {
DogDoor door;
public Remote(DogDoor door) {
this.door = door;
}
public void pressButton() {
System.out.println("리모콘 버튼을 누릅니다.");
if(door.isOpen())
door.close();
else
door.open();
}
}
| 명사 분석 | 7 | 코드 수준의 모든 구성 요소들을 속성들과 오퍼레이션들과 함께 나열합니다. |
| 다중도 | 6 | 이것은 보통 클래스의 메소드를 나타내는 UML용어 입니다. |
| 속성 | 5 | 클래스에서 멤버 변수와 같습니다. |
| 클래스 다이어그램 | 1 | 한 클래스가 다른 클래스와 관련이 있음을 시각적으로 보여줍니다. 보통은 속성을 사용해서 보여줍니다. |
| 오퍼레이션 | 2 | 클래스에서의 멤버변수와 같습니다. |
| 연관 | 4 | 클래스의 속성에 특정 타입 객체가 몇 개나 저장되는지를 나타냅니다. |
| 동사 분석 | 3 | 시스템에 필요한 클래스를 찾기 위해 유스케이스에 이것을 시행합니다. |