OODE

From Suhrid.net Wiki
Revision as of 08:07, 23 October 2011 by Suhridk (talk | contribs) (→‎UML)
Jump to navigationJump to search

Introduction

Why OO

  • Modern systems are large and complex - lots of interconnected components, distributed and heterogeneous.
  • OO is particularly useful to build such systems.
  • Remember OO is not always the best approach, but is useful in the right setting.

When to use OO

  • For the systems where the user is in control e.g. decision support systems, CRM's, enterprise systems. OO makes it easier to model such systems.
  • Systems where long term extensibility is important. Again OO's concepts make it easier to incorporate extensibility.

What is OO Development

  • Quite simply, the use of classes and objects in developing software and systems.
  • OO Development implies using classes and objects throughout the construction process - requirements analysis, design, coding and testing.

Development Methods

  • Waterfall - doesnt work for large systems
  • Spiral - emphasizes risk and cost
  • RUP - Rational Unified Process from IBM Rational. User stories are constructed from which OO designs will be built.
  • Use cases are a way to write user stories.
  • Model Driven Development
    • Aim to build software using abstract models. RUP is a kind of MDD.
    • Models are at a higher level abstraction than code.
    • UML is a popular modeling language.

Modeling

  • Create models at each phase, requirements, design etc.
  • Capture the essence of things of interest - not everything.
  • Hence models are easier to change - but is difficult to keep the model in sync with the actual system.

UML

  • A visual language for describing many aspects of system design and requirements.
  • UML is only a language and NOT a method or process. UML is typically used with an agile process, although the process can be used without UML.
  • UML consists of two parts:
  1. The graphical notation used to draw models.
  2. A metamodel: which specifies the validity of models.
  • The graphical notation consists of various diagrams such as class, communication, state charts, use case diagrams etc.

Software Quality

  • One of the primary goals of SE is to produce quality software.
  • How can quality be measured ?
    • Internal characteristics: Maintainability, flexibility, testability etc
    • External : Correctness, robustness, reliability, usability etc
  • So, again why OO ? OO is one technique improve internal construction and design of a system to improve software quality.

Quality in OO Systems

  • High quality OO systems will be non-monolithic - high cohesion, low coupling.
  • Heuristics exist to build high quality OO systems:
  • Direct Mapping Rule
    • The class structure in the system must relate (clear mapping) to the structure in the model.
    • But in practice, difficult to describe customer requirements, which tend to be goal/event based using classes/objects.
    • So we need modeling things such as use cases and interactions.
    • Consequently using an OO modeling language with an OO programming language is helpful.
    • OO model language with non OO programming language is problematic.

[How will you model systems which are written in non OO languages then ?]

  • Coherent Interfaces Rule
    • A class and its interfaces should represent a coherent view of some concept in the problem or solution domain. e.g. Bank Account, Flight Plan, Player. This relates to high cohesion.
  • Small Interfaces Rule
    • When two objects communicate, they should exchange as little information as possible. This relates to weak or low coupling.
  • Explicit Interfaces Rule
    • When two objects are communicating, this must be obvious from their class definitions. The conversations need to be clearly visible - to facilitate understanding.
  • Information Hiding Rule
    • AKA Encapsulation. Data must be hidden, kept private so that client objects are kept independent of implementation.
  • Open-Closed principle
    • Class should be open i.e. easily extensible and it should be closed to allow usage (well-encapsulated).

UML

  • A family of visual languages to describe systems (not necessarily but usually software systems).