1 / 21

Object Constraint Language

Object Constraint Language. The OCL is a language of typed expressions. An OCL expression is valid if it is written according to the rules (formal grammar) of OCL. A constraint is a valid OCL expression of type Boolean.

raina
Télécharger la présentation

Object Constraint Language

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. Object Constraint Language • The OCL is a language of typed expressions. • An OCL expression is valid if it is written according to the rules (formal grammar) of OCL. • A constraint is a valid OCL expression of type Boolean. • A constraint is a restriction on one or more values of (part of) an object-oriented model or system.

  2. Constraint examples self.transaction -> forAll(t:Transaction | t.value > 100) Account Transaction 1 0..* SuperSaverAccount self.balance > 0

  3. Design by contract put (element: T, key: STRING) is -- insert element with given key require count < capacity do .. insertion algorithm ... ensure count <= capacity; item (key) = element; count = old count + 1 end --put

  4. The requirements of OCL 1. The OCL must enable us to express extra, necessary, information on object models. 2. The OCL must be a precise and unambiguous language that can be easily read by developers and customers. 3. The OCL must be a declarative language, its expressions can have no side-effects. 4. OCL must be a typed language so that OCL expressions can be type checked for correctness.

  5. Types in OCL • The types in OCL are as follows: • Predefined types • Basic types - Integer, Real, String and Boolean • Collection types - Collection, Set, Bag, Sequence • Meta types • OclAny, OclExpression, OclType • User-defined model types • Enumeration and all classes, types and interfaces

  6. The context of an OCL expression VocabularyElement 0..5 Hint Vocabulary Element self.hintCount <= 5 and self.hintCount >= 0

  7. Real and Integer

  8. Multiplicity constraints Vocabulary VocabElement Hint 1 0..* 1 0..5 Equivalent constraints expressed on the classes VocabElementself.hint -> size >= 0 and self.hint -> size <= 5 VocabElementself.vocabulary -> size = 1 Hintself.vocabElement -> size = 1

  9. String

  10. Using Enumerations Customer gender: enum{male, female}name: Stringtitle: StringdateOfBirth: Date gender = #male implies title = ‘Mr. ‘

  11. Boolean

  12. Simple boolean constraints Customer name: Stringtitle: Stringage: IntegerisMale: Boolean title = if isMale then ‘Mr.’ else ‘Ms.’ endif age >= 18 and age < 66 name.size < 100

  13. The implication operation Probably the most counter-intuitive logical operator. A B A implies B T T T T F F F ? T Torches with broken bulbs?

  14. Operations on Collections

  15. Collection hierarchy Collection Set Bag Sequence minussymmetricDifferenceasSequenceasBag asSequenceasSet firstlastat(int)appendprependasBagasSet

  16. Navigating Associations Account Transaction 1 0..* self.transaction returns a set of transactions Book Member borrower self.borrower returns a set of members

  17. Navigating to collections Customer Account Transaction Customerself.account produces a set of Accounts Customer self.account.transaction produces a bag of transactions If we want to use this as a set we have to do the following self.account.transaction -> asSet

  18. The subset constraint Flight Person pilot crew 1..* flightAttendant 0..* Flightself.crew -> includes( self.pilot ) Flightself.crew -> includesAll(self.flightAttendants)

  19. Iteration over collections Account Transaction Accountself.transactions -> select( value > 500 ) Accountself.transactions -> reject( not(value > 500 )) Accountself.transactions -> sum(collect ( value ))

  20. Abstract classes The fact that the Hint class is abstract can be expressed this way. Hint Hint.allInstances -> select(oclType = Hint) -> isEmpty This constraint uses some of the meta facilities which I have mostly glossed over so far.

  21. OCL references Warmer, J. Kleppe, A. The Object Constraint Language: Precise Modeling with UML Addison-Wesley 1999 Object Constraint Language Specification, version 1.1 OMG document ad970808 The OCL parser can be found at http://www.software.ibm.com/ad/ocl The Klasse Objecten web site is http://www.klasse.nl/Engels/ocl.htm

More Related