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