Programmation impérative en Python 3 — Cours 1. Variables ...
Cours Programmation
description
Transcript of Cours Programmation
-
1JavaLicence Professionnelle 2009-2010
Cours 7 : Classes et mthodes abstraites
-
2Java
Classes et mthodes abstraites- Le mcanisme des classes abstraites permet de
dfinir des comportements (mthodes) qui devront tre implments dans les classes filles, mais sans implmenter ces comportements (cest--dire sans crire de code pour cette mthode)
- Ainsi, on a l'assurance que les classes filles respecteront le contrat dfini par la classe mre abstraite
- Ce contrat est une interface de programmation
-
3Java
Classes et mthodes abstraites- Exemple
Soit la classe 'Humain', partir de laquelle drivent la classe 'Homme' et la classe 'Femme
En toute logique, 'Homme' et 'Femme' sont instanciables (les objets crs ont une existence en soi), mais la classe 'Humain' sera dclare abstraite car un objet 'Humain' n'existe pas en tant que tel, puisqu'il manque l'information sur le sexe
Ici, la classe 'Humain' servira implmenter des mthodes qui seront utilises la fois pour 'Homme' et pour 'Femme'
-
4JavaClasses et mthodes abstraites
Exemplepublic abstract class
AnimalCompagnie{private String nom;public AnimalCompagnie(String n){
nom = n;}public abstract void parler();
}
public class Chien extendsAnimalCompagnie{public Chien(String s) {
super(s);}
public void parler() {System.out.println("ouah ouah");
}}
public class Chat extendsAnimalCompagnie{public Chat(String s) {
super(s);}
public void parler() {System.out.println("miaou");
}}
-
5JavaClasses et mthodes abstraites
Exemple (suite)public class TestAnimal{
public static void main (String args[]){Chien f = new Chien("Fifi");Chat g = new Chat("Chloe");//AnimalCompagnie a = new
//AnimalCompagnie("bob");f.parler();g.parler();AnimalCompagnie [] a = new
AnimalCompagnie [2];a[0] = f;a[1] = g;for(int i=0; i
-
6JavaClasses et mthodes abstraites
Quelques rgles1. Ds quune classe comporte une mthode abstraite, elle est
abstraite, et ce mme si on nindique pas le mot abstractclass A{public abstract void f(); //ok}
A est considre abstraite et une expression telle que new A() sera rejete
2. Une mthode abstraite doit obligatoirement tre dclare public, ce qui est logique car sa vocation est dtre redfinie dans une classe drive
3. Dans lentte dune mthode abstraite, il faut mentionner les nom des arguments muetsclass A{public abstract void g(int); //erreur : nom dargument obligatoire}
-
7JavaClasses et mthodes abstraites
Quelques rgles (suite)4. Une classe drive dune classe abstraite na pas besoin de
redfinir toutes les mthodes abstraite de sa classe
abstract class A{public abstract void f1(); public abstract void f2(char c); }
abstract class B extends A //abstract non obligatoire ici mais conseill{public abstract void f1() {}; //dfinition de f1 //pas de dfinition de f2}
5. Une classe drive dune classe non abstraite peut tre dclare abstraite et/ou contenir des mthodes abstraites
-
8JavaClasses et mthodes abstraites
Intrt des classes abstraites- Le recours aux classes abstraites facilite la
conception oriente objet On peut placer dans une classe abstraite toutes les
fonctionnalits dont on souhaite disposer pour toutes ses descendances Soit sous forme dune implmentation complte de
mthodes (non abstraites) et de champs (privs ou non) lorsquils sont communs toutes ses descendances
Soit sous forme dinterface de mthodes abstraites dont on est alors sr quelles existeront dans toute classe drive instanciable
-
9TD 7 nonc
- Lobjectif est de crer le concept forme gomtrique et une forme doit retourner sa surface, son primtre et sa couleur
- On doit pouvoir aussi modifier sa couleur
- Dfinir des implmentations pour des objets rectangle, carre et cercle
-
10
Exemples de classes abstraites
Classe Object- En Java, la racine de larbre dhritage des
classes est la classe java.lang.Object Toutes les classes hritent de la classe Object
- La classe Object na pas de variable dinstance ni de variable de classe
- La classe Object fournit plusieurs mthodes qui sont hrites par toutes les classes sans exception
les plus couramment utilises sont les mthodes toString() et equals()
-
11
Exemples de classes abstraites
Classe Object mthode toString()- public String toString()
renvoie une description de lobjet sous la forme dune chane de caractres
Elle est utile pendant la mise au point des programmes pour faire afficher ltat dun objet
La description doit donc tre concise, mais prcise
-
12
Exemples de classes abstraites Mthode toString() de la classe Object
- Sans redfinition, elle renvoie le nom de la classe, suivi de @ et de la valeur de la mthode hashcode (autre mthode de Object)
- Exemplepublic class TesttoString {
public static void main(String[] args) {Object o = new Object(); o.toString(); System.out.println(o);
}}Renvoie : java.lang.Object@3e25a5
-
13
Exemples de classes abstraites
Autre Exemplepublic class Test {public static void main (String args[]){ Point p= new Point(3,4) ;
System.out.println(p);}
}
- Affiche : Point@19821f do il est utile de la redfinir
-
14
Exemples de classes abstraites Mthode toString() de la classe Object
- Si p1 est un objet, System.out.println(p1) (ou System.out.print(p1)) affiche la chane de caractres p1.toString() o toString() est la mthode de la classe de p1
- Do lide de profiter pour associer un affichage particulier lobjet pendant la mise au point du programme
- Exempleclass Point2{
public Point2(int x, int y){ this.x = x ; this.y = y ;}
public String toString(){
return "Point : " + x + ", " + y ;}int x, y ;
}}
}
-
15
Exemples de classes abstraitespublic class Test {public static void main (String args[]){ Point2 p= new Point2(3,4) ;
System.out.println(p); //affiche p avec les valeurs actuelles de x et de y
}}
-
Exemple : Vehicule.javaclass Vehicule {
private boolean moteur;private int vitesseMax;
public Vehicule() {moteur = false;vitesseMax = 0;
}
public Vehicule(boolean m,int v){moteur = m;vitesseMax = v;
}
public String toString(){String S="\nvehicule ";if (moteur)S=S+"a moteur, ";
elseS=S+"sans moteur, ";
S=S+"dont la vitesse maximale est de "+vitesseMax+"km/h";return S;
}
public void Vmax(){System.out.println("\nvitesse max : "+vitesseMax+" km/h\n");
}
public boolean getMoteur () {return moteur;
}
public int getVitesseMax() {return vitesseMax;
}
public static void main(String[] args){Vehicule v1=new Vehicule(true,121);System.out.println(v1);v1.Vmax();
}}
-
17
Exemples de classes abstraites
Classe String- Cest un type dont des objets sont figs- Et dont il nest pas possible de modifier le
contenu la classe String sera tout simplement
instancie
-
18
Exemples de classes abstraites Classes String vs StringBuffer
- La classe String correspond aux chanes de caractres Toute chane littrale telle que "Bonjour" est implante
comme instance de cette classe - Les chanes ont la proprit d'tre constantes :
Une fois initialis un objet de ce type ne peut tre modifi- La classe StringBuffer implante des chanes de caractres
modifiables et de taille dynamique Automatiquement redimensionne en fonction des besoins
- Cette classe est en particulier utilise pour implanter la concatnation de chanes (oprateur +)
-
19
Exemples de classes abstraites Explication
- En fait les String sont effectivement non modifiables Cela signifie que :
String s1 = "toto"; s1 = s1 + "encore toto";
- instancie une chane s1 avec toto, puis instancie une autre chane qui est la concatnation de s1 et de "encore toto"
- Cette dernire chane tant ensuite affecte s1- Donc si on fait beaucoup de concatnations, on instancie
beaucoup de chanes et a prend du temps - D'ou le StringBuffer qui lui est modifiable (on peut ajouter
des caractres un StringBuffer existant sans en recrer un autre)
-
20
Exemples de classes abstraites
Explication (suite 1)- Dans ce cas :
StringBuffer sb = "toto"; sb.append("encore toto"); String s1=sb.toString();
- produira le mme rsultat que prcdemment mais diminuera le nombre d'instanciations
- Ce qui est d'autant plus vrai que l'on effectue beaucoup de concatnations
-
21
Exemples de classes abstraites Explication (suite 2)
- Ensuite, un des intrts des String est que si on a String s = "toto";
String s2 = s; - et plus loin
s = "toto2"; - on est sr que s2 garde la valeur "toto" puisque
s1 rfrence une toute nouvelle chane- Cela signifie que lorsque l'on fait des copies
d'objets (par exemple), les chanes n'ont pas besoin dtre recopies en profondeur
- Une affectation suffit
-
public class StringTest {public static void main (String args [] ) {
String prenom;prenom = "hazel"; //creation dun objetprenom = "sylvain"; // nouvel objetprenom = new String("hazel"); // nouvel objetString prenom2 = prenom;System.out.println(prenom2); // hazelSystem.out.println(prenom.length()); // 5System.out.println(prenom.charAt(1)); // aString nom = "everett";System.out.println(nom.compareTo(prenom)); //
-
Concernant les temps// Construction d'un tableau d'entiersint[] tab = new int[1000];for (int i = 0; i < tab.length; i++){
tab[i] = i + 1;}
// Avec String : prend en moyenne 47587891 nanosecondes String s = "";for (int i = 0; i < tab.length; i++){
s += tab[i] + ", ";}
// Avec StringBuffer : prend en moyenne 1234793 nanosecondes. On gagne plus qu'un facteur 10
StringBuffer buffer = new StringBuffer();for (int i = 0; i < tab.length; i++){
buffer.append (tab[i]).append (", ");}
-
24
Exemples de classes abstraites
Classe StringBuffer : InsertionStringBuffer buff = new StringBuffer();buff.append ( "Hell" );buff.append ( " World " );buff.append ('!');buff.insert (4, 'o');System .out.println (buff);// Affiche Hello World !
-
25
Exemples de classes abstraites
Classe StringBuffer : SuppressionStringBuffer buff = new StringBuffer ("Hellllo
World !!");buff.delete (2, 4);buff.deleteCharAt (12);System.out.println (buff);// Affiche Hello World !
-
public class StringBufferTest {public static void main (String args [] ) {
StringBuffer prenom;prenom = new StringBuffer("hazel");StringBuffer prenom2 = prenom;System.out.println(prenom2); // hazelSystem.out.println(prenom.length()); // 5System.out.println(prenom.charAt(1)); // aSystem.out.println(prenom.append(" everett")); // hazel everettSystem.out.println(prenom); // hazel everettSystem.out.println(prenom.insert(5," jane")); // hazel jane everettSystem.out.println(prenom2); //hazel jane everett
}}
-
27
Exemples de classes abstraites Classe StringTokenizer
- La classe StringTokenizer fait partie du package java.util- Elle permet de dcomposer une chane de caractres en une suite
de "mots" spars par des "dlimiteurs" - Elle Fournit 3 Constructeurs
StringTokenizer(String str, String delim, booleanreturnTokens) str est la chane analyser delim est une chane contenant les dlimiteurs reconnus : \t \n \r \f returnTokens indique si les dlimiteurs doivent tre renvoys comme
parties de la chane StringTokenizer(String str, String delim)
Les paramtres dfinissent la chane analyser et les dlimiteurs. Par dfaut, ceux-ci ne sont pas renvoys comme lments de la chane
StringTokenizer(String str) str est la chane analyser; les dlimiteurs sont les caractres espace,
tabulation, retour chariot et changement de ligne
-
28
Exemples de classes abstraites Utilisation
- La classe StringTokenizer fournit deux mthodes importantes qui permettent d'obtenir les diffrentes parties d'une chane l'une aprs l'autre :
hasMoreTokens indique s'il reste des lments extraire nextToken renvoie l'lment suivant
- Exemple d'utilisation :StringTokenizer st = new StringTokenizer("this is a test"); while (st.hasMoreTokens()) {
System.out.println(st.nextToken()); }
- Ce code fournit la sortie suivante : thisisa test
-
import java.util.*;public class StringTokenTest {
public static void main(String args[]) {String s = "ceci est un test";StringTokenizer st = new StringTokenizer(s);System.out.println(st.countTokens());while (st.hasMoreTokens()) {
System.out.println(st.nextToken());}st = new StringTokenizer(s,"t");while (st.hasMoreTokens()) {
System.out.println(st.nextToken());}
}}
Rsultat ?
-
Rsultat ?- 4- ceci- est- un- test- ceci es- un- es
-
31
JavaClasses et mthodes abstraites
Interface- On vient de voir comment une classe abstraite permettait de
dfinir dans une classe de base des fonctionnalits communes toutes ses descendantes, tout en leur imposant de redfinir certaines mthodes
- Si lon considre une classe abstraite nimplantant aucune mthode et aucun champ (hormis des constantes), on aboutit la notion dinterface
- En effet, une interface dfinit les en-ttes dun certain nombre de mthodes ainsi que de constantes
-
32
JavaInterface
Diffrences entre interfaces et classes abstraites :
Une interface nimplmente aucune mthode Une classe abstraite peut implmenter plusieurs
interfaces, mais na quune super classe (on ne peut pas faire de new), alors quune interface peut driver de plusieurs autres interfaces
Des classes non lies hirarchiquement peuvent implmenter la mme interface
On pourra utiliser des variables de type interface
-
33
JavaInterface
En rsum- Une interface est une sorte de classe abstraite qui ne possde
que des champs static final (constantes) et des mthodes abstraites
- Une classe implante une interface elle fournit les implantations de toutes les mthodes dclares dans
linterface- Toutes les mthodes sont public abstract et non static- Tous les champs sont public static final- Une interface peut tre public (partout) ou sans qualifier (mme
package)- Une classe qui implante une interface peut dclarer ses propres
attributs et mthodes aussi- Utilise la place dune classe abstraite quand il ny a aucune
mthode implante
-
34
JavaInterface
Dfinition dune interface- La dfinition dune interface se prsente comme celle dune
classe- On utilise seulement le mot interface la place de class
public interface I{void f(int n); //en-tte dune mthode f (public abstract facultatifs)void g(); //en-tte dune mthode g (public abstract facultatifs)
}- Dans la dfinition dune interface, on ne peut trouver que des en-
ttes de mthodes (cas des f et g) ou des constantes- Par essence, les mthodes dune interface sont abstraites et
publiques- Par contre, il nest pas ncessaire de mentionner les mots
abstract et public
-
35
JavaInterface
Implmentation dune interface- Lorsquon dfinit une classe, on peut prciser quelle implmente une
interface donne en utilisant le mot implementsclass A implents I{ //A doit dfinir les mthodes f et g}
- Une mme classe peut implmenter plusieurs interfacespublic interface I1{void f(); }public interface I2{int h(); }
class A implents I1, I2{ //A doit dfinir les mthodes f et h}
-
-
36
JavaInterface
Exempleinterface AnimalInterface{
void parler();}
public class Chat implements AnimalInterface{private String nom;public Chat(String s) {
nom = s;}public void parler() {
System.out.println("miaou");}
}
-
37
JavaInterface
public class Chien implements AnimalInterface{private String nom;public Chien(String s) {nom = s;
}public void parler() {System.out.println("ouah ouah");
}}
-
38
JavaInterface
Utilisation dune interface- On ne peut pas crer des objets de type interface- On peut dfinir des rfrences- Elles feront rfrence une instance dune classe qui implante linterface
public class TestAnimal{public static void main (String args[]){
Chien f = new Chien("Fifi");Chat g = new Chat("Chloe");//AnimalCompagnie a = new AnimalCompagnie("bob");f.parler();g.parler();AnimalInterface [] a = new AnimalInterface [2];a[0] = f;a[1] = g;for(int i=0; i
-
39
Cours-TD7 Exercice 2
- Le but de l'exercice est de crer une hirarchie de classes pourreprsenter les tudiants d'une universit. Il y a 3 types d'tudiants : ceux en Licence, ceux en Master, et ceux en Doctorat. Chaque tudiant a un nom, une adresse et un numro
- Les tudiants ont un profil. Pour les tudiants en Licence on parle de parcours. Les tudiants en Master une spcialit et lestudiants en Doctorat un directeur de recherche
1. Dfinir les classes ncessaires cette hirarchie de classes, en leurs ajoutant les membres ncessaires et les mthodes usuelles (constructeurs, toString(), get()et set() etc...).
2. crire une application qui construit un ensemble d'tudiants (utiliser la classe Lire pour que l'utilisateur puisse saisir les donnes) affiche une liste d'tudiants dans l'ordre selon le numro
Pour chaque tudiant, il faut afficher toutes les informations le concernant