package fr.iutfbleau.projetIHM2022FI2.API; import java.util.*; /** * Un groupe */ public interface Groupe extends MonPrint { /** * permet de récupérer l'identifiant d'un groupe (référence interne sans intérêt irl). * @return l'identifiant. */ public int getId(); /** * permet de récupérer le nom d'un groupe (utile irl). * @return le nom. */ public String getName(); /** * permet de récupérer le nombre minimum d'étudiants souhaités dans le groupe. * @return le minimum souhaité */ public int getMin(); /** * permet de récupérer le nombre maximum d'étudiants souhaités dans un groupe. * @return le maximum souhaité */ public int getMax(); /** * permet de récupérer le nombre d'étudiants dans ce groupe. * @return le nombre de places prises (pas forcément limité entre Min et Max, mais c'est le but) */ public int getSize(); /** * permet de récupérer la nature du groupe * @return le type du groupe */ public TypeGroupe getType(); /** * permet de récupérer le groupe père * un groupe racine devrait retourner lui-même * * @return le père */ public Groupe getPointPoint(); /** * Potentiellement "vide" * @return un itérateur sur sous-groupes. */ public Iterator getSousGroupes(); /** * Potentiellement "vide" * @return un itérateur sur les étudiants. */ public Iterator getEtudiants(); /** * @see MonPrint * NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici. * * NB2. On ne peut pas utiliser le toString de Objects * https://stackoverflow.com/questions/24016962/java8-why-is-it-forbidden-to-define-a-default-method-for-a-method-from-java-lan */ public default String monPrint() { StringBuilder sb = new StringBuilder(); sb.append("Groupe " + getName() + " (" getType() +", capacité " + getMin() + " à " + getMax() +", id " + getId()+")"); Iterator i = getEtudiants(); sb.append("%n"); while (i.hasNext()){ Etudiant s = i.next(); sb.append(s.toString()); sb.append("%n"); } return sb.toString(); } }