Vous êtes sur la page 1sur 27

SLAM5 : C2 – Rappels

POO
D I A G R A M M E D E C L A S S ES , VO C A B U L A I R E , L E C T U R E
PA RTIE 1 : U N E C LA S S E
PA RTIE 2 : LIE N 1 EN T R E 2 C L A S S E S
PA RTIE 3 : LIE N * EN T R E 2 C L A S S E S
Brainstorming Vocabulaire POO
Classes, Objet, Propriétés, accesseurs, privé, public,
constructeur, instanciation, méthodes,
Paramètre, surcharge
A quoi sert une classe ? Intérêts de la POO ?
A quoi sert une classe ?
centraliser au sein d'un même endroit (dans le code) les caractéristiques communes d'une entité
(les propriétés) et ses comportements (les methods).
Cette classe permettra d'instancier autant d'objets voulus qui auront le même modèle (mêmes
caractéristiques et mêmes comportements)
Intérêts de la POO ?
• Uniformité du code (une classe est toujours organisée de la même manière, propriétés,
accesseur, constructeur et méthodes)
• Facilité de maintenance : tout est au même endroit et un ajout de méthode impactera tous les
objets associés (utilisation immediate)
• Travail à plusieurs : chaque classe est indépendante donc facile de travailler à plusieurs
• Réutilisation : on peut réutiliser une même classe dans plusieurs projets
Diagramme de classes
Lecture du diagramme de classes
 Replacer le vocabulaire de la POO sur l’ensemble des classes proposées
 Quelle différence entre la méthode ajouterAsso et supprimerAsso ?
 Quelle particularité ont les méthodes listerAsso ?
 Faites 4 phrases exprimant les liens entre ces 3 classes. Que signifie la flèche sur le
