4.1 Association unidirectionnelle
Dans le cas d’une association unidirectionnelle, une classe A appelle une classe B, comme attribut, et peut l’utiliser comme un attribut normal : l’association est naviguable dans un sens uniquement.
Si la classe A a une association unidirectionnelle sur la classe B, alors A connait B mais B ne connait pas A.
Méthodologie :
- en amont :
- on crée un projet :
MonProjet - on crée un package :
fr.lsarribouette.monprojet.metier - on crée deux classes :
MaClasseA.javaetMaClasseB.java
- on crée un projet :
- dans
MaClasseA:- on ajoute un attribut objet dont le type est
MaClasseB:private MaClasseB instanceB; - on peux l’implémenter dans le constructeur
- on peux ajouter un getter et un setter
- on ajoute un attribut objet dont le type est
- dans la méthode
mainde la classe de test :- on crée d’abord une instance de
MaClasseB - on crée ensuite une instance de
MaClasseAqui utilise l’instance deMaClasseB
- on crée d’abord une instance de
4.1.1 Exemple simple
Association unidirectionnelle entre un étudiant et son université :
Projet en trois fichiers (Universite.java, Etudiant.java et TestAssociationUnidir.java) où la méthodologie expliquée au chapitre 3 est appliquée.
Universite.java :
package fr.lsarribouette.associonsnous;
public class Universite {
// attributs d'instance
private String nom;
private String ville;
private int nbEleves;
// constructeurs
public Universite(String nom, String ville) {
this.nom=nom;
this.ville=ville;
}
// assesseurs et mutateurs
// choix : get nbEleves, nom, ville
// set nbEleves
public int getNbEleves() {
return nbEleves;
}
public String getNom() {
return nom;
}
public String getVille() {
return ville;
}
public void setNbEleves(int nbEleves) {
this.nbEleves = nbEleves;
}
// toString
// TODO supprimer avant mise en production
@Override
public String toString() {
return "Universite [nom=" + nom + ", ville=" + ville + ", nbEleves=" + nbEleves + "]";
}
}Etudiant.java :
package fr.lsarribouette.associonsnous;
public class Etudiant {
// attributs d'instance
private String prenom;
private int age;
private String niveauEtudes;
private Universite univ; // attribut objet
// constructeurs
public Etudiant(String prenom, Universite univ) {
this.prenom=prenom;
this.univ=univ; // implementation normale
}
// assesseurs et mutateurs
// choix : get prenom, age, niveauEtudes, univ
// set age, niveauEtudes, univ
public String getPrenom() {
return prenom;
}
public int getAge() {
return age;
}
public String getNiveauEtudes() {
return niveauEtudes;
}
public Universite getUniv() {
return univ;
}
public void setAge(int age) {
this.age = age;
}
public void setNiveauEtudes(String niveauEtudes) {
this.niveauEtudes = niveauEtudes;
}
public void setUniv(Universite univ) {
this.univ = univ;
}
// toString
// TODO supprimer avant mise en production
@Override
public String toString() {
return "Etudiant [prenom=" + prenom + ", age=" + age + ", niveauEtudes=" + niveauEtudes + ", univ=" + univ
+ "]";
}
}TestAssociationUnidir.java :
package fr.lsarribouette.associonsnous;
public class TestAssociationUnidir {
public static void main(String[] args) {
// un eleve connait son universite, mais pas l'inverse
Universite univBordeaux = new Universite("Universite de Bordeaux", "Bordeaux");
Etudiant bob = new Etudiant("Bob",univBordeaux);
System.out.println(univBordeaux); // Universite [nom=Universite de Bordeaux, ville=Bordeaux,
// nbEleves=0]
System.out.println(bob); // Etudiant [prenom=Bob, age=0, niveauEtudes=null,
// univ=Universite [nom=Universite de Bordeaux, ville=Bordeaux, nbEleves=0]]
}
}