Design to code

老师讲解

第一步,根据DCD图建立类定义

1.用类名,简单属性,方法定义类代码

2.添加引用属性

3.容器/对象集类的代码

//创建容器
TicketOrderSystem ticketOrderSystem = new TicketOrderSystem();
Ticket ticket = new Ticket();
Order order = new Order();

  

第二步,根据交互图建立方法

根据依赖关系创建类 出度为0,入度为1的可以先做

方法就写两句

不要get和set方法,表达逻辑映射关系

他人案例

网上订票系统

DCD图

把以上设计的DCD图的类代码翻译出来

 有几个类就写几个代码

Ticketbuyers 

 代码具体体现
Ticketbuyers:
public class Ticketbuyers {
    private String idNumber;
    private String name;

    TicketOrderSystem ticketOrderSystem = new TicketOrderSystem();
    // 来自enterBuyerInfo ()的协作图和DCD图
    // 创建买票人信息并返回
    public Ticketbuyers createTicketBuyer(String idNumber,String name){
        this.idNumber = idNumber;
        this.name = name;
        return null;
    }
    //来自selectTicket()协作图和DCD图
    // 用户通过系统挑选票
    public void selectTickets(String ticketID, Date time){
        ticketOrderSystem.createTicket(ticketID,time);
    }
}

主要包括私有属性idNumber和name,分别代表身份证号和姓名,方法包括createTicketBuyer(String idNumber,String name)和selectTickets(String ticketID, Date time)Ticketbuyers来自来自selectTicket()和enterBuyerInfo()的协作图。 

 思路分析图

 Ticket

代码具体体现
public class Ticket {
    // 定义票的Id和时间
    private String ticketID;
    private Date time;
    // 购票人
    private Ticketbuyers buyer;

    // 创建购票的信息
    public void create(String ticketID, Date time){
        this.ticketID = ticketID;
        this.time = time;
    };
    //来自selectTicket()的DCD图和协作图
    // 构建购票人信息并保存
    public Boolean addBuyerInfo(String idNumber,String name){
        buyer = buyer.createTicketBuyer(idNumber,name);
        setTicketbuyers(buyer);
        return null;
    }
    // 来自enterBuyerInfo ()DCD图和协作图
    // 保存乘客信息至所购的票上
    public void setTicketbuyers(Ticketbuyers ticketbuyers) {}
}

包括私有属性ticketID和time,Ticket类的方法有

create(String ticketID, Date time)

addBuyerInfo (String idNumber,String name)

setTicketBuyers (String idNumber,String name)

来自selectTicket()和enterBuyerInfo()的协作图和DCDs

思路分析图

Order

代码具体体现
public class Order { //来自类定义
    // 订单记录
    private String orderRecord;
     Ticket ticket = new Ticket();

    //来自selectTicket()协作图
    public List<Ticket> createTicket(String ticketID, Date time) {
        // 一个用户可以创建一张或多张车票
        ticket.create(ticketID, time);
        return null;
    };
    // 来自enterBuyerInfo ()协作图
    public void addBuyerInfo (String name, String idNumber) {
        // 添加乘客信息
        ticket.addBuyerInfo(idNumber,name);
        // 保存乘客信息
        ticket.setTicketbuyers(idNumber,name);
    };
}

Order类有私有变量orderRecord,以及createTicket (String ticketID, Date time)和addBuyerInfo (String name, String idNumber)函数。 

思路分析图 

TicketOrderSystem

代码具体体现
public class TicketOrderSystem { //来自类定义
    Order order = new Order();

    //来自selectTicket()协作图
    public Boolean createTicket(String ticketID, Date time) {
        order.createTicket(ticketID,time);
        return null;
    };
    // 来自enterBuyerInfo ()协作图
    public Boolean enterBuyerInfo (String name, String Idnumber) {
        order.addBuyerInfo(name,Idnumber);
        return null;
    };
}

该类中生成订单对象,并且有createTicket(String ticketID, Date time)和enterBuyerInfo (String name, String Idnumber)函数。 

思路分析图

车辆违章信息查询系统

DCD图

代码 

public class QueryController{
    
	public QueryController(){}
    
	public void enterId(idNumber){
        this.idNumber=idNumber
	}
	...
}

public class ViolationLog{

Private List<Integer> idnum = new ArrayList<>();
    
	public ViolationLog(){}
    
	public Map getViolation(Integer idNumber){
        return idnum.get(idNumber);
	}
    
	...
}

public class Map{
    
	public Map(){}
    
	public ViolationList getById(Integer idNumber){
        return idnum.get(idNumber);
	}
    
	...
}

public class ViolationList{
	private Integer things;//违章事件
	private Integer time;//违章时间
	private Integer amount;//罚款金额
	private Integer Name;//违章者姓名


	public ViolationList(){}
    
	public void GetSubTotal(){        
	idNumber.add(new GetSubTota());
	}

	public void makePayment(fines Tendered){        
	idNumber.add(new makePayment(fines Tendered));
	}

    ...

}

public class PenaltyInformation {
	private Integer amount;//罚款金额

	public getAmount(){ }
…
}


public class Penalty{
	Private integer ID;
	Private integer amount;
	private List<Payemt> pay = new ArrayList<Payment>;
    
	public Penalty(){}
    
	public void GetTotal(MatchDescription desc,Athlete athlete)
	{
	pay.add(new GetTotal(ID,amount));
	}
    
    ...
    
}

public class Payment{
	private actualpay;
    
	public  Payment(){}
    