lien ?
Partie 1 : classe Membre
Ecrire le code (ou pseudo-code) associé à la définition des propriétés de la classe
MEMBRE présentée dans le diagramme de classe.
public class MEMBRE
{
private string nom;
private string prenom;
private string ville;
private string tel;
Partie 1 : classe Membre
Ecrire le constructeur de la classe MEMBRE.
public MEMBRE(string unN, string unP)
{
nom = unN;
prenom = unP;
}
 constructeur paramétré
 On peut y ajouter les autres propriétés avec des valeurs par défaut :
ville = "Angers";
Partie 1 : classe Membre
Peut-on en écrire un autre ?
public MEMBRE(string unN, string unP, string uneV, string tel )
{
nom = unN; Propriété = paramètre ;
prenom = unP;
ville = uneV;
this.tel = tel;
}
 constructeur plein valorisant toutes les propriétés
 this : pour faire référence à la propriété
Partie 1 : classe Membre
Ecrire les accesseurs permettant de lire et de modifier le téléphone de ce membre.
Public void setTel(string nouvTelPortM) // accesseur SET pour modifier la propriété
{
tel = nouvTelPortM;
}

Public string getTel() // accesseur GET pour lire la propriété


{
return tel ;
}
Partie 1 : classe Membre
Créer un nouveau membre nommé M1 à partir de cette classe en utilisant l’un des
constructeurs paramétrés (Membre : Tim ORAN d’ Angers, Tel : 0676443212)

MEMBRE M1 = new MEMBRE("ORAN", "Tim", "NANTES", "06-44-72-49-53");

- déclaration - instanciation
Partie 1 : classe Membre
M1 vient de changer son numéro de téléphone portable. Modifier le !

M1.setTel("07-20-19-18-17");
// appel via l’accesseur SET de la propriété
Partie 1 : classe Membre
Afficher les informations du membre avec son nom, prénom et télportable

String infoM = M1.getNom() + " " + M1.getPrenom() + " " + M1.getTel();


Console.WriteLine(infoM);

// ou possibilité d’ajouter une méthode Afficher() dans la classe qui retourne une
chaine de caractères avec toutes les informations
Partie 2 : lien 1 entre 2 classes

Rappel de lecture : dans le sens de la flèche

- Une association est présidée par un président

L’autre sens (un membre peut présider 0 ou


plusieurs associations) n’est pas pris en compte ici.
Partie 2 : lien 1 entre 2 classes
Ecrire le code (ou pseudo-code) associé à la définition des propriétés de la classe
ASSOCIATION
public class ASSOCIATION
{
private string nomA;
private string description;
private string typeActivite;
private int nbAdherents;
private MEMBRE lePresident; // traduit le lien 1 vers la classe Membre : l'association a bien un
seul président
Partie 2 : lien 1 entre 2 classes
Ecrire deux constructeurs de la classe ASSOCIATION, celui donné dans le
diagramme et le complet.

public ASSOCIATION(string unNom, string uneDescr)


{
this.nomA = unNom;
description = uneDescr;
nbAdherents = 0; //certains langages initialisent automatiquement les entiers à 0
lePresident = NULL; //certains langages initialisent automatiquement les objets à NULL
}
Partie 2 : lien 1 entre 2 classes
constructeur complet :

public ASSOCIATION(string nomA, string uneDescr, string typeActivite, int nbA, MEMBRE unMembre)
{
this.nomA = nomA;
description = uneDescr;
this.typeActivite = typeActivite;
nbAdherents = nbA;
lePresident = unMembre;
}
Partie 2 : lien 1 entre 2 classes
Ecrire la méthode getNbAdherents() qui récupérer le nombre d'adhérents de
l'association

Public int getNbAdherents()


{
return nbAdherents;
}
Partie 2 : lien 1 entre 2 classes
Ecrire la méthode infoPresident() qui retournera toutes les informations du
président sous la forme d'une chaine de la classe ASSOCIATION.

Public string infoPresident() {


return lePresident.getNom() + " " + lePresident.getPrenom()+ " " +
lePresident.getVille()+ " " + lePresident.getTel();
}
Partie 2 : lien 1 entre 2 classes
Créer une association avec le membre créé en partie 1 comme président.

ASSOCIATION A1 = new ASSOCIATION( "COP3 Etudiante", "association étudiante


inter-campus angevine, ayant pour objectif de sensibiliser les jeunes et moins jeunes
au développement durable, le rendre désirable et faciliter le passage à l'action dans
la transition socio-écologique !", "développement durable", 125, M1);
Partie 3 : lien * entre 2 classes

Rappel de lecture : dans le sens de la flèche

- Un forum a 0 ou plusieurs associations participantes

L’autre sens (une association participe à 0 ou plusieurs forums) n’est pas


pris en compte ici.
Partie 3 : lien * entre 2 classes
Ecrire le code (ou pseudo-code) associé à la définition des propriétés de la classe
FORUM
public class FORUM
{
private DATE dateF;
private string libelleF ;
private string lieuF;
private List<Association> lesAssociations; // traduit le lien * vers la classe Association : le forum
a bien plusieurs associations qui vont être stockées dans la liste
Partie 3 : lien * entre 2 classes
Ecrire le constructeur de la classe FORUM
public FORUM(DATE uneD, string unLib, string unL )
{
dateF = uneD;
libelleF = unLib;
lieuF = unL;
lesAssociations = new List<Association>();
//si vous oubliez cette dernière ligne, cela correspondra à lesAssociations = NULL; et donc votre liste
ne sera pas créée, cela génèrera l'erreur "NULL POINTER EXCEPTION"
}
Partie 3 : lien * entre 2 classes
Ecrire la méthode ajouterAsso() de la classe FORUM en vérifiant si celle-ci n'est pas déjà inscrite à
ce forum (retourne vrai si l’ajout a pu se faire, faux sinon)
public bool ajouterAsso(ASSOCIATION uneAsso)
{
if (lesAssociations.IndexOf(uneAsso) == -1) //on vérifie que l'association n'est pas déjà inscrite au
forum, c’est-à-dire qu'elle n'est pas présente dans la liste (on ne veut pas l'avoir 2 fois)
{
lesAssociations.add(uneAsso);
return true;

}
return false;

}
Partie 3 : lien * entre 2 classes
Ecrire les méthodes surchargées listerAsso() de la classe FORUM.
la première retourne le nombre d'associations qui ont un président qui n'habite la ville du Forum.
public int listerAsso()
{
◦ int valeurRetour = 0 ;

foreach (Association A in this.lesAssociations)


{
◦ if (A.getLePresident().getVille() != this.villeF)

valeurRetour ++ ;
}
◦ return valeurRetour;

}
Partie 3 : lien * entre 2 classes
la deuxième liste les associations ayant un nombre d'adhérents supérieur à celui passé en paramètre.
public List<Association> listerAsso(int nbAdh)
{
List<Association> listeRetour = new List<Association>() ;
foreach (Association A in this.lesAssociations)
{
◦ if (A.getNbAdherents() >= nbAdh)

listeRetour.Add(A) ;
}
return listeRetour;
}
Partie 3 : lien * entre 2 classes
Quelles sont les règles à retenir pour l’écriture de méthodes surchargées ?

Ecrire une méthode surchargée consiste à écrire


 une même méthode (même nom)
 avec un nb de paramètres différents ou ordre des types différents
 Mais le type de valeur de retour ne présente pas une différence.
Partie 3 : lien * entre 2 classes
Le forum 2023 est en place, le créer avec 3 associations. Il aura lieu au centre des congrès d’Angers le
16 septembre. Mettre en place ce scénario en POO.
Récupérer le nombre d'associations présentes qui ont un nb d’adhérents supérieur à 50.

Association A2 = new Association( "Fonce !", "association de coaching"); A2.setNbAdherents (100);


Association A3 = new Association( "ACDC", "association de chevrollier"); A3.setNbAdherents (49);

Forum F = new Forum ( "16/09/2023", "Forum 2023", "Angers");


if (F.ajouterAsso(A1)) MessageBox.Show( "Association ajoutée");
if (F.ajouterAsso(A2)) MessageBox.Show( "Association ajoutée");
if (F.ajouterAsso(A3)) MessageBox.Show( "Association ajoutée");

int nbAsso = F.listerAsso(50);

Vous aimerez peut-être aussi