1 / 31

Good for DJ over Java

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.

armen
Download Presentation

Good for DJ over Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Embedding versus path control • Embedding does mapping work once but requires mapping construct • Path control may repeat mapping work

  3. Reuse of an AC written with DJ • Copy AC • rename everything • change path control: assumes original AC is written with path control • Leads to duplication of code

  4. UML Class Diagram BookName bN Book Copy Library copies books 0..* 0..* avail book 0..* checkOutItems users 0..* uId User Boolean UserId

  5. UML Class Diagram BookName bN Book Copy Library copies books 0..* book 0..* avail copy checkOutItems 0..* users CheckOutItem 0..* uId User Boolean UserId

  6. How can addition be expressed with ACs • Required: participant graph • Provided: modified participant graph: has all the paths in original but may have more

  7. 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

  8. 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 } }

  9. Compiler asks for information or determines it by rules class Library { Copy CheckOut (Library lib,BookName bN, UserId uId){ Book b = lib.Find(“Book”,“bN”,bN); Copy c = b.Find (“Copy”,“avail”,true); User u = lib.Find(“User”,“uId”,uId); u.Add(“Copy”,c); c.Set(“avail”,false); return c; } }

  10. 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; } }

  11. Doug’s proposal Book b = cg.fetch( lib, new Strategy (“to Book”), new Predicate() { boolean match(Object obj){ return((Book) obj).get_isbn() == 678); } } ) Instead of: Book b = cg.Find(lib,“to Book”,“isbn”,678);

  12. Doug’s proposal More flexible but more verbose Book b = cg.fetch( lib, new Strategy (“to Book”), new Predicate() { boolean match(Object obj){ return((Book) obj).get_isbn() == 678); } } ) Instead of: Book b = cg.Find(lib,“to Book”,“isbn”,678); interface Predicate { boolean match(Object); } Anonymous object of anonymous class

  13. 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);

  14. 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”);

  15. 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

  16. 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”);

  17. Aspect Language: don’t use CheckOut { Find(this.bN==bN)-> Book Find(avail==true)->Copy; Find(this.uId==uId)-> User; addCopy { u:User Add(c)-> Copy; } }

  18. 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 } }

  19. 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

  20. Generalized Traversals Library Find-> Book Traversal from Library to Book must have upper cardinality > 1, e.g., 0..*, 1..*. Compiler will ask for properties to select a book. Rule: if an object of the class of a data member of Book is available, it will choose that one as default

  21. Generalized traversals lib:Library Find-> b:Book DJ: Book b = cg.Find(lib, new Strategy(“from Library to Book”), “property bN”,bookName); Book b = cg.Find(lib, new Strategy(“from Library to Book”), “property isbn”,isbnNumber);

  22. Connection actions/class graph lib:Library Find-> b:Book u:User Add(c)-> Copy lib:Library Delete-> b:Book 0..*, 1..*

  23. Connection actions/class graph c:Copy Set(avail,false)-> Boolean c:Copy Get(avail)-> b:Boolean == c:Copy Fetch(avail)-> b:Boolean 1..1, 0..1 --- traverse a little different c:Company Traverse(v1)-> r:Result traverses to all classes mentioned in v1 and performs visiting action. There must be a path to each such class?

  24. Generalized traversals lib:Library Find-> b:Book DJ: Book b = cg.Find(lib, new Strategy(“from Library to Book”), “property author”,authorName); Find is like a generalized fetch

  25. Generalized traversals u:User Add(c)-> Copy; cg.Add(u,new Strategy (“from User to Copy”), c); Expects a unique path from User to Copy that is “insertable” and it adds c at end. Insertable means ...

  26. New Operations for DJ • Find, Delete, Add • Set, Get=Fetch • Traverse, Gather c:Copy Set(avail,false)-> Boolean cg.Set(c, new Strategy( “from Copy through -> *,avail,* to Boolean”), false);

  27. DJ: dealing with vectors • How can DJ deal with Java vectors and other collection classes? A = B C. //from A via B to C B = Vector. R = Q. Q = C. S = T. T = .

  28. DJ: dealing with vectors A = B C. //from A via B to C B = Vector. R = Q. Q = C. S = T. T = . Q A C R T S Vector B

  29. DJ: dealing with vectors A = B C. //from A via B to C B = Vector. R = Q. Q = C. S = T. T = . Q A C R T S Vector B

  30. Dealing with Vector • Enlarge the class graph by drawing a subclass edge from Vector to every node. • Might create many edges • Use the generality of the strategy compilation algorithm

More Related