1 / 46

Synthèse sur les éléments de base de la P rogrammation par objets en Java

Synthèse sur les éléments de base de la P rogrammation par objets en Java. Fmin110 – 2012-2013. Eléments principaux. Programmation par objets Classes, objets A ttributs, méthodes Héritage Collections ( ArrayList ) Algorithmique de base Types, affectation, lecture/écriture

ronia
Download Presentation

Synthèse sur les éléments de base de la P rogrammation par objets en Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Synthèse sur les éléments de base de la Programmation par objets en Java Fmin110 – 2012-2013

  2. Eléments principaux • Programmation par objets • Classes, objets • Attributs, méthodes • Héritage • Collections (ArrayList) • Algorithmique de base • Types, affectation, lecture/écriture • Conditionnelles, répétitives

  3. Eléments principaux • Programmation par objets • Classes, objets • Attributs, méthodes • Héritage • Collections (ArrayList) • Algorithmique de base • Types, affectation, lecture/écriture • Conditionnelles, répétitives

  4. Classe • Traduction d’un concept et de sa description • Exemple de concept CompteBancaire numéro (inchangé après attribution) titulaire (un client) solde créditer d’un montant débiter d’un montant

  5. Classe / attributs CompteBancaire numéro (inchangé après attribution) titulaire (un client) solde public class CompteBancaire { private Client titulaire; privatefinal String numero; private double solde; …….. }

  6. Classe / méthodes CompteBancaire créditer d’un montant débiter d’un montant public class CompteBancaire{ public voidcrediter(double montant) { if (montant >= 0) this.solde+= montant; elseSystem.out.println ("erreur : on credite un montant positif"); } }

  7. Classe / méthodes créditer d’un montant Public méthode utilisable partout void car elle ne retourne rien double montant car on utilise un montant passé lors de l’appel public voidcrediter(double montant) { if (montant >= 0) this.solde+= montant; elseSystem.out.println ("erreur : on credite un montant positif"); }

  8. Classe / méthodes this objet sur lequel s’applique la méthode public class CompteBancaire{ public voidcrediter(double montant) { if (montant >= 0) this.solde+= montant; elseSystem.out.println ("erreur : on credite un montant positif"); } }

  9. Classe / méthodes String toString() méthode à prévoir, retourne une chaîne décrivant l’objet public class CompteBancaire{ public String toString(){ return " numero :  "+numero + " solde = "+solde; } }

  10. Classe / constructeur constructeur Méthode spéciale appelée lors de la création public class CompteBancaire{ public CompteBancaire() { this.numero= "numeroInconnu"; this.titulaire= null; this.solde= 0; } }

  11. Classe / constructeur constructeur Méthode spéciale appelée lors de la création public class CompteBancaire{ public CompteBancaire(String numero, double solde) { this.numero= numero; this.crediter(solde); this.titulaire= null; } }

  12. Création d’objets Classe = descripteur Objet = structure conforme à la classe cb1: CompteBancaire numeroInconnu null 0 CompteBancairenuméro titulaire solde cb2: CompteBancaire « OO2XFD » null 400

  13. Création d’objets Dans un programme main Placé dans une classe qui sera exécutée public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { CompteBancairecb1 = new CompteBancaire(); CompteBancairecb2 = new CompteBancaire("OO2XFD",400); } }

  14. Création d’objets Noter : appel du constructeur avec une liste de paramètres conforme à l’un des constructeurs public CompteBancaire() { this.numero = "numeroInconnu"; this.titulaire = null; this.solde = 0; } CompteBancairecb1 = new CompteBancaire();

  15. Création d’objets Noter : appel du constructeur avec une liste de paramètres conforme à l’un des constructeurs public CompteBancaire(String numero, double solde) { this.numero = numero; this.crediter(solde); this.titulaire = null; } CompteBancaire cb2 = new CompteBancaire("OO2XFD",400);

  16. Appel de méthodes sur les objets Dans un programme main public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { CompteBancairecb1 = new CompteBancaire(); CompteBancairecb2 = new CompteBancaire("OO2XFD",400); cb1.crediter(500); // this est cb1 cb2.crediter(300); // this est cb2 } }

  17. Classe / méthodes-accesseurs connaître le solde double getSolde() public class CompteBancaire{ public double getSolde() { return this.solde; } } Remarque : on a déjà des méthodes pour modifier le solde (crediter, débiter)

  18. Classe / méthodes-accesseurs connaître le titulaire Client getTitulaire() modifier le titulaire voidsetTitulaire(Client c) public class CompteBancaire{ public Client getTitulaire() { return this.titulaire; } public voidsetTitulaire(Client titulaire) { this.titulaire= titulaire; } }

  19. Classe / méthodes-accesseurs connaître le numéro String getNumero() public class CompteBancaire{ public String getNumero() { return numero; } } Remarque : on ne peut pas écrire de méthode pour le modifier puisqu’il est final

  20. Eléments principaux • Programmation par objets • Classes, objets • Attributs, méthodes • Héritage (et au passage attributs et méth. de classe) • Collections (ArrayList) • Algorithmique de base • Types, affectation, lecture/écriture • Conditionnelles, répétitives

  21. Classe dérivée / sous-classe • On s’intéresse à une partie des objets • Exemple de sous-classe LivretA (une partie des comptes bancaires) numéro (inchangé après attribution) titulaire (un client) solde interetVerses plafond (le même pour tous les livrets A) créditer d’un montant si < plafond débiter d’un montant

  22. Classe dérivée / sous-classe Définition par différence : un livret A est comme un compte avec des précisions (en orange) LivretAest-unCompteBancaire numéro (inchangé après attribution) titulaire (un client) solde interetVerses plafond créditer d’un montant si < plafond débiter d’un montant

  23. Classe dérivée / sous-classe LivretAest-unCompteBancaire public class LivretAextendsCompteBancaire{ …….. }

  24. Classe dérivée / sous-classe LivretAest-unCompteBancaire numéro (inchangé après attribution) titulaire (un client) Solde interetVerses Plafond (le même pour tous les livrets A) public class LivretAextendsCompteBancaire{ private double interetVerses; public static double plafond; }

  25. Attributs et méthodes de classe Plafond (le même pour tous les livrets A) • c’est un attribut de la classe (static), pas propre à un objet • On le manipule par des méthodes-accesseursstatic public class LivretAextendsCompteBancaire{ public staticdouble plafond; public staticdouble getPlafond() { return LivretA.plafond; } public staticvoidsetPlafond(double plafond) { LivretA.plafond= plafond; } }

  26. Appel du constructeur de la super-classe public class CompteBancaire{ public CompteBancaire(String numero, double solde){ this.numero= numero;this.crediter(solde); this.titulaire= null; }} public class LivretAextendsCompteBancaire{ public LivretA(String numero, double solde, double interetVerses) { super(numero, solde); this.interetVerses= interetVerses; }}

  27. Redéfinition d’une méthode public class CompteBancaire{ public voidcrediter(double montant) { if (montant >= 0) this.solde+= montant; elseSystem.out.println ("montant doit être positif"); }} public class LivretAextendsCompteBancaire{ public voidcrediter(double montant) { if (this.getSolde()+montant <= LivretA.getPlafond()) super.crediter(montant); else System.out.println("erreur : plafond depasse"); }}

  28. Redéfinition d’une méthode public class CompteBancaire{ public String toString(){ return " numero :"+numero+ " solde = "+solde; } } public class LivretAextendsCompteBancaire{ public String toString(){ return super.toString() +  " intérêts versés " +this.getInteretVerses(); } }

  29. Création d’objets Dans un programme main Placé dans une classe qui sera exécutée public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { LivretA.setPlafond(15000); CompteBancaire la1 = new LivretA("LA0008",100); LivretA la2 = new LivretA("LA0009",300,10); } }

  30. Création d’objets LivretA numéro titulaire Solde interetVerses plafond la1: LivretA «LA0008 » null 100 0 la2: LivretA « LA0009 » Null 300 10 LivretA.Plafond 15000

  31. Classe et méthodes abstraites Client adresse liste de comptes bancaires String Identification() Particulier nom-prenom String Identification() -- donnée par le nom-prenom Entreprise numero SIRET String Identification() -- donnée par le numero de SIRET

  32. Classe et méthodes abstraites Une classe qui n’a pas d’instances propres Client {abstraite} adresse liste de comptes bancaires String Identification() {abstraite} Une méthode qui n’a pas de corps Particulier nom-prenom String Identification() -- donnée par le nom-prenom Entreprise numero SIRET String Identification() -- donnée par le numero de SIRET

  33. Classe et méthode abstraites public abstract class Client { abstract public String identification(); } public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { Client C = new Client( …); } }

  34. Classe abstraite et sous-classe concrète public abstract class Client { abstract public String identification(); } public class Particulier extendsClient { privateString nom_prenom; public String identification() { return this.getNom_prenom(); } }

  35. Eléments principaux • Programmation par objets • Classes, objets • Attributs, méthodes • Héritage • Collections (ArrayList) • Algorithmique de base • Types, affectation, lecture/écriture • Conditionnelles, répétitives

  36. Associations, collections Client {abstraite} CompteBancaire LivretA Entreprise Particulier Un client a un portefeuille de comptes bancaire Un compte bancaire peut être associé à un client

  37. Portefeuille de comptes Deux attributs se font face dans les deux classes On doit les garder en cohérence public classCompteBancaire{ private Client titulaire; } public abstract class Client { privateArrayList<CompteBancaire> portefeuille; }

  38. ArrayList in a nutshell public abstract class Client { privateArrayList<CompteBancaire> portefeuille; } • ArrayList<T> : une collection extensible d’objets de type T • création portefeuille = new ArrayList<CompteBancaire>() • taille portefeuille.size() • élément au rang i portefeuille.get(i) • ajout d’élément portefeuille.add(cb), avec cb un compte • appartenance portefeuille.contains(cb)

  39. Ajout d’un compte au portefeuille public classCompteBancaire{ private Client titulaire; public Client getTitulaire() { return titulaire; } public voidsetTitulaire(Client titulaire) { this.titulaire= titulaire; } }

  40. Ajout d’un compte au portefeuille public abstract class Client { privateArrayList<CompteBancaire> portefeuille = new ArrayList<CompteBancaire>(); public voidajoute(CompteBancairecompteBancaire) { if (! portefeuille.contains(compteBancaire)) { portefeuille.add(compteBancaire); compteBancaire.setTitulaire(this); } } }

  41. Création d’objets reliés public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { Particulier client1 = new Particulier("rue des oliviers", "montmorrency-emilie"); CompteBancaire la1 = new LivretA("LA0008",100); CompteBancaire cb2 = new CompteBancaire("OO2XFD",400); client1.ajoute(la1); client1.ajoute(cb2); } }

  42. Création d’objets reliés la1: LivretA «LA0008 » 100 0 client1 : LivretA «rue des oliviers » "montmorrency-emilie" :ArrayList<CompteBancaire> 2 cb2: CompteBancaire « OO2XFD » 400

  43. Parcours du portefeuille A noter : la répartition du travail entre les objets toString : de CompteBancaireouLivretA public abstract class Client { public String listePortefeuille() { String resultat = ""; for (CompteBancaire cb : portefeuille) resultat+= cb.toString() + "\n"; return resultat; } }

  44. Parcours du portefeuille public abstract class Client { public double montantDisponible() { double md = 0; for (CompteBancaire cb : portefeuille) md = md + cb.getSolde(); return md; } }

  45. Parcours du portefeuille public abstract class Client { public ArrayList<CompteBancaire> extraireComptesNegatifs() { ArrayList<CompteBancaire> listeCN = new ArrayList<CompteBancaire>(); for (CompteBancaire cb : portefeuille) if (cb.getSolde() < 0) listeCN.add(cb); return listeCN; } }

  46. Conclusion • L’essentiel des notions ont été passées en revue • Ne pas oublier de revoir dans le cours : • D’autres manières de parcourir les ArrayList • La coercition • Bien comprendre la liaison dynamique des méthodes • Bien comprendre la distribution du calcul entre les objets • La récursivité (TD/TP sur les pièces composites)

More Related