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