Vous êtes sur la page 1sur 67

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Technologie Oriente Objet

Franck Barbier
Universit de Pau et des Pays de lAdour
Tlchargement : www.PauWare.com

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Gense des langages OO

Ada-83

Simula-67

Lisp

Eiffel

Smalltalk-80

C++

Objective-C

Ada-95

Java

C#

Mais aussi les autres : CLOS (www.dreamsongs.com/CLOS.html), Python


(www.python.org), VB.NET
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Dualit classe/instance
Classe : structure de donnes plus fonctions
(oprations) indissociables des donnes
(attributs)
Instance : incarnation lexcution de la classe
Classe : moule pour linstance
Ex. (Java) :
java.util.Date d = new java.util.Date(0L);
// January 1, 1970, 00:00:00 GMT
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Classe et type abstrait de donnes


Une classe est une reprsentation, une
implmentation ou encore une ralisation dun type
abstrait de donnes
Ex. (Java) :
public class Stack {
// accessor
public boolean empty_() {return} // empty?: Stack -> Boolean
public Object top() {return} // top: Stack -/> T

// modifier
public void pop() {} // pop: Stack -/> Stack
public void push(Object o) {} // push: Stack T -> Stack

// constructor
public Stack() {} // new: -> Stack

// what is not part of the ADT:


private Object[] _representation;

}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Casting en Java (< J2SE SDK 1.5.x)


