Programmation Orientée Objets. et langage Java



Similar documents
Transcription:

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) couler(fouilles); commander(parpaings); while(!fini(sous-sol)){poser(parpaings); commander(ourdis); while(. commander(béton); couler(plancher);... commander(béton b){ couler(fouilles f){ commander(parpaings p){ couler(plancher p) {

Structuration par les fonctions package commandes; public commander(béton){ commander(parpaings p){ commander(ourdis o) ){ commander(béton b) ){... package coulages; public couler(fouilles f){ couler(plancher p) ){... Visibilité Portée Protection package construction; import commandes.*; import coulages.couler; construire(maison m){ creuser(fouilles); commander(béton) couler(fouilles); commander(parpaings); while(!fini(sous-sol)){poser(parpaings);..

Prog. Structurée Descendante Construire(Maison m){ passerlescommandes(); construirelesoussol(); construireappartement(); couvrir();. creuser(); imbrication passerlescommandes(){ commander(béton b){ BEGIN END; couler(fouilles f){ commander(parpaings p){ commander(béton); commander(parpaings);...

Structuration par les objets Plan de la Maison Toiture Analyser les classes d objets du réel Cuisine Appartement Salle de bain Chambre Laverie Garage Sous-sol

Plan du Logiciel (modélisation) Maison Toiture Appartement Cuisine SalleDeBain Chambre SousSol Laverie Garage

Structurer les fonctions par les classes Toiture - commandermateriaux() + couvrir() Appartement Cuisine - commandermateriaux() - batirmurs() - realiserplafond() + amenager() + construire() SalleDeBains Chambre SousSol - commandermateriaux() - couler (Fouilles f) - batirmurs() - couler(plancher p) + amenager() + construire() Laverie Garage - commandermateriaux() - amenager() + construire()

Des Objets du réel aux classes Java public class Appartement {... private void commandermateriaux() {... private void batirmurs() {... private void realiserplafond() {... Appartement - commandermateriaux() - batirmurs() - realiserplafond() + amenager() + construire() public void amenager() {... public void construire() { commandermateriaux(); batirmurs(); realiserplafond();

Attributs (propriétés des objets) Toiture - comm ande rmateriaux() + couvrir() A ppartem ent Cuis ine Mais on - hom e : Appartem ent - lebas : SouS ol # letoit : T oiture + cons truire() - co mm anderma terieu x() - ba tirm urs () - realise rplafon d() + am enager() + const ruire() SousSol - co mm anderma teriau x() - co ulerfouilles() - ba tirm urs () - co ulerpla ncher() + am enager() + const ruire() Laverie S alledeb ains Cham bre Garage - comm ande rm ateriaux() - amen ager() + cons truire()

Visibilité des attributs // Source file: Maison.java Maison - home : Appartement - lebas : SouSol # letoit : Toiture + Maison() public class Maison { private Appartement home; private SouSol lebas; protected Toiture letoit; 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 Variable de classe Maison - home : Appartement - lebas : SouSol # letoit : Toiture $ nbremaisons : int - home - lebas # letoit cheztoi:maison - home - lebas # letoit Variables d instance + Maison() :Maison - home - lebas # letoit chezmoi.letoit:toiture

Constructeur d objet Main - $ chezmoi : Maison Crée> chezmoi Maison - home : Appartement - lebas : SouSol # letoit : Toiture $ nbremaisons : int + $ main(string[]) + Maison() public class Main{ private static Maison chezmoi; {//variable de classe //programme principal public static void main(string[] args) {//méthode de classe chezmoi= new Maison();

Interdit! Main - chezmoi : Maison Crée> chezmoi Maison - home : Appartement - lebas : SouSol # letoit : Toiture $ nbremaisons : int + $ main(string[]) + Maison() public class Main{ private Maison chezmoi; //variable d'instance public static void main(string[] args) {//méthode de classe chezmoi= new Maison(); interdit!!!!!!

Variables locales Main Crée> chezmoi Maison - home : Appartement - lebas : SouSol # letoit : Toiture $ nbremaisons : int + $ main(string[]) + Maison() public class Main{ public static void main(string[] args) { Maison chezmoi; //variable locale chezmoi= new Maison();

Méthode statique et d'instance Main - chezmoi : Maison Crée> chezmoi Maison - home : Appartement - lebas : SouSol # letoit : Toiture $ nbremaisons : int + $ main(string[]) + Maison() public class Main{ private Maison chezmoi; //variable d'instance public static void main(string[] args) {//méthode de classe new Main().leMain(args); public void lemain(string[] args) {//méthode d'instance chezmoi= new Maison();

Appel des méthodes d instance // Source file: Maison.java Maison - home : Appartement - lebas : SouSol # letoit : Toiture $ nbremaisons : int = 0 + Maison() public class Maison { private Appartement home; private SouSol lebas; protected Toiture letoit; static int nbremaisons=0; public Maison() { Maison.nbreMaisons++; lebas= new SousSol(); home= new Appartement(); letoit= new Toiture(); lebas.amenager(); home.amenager(); letoit.couvrir();

Héritage A ppartem ent + amenager() Piece # dimension : Dimension + surface() Cuis ine S alledeb ains Cham bre SousSol Laverie - commandermateriaux() - coulerfouilles() - batirmurs() - coulerplancher() + amenager() Garage - commandermateriaux() + amenager()

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 Piece # dimension : Dimensions + surface() : int + ge tdimens ion() : D imensions + setdimensions(dimensions) Dimensions + haut : int = 255 + larg : int + long : int Cuisin e SalleDeBains Cham bre Laverie Garage - commandermateriaux() + amenager()

«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{

Arbre d héritage Piece # dimension : Dimensions + n breprises : int + surface() : int + g etdimension() : Dimensions + setdim ensions(dim ensions) PieceEau + nbrepointeau : int Cuisine S alledeb ains Cham bre Laverie

spécialisation Piece # dimension : Dimensions + nbreprises : int + surface() : int + getdimension() : Dimensions + setdimensions(dimensions) + surfacelocative() : int PieceEau + nbrepointeau : int Cuisine SalleDeBains Chambre Laverie Méthode spécialisée + surfacelocative():int

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 Integer (value : int) : void Integer (s : String) : void equals (obj : Object) : boolean parseint (s : String) : int parseint (s : String, radix : int) : int System PrintStream out InputStream in PrintStream err 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 Long $ parseint (s : String) : int $ parselong (s : String) : long Float $ valueof (s : String) : Float floatvalue() : float String equals (anobject : Object) : boolean charat (index : int) : char length () : int indexof (ch : int) : int tochararray () : char[]

APIs java java drag and drop java idl java.rmi J N I jar javac appletviewer java..awt.swing java..awt image event peer java.io threads java.lang java.sql exceptions JVM instructions packages java.beans java.net java.util java.text java.security java.applet doclets jdb javadoc java.servlet