Cours sur Java ------- I- Généralités  Tout programme Se fonde sur l’utilisati

Cours sur Java ------- I- Généralités  Tout programme Se fonde sur l’utilisation de classes  Une classe est constituée d’un ensemble d’attributs et d’un ensemble de méthodes  Un programme construit des instances de classe (objet)  On peut ranger les classes selon des ensembles : les paquetages. Il y a des règles de visibilité (public, protected, private…) entre les classes et entre les attributs et les méthodes qu’elles contiennent. Ces règles dépendent de l’appartenance ou non à un même paquetage. Il existe de nombreux paquetages dans le JDK (Java Development Kit) Vous pourrez en trouver un descriptif dans la documentation fournie en ligne par Sun Microsystems sur le site : http://java.sun.com/docs Exemples : - Le paquetage java.lang contient les classes les plus centrales du langage. Il contient la classe Object qui est la super-classe ultime de toutes les classes. Une classe qui ne déclare pas d’héritage, hérite par défaut de la classe Object. - Le paquetage java.util définit un certain nombre de classes utiles et est un complément de java.lang. - Le paquetage java.awt (awt pour Abstract Window Toolkit) contient des classes pour fabriquer des interfaces graphiques. - Le paquetage java.applet est utile pour faire des applets, applications utilisables à travers le Web. - Le paquetage java.io contient les classes nécessaires aux entrées-sorties. - Le paquetage java.net fournit une infrastructure pour la programmation réseau. Fichiers sources .java (obligatoirement) peuvent contenir plusieurs classes mais au max 1 seule sera publique. S’il y en une : même nom que le fichier. Compilation : .java => .class : bytecode interprétable par n’importe qu’elle machine virtuelle java (JVM) se conforment à la norme (mais attention à la version de Java). Il existe des JVM pour à peu près tous les types de machines et tous les systèmes d’exploitation => un programme Java est portable sans recompilation. II- Premiers programmes HelloWorld en Java : class HelloWorld { public static void main(String arg[]) { System.out.println("Bonjour le monde"); } } main est toujours définie ainsi. Elle doit être définie dans une classe. public static : méthode publique de classe (on n’a pas besoin d’objet pour l’appeler). String : classe gérant les chaînes de caractères du paquetage java.lang L'argument de la méthode main est un tableau de chaînes de caractères. Les chaînes contenues dans ce tableau sont les arguments envoyés par la ligne de commande, le nom du programme ne faisant pas partie des arguments (à l’inverse du langage C). System : classe de java.lang qui fournit des fonctionnalités système indépendantes de la plate- forme d’exécution. out : flux de sortie standard. Conventions de nommage : classes Mots en majuscules, méthodes et attributs mots en majuscules sauf le premier qui est toujours en minuscule. Deuxième programme : class Somme { public static void main(String arg[]) { int i, somme = 0; for(i=1 ; i<=100 ; i++) somme += i ; // affiche le texte suivi de la valeur de la variable somme System.out.println("Somme : "+somme) ; } } Similitude avec le C : Mêmes structures de contrôles ; Mêmes types de bases (à part boolean) ; Mêmes opérateurs de comparaison et d’affectation. III- Définition et utilisation d’une classe class Ecriture { /*chaine est un attribut de la classe Ecriture, qui doit contenir une reference vers une instance de la classe String*/ String chaine = "Encore une fois "; //methode de la classe Ecriture void ecrire(String autreChaine) { System.out.print(chaine); System.out.println(autreChaine); } } La classe Ecriture a : - un attribut (notion proche de variable) : chaine (String) - une méthode (notion proche de fonction) : ecrire 2 catégories de variables : de type primitif (ex. int) cf exemple précédent. de type référence destinées à recevoir des adresses d’objets. Attention : une variable de type référence est similaire à un pointeur en C mais on ne peut pas faire d’arithmétique (par exemple incrémenter un pointeur pour parcourir un tableau) avec les références. Les types primitifs sont : le type booléen boolean, qui n'est pas un type entier et qui peut prendre les valeurs false et true le type caractère char (valeur sur 16 bits pour gérer les caractères asiatiques, arabes…), les types entiers : byte (8 bits), short (16 bits), int (32 bits) et long (64 bits) les types réels en virgule flottante : float (32 bits) et double (64 bits) La valeur par défaut de toute variable ou attribut d'un type "par référence" est la valeur null. Commentaires : idem C++ (/* */ comme en C et // qui commente une ligne) + commentaires javadoc (pour génération automatique de documentation). /* commentaire sur plusieurs lignes comme en C deuxième ligne */ int i = 0 ; // commentaire sur une seule ligne – tout ce qui est derrière le // est en commentaire /** commentaire javadoc @param i est un paramètre entier @return true ou false */ int methode(int i) {…} // génère une doc similaire à ce que l’on peut trouver sur le site web de Sun. Utilisation de la classe : instanciation de la classe Ecrire : ecrivain = new Ecriture(); Création d’un nouvel objet de la classe Ecriture (allocation de mémoire pour chacun des attributs de la classe et initialisation – ici chaine). new Ecriture(); renvoie une référence qui est stockée dans la variable ecrivain. Les parenthèses qui apparaissent dans l'instanciation s'expliquent par le fait que l'on fait appel à la méthode Ecriture() de la classe Ecriture appelée le "constructeur" de la classe. Toute classe possède un constructeur. Lorsque le programmeur n'a pas mis explicitement un constructeur, comme c'est le cas ici, le compilateur en ajoute automatiquement un. Dans le cas de la classe Ecriture (pas de constructeur hérité ; cette notion sera développée ultérieurement), le constructeur ajouté est une méthode qui ne fait rien. Lorsqu'on instancie une classe, on le fait toujours comme ici à l'aide d'un constructeur de la classe. class PourFeliciter { public static void main(String[] arg) { Ecriture ecrivain; ecrivain = new Ecriture(); ecrivain.ecrire("bravo"); ecrivain.chaine = "et pour finir "; ecrivain.ecrire("au revoir"); } } Note : Appel de méthode : variable.methode(parametres); Accès aux attributs : variable.attribut IV- Surcharge de méthodes Java autorise la surcharge de méthodes. C’est à dire qu’on peut avoir plusieurs méthodes de même nom à condition que l’ordre et le type des paramètres soient différents. Exemple : class Ecriture { String chaine = "Encore une fois "; void ecrire(String autreChaine) { System.out.print(chaine); System.out.println(autreChaine); } void ecrire(int unEntier) { System.out.print(chaine); System.out.println(unEntier); } } A l’exécution java choisira la bonne méthode en fonction des paramètres. V- Les constructeurs class Incremente { int increment; int petitPlus; Incremente(int increment, int petit) { this.increment = increment; petitPlus = petit; } Incremente(int increment) { this.increment = increment; petitPlus = 1; } int additionne(int n) { return (n + increment + petitPlus); } } class UtiliseIncremente { public static void main(String[] arg) { Incremente monAjout = new Incremente(10, 2); System.out.println(monAjout.additionne(5)); Incremente monAjout2 = new Incremente(10); System.out.println(monAjout.additionne(5)); } } L'exemple utilise une classe possédant des constructeurs explicites (le choix du constructeur sera fait en fonction de l’ordre des paramètres comme pour la surcharge). Un constructeur ne retourne pas de valeur mais ne mentionne pas void au début de sa déclaration. Par ailleurs, un constructeur doit posséder le même nom que celui de sa classe. Il peut posséder des arguments qui seront initialisés de façon classique. Les constructeurs de la classe Incremente possèdent un paramètre qui a pour nom increment : celui-ci cache l'attribut increment de la classe Incremente. Le mot réservé this représente, au moment de l'exécution, l'instance de la classe sur laquelle le code est entrain de s'appliquer ; this.increment représente donc l'attribut increment de la classe. L'instruction : this.increment = increment ; initialise l'attribut increment de la classe avec la valeur donnée en argument du constructeur. Le problème ne se pose pas avec l'attribut petitPlus et l'argument petit qui ont des noms différents. VI- Attributs et méthodes de classe (static) class TestStatic { private String nom; static private int nbInstances; public TestStatic(String nom) { this.nom = nom; nbInstances++; } static { nbInstances = 0 ; } public static int getNbInstances() { return nbInstances; } public static void main(String[] argv) { TestStatic t = new TestStatic("Un"); TestStatic t1 = new TestStatic("Deux"); System.out.println(TestStatic.getNbInstances()); System.out.println(TestStatic.nbInstances); } } Une classe peut posséder des attributs et des méthodes qui existent indépendamment de toute instance. Ils sont déclarés avec le mot clé static. On les appelle attributs et méthodes de classe par opposition aux autres attributs et méthodes appelés attributs et méthodes d’instance car ils s’appliquent à une instance particulière. On y accède en les prefixant par le nom de la classe suivi d’un point. Ils servent en général à stocker et travailler sur des informations de l’ensemble des instances (ici le nombre d’instances, on peut aussi créer un vecteur de toutes les instances…) ou des méthodes et attributs dont on a besoin avant création d’objets (ici là méthode main). L’exemple utilise aussi les mot-clés public / private : public ou privé à la classe. Les attributs privés ne sont pas accessible à l’extérieur de la classe (par exemple uploads/Ingenierie_Lourd/ nouveau-document-microsoft-office-word 1 .pdf

  • 15
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager