Catalysis Objects components and Frameworks with UML CatalysisTesting
Catalysis Objects, components, and Frameworks with UML Catalysis/Testing
From the book • Objects, components, and frameworks with UML: the Catalysis Approach, by Desmond D’Souza and Alan Wills. Catalysis/Testing
A tour • Objects and actions – object: cluster of information + functionality – action: anything that happens • actions can be independent of objects. Bound to objects later. – – what happens during action which object is responsible for doing action which object is responsible for initiating action how is it done • actions affect objects Catalysis/Testing
Fractal picture • A fractal picture has the same appearance at all scales • objects: business departments, machines, running software components, programming language concepts • actions: interactions among objects: big business deals, phone calls, bike rides, etc. Catalysis/Testing
Actions affect objects • Actions = collaborations • In Catalysis collaborations are first-class units of design. • Where should collaborations be used? – what goes on inside a software component – user-component interactions – business modeling: how do real-world objects interact? Catalysis/Testing
Actions affect objects • Actions have participants (objects) • Which objects do you need? Enough to describe the actions • Associations provide a vocabulary in which it is possible to describe effects of actions (prefer: class graph over associations) Catalysis/Testing
Precise specifications action(student, teacher): : teach(skill) post student. accomplishments = student. accomplishments@pre+ skill Catalysis/Testing
Refinement • Of objects and actions • Zoom in and out Catalysis/Testing
Connection to aspectual components • objects, components (actions), connectors • actions have a modification interface Catalysis/Testing
Commonalities Catalysis/AC • actions independent of objects • abstract does not mean fuzzy • program should be structured according to a business model • static model • AC independent of objects • AC is abstract and executable • program should look like a design • participant graph Catalysis/Testing
Differences Catalysis/AC • actions cannot describe • AC (when modification aspects interface is used) can model aspects • should use pre and post • uses pre- and postconditions • connectors keep • no connectors components clean Catalysis/Testing
Development Layers: vanilla development from scratch • • • Business model (domain/essential model) Requirements specification Component design Object design Component kit architecture: needed to build interoperable components • April 11, 99 Catalysis/Testing
Static models and invariants • An action’s postcondition can be written in terms of static relationships • Connection: participant graph of AC contains information to describe postconditions Catalysis/Testing
Model Frameworks as Templates • Similar to AC, but no aspects • parameterized Catalysis/Testing
Requirements Specification Models • Objects in this diagram are not real objects but rather the system’s own representation of them • Static model: is a hypothetical picture created for explaining the systems externally visible behavior to its users. Catalysis/Testing
Static model (continued) • There is no mandate on the designer to implement it exactly with classes and variables that mirror directly the types and associations in the spec. Catalysis/Testing
Partitioning the model between components • Each of the components performs only some of the system’s functions and includes only part of its state • different vocabulary; need map • reconstruct all the attributes and associations from component design Catalysis/Testing
Collaborations • Now: a collaboration is a collection of actions and the types of objects that participate in them • Sometimes they say: action = collaboration Catalysis/Testing
Testing • When does a more detailed design conform/implement/refine a more abstract one? • How to test different kinds of refinement relations? • Connection: refinement/testing Catalysis/Testing
Testing • • Pre and post conditions useful for testing test harness C++ STL library: has assert macro Every component needs to have its own test kit to monitor behavior in new context Catalysis/Testing
Retrieval functions • Every implementation should have a complete set of retrieval functions; that is, read only abstraction functions for computing the value of every attribute in the spec. from the implementation • Need to translate from one model to another • Retrieval functions can be inefficient: only used for verification; e. g. testing. Catalysis/Testing
Retrieval functions • Long history: VDM, Z • support traceability: how change in spec or code influences the other • use retrieval diagrams Catalysis/Testing
Benefits of retrieval functions • cross-check • make it explicit how abstract model is represented in the code • testing: execute postconditions and invariants defined in requirement model Catalysis/Testing
Golden rule of OOD • Choose your classes to mirror your specification model. 1 -1 correspondence often not possible – model that gives best performance often different from one that clearly explains what the object does – multiple models are implemented simultaneously: each model: partial view Catalysis/Testing
Testing by adapting the implementation • Specification (with test information) • Implementation package – Adapter – Implementation Catalysis/Testing
Spreadsheet * Content Cell content shows right value left Sum Number Blank Invariants: for all Sum objects s: s. value = s. left. content. value + s. right. content. value for all Blank objects b: b. value = 0 Simplified: a formula can be only the sum of two other cells Catalysis/Testing
Spreadsheet * Content Cell content shows Sum s; right s. left = s. impl 1. operands[1]. abs s. right=s. impl 1. operands[2]. abs s. value=s. impl 1. container. value left value abs Sum Invariants: for all Sum objects s: s. value = s. left. content. value + s. right. content. value for all Blank objects b: b. value = 0 Number abs Blank abs RETRIEVAL DIAGR. impl 1 Spreadsheet_1 impl 1 * shows Cell_I is. Blank: boolean value impl 1 sumpart container * operands Catalysis/Testing Sum_I
Retrieval functions with DJ • How to represent the participant graph? – Use strategy graph. Introduce a string for each edge. E 1 = “{A->B bypassing X}”. class A {B get. B(){return (B) tg. fetch(this); } } – tg is the traversal graph for E 1. Catalysis/Testing
Retrieval functions • Overlay concrete class graph with participant class graph using getter functions that are implemented using strategies. Name map is identity map. • Can simplify class graph before writing strategies. Can introduce multiple class graph views. Catalysis/Testing
S is participant graph for G F=t D F D E B C B E C S G A=s Catalysis/Testing A
Catalysis Process: Main Theme • Higher-level • Lower-level, a refinement of higher level. Retrieve mapping from higher-level to lower-level. • For every specification activity there is a corresponding implementation and testing activity Catalysis/Testing
Typical Process for a Business System • Requirements • System Specification • Architectural Design: components/connectors – application architecture: packages, collaborations – technical architecture: hardware, software platform, infrastructure components • Component Internal Design Catalysis/Testing
Typical Project Evolution : page 522 • The business case: initial requirements • Domain or business model: independent of software solution. Reusable across multiple projects. • Joint-Application Development: developers/users • Glossary Catalysis/Testing
Typical Project Evolution • Type model plus system specifications. Primary actions system participates in. Refined to atomic interaction with system. • UI sketches • Subject areas • Generic problem frameworks • Refactor for reuse Catalysis/Testing
Typical Project Evolution • • Design rules for technical architecture Technical architecture model Horizontal slices: architecture simulation Application architecture: design of application logic as a collection of collaborating components • Project plan, deployment Catalysis/Testing
Chapter 3: Behavior Models • Component-based software development: separate external behavior from internal implementation • Describe behavior: by list of actions and response to those actions (called the component’s type) Catalysis/Testing
Two parts of a specification • Static model (structure): UML class diagram and invariants • Type specification (behavior): specify effects of actions on component using vocabulary provided by static model • This chapter: about how to derive and write type specifications. Examples follow. Catalysis/Testing
Static model with behavior Course Scheduling Static model full. Schedule * Client sessions * Session client grade: Grade date : Date * staff instructor 0. . 1 Instructor * sessions rating: Grade {ordered date} Invariant (business rule): full. Schedule. grade <=full. Schedule. instructor. rating check. Availability(instructor, date) post: find whether instructor is doing a session on that date behavior schedule. Course(date, client) post: set up a new session and assign an instructor Catalysis/Testing Behavior defined in terms of static model
find all persons waiting at any bus stop on a bus route Static Model Bus. Route bus. Stops Bus. Stop 0. . * DOES NOT REVEAL TOO MANY IMPLEMENTATION DETAILS waiting 0. . * Person Catalysis/Testing
Implementation 1 find all persons waiting at any bus stop on a bus route bus. Stops Bus. Route buses Bus. List 0. . * Bus. Stop. List OO solution: one method for each red class 0. . * Bus. Stop waiting passengers Bus Person. List Person Catalysis/Testing 0. . *
find all persons waiting at any bus stop on a bus route Implementation 2 Bus. Route buses Bus. List 0. . * villages Village. List 0. . * Village Bus. Stop. List bus. Stops Bus. Stop waiting passengers Bus 0. . * Person. List Person Catalysis/Testing 0. . *
Filter out noise in class diagram • only three out of seven classes are mentioned in static model Bus. Route Bus. Stop Person replaces traversal methods for the classes Bus. Route Village. List Village Bus. Stop. List Bus. Stop Person. List Person Catalysis/Testing
Map static model to application class graph Bus. Route villages Bus. Stop. List Village. List 0. . * bus. Stops Bus. Stop Village Bus. Route edge -> path bus. Stops 0. . * Catalysis/Testing Bus. Stop 0. . *
Using DJ class Bus. Route { Vector bus. Stops(){return Main. cg. gather(this, new Strategy( “from Bus. Route to Bus. Stop”); } } Catalysis/Testing
Using DJ: complete solution class Bus. Route { Vector waiting. Persons(){return Main. cg. gather(this, new Strategy( “from Bus. Route via Bus. Stop to Person”); } } Catalysis/Testing
Notes • Static model is translated into a strategy • Why? With DJ behavior is written in such a way that it is usable in many different static models Catalysis/Testing
Two approaches Catalysis: • Define static model and define behavior using static model • Map static model to implementation model • Behavior is in implementation model DJ: • Define strategies corresponding to static model and express behavior using strategies. • Adjust strategies for implementation model. • Behavior is in implementation model Catalysis/Testing
Using DJ: complete solution Java problem: parameterization class Bus. Route { Vector waiting. Persons(){return Main. cg. gather(this, new Strategy( “from Bus. Route via Bus. Stop to Person”); } } Catalysis/Testing
Using DJ: complete solution Java problem: parameterization class Bus. Route { Person. List waiting. Persons(){return Main. cg. traverse(this, new Strategy( “from Bus. Route via Bus. Stop to Person”, new Collection. Visitor()); } } Catalysis/Testing
- Slides: 49