	...
}




public class Violator {
	private String Name;
	private Integer ID;
	private Integer age;

	public makePayment(fines Tenderd){ };
	...
}

多用户博客系统   

DCD图

代码

 System

import java.util.List;

public class System{  // 来自类定义
private InputWindow w ; // 来自类-关联属性可见性

Public void publishBlog(id){
   w.publish(id)
}
Public void makeNewPublish(){
   InputWindow w = new InputWindow() // 来自makeNewPublish()交互图
}
}

System类的属性包括InputWindow类型的私有变量w。

w是输入窗口。

System类的方法包括publishBlog()和makeNewPublish()方法


InputWindow

public class InputWindow { // 来自类定义
private String title;
private Text text;
private Blog b; // 来自类-关联属性可见性
private BlogText bc; // 来自类-关联属性可见性

public InputWindow (){
   return null;
}
Public void Publish(id){
   b = new Blog(id,title)  // 来自Publish()交互图
   bc = new BlogText(text)  // 来自Publish()交互图
   b.add(bc)
}
}

InputWindow类的属性包括String类型的私有变量Title、Text类型的私有变量Text、Blog类型的私有变量b、BlogText类型的私有变量bc。Title是博客标题、Text是博客内容,b是博客,bc是博客内容

InputWindow类的方法包括create()和Publish()


Blog

public class Blog { // 来自类定义
    Private int id;
private String title;
private String author;
private DateTime date;
Private BlogText bc;  // 来自类-关联属性可见性
Private BlogState bs;  // 来自类-关联属性可见性

Public Blog(int id,String title){
   this.id = id;
   this.title = title;
   bs = new BlogState();
}
Public void add(BlogText bc){
   this.bc = bc;
}
}

Blog类的属性包括String类型的私有变量Title、String类型的私有变量Author、Datetime类型的私有变量Date、BlogText类型的私有变量bc和BlogState的私有变量bs。

Title是博客标题、Author是博客作者、Date是博客创建时间、bc是博客内容、bs是博客审核状态。

Blog类的方法包括其构造方法和add()方法。


BlogText

public class BlogText { // 来自类定义
private Text Text;

public BlogText(Text content){
   this.text = content
}
}

BlogText类的属性包括Text类型的私有变量Text。

Text是博客内容。

BlogText类的方法包括其构造方法。


BlogState

public class BlogState { // 来自类定义
Private String reviewState; 

public BlogState( ){
   reviewState = “checking”;
}
}

BlogState类的属性包括Boolean类型的私有变量ReviewState。

ReviewState是博客审批状态。

BlogState类的方法包括其构造方法。

酒店管理系统

DCD图

代码(有个别类翻译有误,只分享正确的)

/**
 * class Payment
 */

public class Payment {
    private double amount;
    private double tax;

    public Payment(){
        this.amount=0;
        this.tax=0;
    }
    public void create(double amount,double tax){
        return;
    }
}
/**
 * class Room
 */

import java.util.Date;

public class Room {
    private String roomID;
    private String roomType;
    private Date startTime;

    public Room(){
        this.roomID = null;
        this.roomType = null;
        this.startTime = null;
    }
    public void create(String roomID, String roomType, Date startTime){
        return;
    }

}

思路与总结

/*大体框架*/
public class 类名字{
//根据DCD图,写出表格第二行中的内容
/*假如 Idnumber:String
    private String idNumber;
       ticket Buyers:Ticketbuyers
    private Ticketbuyers buyer;
    
       amount:Number
     private double amount;
       roomType:Type
    private String roomType;

       startTime:Time
    private Date startTime;*/

private String title;
private Text text;
/*除了表格中的关联属性,还需要关注 类-关联属性可见性,在协作图中可见*/
private Blog b; // 来自类-关联属性可见性
private BlogText bc; // 来自类-关联属性可见性

//根据DCD图,写出表格第三行中的方法,无需多写
/*写方法
一般格式:
Public void add(BlogText bc){
   this.bc = bc;
}
public void create(String ticketID, Date time){
        this.ticketID = ticketID;
        this.time = time;
}

public Ticketbuyers createTicketBuyer(String idNumber,String name){
        this.idNumber = idNumber;
        this.name = name;
        return null;
}

无返回值void即可

特殊格式:来自上述文本中的协作图和交互图
如   //来自selectTicket()协作图和DCD图
     // 用户通过系统挑选票
    public void selectTickets(String ticketID, Date time){
        ticketOrderSystem.createTicket(ticketID,time);
    }
【注意】看是否与DCD图箭头所指的下一个类有关
到时候方法具体分析即可
*/

public InputWindow (){
   return null;
}
Public void Publish(id){
   b = new Blog(id,title)  // 来自Publish()交互图
   bc = new BlogText(text)  // 来自Publish()交互图
   b.add(bc)
}

}

A类的属性包括B类型的私有变量CC是(博客标题)

A类的方法包括D()和E()

D类来自F()的协作图

主要包括私有属性idNumber和name,分别代表身份证号和姓名,方法包括createTicketBuyer(String idNumber,String name)和selectTickets(String ticketID, Date time)。Ticketbuyers类来自来自selectTicket()和enterBuyerInfo()的协作图。

InputWindow类的属性包括String类型的私有变量Title、Text类型的私有变量Text、Blog类型的私有变量b、BlogText类型的私有变量bc。Title是博客标题、Text是博客内容,b是博客,bc是博客内容

InputWindow类的方法包括create()和Publish()

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值