public class Maison
Transcription
public class Maison
Programmation Orientée Objets et langage Java Programmation procédurale Construire(Maison m){ creuser(fouilles); commander(béton) couler(fouilles); commander(parpaings); while(!fini(sous-sol)){poser(parpaings);} commander(ourdis); while(…. commander(béton); couler(plancher); ... } Programmation non structurée Construire(Maison m){ creuser(fouilles); commander(Béton b){ … commander(béton) } couler(fouilles); couler(Fouilles f){ commander(parpaings); … while(!fini(sous-sol)){poser(parpaings);} } commander(ourdis); commander(Parpaings p){ while(…. … commander(béton); } couler(plancher); ... couler(Plancher p) { … } } Structuration par les fonctions package commandes; public commander(béton){……} package coulages; … commander(Parpaings p){……} public couler(Fouilles f){……} … commander(Ourdis o) ){……} … couler(Plancher p) ){……} … commander(Béton b) ){……} ... ... package construction; import commandes.*; Visibilité Portée import coulages.couler; … construire(Maison m){ creuser(fouilles); commander(béton) couler(fouilles); commander(parpaings); Protection while(!fini(sous-sol)){poser(parpaings);} ..} Prog. Structurée Descendante passerLesCommandes(){ commander(Béton b){ … Construire(Maison m){ passerLesCommandes(); construireLeSousSol(); } } imbrication couler(Fouilles f){ … construireAppartement(); } couvrir(); commander(Parpaings p){ …. … creuser(); } BEGIN commander(béton); commander(parpaings); ... END; Structuration par les objets Plan de la Maison Analyser les classes d ’objets du réel Toiture Cuisine Salle de bain Chambre Appartement Laverie Sous-sol Garage Plan du Logiciel (modélisation) Toiture Maison Cuisine Appartement SalleDeBain Chambre SousSol Laverie Garage Structurer les fonctions par les classes Toiture - commanderMateriaux() + couvrir() Appartement Cuisine - commanderMateriaux() - batirMurs() - realiserPlafond() + amenager() + construire() SousSol SalleDeBains Chambre Laverie Garage - commanderMateriaux() - couler (Fouilles f) - batirMurs() - couler(Plancher p) + amenager() + construire() - commanderMateriaux() - amenager() + construire() Des Objets du réel aux classes Java public class Appartement { ... private void commanderMateriaux() { ... } private void batirMurs() { ... } private void realiserPlafond() { ... } public void amenager() { ... } public void construire() { commanderMateriaux(); batirMurs(); realiserPlafond(); } } Appartement - commanderMateriaux() - batirMurs() - realiserPlafond() + amenager() + construire() Attributs (propriétés des objets) Toiture - c omm ande rM ateriaux () + couvrir() A ppartem ent Mais on - hom e : Appartem ent - leBas : SouS ol # leToit : T oiture Cuis ine - co mm anderMa terieu x() - ba ti rM urs () - realis e rP lafon d() + am enager() + cons t rui re() S ousS ol S alleDeB ains Cham bre Laverie Garage + cons truire() - co mm anderMa teriau x() - co ulerFouilles () - ba ti rM urs () - co ulerP la ncher() + am enager() + cons t rui re() - comm ande rM ateriaux() - amen ager() + c ons truire() Visibilité des attributs // Source file: Maison.java Maison - home : Appartement - leBas : SouSol # leToit : Toiture public class Maison { private Appartement home; private SouSol leBas; protected Toiture leToit; + Maison() public Maison() { ... } } Classe versus Objets (instances) chezMoi:Maison Maison - home : Appartement - leBas : SouSol # leToit : Toiture chezToi:Maison + Maison() :Maison chezMoi.leToit:Toiture Attributs de Classe chezMoi:Maison - home - leBas # leToit Maison Variable de classe - home : Appartement - leBas : SouSol # leToit : Toiture $ nbreMaisons : int chezToi:Maison - home - leBas # leToit + Maison() :Maison - home - leBas # leToit chezMoi.leToit:Toiture Variables d’instance Constructeur d ’objet Maison Main - $ chezMoi : Maison chezMoi Crée> + $ main(String[]) public class Main{ private static Maison chezMoi; - home : Appartement - leBas : SouSol # leToit : Toiture $ nbreMaisons : int + Maison() {//variable de classe //programme principal public static void main(String[] args) {//méthode chezMoi= new Maison(); } } de classe Interdit ! Maison Main - chezMoi : Maison chezMoi Crée> + $ main(String[]) public class Main{ private Maison chezMoi; - home : Appartement - leBas : SouSol # leToit : Toiture $ nbreMaisons : int + Maison() //variable d'instance public static void main(String[] args) {//méthode chezMoi= new Maison(); } } de classe interdit!!!!!! Variables locales Maison Main chezMoi Crée> + $ main(String[]) - home : Appartement - leBas : SouSol # leToit : Toiture $ nbreMaisons : int + Maison() public class Main{ public static void main(String[] args) { Maison chezMoi; //variable chezMoi= new Maison(); … } } locale Méthode statique et d'instance Maison Main - chezMoi : Maison chezMoi Crée> + $ main(String[]) public class Main{ private Maison chezMoi; - home : Appartement - leBas : SouSol # leToit : Toiture $ nbreMaisons : int + Maison() //variable d'instance public static void main(String[] args) {//méthode de classe new Main().leMain(args); } public void leMain(String[] args) {//méthode chezMoi= new Maison(); } } d'instance Appel des méthodes d’instance // Source file: Maison.java Maison - home : Appartement - leBas : SouSol # leToit : Toiture public class Maison { private Appartement home; private SouSol leBas; protected Toiture leToit; static int nbreMaisons=0; $ nbreMaisons : int = 0 public Maison() { Maison.nbreMaisons++; leBas= new SousSol(); home= new Appartement(); leToit= new Toiture(); + Maison() leBas.amenager(); home.amenager(); leToit.couvrir(); } } Héritage P iec e A ppartem ent # dim ens ion : Dim ens ion + am enager() + surfac e() Cuis ine S alleDeB ains Cham bre Laverie S ousS ol Garage - c om m anderM ateriaux () - c oulerFouilles() - batirM urs () - c oulerP lancher() + am enager() - c om m anderM ateriaux() + am enager() Java et l’héritage public class Piece { protected Dimensions dimension = new Dimension(); public int surface(){ return dimension.larg * dimension.long ; } } public class Cuisine extends Piece{ } …. public class Chambre extends Piece{ } Typage et héritage public class Appartement { protected Piece[] piece; public Appartement(){ piece = {new Cuisine(), new salleDeBain(), new Chambre(), new Chambre() }; } s=piece[1].surface(); s=piece[2].surface(); } Initialisateur d’attributs public class Appartement { protected Piece[] piece; { // initialisateur d’instance piece = {new Cuisine(), new salleDeBain(), new Chambre(), new Chambre() }; } s=piece[1].surface(); s=piece[2].surface(); } Initialisateur d’attribut de classe public class Maison { private Appartement home; private SouSol leBas; protected Toiture leToit; static int nbreMaisons; static { nbreMaisons=0; } //par défaut public Maison() { leBas= new SousSol(); home= new Appartement(); leToit= new Toiture(); leBas.amenager(); home.amenager(); leToit.couvrir(); } } Constantes « blanches » public class Maison { private Appartement home; private SouSol leBas; protected Toiture leToit; static int nbreMaisons; static final int maxMaisons; static { maxMaisons =100; } public Maison() { leBas= new SousSol(); home= new Appartement(); leToit= new Toiture(); leBas.amenager(); home.amenager(); leToit.couvrir(); } } Accesseurs Piec e Dim ens ions # dim ens ion : Dim ens ions + haut : int = 255 + larg : i nt + long : int + s urfac e() : int + ge tDi mens ion() : D im ens ions + s etDim ens ions (Dim ens ions ) Cuis in e S alleDeB ains Cham bre Laverie Garage - c om m anderM ateriaux () + am enager() « Pattern » Accesseurs public class Piece { protected Dimensions dimension = new Dimensions(); public void setDimension(Dimensions dimension){this.dimension=dimension;} public Dimensions getDimension(){return dimension;} public int surface(){ return dimension.larg * dimension.long ; } } public class Cuisine extends Piece{ } …. public class Chambre extends Piece{ } Piece # dim ens ion : Dim ens ions + n breP rises : i nt Arbre d ’héritage + surface() : int + g etDim ension() : Dim ens ions + setDim ensions (Dim ensions ) P ieceE au + nbreP ointE au : i nt Cuisine S alleDeB ains Laverie Cham bre Piece # dimension : Dimensions + nbrePrises : int spécialisation + surface() : int + getDimension() : Dimensions + setDimensions(Dimensions) + surfaceLocative() : int PieceEau + nbrePointEau : int Cuisine SalleDeBains Laverie Méthode spécialisée + surfaceLocative():int Chambre Spécialisation java public class Piece { protected Dimensions dimension = new Dimension(); public setDimension(Dimensions dimension){this.dimension=dimension;} public Dimensions getDimension(){return dimension;} public int surface(){ return dimension.larg * dimension.long ; } public int surfaceLocative(){ return surface() ; } } …. public class PieceEau extends Piece{ public int nbrePointEau; } public class Laverie extends PieceEau{ public int surfaceLocative(){ return super.surfaceLocative()/2 ; } } Appel des méthodes spécialisées public class SousSol { protected Piece laverie; //c'est une pièce protected Garage garage = new Garage(); … laverie= new Laverie(); //en fait une laverie } int sl= leBas.laverie.surfaceLocative(); int pe= leBas.laverie.nbrePointEau; Constructeur par défaut public class PieceEau extends Piece{ public int nbrePointEau; public PieceEau(){} } public class PieceEau extends Piece{ public int nbrePointEau; // le constructeur d’arité nulle existe par défaut en l’absence de tout autre } Constructeurs des super-classes public class PieceEau extends Piece{ public int nbrePointEau; public PieceEau(){ super(); } } public class PieceEau extends Piece{ public int nbrePointEau; public PieceEau(){} } //appel de super() par défaut surcharge public class PieceEau { public int nbrePointEau; public PieceEau(){} public PieceEau(int nbrePointEau){ this.nbrePointEau= nbrePointEau; } public PieceEau(int nbrePointEau, Dimensions dimension){ this.dimension= dimension; this.nbrePointEau= nbrePointEau; } } Appel de super() public class Piece { protected Dimensions dimension ; public Piece(Dimensions dimension ){ this.dimension = dimension; } …. } public class PieceEau { public int nbrePointEau; public PieceEau(int nbrePointEau, Dimensions dimension){ super(dimension); //appel du constructeur de superclasse de même arité this.nbrePointEau= nbrePointEau; } … } Appel de this() public class PieceEau { public int nbrePointEau; public PieceEau(){ this(1); //appel du constructeur de même classe } public PieceEau(int nbrePointEau){ this.nbrePointEau= nbrePointEau; } } Quelques « package » du JDK java.applet java.util java.lang java.awt.peer java.net java.awt.image java.awt java.io Quelques Classes du JDK java.lang Object equals (obj : Object) : boolean toString () : String String String () : void String (value : char[]) : void charAt (index : int) : char length () : int equals (anObject : Object) : boolean Integer $ MIN_VALUE : int $ MAX_VALUE : int System PrintStream out InputStream in PrintStream err Integer (value : int) : void Integer (s : String) : void equals (obj : Object) : boolean parseInt (s : String) : int parseInt (s : String, radix : int) : int Java.io err out PrintStream println (s : String) : void print (c : char) : void print (i : int) : void print (b : boolean) : void println () : void println (c : char) : void println (i : int) : void println (b : boolean) : quelques méthodes utiles Integer $ parseInt (s : String) : int Float $ valueOf (s : String) : Float floatValue() : float Long $ parseLong (s : String) : long String equals (anObject : Object) : boolean charAt (index : int) : char length () : int indexOf (ch : int) : int toCharArray () : char[] APIs java java idl java.rmi peer drag and drop java.lang java.sql java.text java.applet java.servlet threads java.io event image javadoc doclets java.security java.beans instructions java.net packages JVM java.util appletviewer jar JNI exceptions java..awt javac java..awt.swing java jdb