Généalogie

Le but du projet
Support de cours du 1er semestre 1999-2000.
1/ Créer des classes, définir des variables d'instance
2/ Créer et ajouter des méthodes
3/ Déboguer
4/ Relier des objets, créer des relations
5/ Gérer des collections d'objets
6/ Construire une interface, une vue graphique, un contrôleur.
Le sujet : un peu de généalogie néophyte, Les concepts du modèle sont, les Personnes et les Groupes de personnes. Les personnes ne connaissent que leur nom (pas de distinction nom prénom), leur pere et leur mere. Les groupes de personnes sont là pour rechercher les liens composés, par exemple les frères et soeurs a partir des seuls liens physiques pere et mere.
1/ Créer des classes, définir des variables d'instance
Voir la classe Personne
2/ Créer et ajouter des méthodes
Idem, nous avons défini et ajouté des méthodes dans les classes Personne et Groupe.
Une question souvent posée est : 'Comment savoir s'il faut écrire une méthode pour la classe, ou pour les instances ?' Réponse: Si la méthode est déstinée à définir un message pour les objets, par exemple pour une personne particulière, alors c'est une méthode d'instance. Si au contraire, le message que l'on défini aura pour récepteur la classe, alors c'est une méthode de classe. Exemples : le message #nom pour obtenir le nom d'une personne est une méthode d'instance. On adresse ce message à une personne particulière. Par contre, le message #new redéfini dans la classe Groupe est une méthode de classe. car on envoie le message #new à la classe Groupe (expression Groupe new).
3/ Déboguer
Et oui, on se trompe, on oublie, on ne spécifie pas complètement. On suppose intuitivement au lieu de déduire logiquement, on ne pense pas à tous les usages que d'autre ferons peutêtre de nos programmes (qui fonctionnent bien dans les cas que nous envisagions).
Par exemple, la méthode mere: donnée en cours
mere: unePersonne
	mere := unePersonne
devient :
mere: unePersonne
	unePersonne = self ifFalse: [mere := unePersonne]
La correction imposée lors de la construction de l'interface (permettant par erreur d'affecter une personne comme étant sa propre mère). D'ailleurs, ce programme est loin d'être sans bugs. Il n'y a pas d'autres contrôle de cohérence. Par exemple, pour planter ce programme, il suffit de lier (x mere: y) puis de lier (y mere: x). On peut passer par le grand-mère si on veut, (x mere: y) (y mere: z) (z mere: x) pour obtenir le même effet : une boucle sans fin lors du calcul... je vous laisse trouver de quoi.
4/ Relier des objets, créer des relations
Voir les liens pere et mere. Ils implémentent des relations entre les objets. D'une certaine façon, la variable d'instance 'membres' des groupes implémente la relation d'appartenance à un groupe. Par contre la variable d'instance 'nom' n'est pas une relation entre 'ByteString' et 'Personne', mais bien l'implémentation d'un constituant des personnes dans notre modèle.
Il y a également les exemples de relations calculées : les frères et soeurs ne sont pas implémentés par des liens physiques entre les objets mais calculés à la demande à partir des liens pere et mere.
5/ Gérer des collections d'objets
add: remove: select: do: reject: includes: les messages de base pour manipuler des collections. Ici, on manipule des collections de personnes dans un groupe.
Calculez les cousins par exemple...
6/ Construire une interface, une vue graphique, un contrôleur.
C'est bien les méthodes de classe 'exemple1' 'exemple2' dans un browser, mais c'est mieux de visualiser, d'attraper les objets à la souris et de voir les relations par la couleur des objets.
Alors, il faut construire une interface, une vue pour afficher les objets, un contrôleur pour agir sur eux, et enfin une application pour présenter la vue et des commandes...


Mode d'emploi : Un clic rouge (bouton gauche) dans un espace libre pour créer (instancier) une personne.
Un clic rouge débutant dans un objet avec un déplacement initial vers le bas, pour déplacer un objet.
Un clic rouge débutant dans un objet avec un déplacement initial vers le haut à droite et finissant dans un autre objet pour définir le lien mere:
Un clic rouge débutant dans un objet avec un déplacement initial vers le haut à gauche et finissant dans un autre objet pour définir le lien pere:
Un clic jaune (bouton milieu (ou droit pour les PC (ou command clic sur Mac))) pour effacer une personne.
La derniere personne cliquée est affichée en vert, ses frères et soeurs en pourpre, sa descendance en jaune de plus en plus noir au cours des générations. Les autres personnes en rouge. Les numéros (s'il sont affichés) sont: le 1 pour la personne selectionnée, et ensuite 2x pour le pere de x, et 2x+1 pour la mere de x.

Le code source :
Deux méthodes dans la classe integer (la méthode serieAncetres n'est pas utile au projet, mais pour exemple)
La catégorie VL-Genealogie
Dans cette catégorie les classes suivantes :