老师讲解
第一步,根据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类型的私有变量C。C是(博客标题)
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()