150 likes | 232 Views
Good for DJ over Java. Extending traversals for collections (b..*) returning a single object instead of a collection (Find) modifying the collection (Add, Delete) implementations are different for different implementations of collections. Embedding versus path control.
E N D
Good for DJ over Java • Extending traversals for collections (b..*) • returning a single object instead of a collection (Find) • modifying the collection (Add, Delete) • implementations are different for different implementations of collections
Embedding versus path control • Embedding does mapping work once but requires mapping construct • Path control may repeat mapping work
UML Class Diagram BookName bN Book Copy Library copies books 0..* 0..* avail book 0..* checkOutItems users 0..* uId User Boolean UserId
UML Class Diagram BookName bN Book Copy Library copies books 0..* book 0..* avail copy checkOutItems 0..* users CheckOutItem 0..* uId User Boolean UserId
Checkout a book for a user Interaction schema CheckOut { Library( Find-> Book Find(avail==true)-> c:Copy; Find-> u:User;) addCopy { u:User Add-> Copy; c:Copy Set(avail,false)-> Boolean } }//participants: Library, Book, Copy, User
Compiler asks for information or determines it by rules CheckOut (Library lib,BookName bN, UserId uId){ lib:Library( Find(this.bN==bN)-> Book Find(avail==true)->c:Copy; Find(this.uId==uId)-> u:User;) addCopy { u:User Add(c)-> Copy; c:Copy Set(avail,false)-> Boolean } }
Compiler asks for information or determines it by rules class Library { Copy CheckOut (Library lib,BookName bN, UserId uId){ Book b = lib.Find(“to Book”,“bN”,bN); Copy c = b.Find (“to Copy”,“avail”,true); User u = lib.Find(“to User”,“uId”,uId); u.Add(“Copy”,c); c.Set(“avail”,false); return c; } }
For DJ class Library { Copy CheckOut (Library lib,BookName bN, UserId uId){ Book b = cg.Find(lib,“to Book”,“bN”,bN); Copy c = cg.Find (b,“to Copy”,“avail”,true); User u = cg.Find(lib,“to User”,“uId”,uId); cg.Add(u,“to Copy”,c); cg.Set(c,“to Boolean”,”avail”,false); return c; } }
For DJ/paper Book b = cg.Find(lib,“to Book”,“bN”,bN); Copy c = cg.Find (b,“to Copy”,“avail”,true); User u = cg.Find(lib,“to User”,“uId”,uId); cg.Add(u,“to Copy”,c); Copy cg.Delete(u,“to Copy”, “avail”,true); cg.Set(c,“to Boolean”,”avail”,false); Boolean cg.Get(c,“to Boolean”,”avail”); int cg.Traverse(company,”to Salary”,v);
For DJ/paper/constraints 0..*, 1..*: Book b = cg.Find(lib,“to Book”,“bN”,bN); cg.Add(u,“to Copy”,c); cg.Delete(u,“to Copy”, “avail”,true); cg.Traverse(company,”to Salary”,v); cg.Gather(company,”to Salary”); 0..1, 1..1 cg.Set(c,“to Boolean”,”avail”,false); cg.Get(c,“to Boolean”,”avail”);
For DJ/paper/constraints 0..*, 1..*: Book cg.Find(lib,“to Book”,“bN”,bN); Find in library lib a book with data member “bN” = bN. void cg.Add(u,“to Copy”,c); Add to user u a copy c Copy cg.Delete(u,“to Copy”, “avail”,true); Delete from user u a copy with avail == true
For DJ/paper/constraints 0..*, 1..*: int cg.Traverse(company,”to Salary”,v); traverse from company to Salary and perform visiting actions of v. Vector cg.Gather(company,”to Salary”); collect all Salary-objects reachable from company 0..1, 1..1 Boolean cg.Set(c,“to Boolean”,”avail”,false); Boolean cg.Get(c,“to Boolean”,”avail”);
Compiler asks for information or determines it by rules Definition: an interaction schema is a sequence of navigation statements of the form o1:T1 -Action1-> o2:T2 -Action2-> o3:T3 ... CheckOut (lib,bN,uId){ lib:Library( Find(this.bN==bN)-> Book Find(avail==true)->c:Copy; Find(this.uId==uId)-> u:User;) addCopy { only one choice u:User Add(c)-> Copy; c:Copy Set(avail,false)-> Boolean } }
Advantages • High-level description of behavior in terms of an ideal UML class diagram • Behavior can be adapted to many concrete class diagrams • Some details of action parameters may be filled in under compiler control