IN101
Cours 5
I. Types primitifs
I.1 Rappel: type simple, une seule valeur et non une référence, plus efficace.
Pas de classe ==> pas de méthodes.
Donc a = b; sauvegarde vraiment.
Donc passage de paramètre en entrée seulement.
I.2 Types vus pour l'instant :
boolean (Boolean), int (Integer), double (Double). Pas de string !
II. Abstraction
II.1 Classe abstraite
II.1.a DBShape s = new DBShape(); s.draw(); --> drawSpec() "bidon"
II.1.b interdire l'instanciation, mais laisser en commun ce qui doit l'être;
classe prévue pour être dérivée
II.1.c constructeurs : utiles pour initialiser les attributs communs;
appelés par super(...);
II.1.d syntaxe: abstract (public abstract class NomClasse ...)
II.2 Méthode abstraite
II.2.a interdire l'exécution ==> pas de corps, évite les corps "bidon" (drawSpec())
II.2.b redéfinition obligatoire dans toutes les sous-classes (sinon elles seront abstraites)
==> ne concerne pas les constructeurs, private interdit, @Override .
Garantit une cohérence, un contrat avec les sous-classes, y compris les futures
==> extensibilité.
II.2.c syntaxe: abstract et ; au lieu de {}
(public abstract void nomMethode() ;)
II.2.d Si dans une classe il existe une méthode abstraite (non redéfinie),
cette classe est abstraite (==> abstract) car
objet.methode() doit toujours pouvoir marcher si objet a pu être instancié
II.2.e draw() peut quand-même appeler drawSpec() grâce à la liaison dynamique
==> utilisation de classes non encore écrites
II.2.f Il est évident qu'une classe non abstraite peut hériter d'une classe abstraite,
mais il est aussi possible qu'une classe abstraite hérite d'une classe non abstraite.
II.3 Interface (pour compenser l'absence d'héritage multiple)
II.3.a et si 100% des méthodes étaient abstraites ? et aucune variable d'instance ?
II.3.b 100% des méthodes public abstract ==> 2 mots inutiles, et pas de constructeurs
II.3.c 100% des attributs public static final ==> 3 mots inutiles
II.3.d 100% des méthodes à redéfinir ==> pas de @Override
II.3.e syntaxe: interface au lieu de abstract class ,
implements au lieu de extends ,
une classe peut implémenter plusieurs interfaces
(séparées par des virgules)
==> implémenter toutes les méthodes de toutes les interfaces !
II.3.f véritable type ==> l'opérateur instanceof fonctionne;
comme pour une super-classe (abstraite ou non) :
réfObjet instanceof ClasseOuInterface
II.3.g exemple: Comparable ==> compareTo() -
Circle extends DBShape -
DBShape implements Comparable, Drawable -
Rosace implements Drawable
II.3.h utilisation: Drawable obj = new Circle(); obj.draw();
plutôt que Circle obj = new Circle();
II.3.i héritage d'interfaces: si interface SousI extends SuperI ,
on devra implémenter toutes les méthodes de SousI et SuperI
III. Exceptions
III.1 Résumé de cours
(essayer la classe de démonstration)
III.2 Hiérarchie des exceptions du paquetage java.lang
III.3 Tutoriel (en anglais)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - non vu en cours :
IV. Développer sans BlueJ
IV.1 Édition de texte (nedit, emacs, notepad, ...)
nedit UneClasse.java &
IV.2 Compilation
javac UneClasse.java ou javac *.java
IV.3 Exécution
java UneClasse ou java UneClasse mot1 mot2
IV.4 Méthode indispensable : main
IV.5 Signature obligatoire : public static void main( String[] args )
....................... ^^3^^^ ^^4^^^ ^2^^ ^^1^^ ^^^5^^^^ ^6^^
- 1: le nom est imposé (veut dire "principal")
- 2: car c'est une procédure (qui ne retourne rien)
- 3: car elle est appelée en dehors de la classe (par le système d'exploitation)
- 4: car il serait ennuyeux que le système d'exploitation doive d'abord créer un
objet avant de pouvoir appeler cette procédure
- 5: un et un seul paramètre obligatoire (aucun=interdit, 2 ou plus=interdit)
et forcément du type tableau de String
- 6: seule liberté : le choix du nom du paramètre (mais tout le monde utilise args !)
IV.6 Corps
S'il est vide, le programme ne fera rien.
S'il se termine par System.exit( valeur ); ,
la valeur sera retournée au système d'exploitation comme code d'erreur.
IV.7 Documentation
publique (pour les utilisateurs de ce projet) :
javadoc *.java -author -version -drépertoire
privée (pour les programmeurs de ce projet) :
javadoc *.java -author -version -drépertoire -private -linksource
Dernière mise à jour :