User Tools

Site Tools


2013_2014:s2:td:td_classes-code-associations:codes

This is an old revision of the document!


Des modèles aux classes et gestion de versions : CODES

Code et associations "simples"

Voici un diagramme UML en conception.

Les objectifs de ces TDs sont de bien positionner la modélisation en UML de niveau conception relativement au codage !

Des codes vous sont donnés pour vous aider à comprendre et à ne pas perdre de temps. L'objectif n'est pas de vous apprendre à écrire des boucles ou des algorithmes, mais davantage de bien architecturer vos applications.

Association orientée : Multiplicité 1

Codes : etape 1

public class Professeur {
 
	private String nom;
	private String titre;
 
	public Professeur(String nom, String titre) {
		this.nom = nom;
		this.titre = titre;
	}
 
 
       //Pour que l'affichage d'un Professeur soit lisible. Cette méthode est appelée par défaut.
	public String toString() {
		return "Professeur [nom=" + nom + ", titre=" + titre + "]";
	}
 
 
 
}
public class Cours {
 
	private String intitule;
	private Professeur responsable;
	public Professeur getResponsable() {
		return responsable;
	}
 
	public void setResponsable(Professeur responsable) {
		this.responsable = responsable;
	}
 
	//Constructeur
	public Cours(String intitule, Professeur responsable) {
		this.intitule = intitule;
		this.responsable = responsable;
	}
 
 
        //Pour que l'affichage d'un cours soit "lisible"
	public String toString() {
		return "Cours [intitule=" + intitule + ", responsable=" + responsable +"]";
 
	}

Tests : etape 1

Pour éviter les confusions du dernier TD, voici un simple “main” qui permet de vérifier que vos codes “compilent” et s'“exécutent”. Nous essaierons de revenir sur les tests dans d'autres séances !!!
public class TestCours {
 
public static void main(String[] args) {
 
		System.out.println("===================== Etape 1 =================================");
		Professeur prof = new Professeur("Tournesol", "academicien");
		System.out.println("Professeur [nom=Tournesol, titre=academicien] = \n" + prof);
		Cours cBD = new Cours("BD", prof);
		System.out.println("Cours [intitule=BD, responsable=Professeur [nom=Tournesol, titre=academicien]] = \n" + cBD);
		System.out.println("=> Un même prof sur deux cours");
		Cours cAero = new Cours("aero", prof);
		System.out.println("Cours [intitule=aero, responsable=Professeur [nom=Tournesol, titre=academicien]] = \n" + cAero);
	}

Modèle : étape 2

Code : étape 2

public class Cours {
 
	private String intitule;
	private Professeur responsable;
 
	public Professeur getResponsable() {
		return responsable;
	}
 
	public void setResponsable(Professeur p) {
		this.responsable = p;
	}
 
	public boolean aUnResponsable(){
		return (responsable != null);
	}
	//Constructeur
	public Cours(String intitule, Professeur responsable) {
		//this.intitule = intitule; 
		this(intitule); // Les codes précédents restent corrects mais on préfère ici une cascade. Uniquement pour les étudiants plus avancés.  
		this.responsable = responsable;
	}
 
	/*Constructeur sans le professeur responsable 
	 * puisque à présent il est possible de créer un cours sans responsable.
	*/
	public Cours(String intitule) {
		this.intitule = intitule;
	}
 
 
    //Pour que l'affichage d'un Cours soit lisible. Cette méthode est appelée par défaut.
	public String toString() {
		return "Cours [intitule=" + intitule + ", responsable=" + responsable +"]";
 
	}

Tests : étape 2

A Placer dans le main. Vous pouvez commenter l'étape précédente.

		/* Etape 2 */
		Professeur amina = new Professeur("AMINA", "missBahut");
		Cours cProfs = new Cours("Francais");
		System.out.println("Cours [intitule=Francais, responsable=null]  = " + cProfs);
		System.out.println("A un responsable (false) : " + cProfs.aUnResponsable());
		cProfs.setResponsable(amina);
		System.out.println("A un responsable (true) : " + cProfs.aUnResponsable());
		System.out.println("Cours [intitule=Francais, responsable=Professeur [nom=AMINA, titre=missBahut]]  =\n" + cProfs);

Association orientée : Multiplicité 0..*

Modèle

Code

Dans la classe Cours

Collection<Vacataire> vacataires = new ArrayList<Vacataire>();
 
	public void addVacataire(Vacataire v) {
		vacataires.add(v);
	}
 
	/**
	 * @param v : Vacataire à retirer de la liste
	 * @return boolean 
	 * Retire le vacataire v de la liste (exactement le même objet) si la collection contient cet élément.
	 * Renvoie vrai si la  collection contient l'element et La liste des vacataires est modifiée 
	 * sinon elle renvoie faux. 
	 */
	public boolean removeVacataire(Vacataire v) {
		return (vacataires.remove(v));
	}
 
    private String vacatairesToString() {
    	String vacatairesString = " ";
    	Iterator<Vacataire> it = vacataires.iterator();
    	while (it.hasNext()) {
    		vacatairesString += it.next().toString() + ";";
    	}
    	return "{ " + vacatairesString.substring(0, vacatairesString.length()-1)+ "}";
    }
 
	public String toString() {
		return "Cours [intitule=" + intitule + ", responsable=" + responsable
				+ ", vacataires=" + vacatairesToString()
				+ "]";
	}
 
public class Vacataire  {
	private String nom;
 
	public Vacataire(String nom) {
		this.nom = nom;
	}
 
	@Override
	public String toString() {
		return "Vacataire [nom=" + nom + "]";
	}
 
 
}

Tests

		/* Etape 3 */
		Cours cBD = new Cours("BD");
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={ } = \n" + cBD);
		Vacataire dolores = new Vacataire("Dolorès");
		Vacataire eric = new Vacataire("eric");
		System.out.println("=> Pas de retrait possible (false)  = " + cBD.removeVacataire(dolores));
		System.out.println("Et le cours n'est pas modifié = \n" + cBD);
		cBD.addVacataire(dolores);
		System.out.println("=> Ajout pris en compte ");
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès]}]\n" + cBD);
		System.out.println("=> Pas de retrait possible  de eric(false)  = " + cBD.removeVacataire(eric));
		System.out.println("=> Retrait pris en compte (true) = "+ cBD.removeVacataire(dolores));
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={ }]\n" + cBD);
		System.out.println("=> Ajouts pris en compte = ");
		cBD.addVacataire(dolores);
		cBD.addVacataire(eric);
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès];Vacataire [nom=eric]}] \n" + cBD);
		System.out.println("=> Retrait eric pris en compte (true)= "+ cBD.removeVacataire(eric));
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès]}]\n" + cBD);
		cBD.addVacataire(eric);
		System.out.println("=> Retrait dolores pris en compte = "+ cBD.removeVacataire(dolores));
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=eric]}]= \n" + cBD);

TRACE

Cours [intitule=BD, responsable=null, vacataires={ } = 
Cours [intitule=BD, responsable=null, vacataires={ }]
=> Pas de retrait possible (false)  = false
Et le cours n'est pas modifié = 
Cours [intitule=BD, responsable=null, vacataires={ }]
=> Ajout pris en compte 
Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès]}]
Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès]}]
=> Pas de retrait possible  de eric(false)  = false
=> Retrait pris en compte (true) = true
Cours [intitule=BD, responsable=null, vacataires={ }]
Cours [intitule=BD, responsable=null, vacataires={ }]
=> Ajouts pris en compte = 
Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès];Vacataire [nom=eric]}] 
Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès];Vacataire [nom=eric]}]
=> Retrait eric pris en compte (true)= true
Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès]}]
Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=Dolorès]}]
=> Retrait dolores pris en compte = true
Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=eric]}]= 
Cours [intitule=BD, responsable=null, vacataires={  Vacataire [nom=eric]}]

Association bi-directionnelle

Modèle

Codes

Tests

	System.out.println("===================== Etape 4 : Cours-Etudiant =================================");
		Etudiant boulard = new Etudiant("Boulard", 0);
		Etudiant nitchinsky = new Etudiant("Nitchinsky", 0);
		cBD = new Cours("BD");
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={ }, etudiants={ }] \n ==" + cBD);
		System.out.println("=> Pas de retrait possible (false)  = " + cBD.removeEtudiant(boulard));
		System.out.println("=> Pas de retrait possible du cours dans etudiant mais pas d erreur " );
		System.out.println("Et le cours n'est pas modifié = \n ==" + cBD);
		cBD.addEtudiant(boulard);
		System.out.println("=> Ajout pris en compte ");
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={ }, etudiants={  Etudiant [nom=Boulard, niveau=0, cours={  BD}]}] \n ==" + cBD);
		System.out.println("=> Pas de retrait possible  de nitchinsky(false)  = " + cBD.removeEtudiant(nitchinsky));
		System.out.println("=> Retrait pris en compte (true) = "+ cBD.removeEtudiant(boulard));
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={ }, etudiants={ }]\n ==" + cBD);
		System.out.println("etudiant ne reference plus le cours :" + boulard);		
		System.out.println("=> Ajouts pris en compte = ");
		cBD.addEtudiant(boulard);
		cBD.addEtudiant(nitchinsky);
		System.out.println("Cours [intitule=BD, responsable=null, vacataires={ }, etudiants={  Etudiant [nom=Boulard, niveau=0, cours={  BD}];Etudiant [nom=Nitchinsky, niveau=0, cours={  BD}]}] \n ==" + cBD);
		System.out.println("===> un même etudiant dans plusieurs cours ");
		cProfs = new Cours("Francais");
		cProfs.addEtudiant(boulard);
		System.out.println("Boulars et nitchinsky \n ==" + cBD);
		System.out.println("Que Boulard \n ==" + cProfs);
    	System.out.println("=> Retrait Boulard pris en compte (true)= "+ cBD.removeEtudiant(boulard));
		System.out.println("Que nitchinsky \n ==" + cBD);
2013_2014/s2/td/td_classes-code-associations/codes.1395780801.txt.gz · Last modified: 2014/03/25 21:53 by blay