class MyClass {

class MyClass {

public void f() {}

public void f() {}

MyClass x = new MyClass();

MyClass x = new MyClass();

Stack s = new Stack();

Stack s = new Stack();

s.push(x);

s.push(x);

Object o = s.top();

MyClass y = (MyClass)s.top(); // danger!

if(o instanceof MyClass ) {} // true!

y.f(); // OK

o.f(); // compilation error

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Classe Stack en Java


Stack()
boolean empty()
Object peek()
Object pop()
Object push(Object item) // signature?
int search(Object o)
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Opration dinterface
Fonction dclare dans la partie publique
de la classe pour usage par les clients de
lobjet
Ex. (Java) :
java.util.Date d = new java.util.Date(0L);
String s = d.toString(); // interface de Date
System.out.println("Date : " + s);

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Opration dimplmentation
Fonction dclare dans la partie prive de la
classe pour usage interne uniquement (concept
non outill en Smalltalk-80)
Ex. (C++) :
class Classe_Creee_Par_Utilisateur {
private: // par dfaut en C++ et Java
void f();

};

Classe_Creee_Par_Utilisateur ccpu;
ccpu.f(); // erreur la compilation
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Attribut dans linterface ?


Champ en mmoire dclar dans la partie
publique de la classe pour usage par les clients
de lobjet
lecture seule
lecture/criture

Ex. (Java) :
public class C {
public float f; // "public final float f;" est plus raisonnable !
private double d;

C c = new C();
c.f = 2004.F; // OK
c.d = 2005.; // erreur la compilation
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Smalltalks instance variables


Il ny a que des attributs cachs en Smalltalk-80
lecture seule implique ncessit dun getter
criture impose un setter

Ex. (Smalltalk-80) :
get_x
"retour du champ _x"
^_x.

set_x: x
"affectation du champ _x"
_x := x.
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

10

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Principe de rfrence uniforme


La distinction attribut/opration est-elle saine ?
Ex. (Eiffel) :
class C feature
x: Real -- attribut
y: Real is do end; -- routine, i.e. opration

end

c: expanded C -- la C++ !

c.x := 1963. -- erreur la compilation


r: Real
r:= c.y -- non diffrentiable de c.x
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

11

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Attribut dune interface Java


public interface My_interface {
String s = "coucou";
}

String other_s = My_interface.s;

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

12

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Encapsulation
Abstraction : le client (i.e. lutilisateur) de la classe
saffranchit de dtails dimplmentation sans valeur
ajoute quant la rsolution de son problme
Ex. (C++) :
double d; // dbordement de capacit ?
class Real {
private: // partie rendue inaccessible lextrieur
vector<char> _implementation; // reprsentation machine via un type prdfini,
// ici vector. Par ailleurs, char est vu ici comme le type octet

public: // partie destine lutilisateur du type


R(string s); // partie de linterface : cest via une chane de caractres que lon
// cre de trs grandes valeurs relles

};
// utilisation :
Real r("999999999999999"); // autant de chiffres que lon veut...
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

13

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Encapsulation, la mtaphore de
liceberg
Java

UML
Individual
age : Integer

age : int

_birth_date : Calendar
_Now() : GregorianCalendar

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

14

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Encapsulation, la mtaphore de
liceberg en Java
// implementation
private java.util.Calendar _birth_date;
private static java.util.Calendar _Now() {
return new java.util.GregorianCalendar();

// interface
public int age() {
return _Now().get(java.util.Calendar.YEAR) _birth_date.get(java.util.Calendar.YEAR);

}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

15

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Non encapsulation en C
#include <stdio.h>
#include <time.h>
int main() {
time_t t = 0L; // on fait dlibrment rfrence au type long de C
printf(asctime(gmtime(&t))); // January 1, 1970, 00:00:00 GMT
t = -1L;
printf(asctime(gmtime(&t))); // rsultat ?
return 0;

}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

16

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Attributs/oprations de classe,
dclaration en C++
class Time_Date {
public:
enum Language {English,French};
private:
time_t _time;
Language _language;
public:
static string English_message;
static string French_message;
static string Now(Language = English);
public:
Time_Date(Language = English);
string format() const;
bool leap_year() const;
};
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

17

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Attributs/oprations de classe,
utilisation
C++
cout << Time_Date::Now().c_str() << '\n';

Java
Temperature t = new Temperature(18.F,Temperature.Celsius);

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

18

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Surcharge (overloading) en C++


class Limited_bit_stream {

// surcharge des constructeurs :


public:
Limited_bit_stream();
Limited_bit_stream(const char[]);
Limited_bit_stream(Bit_stream_format);

};
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

19

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Hritage en Java
public class Female extends Individual {
public Female(int day,int month,int year) {
super(day,month,year);
}
// restriction : comportements hrits modifis
public int age() { // la gent fminine a une faon particulire de donner son ge
if(super.age() >= 20 && super.age() < 30) return 20;
if(super.age() >= 30 && super.age() < 40) return 30;
if(super.age() >= 40 && super.age() < 60) return 40;
if(super.age() >= 60) return 50;
return super.age();
}
// restriction : comportements hrits rendus concrets
public boolean female() {
return true;
}
public boolean male() {
return false;
}
// extension : nouvelles fonctions inexistantes dans Individual
public Male my_husband() {

}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

20

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Masquage (overriding) en C++


class Account {

inline virtual void applying_interest_rate() {_balance *= (1.F +


(interest_rate() / 100.F));};
};
class CheckingAccount : public Account {

inline virtual void applying_interest_rate() {if(_balance > _threshold)


_balance *= (1.F + (interest_rate() / 100.F));};
};
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

21

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Introduction au polymorphisme (C++)


Account a,*other_a;
a.applying_interest_rate();

CheckingAccount ca;
ca.applying_interest_rate();

other_a = &a;
other_a->applying_interest_rate(); // same code, different behavior
other_a = &ca;
other_a->applying_interest_rate(); // same code, different behavior
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

22

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Accs aux membres masqus (Java)


class X {
...
public void f() {}

}
class Y extends X {
...
public void f() { super.f(); }

}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

23

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Classe abstraite (Java)


public abstract class Individual {
// implementation
protected java.util.Calendar _birth_date;
private static java.util.Calendar _Now() {
return new java.util.GregorianCalendar();

}
// interface
public Individual(int day_of_month, int month, int year) {
_birth_date = new java.util.GregorianCalendar(year,month,day_of_month);

}
public int age() {
return _Now().get(java.util.Calendar.YEAR) - _birth_date.get(java.util.Calendar.YEAR);

}
public Individual self() {
return this;

}
abstract public boolean is_female();
abstract public boolean is_male();
// public Individual eldest_sister() {return ...}
// public Individual eldest_brother() {return ...}

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

24

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Polymorphisme, dfauts de Java


public class Young_girl extends Female {
public Young_girl(int day,int month,int year) {
super(day,month,year);
}
// public Object clone() { // overriding
// return new
Young_girl(_birth_date.get(java.util.Calendar.YEAR),_birth_date.get(java.util.Cal
endar.MONTH),_birth_date.get(java.util.Calendar.DAY_OF_MONTH));
// }
public static void main(String[] args) {
Individual SophieDarnal = (new Female(28,07,1964)).self();
// Female SophieDarnalBis = SophieDarnal.self(); // compilation error but nevertheless OK
Female SophieDarnalBis = (Female)SophieDarnal.self(); // safe
Young_girl LenaBarbierDarnal = new Young_girl(15,04,1996);
try {
Young_girl LenaBarbierDarnalBis = (Young_girl)LenaBarbierDarnal.clone(); // unsafe
}
catch(CloneNotSupportedException cnse) {
// not raised in Female
}

}
}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

25

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Contravariance (Java)
Individual SophieDarnal = new Female(28,07,1964);

Female SophieDarnalBis = SophieDarnal;

Female SophieDarnalBis = (Female)SophieDarnal;

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

26

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Covariance en C++ sur type de


retour (1/3)
class Individual {
public:
inline const Individual self() const {cout << "self() in Individual\n";return
*this;}
};
class Female : public Individual {
public:
// does not make self() in Female overriding self() in Individual:
inline const Female self() const {cout << "self() in Female\n";return *this;}
};
int main() {
Individual* SophieDarnal = new Female();
(void)SophieDarnal->self(); // self() in Individual is called, in fact there is no polymorphism
delete SophieDarnal;
return 0;

}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

27

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Covariance en C++ sur type de


retour (2/3)
class Individual {
public:
inline virtual const
Individual\n";return *this;}

Individual

self()

const

{cout

<<

"self()

in

};
class Female : public Individual {
public:
// compilation error: overriding virtual function differs from self() in
// Individual only by return type:
inline const Female self() const {cout << "self() in Female\n";return *this;}
};
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

28

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Covariance en C++ sur type de


retour (3/3)
class Individual {
public:
inline virtual const
Individual\n";return this;}

Individual*

self()

const

{cout

<<

"self()

in

};
class Female : public Individual {
public:
// covariance but
inline const Female* self() const {cout << "self() in Female\n";return this;}
};
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

29

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Bon systme de typage (Eiffel)


class Individual
feature

class Individual

self : Individual is do Result := Current end;

feature

end
class Female inherit Individual
feature

self : like Current is do Result := Current end;

end

end
x,y : Female
x,y : Female
y := x.self -- incompatibilit de types

y := x.self OK

-- self retourne un objet de type Individual

-- self retourne un objet de type Female

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

30

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Hritage multiple (C++)


class iostream : public istream, public ostream {

};

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

31

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Conflit en hritage multiple, hritage


virtuel de C++
class Animal {
Animal** _children;
};
class Mammal : virtual public Animal {
void f();
};
class Oviparous : virtual public Animal {
void f();
};
class Ornithorynchus : public Mammal,public Oviparous {
};
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

32

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Conflit en hritage multiple, balayage


des chemins dhritage

class A {
public: virtual void f();
};
class B : public A {
public: virtual void f();
};
class C : A {
public: virtual void f();
};
class D : B,C {
public: void g();
};

void D::g() {
// A* pA1 = this; // error: ambiguous conversion because
// pA1->f() is unknown
A* pA1 = (B*)this; // with class B : public A
// A* pA2 = (C*)this; // error: conversion inaccessible because
// class C : private A
pA1->f(); // "f from B"
}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

33

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Implmentation multiple dinterface en


Java
public interface I1 {
String attribut_with_possible_conflict = "attribut with possible conflict in I1";
void f();
}
public interface I2 {
String attribut_with_possible_conflict = "attribut with possible conflict in I2";
void f();
}
public class C implements I1,I2 {

void f() { // no conflict because there is a fusion of the two inherited f()
String s = I1.attribut_with_possible_conflict;

}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

34

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Hritage multiple dinterface en Java


public interface I {
}
public interface J extends I {
J self();
}
public interface K extends I {
K self();
}
public interface L extends J, K { // no compilation error, but
}
public class C implements L {
public J self() {return }
public K self() {return }
}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

35

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Gnricit (au sens dAda) en C++


template <typename T> class Stack {
private:
list<T> _representation;
public:
bool empty_() const;
T top() const;
void pop();
void push(const T&);
};
template <typename T> bool Stack<T>::empty_() const {
return _representation.empty();
}
template <typename T> T Stack<T>::top() const {
assert(! empty_());
return _representation.back();
}
template <typename T> void Stack<T>::pop() {
assert(! empty_());
_representation.pop_back();
}
template <typename T> void Stack<T>::push(const T& t) {
_representation.push_back(t);
}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

36

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Programmation dfensive, gestion


des exceptions (Java)
public Temperature(float value,byte unit) throws Exception {

switch(unit) {
case Celsius: _value = value;
break;
case Fahrenheit: _value = (value - 32.F) * 5.F / 9.F;
break;
case Kelvin: _value = value + -273.15F;
break;
default: throw new Exception("Illegal unit");
}
if(_value < -273.15F) throw new Exception("Illegal temperature");
}
try {
Temperature t = new Temperature(18.F,Temperature.Celsius);
}
catch(Exception e) {
System.exit(1); // viter !
}
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

37

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Cration de nouveaux types


dexception en C++
class Invalid_temperature_exception : std::exception {
// inheritance is recommended
public:
inline const char* what() const {return "Invalid
temperature exception";};
};
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

38

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Programmation par contrats


class SHELL
feature
-- proprits publiques
feature {NONE}
Enter : CHARACTER is '\r';
Zero : INTEGER is 0;
Buffer_size : INTEGER is 256;
buffer : ARRAY[CHARACTER];
cursor : INTEGER
buffer_cleaning is
require -- pr-condition
not buffer.Void
do
buffer.clear_all;
ensure -- post-condition
buffer.all_cleared
rescue
if then
retry
end; -- buffer_cleaning
-- autres proprits prives
invariant -- invariant
cursor <= Buffer_size
end -- Shell
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

39

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Rflexion, exemple des RTTI C++


#include <typeinfo>

Individual *i;
i = ; // affectation dune rfrence sur une instance
// dune sous-classe de Individual, e.g. Female
const type_info& ti1 = typeid(i);
if(ti1 != typeid(Female*)) throw bad_typeid();

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

40

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Persistance
Dbut
dexcution

Naissance

Mort

Fin dexcution

temps

Dbut
dexcution
application 1

Fin dexcution
application 1

Dbut
dexcution
application 1

Fin dexcution
application 1

Dbut
dexcution
application 2

Fin dexcution
application 2

temps
Naissance de
O1

Mort de O1

Naissance de
O2

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

Mort de O2

41

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

SGBDOO, exemple de SQL99


CREATE OR REPLACE TYPE Optical_amplifier AS
OBJECT(network_address NUMBER);
CREATE OR REPLACE TYPE BU_module AS
OBJECT(super Optical_amplifier);
CREATE TYPE Arr_BU_module AS VARYING
ARRAY(2) OF REF BU_module;
CREATE OR REPLACE TYPE BU_subsystem AS
OBJECT(bu_module Arr_BU_module);
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

42

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Qualit du logiciel objet


Fiabilit
Maintenabilit
Rutilisabilit

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

43

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Autres facteurs qualit


Portabilit
Efficacit
Facilit dutilisation
Etc.
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

44

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Modularit objet (daprs B. Meyer)


Dcomposabilit modulaire
Composabilit modulaire
Comprhensibilit modulaire
Continuit modulaire
Protection modulaire
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

45

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Dgnrescence de topologie
dapplication en non objet
Donnes
Programme
principal
Dgnrescence : transgression la
topologie initiale qui avait motiv la
cration de lunit de traitement
utilise

utilise

Unit de
traitement
terminale

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

46

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

De la programmation la
modlisation, The 90s

Programmation oriente objet


Conception oriente objet
Analyse oriente objet
Modlisation oriente objet
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

47

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Modle
Pour un observateur O, un objet M
est un modle dun objet A dans la
mesure o O peut utiliser M pour
rpondre aux questions qui
lintressent au sujet de A
Df. de Minski, extraite du livre de Habrias sur
NIAM (Eyrolles, 1988)
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

48

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Modlisation par objets, influences

Structurel (archtype :
Entit/Relation)

Fonctionnel
(archtypes : SADT,
dataflow, workflow)
Modlisation
objet

Comportemental (archtypes :
Rseaux de Petri, Statecharts)

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

49

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Modle objet canonique, exemple de


lObject Management Architecture (OMA)
Object :Type

Non-object type
1

Operation
interface
{subsets behavior}
1..*

1..*

1..*

Type
*

supertype 1

immediate type
1

*
instance

1..*

1..*

Inheritance

Implementation
*

Non-object

behavior
1..*

subtype 1 1

Subtyping

instance

Object

OID
1

Identifier

Identity

superclasse
1

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

50

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Ingnierie des modles objet

Besoins

modlisation
analyse
conception

Modles
validation

implmentation

vrification

temps

vrification
validation
vrification
validation

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

51

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Activits de la modlisation objet


Life cycle models
Strategic modeling
Analysis modeling
Design modeling
Object
modeling

Implementation modeling

Full
definition
of system

Construction
Delivery
Coordination and reuse

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

52

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Diffrence entre analyse, conception


et programmation objet : analyse

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

53

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Diffrence entre analyse, conception


et programmation objet : conception

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

54

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Diffrence entre analyse, conception et


programmation objet : programmation

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

55

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Exemple analyse, conception et


programmation objet : besoins
CA (en K)
Janvier Fvrier
Dcembre
Anne 2000
Andr
3,3
0

6,4
Barbier
0
5,6

8,4
Royer
9,7
6,8

2,3

CA indicateur (norme quadratique) : 17,3


OK
CA indicateur (norme maximum) : 9,7
CA (en K)
Janvier Fvrier
Dcembre
Anne 2001
Andr
0,8
0

2,9
Barbier
1,4
6,8

6,9
Royer
2,9
3,5

CA indicateur (norme quadratique) : 11,2


OK
CA indicateur (norme maximum) : 6,9

CA (K)
2000 + 2001
Andr
Barbier
Royer

Janvier

Fvrier

4,1
1,4
12,6

0
12,4
10,3

Dcembre

CA indicateur ( * norme quadratique) : 13,81


CA indicateur ( * norme maximum) : 7,65
(coeff. pondration 2000/2001) = 0,5

CA (K)
2001 - 2000
Andr
Barbier
Royer

Janvier Fvrier
-2,5
1,4
-6,8

0
1,2
-3,3

OK
Dcembre

CA indicateur ( * norme quadratique) : 2,79


CA indicateur ( * norme maximum) : 2,04
(coeff. pondration 2000/2001) = 0,3

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

9,3
15,3
2,3

-3,5
-1,5
-2,3

OK

56

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Exemple analyse, conception et


programmation objet : analyse
Activity card
year() : Integer
turnover indicator-qn() : Real
turnover indicator-mn() : Real
next year
0..1

previous year
0..1

Biennal synthesis
lambda for () : Real
lambda for () : Real
turnover indicator-qn() : Real
turnover indicator-mn() : Real
turnover indicator-qn() : Real
turnover indicator-mn() : Real

context Biennal synthesis inv:


previous year.year() = next year.year() - 1

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

57

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Exemple analyse, conception et


programmation objet : conception (1/2)
Vector

+quadratic norm() : Real


+maximum norm() : Real
+quadratic norm addition() : Real
+maximum norm addition() : Real
+quadratic norm subtraction() : Real
+maximum norm subtraction() : Real
+quadratic lambda norm() : Real
+maximum lambda norm() : Real

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

58

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Exemple analyse, conception et


programmation objet : conception (2/2)

Vector

+norm(enum {quadratic,maximum}) : Real


+norm addition(enum {quadratic,maximum}) : Real
+norm subtraction(enum {quadratic,maximum}) : Real
+lambda norm(enum {quadratic,maximum}) : Real

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

59

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Exemple analyse, conception et


programmation objet : rutilisation par
hritage
std::vector

Vector

+norm() : Real
+norm addition() : Real
+norm subtraction() : Real
+lambda norm() : Real

Vector quadratic norm

Vector maximum norm

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

60

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Exemple analyse, conception et


programmation objet : rutilisation par
embarquement
std::vector
1

-implementation

Vector

+norm() : Real
+norm addition() : Real
+norm subtraction() : Real
+lambda norm() : Real

Vector quadratic norm

Vector maximum norm

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

61

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Exemple analyse, conception et


programmation objet : assemblage (1/2)
std::vector
1

-implementation
1

-implementation

Vector

+norm() : Real
+norm addition() : Real
+norm subtraction() : Real
+lambda norm() : Real

Vector quadratic norm

Activity card
year() : Integer
turnover indicator-qn() : Real
turnover indicator-mn() : Real
next year
0..1

previous year
0..1

Vector maximum norm

Biennal synthesis

lambda for () : Real


lambda for () : Real
turnover indicator-qn() : Real
turnover indicator-mn() : Real
turnover indicator-qn() : Real
turnover indicator-mn() : Real

context Biennal synthesis inv:


previous year.year() = next year.year() - 1

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

62

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Exemple analyse, conception et


programmation objet : assemblage (2/2)
std::vector
1

-implementation

Vector

+norm() : Real
+norm addition() : Real
+norm subtraction() : Real
+lambda norm() : Real

Vector quadratic norm

Activity card
year() : Integer
turnover indicator-qn() : Real
turnover indicator-mn() : Real
next year
0..1

Vector maximum norm

previous year
0..1

Biennal synthesis

lambda for () : Real


lambda for () : Real
turnover indicator-qn() : Real
turnover indicator-mn() : Real
turnover indicator-qn() : Real
turnover indicator-mn() : Real

context Biennal synthesis inv:


previous year.year() = next year.year() - 1

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

63

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Ralisation en C++
template<class T> class Vector {
private:
// des mcanismes de gestion mmoire spcifiques sont ncessaires ici
protected:
// des mcanismes de gestion mmoire spcifiques sont aussi ncessaires ici
vector<T> _implementation;
public:
// constructeurs et destructeurs ici
virtual double norm() const = 0; // calcul de norme abstrait, dpend du sous-type
double norm_addition(const Vector& v) const {return (*this + v).norm();}
double norm_subtraction(const Vector& v) const {return (*this - v).norm();}
double lambda_norm(const double lambda) const {return ::fabs(lambda) * norm();}
// fonctions utilitaires (i.e. non membres des besoins initiaux)
// comme laddition de deux vecteurs :
Vector<T>& operator +(const Vector<T>&) const throw(std::logic_error); // code dport

};
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

64

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Ralisation en Eiffel (v. 2.3)


deferred class Vector export norm,norm_addition,norm_subtraction,lambda_norm
inherit
BASIC; -- pour accder real_absolute
FLOAT -- pour se conformer FLOAT
redefine infix "-",infix "+",infix "/",infix "*",prefix "-",prefix "+";
ARRAY[FLOAT]
rename Create as create_Array
feature
-- constructeurs ou autres ici
norm : FLOAT is
require
deferred
ensure Result >= 0.0
end; -- norm
norm_addition(a_Vector : like Current) : FLOAT is

end -- norm_addition
norm_subtraction(a_Vector : like Current) : FLOAT is

end; -- norm_subtraction
lambda_norm(lambda : FLOAT) : FLOAT is

end; -- lambda_norm
-- fonctions utilitaires (i.e. non membres des besoins initiaux)
-- comme laddition de deux vecteurs :
infix "+" (a_Vector : like Current) : like Current is

end; -- infix "+"


invariant

end -- Vector
Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

65

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Design Patterns, patrons de conception


Component
operation()
add(Component)
remove(Component)
getChild(int)

Client
children
*

Leaf

Composite

operation()

operation()
add(Component)
remove(Component)
getChild(int)

context Composite inv:


self.operation() implies childrenforAll(c | c.operation()) and
childrenforAll(c | c.operation()) implies self.operation()

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

66

Technologie Oriente Objet, dernire mise jour : mercredi 12 juillet 2006

Analysis Patterns, patrons danalyse


Flight
1

1 active
{subsets flight plan}

1..*

Flight plan
1

1 preferential
{subsets profile}

1..*

Profile

Runway

1
2..*
{ordered}

instantiate

Way point
unique area code
latitude
longitude

Way and vertical


point

Vertical point
Navald

Airport
elevation

Franck.Barbier@FranckBarbier.com - groupe de recherche PauWare

altitude
passing speed
passing time

67