Concrétiser un type de données abstrait
drspinoza
Messages postés
51
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je m'explique.
J'ai 2 classe et une interface.
Une classe Personne qui implemente une interface Individu et qui crée un objet de cette forme :
J'ai ensuite une interface Genealogie.
Il s'agit d'une interface qu'on me demande d'implanter.
En résumer elle permet de lier les objets entre eux ( Parents , Frere, Enfants ... )
C'est maintenant que j'ai besoin de votre aide il faut que je crée une classe qui implémente Genealogie et qui est de cette forme :
Le problème et que je n'arrive pas à créer un objet Personne et ensuite le modifier et l'utiliser.
J'aimerai mieu comprendre la façon dont je doit procéder pour pouvoir répondre à ce test par exemple.
Voici une partie du test que je tente de valider :
Toute aide est la bienvenue cela fait plusieurs jour que je suis bloqué.
Je sais que ma question est longue, juste un petit indice ou guide m'aiderai fortement.
Merci,
Je m'explique.
J'ai 2 classe et une interface.
Une classe Personne qui implemente une interface Individu et qui crée un objet de cette forme :
public class Personne implements Individu { private String nom; private ArrayList<String> prenoms; private Date dateNaissance; private int reference; private int parent1; private int parent2; public Personne(String nom, ArrayList<String> prenoms, Date date, int ref) { this.nom = nom; this.prenoms = prenoms; this.dateNaissance = date; this.reference = ref; this.parent1 = -1; this.parent2 = -1; } public Personne(String nom, ArrayList<String> prenoms, Date date) { this(nom, prenoms, date, -1); } @Override public void definirParent1(int ref) { this.parent1 = ref; } /*et d'autres methodes getter et setter
J'ai ensuite une interface Genealogie.
Il s'agit d'une interface qu'on me demande d'implanter.
En résumer elle permet de lier les objets entre eux ( Parents , Frere, Enfants ... )
public interface Genealogie<U extends Individu> { /** * @param mo, un individu * @return, retourne la liste des deux individus parents, cette liste peut comporter * des éléments nuls si les parents correspondants ne sont pas connus */ public ArrayList<U> lesParents(U moi); /** * @param moi, un individu * @return, retourne la liste des individus en age décroissant, qui ont les mêmes parents que moi, * moi ne figure pas dans cette liste */ public ArrayList<U> laFratrie(U moi); /** * @param p1, le premier parent * @param pi2, le second parent * @return retourne la liste des enfants de ces parents en age décroissant, si l'un des parents est null * on retourne la liste des enfants de l'autre parent */ public ArrayList<U> lesEnfants(U p1, U p2); /** * @param moi, un individu * @param parent1, un individu, premier parent de moi */ public void definirParent1(U moi, U parent1); /** * @param moi, un individu * @param parent2, un individu second parent de moi */ public void definirParent2(U moi, U parent2); }
C'est maintenant que j'ai besoin de votre aide il faut que je crée une classe qui implémente Genealogie et qui est de cette forme :
public class Gen <U extends Individu> implements Genealogie<U> { private ArrayList<U> Liste; public Gen(){ Liste = new ArrayList<U>(); } public int nombreIndividus() { return Liste.size(); } public ArrayList<U> lesIndividus() { return Liste; } public U lIndividu(int pos) { return Liste.get(pos); } public ArrayList<U> lesParents(U moi) {} public ArrayList<U> laFratrie(U moi) {} public ArrayList<U> lesEnfants(U p1, U p2) {} public void ajout(U moi) { Liste.add (moi); } public void definirParent1(U moi, U parent1) {} public void definirParent2(U moi, U parent2) {} }
Le problème et que je n'arrive pas à créer un objet Personne et ensuite le modifier et l'utiliser.
J'aimerai mieu comprendre la façon dont je doit procéder pour pouvoir répondre à ce test par exemple.
Voici une partie du test que je tente de valider :
public class TestGenealogie { private Personne p1; private Personne p2; private Personne p3; private Personne p4; private Personne p5; public void setUp() throws Exception { ArrayList<String> prenoms = new ArrayList<String>(); DateFormat dfm = new SimpleDateFormat("Y"); dfm.setTimeZone(TimeZone.getTimeZone("Canada/Montreal")); try { p1 = new Personne("e1",null, dfm.parse("1990")); p2 = new Personne("e2",null, dfm.parse("1994")); p3 = new Personne("p1",null, dfm.parse("1970")); p4 = new Personne("p2",null, dfm.parse("1972")); prenoms.add("pr1"); prenoms.add("pr2"); p5 = new Personne("gp1",prenoms, dfm.parse("1945")); } catch (ParseException e) { e.printStackTrace(); } @Test public void testDefinirParent1() { Gen<Personne> g = new Gen<Personne>(); g.ajout(p1); g.ajout(p2); g.ajout(p3); g.definirParent1(p1, p3); ArrayList<Personne> e = new ArrayList<Personne>(); e.add(p1); assertEquals(e, g.lesEnfants(p3, null)); assertEquals(e, g.lesEnfants(null, p3)); } @Test public void testLesParents() { Gen<Personne> g = new Gen<Personne>(); g.ajout(p1); g.ajout(p2); g.ajout(p3); g.ajout(p4); ArrayList<Personne> e = new ArrayList<Personne>(); e.add(null); e.add(null); assertEquals(e, g.lesParents(p1)); e = new ArrayList<Personne>(); e.add(p3); e.add(null); g.definirParent1(p1, p3); assertEquals(e,g.lesParents(p1)); e = new ArrayList<Personne>(); e.add(null); e.add(p4); g.definirParent2(p2,p4); assertEquals(e,g.lesParents(p2)); e = new ArrayList<Personne>(); g.definirParent2(p1, p4); e = new ArrayList<Personne>(); e.add(p3); e.add(p4); assertEquals(e, g.lesParents(p1)); } @Test public void testLaFratrie() { Gen<Personne> g = new Gen<Personne>(); g.ajout(p1); g.ajout(p2); g.ajout(p3); g.definirParent1(p1, p3); g.definirParent2(p1, p4); ArrayList<Individu> e = new ArrayList<Individu>(); assertEquals(e,g.laFratrie(p1)); g.definirParent1(p2, p3); g.definirParent2(p2, p4); e.add(p1); assertEquals(e,g.laFratrie(p2)); e = new ArrayList<Individu>(); g = new Gen<Personne>(); g.ajout(p1); g.ajout(p2); g.ajout(p3); g.ajout(p4); g.definirParent1(p1, p3); g.definirParent2(p1, p4); g.definirParent1(p2, p3); g.definirParent2(p2, null); assertEquals(e,g.laFratrie(p1)); e = new ArrayList<Individu>(); g = new Gen<Personne>(); g.ajout(p1); g.ajout(p2); g.ajout(p3); g.ajout(p4); g.definirParent2(p1, p4); g.definirParent1(p2, p4); g.definirParent1(p1, null); g.definirParent2(p2, null); e.add(p1); assertEquals(e,g.laFratrie(p2)); } }
Toute aide est la bienvenue cela fait plusieurs jour que je suis bloqué.
Je sais que ma question est longue, juste un petit indice ou guide m'aiderai fortement.
Merci,
A voir également:
- Concrétiser un type de données abstrait
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Clear type - Guide
- Trier des données excel - Guide
- Type de ram - Guide
Je sais pas si c'est à cause de la genericité mais quand j'utilise les méthodes setter d'un objet Personne on dirait que ceului-ci devient vide et n'est plus utilisable dans mes boucles.
Par exemple voila ce que j'ai fait pour definirParent1: