Table des matières

Paradigme objet et modélisation UML

Nous allons présenter rapidement les différents concepts de la conception/modélisation Objet. Pour représenter ces concept, nous adopterons le formalisme UML (mais nous ne l'utiliserons que pour décrire des classes, quasiment jamais pour en représenter le fonctionnement complet du système).

Les objets et les classes

On ne manipule que des choses réelles, pour nous des Objets. Nos programmes (ou processus, projet, données, etc) consisteront à créer des objets et les faire interagir ensemble. En revanche, ces objets vont être décrits par des classes qui regroupent leurs propriétés.

Exemple : des chats particuliers. Ce sont des instances (une réalisation concrète) de la classe Chat.

Tout objet fait parti d'une classe. La classe la plus générale étant souvent la classe Object.

Les classes sont décrite avec leurs méthodes (ce qu'ils font) et attributs :

@startuml
title Chat

class Chat {
  +bruit miaou()
}
@enduml
Pour les diagrammes UML, on utilisera http://www.planttext.com (qui utilise lui-même http://plantuml.com). Pour ce cours on mettra ainsi à gauche le résultat et à droite le code qui a permis de le produire.

Notation & UML

Notations

On écrira les noms en CamelCase qui est une convention Java. Chaque langage a sa propre recommandation que l'on cherchera à respecter pour augmenter la lisibilité de son code.

De plus :

UML

Relations entre les classes

On voit bien que les différentes classes d'animaux comme les chats, les chiens voir même les alpagas partages des choses.

Nous avons à notre disposition essentiellement deux façons de regrouper les classes :

Ce qu'ils sont

On regroupe les classes par les caractéristiques qu'elles partagent : héritage Avec l'héritage on regroupe les classe par concept de plus en plus général.

Avec nos animaux :

@startuml
title Animaux

abstract class Animal {
  +void lol()
}

class Chat
class Chien
class Alpaga

Animal <|-down- Chat
Animal <|-down- Chien
Animal <|-down- Alpaga

@enduml

UML

La relation d'héritage est un "trait plein avec une flèche en triangle vide" :

@startuml

class 4x4
class Voiture

Voiture  <|-left- 4x4

@enduml

Ce qu'ils font

Souvent plusieurs objets de natures très différentes font les même choses. Ces actions communes sont liées par une interface.

Ainsi, un chat et un goéland peuvent tous deux griffer :

@startuml
title Interface


class Animal

interface Griffable {
  +outch griffer()
}

class Chat
class Goéland

Animal <|-down- Chat
Animal <|-down- Goéland
Animal <|-down- Escargot

Griffable <|-up.. Chat
Griffable <|-up.. Goéland

@enduml

On dit qu'un objet implémente une interface s'il possède toute les méthodes de l'interface, ici une unique méthode griffer.

UML

La relation d'implémentation d'interface peut être décrite de deux manières :

@startuml

class 4x4
class Scooter

interface SeGarerNimporteOù {
void surLeTrotoir()
void surUnPassageClouté()
}

SeGarerNimporteOù  <|-down.. 4x4

Scooter --()  SeGarerNimporteOù
@enduml

Attributs, méthodes et visibilité

Visibilité

Les méthodes et attributs d'une classe peuvent avoir une visibilité limité :

On essaiera dans la mesure du possible de protéger les attributs d'une classe pour qu'ils ne soient pas modifiés intempestivement (portée privé ou protected).

C'est le principe d'encapsulation qui permet (entre autre) de modifier la structure interne de la classe en ajoutant des fonctionnalités sans briser le reste du code (qui utilise des méthodes publiques inchangées).

@startuml

title Visibilité des attributs/classes

class Visibilité {
  +attribut: public;
  #attribut: protégé;
  -attribut: privé;
  ~attribut: package;
  
  +méthode: public();
  #méthode protégée();
  -méthode: privé();
  ~méthode: package();

}

@enduml

Composition et agrégation

Les différents types sont souvent des objets de classes que l'on a créé nous même. Selon que l'on a crée l'objet ou ou qu'on le partage on parlera de composition ou d'agrégation respectivement. Ce lien vous explique bien les différentes possibilités.

@startuml

title Composition et agrégation

class Colors
class Card
class Deck

Card o-- Colors : agrégation
Card  *-up- Deck : composition

@enduml

Méthodes de classes

On souligne les méthodes et attributs de classes (mot clé "static").

Leur intérêt est (au moins) double :

Une bonne explication pour le Java.

Pour aller plus loin en UML

Utilisation d'UML

https://fr.wikipedia.org/wiki/UML_(informatique)

Utilisé un petit peu partout, lorsque l'on a besoin de catégoriser/regrouper des processus :

Très en vogue au début des années 2000, il est moins utilisé mais reste un bon outil de communication et de modélisation des données.

Divers ressources sur le net

Introduction et résumé

Série de cours

Études cas UML