RN2-Programmation Orientée Objet - JAVA CH 1 à la POO et Java Licence Professionnelle 2006 Agnès Guerraz INRIA Rhône-Alpes agnes.guerraz@inria.fr LP UPMF, Grenoble Septembre 2006 Ce cours reprend en grande partie le matériel pédagogique mis au point par Alexandre Allauzen et Frédéric Vernier d'une part et Caroline Tambellini, Cécile Roisin d'autre part. 04/09/06 p. 1
Les langages objets Langages objets : 1969 FLEX (Alan Kay) et Simula (Ole Dahl et Kristen Nygaard) Smalltalk C Objective C, C++ Pascal : Pascal Objet, Delphi (Borland) Basic : VBA (Microsoft) Java C# (Microsoft) Python (script) 04/09/06 p. 2
Java c'est quoi? Java est un environnement de programmation développé par Sun, adapté à la distribution d'application sur Internet. Langage de programmation objet Une machine virtuelle Des bibliothèques de classes ou des packages : API Application Programming Interface (3278 classes dans Java 1.5) Ensemble d'outils : java, javac, jdb, javadoc, jar,... exécution compilation debugger documentation archivage 04/09/06 p. 3
Origine de Java En 1993, le NCSA, est créé le premier navigateur internet (protocole http, langage html) Annonce officielle de la naissance de Java par Sun en 1995 (issu de Oak) Initiateur : James Gosling Programmation simple Utilisation pour Internet Portable Sur la plupart des plateformes (Archi + OS) Gratuit (téléchargeable sur java.sun.com) Logo (tasse à café), Mascotte (Duke) 04/09/06 p. 4
Java : principe fondateur de sa portabilité 04/09/06 p. 5
Programmation Orientée Objet (POO) Trouver une solution logicielle passe par la description du problème à l'aide d'un langage donné (analyse, décomposition, modélisation,...) : Assembleur, Procédural (C ou Fortran), Objet, naturel. La progression de l'abstraction mov ax,500 ; mov bx,0x20 ; add ax,bx ; int x = 500; int y = 32; x+=y; licence.setnombreetudiants(500); licence.ajoutetudiant(32); La POO permet de décrire le problème à l'aide de termes liés au problème et non à la machine. L'unité est l'objet. 04/09/06 p. 6
Qu'est-ce qu'un objet? Un objet modélise toute entité identifiable manipulée par l'application logicielle. Un objet réagit aux messages qui lui sont envoyés en fonction de son état. Un objet possède : une identité unique un état interne défini par ses attributs un comportement défini par ses méthodes. Un objet = structure de données (attributs) + algorithmes (méthodes) 04/09/06 p. 7
Syntaxe de Java Reprend celle du C Le ; marque la fin d'instruction Un bloc d'instructions est délimité par {} Structures de contrôle comme en C (if, while, switch, etc.) Les caractères sont codés en UNICODE 16 bits au lieu de 8 : accents dans le code! Les commentaires sont obligatoires. 04/09/06 p. 8
HelloWorld //HelloWorld public class HelloWorld { public static void main (String[] arguments) { System.out.println("Hello World"); } }//fin de classe HelloWorld La méthode main est une méthode static commune à toutes les 'instances elle est commune à toutes les instances, main peut être appelée sans qu aucune instance soit créée : HelloWorld.main(); System est une classe avec des attributs static (pas besoin d instance) out est une instance static de la classe PrintStream. out est un attribut de la classe System qui se trouve être une donnée de la classe System (voir doc. de System http://java.sun.com/j2se/1.5.0/docs/api/java/lang/system.html). System.out réfère un objet auquel on peut envoyer des messages. println() est une méthode public de l'objet out. Cette méthode possède un paramètre: une chaîne de caractères. println() permet d'afficher sur la sortie standard (ici, l'écran) la chaîne de caractères qui lui est passée en paramètre, en lui ajoutant automatiquement un caractère de retour à la ligne. 04/09/06 p. 9
04/09/06 p. 10 HelloWorld - 2 //HelloWorld2 public class HelloWorld2 { public static void main (String[] arguments) { System.out.println("bonjour, voici vos arguments : "); for (int i=0; i<arguments.length; i++) System.out.println(i + " : " + arguments[i]); } }// Fin classe HelloWorld2 Compilation : > javac HelloWorld2.java Exécution : > java HelloWorld2 1 deux 3.14 bonjour, voici vos arguments : 0 : 1 1 : deux 2 : 3.14 Pas besoin d une variable (argc) pour connaître la taille d un tableau Boucle for = comme en C Construction de la chaîne de caractères avec le signe +
04/09/06 p. 11 Compilation, exécution,... Appel du compilateur javac : javac HelloWorld.java Le résultat est le fichier.class contenant du bytecode : HelloWorld.class Exécution en appelant la machine virtuelle (JVM) : java HelloWorld sans extension.class! Création de la page html de documentation HelloWorld.html javadoc HelloWorld.java
04/09/06 p. 12 Types de programmes Java Application Programme autonome (stand-alone) L'application doit posséder une classe principale ayant une méthode public main dont la signature est: public static void main(string[] args) C'est la méthode interprétée lors de l'exécution, le point d'entrée de l'application. Applet Programme exécuté dans l'environnement d'un navigateur. Le bytecode est sur un serveur http, il est chargé via une page html. La classe étend la classe Applet: public class HelloWorldApplet extends java.applet.applet{...} Pas de méthode main(), mais les méthodes : init(), start(), stop(), paint(), destroy()
04/09/06 p. 13 HelloWorldApplet import java.applet.applet; import java.awt.graphics; /** * La classe HelloWorldApplet * Affiche "Hello World!" */ public class HelloWorldApplet extends Applet { public void paint(graphics g) { g.drawstring("hello world!", 50, 50); } }//fin de la classe HelloWorldApplet
04/09/06 p. 14 La page HTML hébergeant HelloWorldApplet <html> <body> <applet code="helloworldapplet.class" height="200" width="200"> </applet> </body> </html>
04/09/06 p. 15 Exécution 1/2 Qui exécute le programme que vous avez tapé et compilé? Le processeur directement? instruction par instruction? A quoi servirait le système d exploitation alors? A quoi servirait la machine virtuelle alors? Le système d exploitation alloue un processus à la machine virtuelle : implémentation logicielle d'une unité centrale (CPU) qui exécute du code Java compilé (applets et applications) utilisation d'un espace de mémoire virtuelle plusieurs fils d'exécution (thread) peuvent être lancés par une application La machine virtuelle termine lorsque le dernier thread du dernier programme se termine, ou bien appel direct à System.exit(0); Tout l'espace de mémoire virtuelle est alors libéré (y compris la JVM)
04/09/06 p. 16 Exécution 2/2 La Java Virtual Machine JVM - en français Machine virtuelle Java est une machine virtuelle permettant d'interpréter et d'exécuter le bytecode Java. Ce programme est spécifique à chaque plate-forme ou couple (machine/système d'exploitation) et permet aux applications Java compilées en bytecode de produire les mêmes résultats quelle que soit la plate-forme, tant que celle-ci est pourvue de la machine virtuelle Java adéquate. La machine virtuelle la plus utilisée est celle de Sun Microsystems.
04/09/06 p. 17 Type d'espaces mémoires Les registres. Stockage dans le processeur Le nombre de registres est limité, les registres sont alloués par le compilateur selon les besoins. Pas de contrôle direct et pas de trace de l'existence des registres dans les programmes. La mémoire statique. Stockage dans la RAM (random access memory) Statique est utilisé ici dans le sens à un endroit fixe. La mémoire statique contient les données qui sont disponibles pendant tout le temps d'exécution du programme: le code des classes, les constantes. On peut utiliser le mot-clef static pour spécifier qu'un élément particulier d'un objet est statique. Mémoire dynamique: la pile. Stack RAM Elle est prise en compte directement par le processeur via son pointeur de pile. Emboîtement des appels de méthodes et paramètres. Mémoire dynamique: le tas. Heap RAM Le tas est géré automatiquement par la machine virtuelle et la libération se fait par un ramasse miette Garbage Collector automatique. Réserve de mémoire d'usage général où résident les objets java. Stockage hors RAM Disque Les données résident entièrement hors du programme. Les deux exemples de base sont les flots de données, pour lesquels les données sont transformées en flots d'octets, généralement pour être transmises vers une autre machine, et les objets persistants, pour lesquels les objets sont placés sur disque de façon à ce qu'ils conservent leur état même après que le programme soit terminé. Rapidité Capacité
04/09/06 p. 18 Interprété : efficacité du code. Inconvénients de Java? Nécessite une JVM pour fonctionner. Difficulté face aux applications gourmandes en mémoire. Moins de mécanismes objet que C++ (héritage multiple et templates) Améliorations: compilation JIT (Just In Time) permet à Java de tirer profit de la rapidité du code natif sans perdre la portabilité amélioration de la gestion mémoire dans les nouvelles versions... L'indépendance de Java vis à vis de la plate-forme est cependant un succès avec les applications côté serveur comme les services Web, les servlets et le Java Beans aussi bien que les systèmes embarqués utilisant l'environnement Embedded Java
04/09/06 p. 19 Avantages de Java? Ecrire une fois, exécuter partout! Sécurité. Exécution dans un navigateur Web (Applet). Gestion automatique de la mémoire. Programmation modulaire et dynamique. Lisibilité du code. Code compact (beaucoup est dans la JVM). L'API (Application Programmer's Interface). Réseaux, interfaces, son, pont avec les bases de données en natif.
04/09/06 p. 20 API Java Plus qu'un langage de programmation, l'environnement Java propose une API L'API est structurée en package Packages : regroupement de classes ayant un lien logique entre elles pour les utiliser dans d'autres classes pour les «spécialiser» Pour programmer efficacement, une bonne connaissance de ces packages est indispensable. Ne pas refaire ce qui a déjà été fait
04/09/06 p. 21 API Java : classes standard java.lang : classes essentielles objet, types de base, processus java.util : structures de données (collections) listes, ensembles, hashtables, arbres, itérateurs java.awt : interface graphique (Abstract Window Toolkit) fenêtres, boutons, événements... java.io : entrées / sorties flot de données provenant de fichier, buffer, ou pipe java.net : réseau URL, sockets java.rmi : objets distribués (Remote Method Invocation) java.sql : JDBC (Java Data Base Connectivity) connexion à une base de données relationnelle envoi de requêtes SQL, récupération des résultats java.beans : composants logiciels Pièces logicielles autonomes pouvant être contrôlées dynamiquement et assemblées pour former des applications javax.swing : interface graphique composants d'interface de plus haut niveau que ceux de awt look and feel indépendant de l'os exploitation du modèle MVC (Model View Controler)
04/09/06 p. 22 Versions Java 1.0.2 (1996) : le JDK : Java Development Kit, 212 classes, 8 package version minimale des browsers web. Java 1.1.5 (1997) : 504 classes, 23 packages amélioration interface utilisateur (AWT), gestion des erreurs, cohérence du langage Java 1.2 (Java 2 en 1998) : 1520 classes, 59 packages Swing, Drag and drop, amélioration audio Java 1.3 (2001) J2ME (Java 2 Micro Edition) amélioration de la gestion mémoire, rapidité Java 1.4 (2002) : 2757 classes, 135 packages J2SE (Java 2 Enterprise Edition), XML, expressions régulières, nouvelles E/S, accès à la mémoire vidéo (VolatileImage) pour l accélération Java 1.5 (2005): 3278 classes, 165 packages J2SE 5.0: beaucoup de changement évolutions sur la syntaxe du langage évolutions sur les API : mises à jour d'api existantes, intégration d'api dans le SDK (Software Development Kit ) A venir le Java SE 6
04/09/06 p. 23 J2SE 5.0 -> initialement numérotée 1.5, qui est toujours utilisé comme numéro de version interne. Programmation générique Metadata annotations, permet au langage de construire des classes et des méthodes étiquetées avec des données additionnelles qui peuvent être utilisées en tant que méta-données Autoboxing/unboxing conversion automatique entre des types primitifs (comme le type int) et le Wrapper de classe correspondant (comme la classe Integer) Enumérations le mot-clé enum permet de créer une liste ordonnée de valeurs sans type. Auparavant, ceci pouvait seulement être réalisé par des entiers constants Extension du for pour les boucles...
04/09/06 p. 24 Outils du JDK Téléchargeable sur le site java.sun.com Outils java : JVM, interpréteur pour les programmes java javac : Compilateur Java appletviewer : JVM pour l'exécution des applets jar : Création et manipulation d 'archives java javadoc : Générateur de documentation Java au format HTML javap : désassembleur de classes Java compilées jdb : débogueur Java en ligne de commande javah : génère le header C ou C++ pour créer un pont compatible entre java et C/C++ Documentation en ligne : http://java.sun.com/docs/ Téléchargeable pour installation en local