Object-Oriented S oftware Construction r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Overview Use case dia(ra!s )escribe the functional behavior of the s+ste! as seen ,unctional b+ the user !odel bstraction fro! a set of scenarios Class dia(ra!s Object )escribe the static structure of the s+ste!: classes, !odel attributes, associations Se-uence and Collaboration dia(ra!s )escribe the d+na!ic behavior between actors and the s+ste! and between objects of the s+ste! Statechart dia(ra!s )escribe the d+na!ic behavior of an individual object )+na!ic 'essentiall+ a finite state auto!aton* !odel ctivit+ )ia(ra!s Model the d+na!ic behavior of a s+ste!, in particular the workflow 'essentiall+ a flowchart* r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 3 Scenarios )escription of a se-uence of interactions with the envisioned s+ste! )escribed fro! the user4s point of view 5llustrate co!!on cases ,ocus on understandabilit+ Concrete persons and actions 6o abstractions or alternatives e#(# avoid 7so!e7, 7so!ethin(7, role na!es, 8 r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 9 /:a!ple Scenario ;aul purchases a ticket ;aul would like to bu+ a train ticket fro! "onn to Colo(ne at a ticket vendin( !achine <e selects the =&S 7&e(io %icket7 which includes this distance %he !achine displa+s the a!ount due: 1,>0 ? ;aul inserts a >0 ? bill %he !achine returns 3,@0 ? %he !achine issues a 7&e(io %icket7 r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 A Use Case )ia(ra!s: %he idea bstracts fro! a set scenarios Use case dia(ra!s represent the functionalit+ of the s+ste! fro! userBs point of view ,ocus on co!pleteness )efine the boundaries of the s+ste! Used )urin( re-uire!ents elicitation %o discuss current and future functionalit+ with the users s a startin( point for all further activities 8 r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 1 Use Case )ia(ra!s: %he idea C '"asic in(redients* Actors !odel an e:ternal entit+ which co!!unicates with the s+ste! Use cases represent se-uences of interactions with the s+ste! ;assen(er DDinitiatesEE <<communicates>> ;urchase%icket )escription of dependencies between s+ste! functionalities and e:ternal actors %he use case !odel is the set of all use cases# 5t is a co!plete description of the functionalit+ of the s+ste! and its interaction with the environ!ent r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 3 Use Case )ia(ra!s: ctors ;assen(er n actor !odels an external entit+ which co!!unicates with the s+ste! User /:ternal s+ste! ')", software, devices* n actor has a uni-ue na!e and an optional description /:a!ples: ;assen(er: person in the train F;S satellite: ;rovides the s+ste! with F;S coordinates r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 G Use Case )ia(ra!s: Use Case n use case represents a class of functionalit+ as an se-uence of abstract interactions 'flow of events* use case consists of Uni-ue na!e ;urchase%icket ;articipatin( actors /ntr+ conditions ' optional * ,low of events /:it conditions ' optional * 6on-functional re-uire!ents <ard to infer fro! the (raphical representation r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 @ Use Cases %e:tual &epresentation %e!plate for a te:tual use case Use case name Participating Actors Flow of Events Entry Condition Exit Condition Non-Functional Requirements r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 >0 Use Cases %e:tual &epresentation DDinitiatesEE ;assen(er ;urchase%icket Use case name ;urchase ticket Participating Actors 5nitiated b+ ;assen(er Flow of Events ># ;assen(er selects the nu!ber of .ones to be Initiated by an actor traveled# C# SHS%/M displa+s the a!ount due# 3# ;assen(er of at least the a!ount due '/:tension # 9# SHS%/M returns 5nitiated b+ the s+ste! A# SHS%/M issues Entry Condition ;assen(er standin( in front of ticket distributor# Exit Condition ;assen(er has a correct ticket# Non-Functional Requirements I %he ;assen(erJs ticket is issued within >A seconds# r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 >> Use Case )ia(ra!s: %he enerali!ation"#n$eritance &elationship UML: Use Cases ;assen(er ;urchase %icket ;urchase%icket Special,ee ;urchase Froup%icket Fenerali.ation is used like between classes Means speciali.ation 'inverted direction* /:tended or different functionalit+ ,unctionalit+ can be used or overridden Concrete speciali.ation of abstract use cases 'pol+!orphis!* r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 >C Use Case )ia(ra!s: %he %%include&& &elationship ;assen(er ;urchaseMultiCard ;urchaseSin(le%icket DDincludeEE DDincludeEE %%include&& relationship is used to include behavior defined b+ another use case Used to share helpful behavior a!on( use cases ;oints fro! the 'ase use case to the inclusion use case "ase use case cannot run independentl+ CollectMone+ r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 >3 Use Case )ia(ra!s: %he %%extend&& &elationship %%extend&& relationship is used to e:tend a use case b+ e:ceptional, optional or seldo! ;assen(er invoked cases# Base Use Case /:tension ;oints $andleException ;urchase%icket DDe:tendEE 'handle/:ception* DDe:tendEE 'handle/:ception* KOptional FuardL OutOfOrder /:tension points !ust be defined in the 'ase use case Conditions '(uards* !a+ be specified when the extension use case will be inserted %he direction of a %%extend&& relationship is fro! the e:tension use case to the base use case "ase use case can run independentl+ Supplier Use Case Cancel r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 >9 Use Case )ia(ra!s: Overview /le!ents ctor ;acka(e Use cases nnotations &elations name comments ... A B <<include>> A <<extend>> B A B <<inherit>> Example Role of an actor customer salesperson place order When placing an order, ... r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 >A )escribin( the ,low of /vents DDincludeEE and DDe:tendEE Inclusion DDincludeEE Base Use Case Use Case DDincludeEE relationship Coll ectMone+ ;urchase%i cket ... 3. Passenger confir!s the purchase of a ticket 9# SHS%/M receives the confir!ation and asks for insertin( coins 'b+ includin( Collect(any) DDe:tendEE relationship Extension DDe:tendEE Base Use Case handle/:ception Use Case Cancel ;urchase%icket "ase Use Case: 8 C# /;: Cancel 8 %he Cancel use case e:tends an+ use case in which the user presses the Cancel button 1. Passenger presses the Cancel button C# SHS%/M rolls back the transaction r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 >1 Use Case )ia(ra!s: Su!!ar+ Use Case dia(ra!s !odel the observable functionalit+ of a s+ste! )escribe the interactions of the s+ste! and its environ!ent Use Cases consist of dia(ra!s and te:tual description 'of behavior, actors, entr+ conditions, etc#* Use Cases are needed to discuss the s+ste!Bs functionalit+ with users r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 >G Class )ia(ra!s Classes )escribe the static structure of the s+ste! class represents a concept class encapsulates state *attri'utes) and behavior *operations) /ach attribute has a type /ach operation has a signature %he class na!e is the onl+ !andator+ infor!ation %ariffSchedule .oneCprice (etMones'* (et;rice'* %ariffSchedule %able .oneCprice 6a!e /nu!eration (etMones'* ;rice (et;rice'Mone* ttributes Si(nature Operations 'Methods* %ariffSchedule r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 C0 Class )ia(ra!s: 5nheritance of 5nterface %%interface&& (ovea'le 5!ple!entation Fenerali.ation Car %%interface&& Extd(ovea'le 5nterfaces are classes that define a set of e:ternall+ accessible operations without i!ple!entations contract for classes 5!ple!entation classes !ust provide concrete i!ple!entation Otherwise: bstract classes Stereot+pe: Used for e:tendin( UML ele!ents r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 C> Class )ia(ra!s: bstract classes abstract class %%a'stract&& Car concrete class M+Car bstract class contains both i!ple!ented !ethods and interface infor!ation of !ethods 'no i!ple!entation (iven* CanBt be instantiated directl+ Subclass !ust i!ple!ented interface !ethods and may override i!ple!ented !ethods 5f so!e interface !ethods are not i!ple!ented, then the subclass is a(ain an abstract class# r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 CC Class )ia(ra!s: ((re(ation n aggregation is a special case of association denotin( a Nis-part ofO hierarch+ %he aggregate *w$ole) is the parent class, the parts are the children class ((re(ate and its part can e:ist independentl+ ;arts can be rebound to other a((re(ates ,ire Station Car usually 0##> > P 9 > !bulance Qheels ,ire,i(hter /n(ine brand power inch power r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 C3 Class )ia(ra!s: Co!position solid dia!ond denotes composition, a stron( for! of a((re(ation where parts cannot e:ist without the a((re(ate )eletion of the a((re(ate causes the deletion of its parts ;arts cannot be rebound to other a((re(ates Usa(e is not alwa+s obvious Usa(e should be ar(ued Countr+ %ree <u!an usually > RR or P State inch P > Leaf <eart inch inch P %own power r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 C9 Class )ia(ra!s: %he four is-part-of cate(ories exclusive not exclusive (only part of one unit) (part of several units) dependent 1 1..* (propagation of deletion operations) + explicit specifcation of deletion propagation company 1 *department project 1.* *Time- plan independent 0..1 * (no propagation of deletion operations) car 0..1 4 tire project * * employees r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 C1 Class )ia(ra!s: ssociation Classes ttributes and operations can be attached to an association Sob salar+ Co!pan+ > P ;erson Co!pan+ > P Sob > > ;erson salar+ lternative !odelin(: proble!sR r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 CG )+na!ic Model Se-uence $ Collaboration )ia(ra!s State )ia(ra!s ctivit+ )ia(ra!s r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 30 Se-uence dia(ra!s ;assen(er :%icketMachine selectMone'* insertCoins'* pickupChan(e'* pickUp%icket'* Used durin( re-uire!ents anal+sis %o refine use case descriptions to find additional objects Actors represent e:ternal entities initiatin( the se-uence +',ects specific parts involved in the collaboration 'rectangles* (essages e:chan(ed durin( interactions 'la'eled solid arrows* -ifelines life ti!e of an object 'das$ed lines* Activations ti!e durin( which as class is perfor!in( an action 'vertical 'ars* r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 3> Se-uence dia(ra!s: 5nstance ,or! ;assen(er :Mone "utton :%ariffSchedule :)ispla+ selectMone'* lookup;rice'selection* price displa+;rice'price* 8to be continued### =isuali.e one possi'le interaction %he ori(in of an arrow indicates the activation which sent the !essa(e Stick arrowhead: Control is passed to receiver 6o further details about co!!unication are provided return is shown with a dashed line# r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 3C Se-uence dia(ra!s: )escriptor ,or! '5teration $ Condition* 8continued fro! previous slide### ;assen(er :Chan(e;rocessor :Coin5dentifier :)ispla+ :Coin)rop P insertChan(e'coin* lookupCoin'coin* price 5teration displa+;rice'owed!ount* Kowed!ountD0L returnChan(e'-owed!ount* Condition 8to be continued### bstract Se-uences visuali.e all possi'le interactions Objects drawn without underlines 5teration is denoted b+ a P precedin( the !essa(e na!e Condition is denoted b+ boolean e:pression in K L before the !essa(e na!e r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 33 Se-uence dia(ra!s: Creation and destruction ;assen(er :Chan(e;rocessor Creation :%icket print'* free'* )estruction Creation is denoted b+ a !essa(e arrow pointin( to the object )estruction is denoted b+ an T !ark at the end of the destruction activation r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 39 Se-uence dia(ra!s: Self-)ele(ation aMethod aMethod n !ethod !a+ invoke itself recursivel+ 'self-dele(ation* 6estin( !a+ occur to an arbitrar+ depth r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 3A Se-uence dia(ra!s: S+nchronous interaction :Sender :&eceiver :Sender :&eceiver Messa(e Messa(e 'i!plied &eturn* &eturn /:plicit return 5!plicit return !essa(e invokes an operation s+nchronousl+ 'filled arrowhead* Sender passes control to the receiver via the !essa(e and pauses to wait for the receiver to return control 'i!plicitl+ or e:plicitl+* 6ested se-uences co!plete before their outer se-uence resu!e r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 31 Se-uence dia(ra!s: Concurrenc+ 's+nchronous interaction* :Sender :&eceiver Messa(e &eturn : &epresent a non-nested flow of control via a !essa(e# %he !essa(e invokes an operation as+nchronousl+ 'half-filled arrowhead*# "oth Objects sta+ active, can co!!unicate with each other 5f the receiver returns infor!ation to the sender, the infor!ation !ust be e:plicit r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 33 Se-uence dia(ra!s: Su!!ar+ UML se-uence dia(ra! represent behavior in ter!s of interactions Useful to find !issin( objects %i!e consu!in( to build but worth the invest!ent Co!ple!ent the class dia(ra!s 'which represent structure* /as+ understandable Control ,low Concurrenc+ can be presented r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 3G Collaboration )ia(ra!s 5nteraction of several objects of one object with itself chronolo(ical se-uence of !essa(es 6o lifeline %i!e order of !essa(es is indicated with nu!bers dvanta(es over se-uence dia(ra!s structural relationships between objects '!essa(e interaction alon( concrete links* r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 3@ )+na!ic Model: Collaboration )ia(ra! c : Client condition !essa(e 1: [isMember] create() link 2: setActions( values, Test ) 3: destroy() : %ransaction d : Database 2.1: updateRecord*( values[ i ] ) anon+!ous object 2.2: setValue(Test ) na!ed object Se-uence nu!ber 5teration 'P* r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 90 )+na!ic Model: Statechart )ia(ra!s Modelin( the behavior of one sin(le object State !achine "ehavior that specifies the se-uences of states an object (oes throu(h durin( its lifeti!e in response to events States Condition or situation durin( the lifeti!e of an object durin( which it satisfies so!e condition, perfor!s so!e activit+, or waits for events Can be nested Can have concurrent and se-uential sub states /vent si(nificant occurrence that has a location in ti!e and space %ransition relationship between two states dorned b+ conditions, event, actions 'so!e e:ecutable co!putation* r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 9> )+na!ic Model: Statechart )ia(ra!s U basic !odel initial state anEvent [aCondition] aNameOfState1 / anAction aNameOfState2 do / anActivity transition final state r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 9C /:a!ple: Statechart )ia(ra! initial state state condition 2 action [not all items checked] [All items checked && / get next item Checking all items available] Dispatching do/check item do/initiate delivery [All items checked && some items not in stock] Item received [some items not in stock] Waiting Item received [all items available] activit+ e:pression delivered transition self-transition Delivered r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 93 6ested Statechart )ia(ra! co!posite state [not all items checked] [All items checked && /get next item Checking all items available] Dispatching do/check item do/initiate delivery [All items checked && some items not in stock] Item received [some items not in stock] Item received [all items available] sub state delivered Waiting Delivered start canceled resume Idle r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 99 Concurrent Statechart )ia(ra!s canceled Waiting Calling Dispatching Picked Up Authorized Phone Canceled lso applies to concurrent nested states# Delivered ,inal state of a parallel se-uence of states Rejected r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 9A Concurrent Statechart )ia(ra!s lternative canceled Canceled Waiting Checking Dispatching Delivered Authorizing Authorized Rejected r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 91 Statechart dia(ra!s Su!!ar+ Sub states help to reduce the nu!ber of transitions in a dia(ra! Stub states enable 5nternal activities help to reduce the nu!ber of states and transitions in a dia(ra! &eduction of co!ple:it+# Can also be used for !odelin( an+ kind of behavior 'use cases, objects* but seldo! docu!ented r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 93 ctivit+ )ia(ra!s n activit+ dia(ra! shows the control flow of a s+ste! Handle Document Archive Incident Incident Incident special state dia(ra!, whose states are activities 'NfunctionsO* 6ot li!ited to one object %wo kinds of states Action state to!ic 'in respect to the detail level of the !odel* Activity state !a+ contain other states %his activit+ is !odelled b+ another activit+ dia(ra! ;rovide a task-centric view of the behavior of a set of objects r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 9G ctivit+ )ia(ra!s: Modelin( of )ecisions Open [lowPriority] Allocate Incident Ressources [fre & highPriority] [not fre & highPriority] Notify Fire Chief Notify Police Chief r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 9@ ctivit+ )ia(ra!s: Modelin( Concurrenc+ S+nchroni.ation of several activities ;aralleli.ation of the control flow Fork Synchronization Allocate Ressources Open Coordinate Archive Incident Ressources Incident Document Incident r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 A0 pplication and Solution )o!ain OO !odelin( pplication )o!ain '&e-uire!ents nal+sis* 5ncorporates ph+sical environ!ent, users and their work processes in which the s+ste! should operate pplication )o!ain Model Solution )o!ain 'S+ste! )esi(n, Object )esi(n* /!braces !odels that describe possible solutions for a software s+ste!s that are appropriate for operatin( 'supportin(* in the application do!ain# One has to select the !ost suitable or practical solution S+ste! Model r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 A> pplication and Solution )o!ain: Object-oriented !odelin( OO !odelin( pplication )o!ain Solution )o!ain pplication )o!ain Model S+ste! Model Use Case )ia(ra! Class )ia(ra! State )ia(ra! Se-uence )ia(ra! r!in "# Cre!ers, ctivit+ )ia(ra! Sascha lda $ %obias &ho 'b sed on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 AC Conclusions: UML Su!!ar+ UML provides a wide variet+ of notations for representin( !an+ aspects of software develop!ent ;owerful, but co!ple: lan(ua(e Can be !isused to (enerate unreadable !odels Can be !isunderstood when usin( too !an+ e:otic features ,or now we concentrate on a few notations: ,unctional !odel: Use case dia(ra! Object !odel: class dia(ra! )+na!ic !odel: se-uence dia(ra!s, co!!unication dia(ra!, statechart and activit+ dia(ra!s r!in "# Cre!ers, Sascha lda $ %obias &ho 'based on "rue((e $ )utoit* Or(ani.ational &e-uire!ents /n(ineerin( 01203 A3