Question? Leave a message!




Implementing a model

Implementing a model
Object Oriented Software Development 7. Implementing a model www.ThesisScientist.comUML models  UML may be used to visualise, specify, construct and document the artefacts of a software system  Part of a software development method  To produce a working application the artefacts in the model must be implemented using development tools, languages and frameworks www.ThesisScientist.comImplementing a model  We will use Visual Studio, C and the .NET framework to begin the implementation of a UML model  Based on examples from Software Modelling Analysis and Design 1  That module and this one represent two closely related aspects of the same process www.ThesisScientist.comUML diagrams and C code  Class Diagram – a C application is constructed as classes, which generally correspond to classes in the class diagram  Sequence/Collaboration Diagrams – these describe the messages which pass between objects, and relate to method calls in C code  Object Diagram – represents the objects which exist as the program runs  Use Case Flow of Events/Activity Diagrams – describe sequences of events and workflows which must be implemented in C code www.ThesisScientist.comExample – order system  In the system, an order consists of a number of order lines  An order line specifies a single product and the quantity of that product ordered  Each order is associated with a customer, who has a discount level which is applied to all his or her orders  Sample code in OrderSystem project www.ThesisScientist.comUse case – calculate order price  We will look at the use case, the classes involved in it and the sequence diagram for it  Use Case Description  Calculates the total price of a single order including the customer’s discount  Use Case Flow of events  Calculate the price of each order line as (product price) x (quantity) and add to total  Apply the customer’s discount to the total and calculate the final price www.ThesisScientist.comClass diagram customer can be associated with many orders Customer Order lastName : string dateReceived : Date firstName : string ordNumber discount : float CalcDiscPrice() 1 +GetDiscount() +CalcPrice() orderline only exists as part of an order 1 composition orderLines Product product OrderLine name : string quantity : int productID : string price : decimal +GetLinePrice() 1 1 +GetPrice() order line contains one product only www.ThesisScientist.comSequence diagram collaborates with other objects to do so responsibility for calculating its anOrder anOrderLine aProduct aCustomer price belongs to order CalcPrice() loop for each order line GetLinePrice() GetPrice() price linePrice CalcDiscPrice() GetDiscount() discount www.ThesisScientist.comCreate classes using class diagram  Create a new C class for each class in the diagram  Declare instance variables based on the attributes in the diagram  Define (empty) methods based on the operations in the diagram  Methods which simply access instance variables (e.g. GetDiscount) can be implemented in C as properties www.ThesisScientist.comCreate classes using class diagram  Consider whether properties should be read write or readonly  Define constructor to set values of instance variables www.ThesisScientist.comImplement relationships  Add code to implement relationships between classes shown in the diagram  May need to refine model to clarify the meaning of the relationship in some cases  Purpose of relationship is to allow objects to collaborate, so sequence diagram may help clarification by showing what collaborations are needed www.ThesisScientist.comOrderLine – Product association  OrderLine is associated with a single product  OrderLine sends a message to Product  Product does not need to send message to OrderLine, so doesn’t need an OrderLine reference  Association is navigable in one direction only, OrderLine to Product www.ThesisScientist.comOrderLineProduct implementation  Implement this with an instance variable in OrderLine of type Product  Product has no reference to OrderLine  C implementation option – create LinePrice property instead of a GetLinePrice method  Cleaner syntax but no difference conceptually – accessing a property is a message, just like a method call www.ThesisScientist.comOrderLineProduct Note – when constructor would only set properties, can omit it and create objects with object initialiser syntax in C sends message to product object to ask for its price www.ThesisScientist.comCoding patterns  This is an example of a onetoone “hasa” association  OrderLine hasa Product  Common type of association, usually implemented using the same coding pattern  One class has an instance variable whose type is the name of the other class  Can also provide a property or accessor method for this instance variable if required www.ThesisScientist.comCoding patterns  A pattern is a general reusable solution to a common problem  Patterns can be applied to many aspects of software design and programming, from loops to complex groups of collaborating classes  Here we are using patterns for relationships between two classes (binary relationship coding patterns) www.ThesisScientist.comCoding patterns  The coding pattern for a relationship includes:  Implementation  The code artefact without which the relationship does not exist  Helpers  Properties and methods which may be required to make use of the relationship in particular situations www.ThesisScientist.comCoding pattern: onetoone “hasa” association  Implementation  Instance variable in one class whose type is the name of the other class  Helpers  Property in the first class which can be used to get or set the associated object www.ThesisScientist.comOrder – OrderLine association  Order is associated with many OrderLines  Order “hasa” set of OrderLines  OrderLine only exists as part of an order – composition  This is a wholepart relationship  Order sends a message to OrderLine (GetLinePrice)  Association is navigable in one direction only, Order to OrderLine www.ThesisScientist.comOrder – OrderLine implementation  Implement this with an instance variable in Order which is a collection of type OrderLine  OrderLine has no reference to Order  Order will call GetLinePrice method of each of its OrderLines  C implementation option – what kind of collection should we use  No need to search, will only add to end of collection, best option is ListOrderLine www.ThesisScientist.comOrder OrderLine sends message to OrderLine object to get its line price www.ThesisScientist.comOrder – OrderLine helper method  Need a method which can add a new OrderLine to an Order  Composition – the new OrderLine object is created within this method  OrderLine is added to List using its Add method www.ThesisScientist.comCoding pattern: onetomany “hasa” association  Implementation  Instance variable in one class whose type is a collection which holds instances of the other class  Helpers  Method to add objects to the collection (will create objects if the association is composition)  Method to remove an object  Method to return a specific object  Method to return the whole collection  Only need to implement helper(s) as needed www.ThesisScientist.comCoding pattern example code  CodingPatterns solution  OneToManyCompositionPattern project  Demonstrates pattern with a full set of helpers www.ThesisScientist.comOrderCustomer association  Customer can have many Orders  Customer “hasa” set of Orders  But Order is not part of a Customer  Customer does not create Order  Association or aggregation, not composition  Order is associated with one Customer  Order “hasa” Customer www.ThesisScientist.comOrderCustomer association  In this use case, Order needs to send message to Customer  Order class needs reference to Customer object  Order is associated with one Customer  Order “hasa” Customer  Association or aggregation  So the relationship between Order and Customer is navigable in both directions www.ThesisScientist.comOrderCustomer association  Actually, this use case does not require any messages from Customer to Order  Don’t strictly need to implement association in that direction  Implementing it here because it is likely that other use cases will require it  e.g. Show orders for a customer www.ThesisScientist.comAggregation and association  Aggregation  Implies ownership  Wholepart, or “hasa” relationship  Part may be shared with other Wholes, unlike composition  Association  No implication of ownership  “usesa” relationship  Difference in meaning makes little difference to code www.ThesisScientist.comAggregation and association  “Few things in the UML cause more consternation than aggregation and composition, in particular how they vary from regular association...”  Martin Fowler, 2003  See link below for full quote: http://www.martinfowler.com/bliki/AggregationAndCo mposition.html www.ThesisScientist.comClass diagram with navigabilities Customer Order dateReceived : Date lastName : string firstName : string ordNumber discount : float CalcDiscPrice() 1 +GetDiscount() +CalcPrice() 1 orderLines Product product OrderLine name : string quantity : int productID : string price : decimal +GetLinePrice() 1 1 +GetPrice() www.ThesisScientist.comOrderCustomer implementation  Need an instance variable in Customer which is a collection of type Order  Need an instance variable in Order which is a reference to a Customer  Order will call GetDiscount method of its Customer  Need some code to make relationship consistent  Order object should be part of the orders collection belonging to its associated Customer www.ThesisScientist.comOrderCustomer implementation implemented as a Dictionary for fast searching www.ThesisScientist.comOrderCustomer consistency constructor of Order when you create an order, you specify the customer it’s for, and add it to that customer’s orders method in Customer www.ThesisScientist.comCreating objects create Customer object create Order object www.ThesisScientist.comCoding pattern: onetomany bidirectional association  Implementation  Implement as a onetomany and a onetoone in opposite directions  Code in constructor of one class ensures consistency  Helpers  Same as onetomany  Remove method may need additional code to deal with consistency www.ThesisScientist.comCoding pattern example code  OneToManyAssociationPattern project  OneToManyBidirectionalPattern project  Demonstrate patterns with a full set of helpers www.ThesisScientist.comOrder – Product association  We didn’t show an association on the class diagram between Order and Product  No message passed between Order and Product in sequence diagram  But there is a relationship  Order “usesa” Product to create an OrderLine  Simple association  Sometimes modelled as a dependency www.ThesisScientist.comOrder – Product association  AddOrderLine method in order has a parameter of type Product  Temporary association – only exists while this method runs  Sets up permanent association between Product and OrderLine www.ThesisScientist.comClass diagram with OrderProduct Order Customer lastName : string dateReceived : Date ordNumber firstName : string discount : float CalcDiscPrice() 1 +GetDiscount() +CalcPrice() 1 orderLines Product product OrderLine name : string quantity : int productID : string price : decimal +GetLinePrice() 1 1 +GetPrice() www.ThesisScientist.comCoding pattern: simple association  Implementation  One class has a reference to instance(s) of the other in one of the following places:  Method parameter  Method return value  Local variable www.ThesisScientist.comCoding pattern example code  SimpleAssociationPattern project www.ThesisScientist.comOther relationship examples  These examples and patterns don’t capture all possible types of relationship  Provide examples on which to base solutions to real problems  Object oriented systems model the real world, and reality can be complicated www.ThesisScientist.comWhat’s next  We will go on to look at some practical issues which are important in developing robust programs, including handling error situations with exceptions, debugging and testing www.ThesisScientist.com