Classes abstraites, Interfaces et classes imbriquées

as
Architecture des Systèmes d’Information
Plan Classes abstraites Interface Classes/Interfaces internes
Programmation
- Classes abstraites, Interfaces et classes imbriqu´ees -
Nicolas Malandain
February 15, 2011
Classes abstraites, Interfaces et classes imbriqu´ees 1 / 21
as
Architecture des Systèmes d’Information
Plan Classes abstraites Interface Classes/Interfaces internes
1Classes abstraites
Principe
En Java
Exemple
2Interface
Principe
En Java
Exemple 1
Exemple 2
3Classes/Interfaces internes
Principes
Exemple : interne static
Exemple : interne
Classes abstraites, Interfaces et classes imbriqu´ees 2 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple
Classes abstraites
Principe
Permet la d´efinition de types incomplets
le comportement est connu mais non d´efini
(m´ethode abstraite classe abstraite)
le comportement est incomplet
(classe abstraite)
Permet de d´efinir un type commun `a plusieurs classes concr`etes
Classes abstraites, Interfaces et classes imbriqu´ees 3 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple
Classe abstraite
D´efinition
Classe consid´er´ee incompl`ete donc non instanciable
Syntaxe
abstract class ClasseAbstraite {
...
}
Classes abstraites, Interfaces et classes imbriqu´ees 4 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple
M´ethode abstraite
D´efinition
M´ethode incompl`ete : d´eclaee mais non d´efinie (pas de corps)
classe abstraite
Syntaxe
abstract class ClasseAbstraite {
abstract void methodeAbstraite(...);
}
Remarque
Toute classe h´eritant d’une classe contenant des m´ethodes abstraites est
abstraite si elle ne d´efinit pas toutes les m´ethodes abstraites
Classes abstraites, Interfaces et classes imbriqu´ees 5 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple
Figure.java
package fr.insarouen.asi.prog.cours3;
public abstract class Figure {
private static int compteurIdentifiant;
private int identifiant;
public Figure() {
identifiant=compteurIdentifiant++;
}
public abstract double surface();
public String toString() {
return getClass().getSimpleName()+"("+identifiant+") : "+surface();
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 6 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple
LeRectangle.java
package fr.insarouen.asi.prog.cours3;
public class LeRectangle extends Figure {
private double longueur, largeur;
public LeRectangle(double _longueur, double _largeur) {
longueur = _longueur;
largeur = _largeur;
}
public double surface() {
return longueur*largeur;
}
}
LeCarre.java
package fr.insarouen.asi.prog.cours3;
public class LeCarre extends LeRectangle {
public LeCarre(double cote) {
super(cote,cote);
}
}
LeCercle.java
package fr.insarouen.asi.prog.cours3;
public class LeCercle extends Figure {
private double rayon;
public LeCercle(double _rayon) {
rayon = _rayon;
}
public double surface() {
return Math.PI*rayon*rayon;
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 7 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple
ClassesAbstraites.java
package fr.insarouen.asi.prog.cours3;
import java.util.Arrays;
public class ClassesAbstraites {
public static void main(String[] args) {
Figure[] figures={ new LeCarre(20), new LeRectangle(15,10),
new LeCercle(10)};
System.out.println(Arrays.toString(figures));
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 8 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple 1 Exemple 2
Interface
M´etaphore
“Les interfaces sont un peu comme les d´ecorations des scouts. Lorsqu’un
scout a appris `a construire une cabane, il peut se promener avec une
petite d´ecoration sur l’une de ses manches. Cela indique `a tout le monde
: je sais comment construire une cabane”
“Java par la pratique”(O’Reilly) P. Niemeyer & J. Peck.
Principe
Une interface est quasi ´equivalente `a une “classe abstraite pure”
Son utilisation peut ˆetre vue comme un “h´eritage comportementale”
Elle permet la d´eclaration de comportements identiques dans des
arbres de classes diff´erents
Classes abstraites, Interfaces et classes imbriqu´ees 9 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple 1 Exemple 2
Propri´et´es :
les attributs sont public static final (constantes)
les m´ethodes sont toutes abstract public
les interfaces acceptent l’h´eritage multiple entre elles
une seule interface public par fichier (idem class)
non instanciable (ce n’est pas une classe !)
Syntaxe
D´eclaration
interface NomInterface {
// attributs (par d´efaut public, static, final)
// m´ethodes (par d´efaut abstract, public)
}
Utilisation
class LaClasse implements NomInterface1, ... {
}
Classes abstraites, Interfaces et classes imbriqu´ees 10 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple 1 Exemple 2
Rotation.java
package fr.insarouen.asi.prog.cours3;
public interface Rotation {
void tourner(int px, int py, int angle);
}
Translation.java
package fr.insarouen.asi.prog.cours3;
public interface Translation {
void translater(int vx, int vy);
}
Transformation.java
package fr.insarouen.asi.prog.cours3;
public interface Transformation extends Rotation, Translation {
}
Toute classe peut maintenant impl´ementer une ou plusieurs de ces
interfaces
Classes abstraites, Interfaces et classes imbriqu´ees 11 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple 1 Exemple 2
ClassesAbstraitesInterfaces.java
package fr.insarouen.asi.prog.cours3;
import java.util.Arrays;
public class ClassesAbstraitesInterfaces {
public static void main(String[] args) {
Figure[] figures={ new LeCarre(20), new LeRectangle(15,10), new LeCercle(10)};
Ordre.trier(figures);
System.out.println(Arrays.toString(figures));
Voiture[] voitures={ new Voiture("1234SZ76",6), new Voiture("5678AZ27",10),
new Voiture("910XE61",2)};
Ordre.trier(voitures);
System.out.println(Arrays.toString(voitures));
}
}
InterfaceComparable
package fr.insarouen.asi.prog.cours3;
public interface InterfaceComparable {
int compareA(InterfaceComparable comparable);
}
Classes abstraites, Interfaces et classes imbriqu´ees 12 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple 1 Exemple 2
Ordre.java
package fr.insarouen.asi.prog.cours3;
public class Ordre {
private static void echanger(InterfaceComparable[] tableau, int a, int b) {
InterfaceComparable tmp;
tmp=tableau[a];
tableau[a]=tableau[b];
tableau[b]=tmp;
}
private static int trouverIndiceDuMax(InterfaceComparable[] tableau, int debut, int fin) {
if (debut<0 || fin>=tableau.length || debut>fin)
return -1;
int indiceDuMax=debut;
for(int i=debut; i<=fin; i++)
if (tableau[indiceDuMax].compareA(tableau[i])<0)
indiceDuMax = i;
return indiceDuMax;
}
public static void trier(InterfaceComparable[] tableau) {
if (tableau.length<2)
return;
int indiceDuMax;
for(int dernierePlace=tableau.length-1; dernierePlace>0; dernierePlace--) {
indiceDuMax=trouverIndiceDuMax(tableau,0,dernierePlace);
echanger(tableau,indiceDuMax,dernierePlace);
}
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 13 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple 1 Exemple 2
reprise de Figure.java
package fr.insarouen.asi.prog.cours3;
public abstract class Figure implements InterfaceComparable {
...
public abstract double surface();
public int compareA(InterfaceComparable c) {
if (c instanceof Figure)
if (surface() > ((Figure)c).surface())
return 1;
else
if (surface() < ((Figure)c).surface())
return -1;
return 0;
}
...
}
Classes abstraites, Interfaces et classes imbriqu´ees 14 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principe En Java Exemple 1 Exemple 2
Voiture.java
package fr.insarouen.asi.prog.cours3;
public class Voiture implements InterfaceComparable {
private String immatriculation;
private int puissance;
public Voiture(String _immatriculation, int _puissance) {
immatriculation = _immatriculation; puissance = _puissance;
}
public int getPuissance() {
return puissance;
}
public String getImmatriculation() {
return immatriculation;
}
public int compareA(InterfaceComparable c) {
if (c instanceof Voiture)
if (puissance > ((Voiture)c).getPuissance())
return 1;
else
if (puissance < ((Voiture)c).getPuissance())
return -1;
return 0;
}
public String toString() {
return immatriculation+"("+puissance+")";
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 15 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
Description
Principe
D´eclaration d’une classe dans une autre
Les classes internes permettent de renforcer les relations entre deux
classes.
Par exemple : un curseur texte n’a de sens que dans un composant
texte (Tutoriel Java de SUN, http: // java. sun. com )
Classes abstraites, Interfaces et classes imbriqu´ees 16 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
Quatre types de classes internes. . .
classe interne (inner class)
Une instance n’existe que dans une instance englobante. Tous les
membres de classe englobante lui sont accessibles (r´ef´erences : this et
ClasseEnglobante.this).
Une interface ne peut ˆetre de ce type car non instanciable
classe interne static (nested class)
Elle acc`ede aux membres statiques de la classe englobante. Elle ne
poss`ede pas de r´ef´erence sur l’objet englobant l’ayant cr´e
Classes abstraites, Interfaces et classes imbriqu´ees 17 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
classe locale
Ce type de classe est d´eclae dans une m´ethode et a le mˆeme
comportement qu’une classe interne. Sa port´ee est locale au bloc, elle
peut acc´eder aux membres de la classe englobante et uniquement aux
variables locales final du bloc.
classe anonyme
Il s’agit d’une classe locale ne portant pas de nom (h´erite d’une classe
abstraite ou non, ou impl´emente une interface). Elle est instanci´ee au
moment de sa d´eclaration.
Elle est utilis´ee lors d’un besoin unique.
Classes abstraites, Interfaces et classes imbriqu´ees 18 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
ListeChainee.java
package fr.insarouen.asi.prog.cours3;
public class ListeChainee {
private Noeud tete;
public static class Noeud {
private Object valeur;
private Noeud suivant;
public Noeud(Object valeur) {
this .valeur = valeur;
}
public Noeud(Object valeur, Noeud suivant) {
this .valeur = valeur;
this .suivant = suivant;
}
public void setValeur(Object valeur) {
this .valeur = valeur;
}
public Object getValeur() {
return valeur;
}
public Noeud getNoeudSuivant() {
return suivant;
}
public void setNoeudSuivant(Noeud suivant) {
this .suivant = suivant;
}
}
public ListeChainee() {
}
public ListeChainee(Object valeur) {
tete = new Noeud(valeur);
}
public Noeud getTete() {
return tete;
}
public void ajouterEnTete(Object valeur) {
tete = new Noeud(valeur, tete);
}
public Object retirerTete() {
Object obj=tete.getValeur();
tete=tete.getNoeudSuivant();
return obj;
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("ListeChainee : ");
Noeud courant = tete;
while (courant != null) {
sb.append(courant.getValeur());
sb.append(" / ");
courant = courant.getNoeudSuivant();
}
return sb.toString();
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 19 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
Jeu.java ...
package fr.insarouen.asi.prog.cours3;
public class Jeu {
private Plateau plateau;
private Personnage[] personnages;
private int nbPersonnages;
private interface Joueur {
public void jouer();
}
public abstract class Personnage {
protected int pv;
protected int vitesse;
public Personnage(int pv, int vitesse) {
this .pv = pv;
this .vitesse = vitesse;
}
public void setVitesse(int vitesse) {
this .vitesse = vitesse;
}
public int getVitesse() {
return vitesse;
}
public void setPointVie(int pv) {
this .pv = pv;
}
public int getPointVie() {
return pv;
}
}
private class Monstre extends Personnage
implements Joueur {
public Monstre() {
super(5, 10);
}
public void jouer() {
System.out.println("Gnark gnark gnark !!!");
}
}
private class Homme extends Personnage
implements Joueur {
public Homme() {
super(10, 4);
}
public void setVitesse(int vitesse) {
if (plateau.auBord(this))
super.setVitesse(0);
else
super.setVitesse(vitesse);
}
public void jouer() {
System.out.println("Je me prom`ene");
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 20 / 21
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !