Draw on the right, write (Umple) model code on the left. Analyse models and generate code. This tool stores your data in cookies and on a server. I understand. Click to learn about privacy. Download Donate For help: User manual Ask questions Report issue
// UML State diagram for a library loan, represented in Umple class Loan { // Loan due in 14 days; can be extended for 7; fines when late each 2 days Integer loanTime = {1000*60*60*24*14}; Integer extensionTime = {1000*60*60*24*7}; Integer fineIncrementInterval = {1000*60*60*24*2}; // Timestamp in ms when the load was initiated Integer loanStartTime; // Number of ms to the loan becoming due from entry to current state Integer deadline = 1209600000; // 2 weeks state { initial { entry / { setDeadline(getLoanTime()); setLoanStartTime(currentTime()); } -> outstanding; } outstanding { // regular loan, can be extended extend -> / {setDeadline(getExtensionTime());} outstanding; returnitem -> returned; recall -> / {sendRecallNotice();} recalled; after(deadline) -> overdue; declareLost -> lost; } recalled { // Not overdue, but cannot extend entry / {setDeadline(getDeadline() - (currentTime() - getLoanStartTime()));} returnitem -> returned; after(deadline) -> overdue; declareLost -> lost; } overdue { entry / { assessFine(); sendOverdueNotice(); } afterEvery(getFineIncrementInterval()) -> overdue; returnitem -> returned; declareLost -> lost; } returned { // Normal End state } lost { entry / {assessReplacementCost();} // Perhaps found later ... returnitem / {refundReplacementCost();} -> returned; } } void refundReplacementCost() {} void sendRecallNotice() {} void assessFine() {} void sendOverdueNotice() {} void assessReplacementCost() {} int currentTime() {return 1;} }