Interface - Pierre Rainero

publicité
Programmation orienté objet :
Interface :
Description de contraintes imposées (pour l’essentiel) sous forme de signatures formelles de
méthodes :
- Résulte du processus de conception
- Analogie limitée avec les prototypes (langage C)
- Description via le mot clé interface
- Application via le mot clé implements
- Lien à la charge du programmeur
Règles de structuration :
- Fichier source avec définition complète de l’interface
- Une interface est un bloc ({---})
- Extension fichier source .java
- La compilation génère un fichier .class
- Règles d’accès et de visibilité identiques à celles des classes
- Règles syntaxiques identiques à celles des classes
Déclaration de l’interface (dans un fichier java à part) Implémentation de l’interface dans une classe
public interface Figure {
public class Rectangle implements Figure {
public double perimetre ();
…
public double surface ();
public double perimetre () {…}
}
public double surface () {…}
…
}
Il s’agit d’une partie du modèle formel des classes qui l’implémentent. Une interface spécifie
un protocole pour ses classes utilisatrices.
 Le protocole est défini par la signature de l’ensemble des méthodes de l’interface et/ou
par un ensemble de constantes applicatives.
Une interface peut avoir des attributs de classe (qui nécessiteront la spécification final,
obligatoire pour des constantes) mais une interface ne peut pas avoir d’attribut d’instance.
Elle peut également avoir des méthodes de classes et/ou d’instances mais elles devront être
abstraites.
Il est impossible qu’elle possède des méthodes privés ou protégées, elle n’est pas pour autant
forcément publique, elle peut être « amicale ».
Une interface ne permet pas d’implémenter une interface, elle est complétement abstraite.
Elle peut cependant s’étendre à une autre interface, on obtient alors la réunion de méthode
abstraites héritées et des méthodes abstraites locales.
Toutes les méthodes sont à surcharger, on ne peut donc pas utiliser le spécificateur final pour
ses méthodes, ni pour elle-même puisqu’elle est obligatoirement implémentable.
Elle peut définir des interfaces internes :
Déclaration
Définition
Interface X { interface Y { voidf();} }
public classZ implements X.Y {
public void f() { }
}
Une interface ne possède pas de constructeurs et peut définir une classe interne à condition
d’utiliser le spécificateur static.
Package :
Il s’agit d’une instruction à placer au début de chaque fichier définissant une classe du
package, suivie du nom du package :
- Permet à l’utilisateur de définir ses propres packages
- L’instruction définit l’identificateur du package cible
- A placer en tête des fichiers sources
- Propriétés identiques à celles des packages prédéfinis
Exemple : package exemp;
 Production des fichiers .class dans le répertoire exemp dédié à ce package
 Chemin d’accès au répertoire amont de exemp à décrire dans la variable
d’environnement CLASSPATH
Spécificateur :
public class nomClasse {…}
Pas de spécificateur, la classe n’est accessible que par les
autres classes du même package (et des sous packages)
La classe est accessible partout
(même à l’extérieur du package)
class nomClasse {…}
Importation statique :
Possibilité d’éviter de préfixer systématiquement les appels des méthodes de classe par
l’identificateur de la classe support.
Exemple : import static java.lang.System.*;
 Permet d’écrire « out.println » au lieu de « System.out.println »
Signature formelle extensible :
La signature formelle d’une méthode peut spécifier un nombre variable de paramètres.
Usage de la meta description … (nommée ellipse)
Exemple :
public static float moyenne (int ... notes) {
float resultat= 0.0f;
for (int i=0; i < notes.length ; i++) resultat += notes[i];
return resultat / notes.length;
}
public static void main(String[] args) {
System.out.println ("M1= " + moyenne (12, 8, 13));
System.out.println ("M2= " + moyenne (12, 8, 13, 10, 17));
}
Enumération :
Un type énuméré est un type dont la valeur fait partie d’un jeu de constantes prédéfinies.
Description d’une liste de constantes par une instruction spécifique (enum)
Pas de conversion possible avec le type int.
Le ; est facultatif, il faut traiter l’énumération
enum Ressource {sel, orge, the, jade, or};
comme une classe, seule dans un fichier .java
Instruction prinft
Classe java.util.Scanner
Permet au programmeur de maîtriser la mise en Permet l’analyse lexicale (depuis un fichier par
forme du flux de sortie (méthode de la classe exemple).
java.io.PrintStream).
Exemple : Scanner s=new Scanner(System.in);
Exemple : double x= 1./3;
String c=s.next(); Il s’agit du clavier
System.out.printf(" %5.2f ", x);
if (s.hasNextInt())
int v=s.nextInt();
s.close();
Ne pas oublier de fermer
Téléchargement