OOD

来源:互联网 发布:单例模式 java 要求 编辑:程序博客网 时间:2024/05/21 04:24

原文地址:http://blog.csdn.net/ytdxyhz/article/details/51432620

OOD 面向对象设计有很大的几率出现在小公司的面试上,在youtube上找了一个很好的教程来和大家分享一下。


问题: OOD 思想设计两人投掷硬币的游戏。

步骤一: 准备documentation


游戏介绍:随机选择一个玩家,令该玩家预测硬币的正反面,另一个玩家获得和第一个玩家相反的选项。开始投掷硬币,预测正确的赢。


Actors: 1. 玩家A2. 玩家B 3. 硬币 4. 掷硬币游戏

根据以上信息我们可以画出object model.  这个决定我们要创建多少个实体类。



根据游戏规则以及流程,我们可以画出类图。

步骤二:代码实现

Player class. 


[java] view plain copy
 print?
  1. public class Player {  
  2.     private String Name;  
  3.     private String CoinOption;  
  4.     public String[] coinValue = {"Heads","Tails"};  
  5.     Player(String name){  
  6.         this.Name = name;  
  7.     }  
  8.       
  9.     public String getCoinOption(){  
  10.         return this.CoinOption;  
  11.     }  
  12.       
  13.     public void setCoinOption(String opponentFlip){  
  14.         this.CoinOption = (opponentFlip.equals("Heads"))?"Tails":"Heads";  
  15.     }  
  16.       
  17.     public String getRandCoinOption(){  
  18.         int randNum = (Math.random()<0.5)?0:1;  
  19.         this.CoinOption = this.coinValue[randNum];  
  20.         return this.CoinOption;  
  21.     }  
  22.       
  23.     public void didPlayerWin(String winningFlip){  
  24.           
  25.         if(this.CoinOption.equals(winningFlip)){  
  26.             System.out.println(this.Name + " won with flip of " + this.CoinOption);  
  27.         }  
  28.         else  
  29.             System.out.println(this.Name + " lost " + this.CoinOption);  
  30.     }  
  31.   
  32. }  

Coin Class

[java] view plain copy
 print?
  1. public class Coin {  
  2.     private String coinOption = "";  
  3.     public String[] coinValue = {"Heads","Tails"};  
  4.       
  5.     Coin(){  
  6.         int randNum = (Math.random() < 0.5)?0:1;  
  7.         this.coinOption = this.coinValue[randNum];  
  8.     }  
  9.       
  10.     public String getCoinOption(){  
  11.         return this.coinOption;  
  12.     }  
  13.   
  14. }  


CoinGame Class

[java] view plain copy
 print?
  1. public class CoinGame {  
  2.      Player[] players = new Player[2];  
  3.      Coin theCoin = new Coin();  
  4.        
  5.      CoinGame(String p1Name, String p2Name){  
  6.            
  7.          players[0] = new Player(p1Name);  
  8.          players[1] = new Player(p2Name);  
  9.      }  
  10.        
  11.      public void startGame(){  
  12.            
  13.          int randNum = Math.random()<0.5?0:1;  
  14.          String playersPick = players[randNum].getRandCoinOption();  
  15.            
  16.          int opponentsIndex = (randNum == 1)?0:1;  
  17.          players[opponentsIndex].setCoinOption(playersPick);  
  18.            
  19.          String winningFlip = theCoin.getCoinOption();  
  20.            
  21.          players[0].didPlayerWin(winningFlip);  
  22.          players[1].didPlayerWin(winningFlip);  
  23.      }  
  24.   
  25. }  

main 测试类

[java] view plain copy
 print?
  1. public class main {  
  2.       
  3.     public static void main(String[] args){  
  4.           
  5.         CoinGame theCoinGame = new CoinGame("Huazhe""meigtong");  
  6.           
  7.         String userAnswer;  
  8.           
  9.         do{  
  10.               
  11.             theCoinGame.startGame();  
  12.               
  13.             System.out.println("Play again?y/n");     
  14.             Scanner input = new Scanner(System.in);  
  15.             userAnswer = input.nextLine();  
  16.         }while(userAnswer.equals("y"));  
  17.           
  18.     }  
  19.   
  20. }  


学习心得:个人感觉 OOD 体现的更多的是对问题由大到小进行分割的思想,将大的问题进行简化成一部分模块( object ), 然后对各个模块之间的交流进行组合已达到解决问题的最终目的。

原创粉丝点击