Cours de Modèles de Conception et Java PDF
Document Details
Uploaded by Deleted User
Université Saint-Joseph
Rima KILANY CHAMOUN
Tags
Summary
Ce document est un cours sur les modèles de conception et Java, couvrant la présentation générale de Java, les versions historiques, différentes éditions et un aperçu de la programmation orientée objet (POO).
Full Transcript
Université Saint-Jospeh Faculté d’Ingénierie Modèles de Conception et Java Rima KILANY CHAMOUN Partie I- Présentation générale de Java Les versions de Java depuis 1995 Evolution très rapide et succès du langage Java 1.0 en 1995 Java 1.1 en 1997 Java 1.2 en 1998 (...
Université Saint-Jospeh Faculté d’Ingénierie Modèles de Conception et Java Rima KILANY CHAMOUN Partie I- Présentation générale de Java Les versions de Java depuis 1995 Evolution très rapide et succès du langage Java 1.0 en 1995 Java 1.1 en 1997 Java 1.2 en 1998 (Java 2, version 1.2) Java 1.3 (Java 2, version 1.3) en 2000 Java 1.4 en 2002 Java 1.5 en 2004 Java 1.6 en 2006 Java 1.7 -> en 2009 Java 1.8 -> 2014 Java 1.9 -> 2017 Java 1.10 -> mars 2018 Java 1.11 -> Septembre 2018 Java SE12 -> March 2019 Java SE 13 (Final Release Candidate) August 2019 Java SE 14 (March 2020) Latest version Java SE 17 (September 2021) 4 Java Editions Standard SE (JSDK ou JDK= J2RE + outils de développement) Enterprise (JEE = JSDK+ Enterprise Java beans, JSP et servlets pour créer des pages web dynamiques) Java Mobile Edition (Micro Edition) 5 Que penser de Java? Java is Dead Long Live Java!!! 6 Que penser de Java? (1) Un bon langage, adapté aux besoins de développements actuels. Il a su bénéficier de l’essor d’Internet Il a su s’imposer dans de nombreux domaines, exemples: Téléphones portables NASA Mars Rover Mission Java powered BMW Etc… Un environnement gratuit et de nombreux outils disponibles Une large communauté très active Problèmes de compatibilité avec les premières versions, et surtout avec les navigateurs qui supportent leur interpréteur Java (non écrit par Sun) Problèmes de performance Mais existence de solutions pour y pallier (compilateur natif, compilation du bytecode à la volée : "Just In Time (JIT) compilers") 7 Organisation du cours Nous verrons les thèmes de base Caractéristiques de Java et son environnement de développement Structures fondamentales et la programmation par objets en Java Les exceptions La programmation des interfaces graphiques en Java (AWT, Swing). les applets Des thèmes plus avancés Entrées/Sorties Multithreading Programmation Réseau Animation … Les Modèles de conception (Design Patterns) 8 Références (Webographie) Pour récupérer le kit de développement de Sun http://www.oracle.com/technetwork/java/javase/downloads/jd k8-downloads-2133151.html Outils de développement NetBeans IDE 8, ou récemment Apache Netbeans Eclipse IntelliJ IDEA Outils en ligne: https://www.tutorialspoint.com/compile_java8_online.php 9 Aperçu sur la Programmation Orientée Objet (POO) Pourquoi les langages objets? (1) L’approche objet : Programmation dirigé par les données et non par les traitements les procédures existent toujours mais on se concentre d’abord sur les entités que l’on va manipuler avant de se concentrer sur la façon dont on va les manipuler Notion d’encapsulation les données et les procédures qui les manipulent (on parle de méthodes) sont regroupés dans une même entité (la classe). 12 Principes de base de la POO Classe Instance (ou Objet) Encapsulation Héritage Polymorphisme 13 La classe (2) : représentation graphique Classe : description d’une famille d’objets ayant une même structure et un même comportement. Elle est caractérisée par: Nom de la classe Champs ou données membre de la classe Méthodes ou fonctions membre de la classe Une classe représentée avec la notation UML (Unified Modeling Language) 17 Exemple la classe décrivant les nombres complexes Cette classe va avoir 2 attributs : une partie réelle et une partie imaginaire. Cette classe regroupe un certain nombre d’opérations (de méthodes) qui sont utiles pour manipuler les nombres complexes (c’est-à-dire les objets décrits par la classe) par exemple une méthode pour extraire la partie réelle, une pour extraire la partie imaginaire, une pour calculer le module, etc. class Complexe { double reel; double imaginaire; double getReel() {…} void setReel(double a) {…} double getImag() {…} void setImag(double a) {…} } 18 L’instanciation (1) Instanciation : concrétisation d’une classe en un objet « concret ». Dans nos programmes Java nous allons définir des classes et instancier ces classes en des objets qui vont interagir. Le fonctionnement du programme résultera de l’interaction entre ces objets « instanciés ». En Programmation Orientée Objet, on décrit des classes et l’application en elle-même va être constituée des objets instanciés, à partir de ces classes, qui vont communiquer et agir les uns sur les autres. 19 L’instanciation (2) Exemple : si nous avons une classe voiture, alors votre voiture est une instance particulière de la classe voiture. Classe = concept, description Objet = représentant concret d’une classe Classe ≡ Type Objet ≡ Variable L’opérateur d’instanciation en Java est new : MaClasse monObjet = new MaClasse(); En fait, new va réserver l’espace mémoire nécessaire pour créer l’objet « monObjet » de la classe « MaClasse » « Le new ressemble beaucoup au malloc du C » 20 Classe et objet en Java Du modèle à … … la classe Java et... des instances de la classe à... de cette classe class Personne //Déclaration { Personne jean, pierre; String nom; int age; //instanciation float salaire; jean = new Personne (); pierre = new Personne (); }; 21 L’encapsulation (1) Notion d'encapsulation : les données et les procédures qui les manipulent sont regroupées dans une même entité, l'objet. Les détails d'implémentation sont cachés, le monde extérieur n'ayant accès aux données que par l'intermédiaire d'un ensemble d'opérations constituant l'interface de l'objet. Le programmeur n'a pas à se soucier de la représentation physique des entités utilisées et peut raisonner en termes d'abstractions. 22 L’encapsulation (2) Attributs, Variables, champs ou données L'univers de l'application est par conséquent membres internes composé d'un ensemble d'objets interagissent en envoyant des messages aux autres objets (et éventuellement à eux-mêmes). Méthodes ou opérations ou fonctions membre 23 Interaction entre objets: Envoi de messages jean.parle(); Pierre.mange(); 25 L’héritage (1) : définition Héritage : mécanisme permettant le partage et la réutilisation de propriétés et de méthodes entre les objets. La relation d’héritage est une relation de généralisation / spécialisation. La classe parente est la superclasse ou classe de base, la classe qui hérite est la sous-classe ou la classe dérivée. 26 L’héritage (2) : représentation graphique Super classe Lien d’héritage classe Sous classe Représentation avec UML d’un héritage (simple) 27 Caractéristiques du langage Java Caractéristiques du langage Java (1) Simple Apprentissage facile faible nombre de mots-clés simplifications aux fonctionnalités essentielles Développeurs opérationnels rapidement Dynamique et Réparti Durant l’exécution d’un code Java, les classes (leur bytecode) sont chargées au fur et à mesure des besoins Elles peuvent être chargées : depuis la machine locale (le cas le plus fréquent), ou depuis une autre machine, par le réseau. 30 Caractéristiques du langage Java (2) Orienté objet Java permet d'utiliser les objets (et les types de base) Java est un langage objet de la famille des langages de classe comme C++ ou SmallTalk. Les grandes idées reprises sont : encapsulation, classe /instance, attribut, méthode / message, visibilité, interface/implémentation, héritage simple, redéfinition de méthodes, polymorphisme Familier Syntaxe proche de celle de C/C++ 31 Caractéristiques du langage Java (3) Fiable Gestion automatique de la mémoire (ramasse-miette ou "garbage collector") Gestion des exceptions Sources d'erreurs limitées typage fort, pas d'héritage multiple, pas de manipulations de pointeurs, etc. 32 Java supporte le multithreading (4) Un processus ? Un processus est l’entité dynamique qui représente l’exécution d’un programme sur un processeur Un thread (processus léger) est une entité d'exécution qui peut se dérouler en parallèle à d'autres threads, c'est-à-dire concurremment, au sein d'une même application. On découpe le programme principal en un ensemble de sous-programmes qui s’exécutent indépendamment les uns des autres. Java permet de lancer plusieurs threads en même temps, sans bloquer les autres. 33 Java supporte le multithreading (5) Exemple de threads le ramasse-miettes est un thread "système" la gestion de l'interface graphique qui peut être parallélisée avec l'accès à l'imprimante et l'envoi de données sur le réseau. La programmation des threads est considérée comme complexe en général… … mais relativement aisée en Java ; c’est un des avantages de ce langage. Cependant il faut faire attention que la programmation des threads restent complexes quoiqu’il arrive. 34 Java, c'est quoi ? Un environnement de programmation orienté objets adapté à la distribution d'applications sur Internet et s'intégrant au Web Développé par SUN Java Virtual Machine Microsystems 4 éléments : un langage de programmation une machine virtuelle (JVM) ou interpréteur un ensemble d'outils (javac, java, javadoc, …) (JDK) un ensemble de classes standards dans des API (Application and Programming Interface) 36 Java, un langage interprété En Java, le code source n’est pas traduit directement dans le langage de l’ordinateur (natif) Il est d’abord traduit dans un Java Virtual Machine: langage appelé « bytecode » qui est le langage d’une machine virtuelle (JVM ; Java Virtual Machine) dont le langage a été défini par Sun Ce langage est indépendant de l’ordinateur qui va exécuter le programme 37 La compilation fournit du bytecode 38 Exécution du bytecode : Principe Le bytecode doit être exécuté par une JVM Cette JVM est virtuelle (non physique) ; elle est simulée par un programme, en fait un interpréteur, qui lit chaque instruction (en bytecode) du programme.class, la traduit dans le langage du processeur de l’ordinateur et lance son exécution Les systèmes qui veulent pouvoir exécuter un programme Java doivent fournir un tel interpréteur Tous les systèmes ont une JVM (tous les Unix, Windows, MacOs,…) Les machines virtuelles Java peuvent être: Des interpréteurs de byte-code indépendants (pour exécuter les programmes Java) Contenues au sein d’un navigateur (pour exécuter des applets Java) 39 Le bytecode peut être exécuté par n'importe quelle JVM Si un ordinateur possède une JVM, il peut exécuter tous les fichiers.class compilés sur n'importe quel autre système Core i9 (6-core) 40 La machine virtuelle Java (JVM) (1) Compilation usuelle 41 La machine virtuelle Java (JVM) (2) Compilation Java 42 Java, un langage indépendant de la machine Avantages : Portabilité Des machines virtuelles Java existent pour de nombreuses plates-formes dont : Solaris Unix, Linux, Windows, MacOS Le byte-code est plus compact que les exécutables pour voyager sur les réseaux. Inconvénients : L'interprétation du code ralentit l'exécution de l'ordre de quelques dizaines de fois plus lent que C++ 43 L’API de Java (1) Java fournit de nombreuses librairies de classes remplissant des fonctionnalités très diverses : c'est l'API Java API (Application and Programming Interface) : Ensemble de classes permettant une programmation plus aisée car les fonctions deviennent indépendantes du matériel. Ces classes sont regroupées, par catégories, en paquetages (ou "packages"). 44 L’API de Java (2) Les principaux paquetages java.lang : chaînes de caractères, interaction avec l'OS, threads java.util : structures de données classiques java.awt : interfaces graphiques, images et dessins javax.swing : package récent proposant des composants « légers » pour la création d’interfaces graphiques java.io : entrées / sorties java.net : sockets, URL java.rmi : Remote Method Invocation (pas abordé dans ce cours) java.sql : fournit le package JDBC (pas abordé dans ce cours) java.applet : les applets sur le web (pas abordé dans ce cours) 45 L’API de Java (3) La documentation de Java est standard, que ce soit pour les classes de l'API ou pour les classes utilisateur possibilité de génération automatique avec l’outil Javadoc. Elle est au format HTML. intérêt de l'hypertexte pour naviguer dans la documentation 46 L’API de Java (4) Pour chaque classe, il y a une page HTML contenant : la hiérarchie d'héritage de la classe, une description de la classe et son but général, la liste des attributs de la classe (locaux et hérités), la liste des constructeurs de la classe (locaux et hérités), la liste des méthodes de la classe (locaux et hérités), puis, chacune de ces trois dernières listes, avec la description détaillée de chaque élément. 47 L’API de Java (5) Où trouver les informations sur les classes de l’API Sur le site de Oracle, on peut la retrouver à https://docs.oracle.com/javase/8/docs/api/ sous le répertoire docs/api dans le folder d’installation du JDK. 48 L’API de Java (6) 49 Outil de développement fourni par Sun : le JSDK JDK signifie Java Development Kit (Kit de développement Java), maintenant on parle de: SDK (Software Développement Kit) Il contient : les classes de base de l'API java (plusieurs centaines), la documentation au format HTML le compilateur : javac la JVM (machine virtuelle) ou l’interpréteur: java le visualiseur d'applets : appletviewer (un mini browser d’applets) le générateur de documentation : javadoc le desassembleur javap. Permet de convertir un fichier.class en un fichier lisible jar: pour la manipulation des fichiers archive javah : pour l’invocation de méthodes natives (en C par exemple) The javah tool is deprecated as of JDK 9 and might be removed in a future JDK release. The tool has been superseded by the -h option added to javac in JDK 8. 50 Mon premier programme Java Le code source du premier programme Java est un langage objet. Un programme en Java se présente comme un ensemble de classes Chaque fichier ".java" contient une ou plusieurs définitions de classes (ou d’interfaces) … mais une seule est public par fichier ".java" avec nom du fichier = nom de la classe publique méthode println() est une méthode d’instance Fichier source Java : HelloWorld.java c’est un message que l’on envoie à l’objet System.out public class HelloWorld { qui est un objet particulier public static void main(String[ ] args){ représentant la sortie standard System.out.println("Hello world"); } } 52 La méthode main: Point d’entrée de l’exécution du programme Pour pouvoir faire un programme exécutable il faut toujours une classe qui contienne une méthode particulière, la méthode « main » c’est le point d’entrée dans le programme : c’est à à partir de cet endroit que les instructions vont commencer à s’exécuter. C’est là où on mettra des instructions qui permettront de créer des objets, et on pourra appeler des méthodes sur ces objets, ces méthodes en appelleront d’autres, etc… Un programme en Java c’est un ensemble d’objets qui interagissent. public static void main(String arg[ ]) { …/… } 53 De la compilation(javac) à l’interprétation (java) Avant exécution Exécution Autres byte code Fichier Byte code Machine virtuelle de code Compilation Java (JVM) source Java javac HelloWorld.class java HelloWorld.java 54 Compilation javac HelloWorld.java crée un fichier « HelloWorld.class » qui contient le bytecode, situé dans le même répertoire que le fichier «.java » On peut désigner le fichier à compiler par un chemin absolu ou relatif : javac util/Liste.java 55 Exécution Nom d’une classe (pas d'un fichier) ; pas de suffixe.class ! java HelloWorld interprète le bytecode de la méthode main() de la classe HelloWorld (simule une JVM) HelloWorld.class doit être dans un des emplacements indiqués par une option -classpath ou par la variable CLASSPATH 56 Variables d’environnements PATH : doit inclure le répertoire qui contient les utilitaires Java (javac, java, javadoc,…) CLASSPATH : indique un chemin de recherche des classes de l’utilisateur Sous Linux RedHat: Editer le fichier /etc/profile PATH=$PATH:/usr/j2sdk1.4/bin CLASSPATH=$CLASSPATH:/usr/j2sdk1.4/lib:. export PATH ; export CLASSPATH 57 Variables d’environnements 58 Syntaxe du langage Java Les commentaires Identiques à ceux existant dans le langage C // commentaire de fin de ligne Identiques à ceux existant en C++ Les commentaires d'explication se placent généralement juste avant une déclaration (d'attribut ou de méthode) Ils sont récupérés par l'utilitaire javadoc et inclus dans la documentation ainsi générée. 64 Exemple (1) La classe est l’unité de Fichier Bonjour.java base de nos programmes. Le mot clé en Java pour public class Bonjour définir une classe est class { //Accolade débutant la classe MaClasse public static void main(String args[]) { //Accolade débutant la méthode main System.out.println(“bonjour”); } //Accolade fermant la méthode main } //Accolade fermant la classe Bonjour 65 Instructions, blocs et blancs Les instructions Java se terminent par un ; Les blocs sont délimités par : { pour le début de bloc } pour la fin du bloc Un bloc permet de définir un regroupement d’instructions. La définition d’une classe ou d’une méthode se fait dans un bloc. Les espaces, tabulations, sauts de ligne sont autorisés. Cela permet de présenter un code plus lisible. 66 Exemple (2) Fichier Bonjour.java Accolades délimitant le début et la fin de la définition public class Bonjour de la class Bonjour { public static void main(String args[]) { Accolades délimitant le début System.out.println(“bonjour”); et la fin de la méthode main } } Les instructions se terminent par des ; 67 Exemple (3) Fichier Bonjour.java Une méthode peut recevoir des paramètres. Ici la méthode public class Bonjour main reçoit le paramètre args qui est un tableau de chaîne { de caractères. public static void main(String args[]) { System.out.println(“bonjour”); } } 68 Compilation et exécution (1) Le nom du fichier est nécessairement Fichier Bonjour.java celui de la classe avec l’extension.java en plus. Java est sensible à la casse des lettres. Compilation en bytecode java dans une console DOS: javac Bonjour.java public class Bonjour Génère un fichier Bonjour.class { Exécution du programme (toujours depuis la console public static void main(String[] args) DOS) sur la JVM : java Bonjour { Affichage de « bonjour » dans la console System.out.println(“bonjour” + args); } } 69 Compilation et exécution (2) Pour résumer, dans une console DOS, si j’ai un fichier Bonjour.java pour la classe Bonjour : javac Bonjour.java Compilation en bytecode java Indication des erreurs de syntaxe éventuelles Génération d’un fichier Bonjour.class si pas d’erreurs java Bonjour Elie Nadine Java est la machine virtuelle Exécution du bytecode Nécessité de la méthode main, qui est le point d’entrée dans le programme args contiendra le String « Elie » args contiendra le String « Nadine » 70 Compilation et Execution Elie Nadine 71 Identificateurs (1) On a besoin de nommer les classes, les variables, les constantes, etc. ; on parle d’identificateur. Les identificateurs commencent par une lettre, _ ou $ Attention : Java distingue les majuscules des minuscules Conventions sur les identificateurs : Si plusieurs mots sont accolés, mettre une majuscule à chacun des mots sauf le premier. exemple : uneVariableEntiere La première lettre est majuscule pour les classes et les interfaces exemples : MaClasse, UneJolieFenetre 72 Identificateurs (2) Conventions sur les identificateurs : La première lettre est minuscule pour les méthodes, les attributs et les variables exemples : setLongueur, i, uneFenetre Les constantes sont entièrement en majuscules exemple : LONGUEUR_MAX 73 Les mots réservés de Java abstract default goto null synchronized boolean do if package this break double implements private throw byte else import protected throws case extends instanceof public transient catch false int return true char final interface short try class finally long static void continue float native super volatile const for new switch while 74 Les types de bases (1) En Java, tout est objet sauf les types de base. Il y a huit types de base : un type booléen pour représenter les variables ne pouvant prendre que 2 valeurs : boolean avec les valeurs associées true et false un type pour représenter les caractères : char quatre types pour représenter les entiers de divers taille : byte, short, int et long deux types pour représenter les réelles : float et double La taille nécessaire au stockage de ces types est indépendante de la machine. java portable --> type fix ! (not like cpp) Avantage : portabilité cpp kell machine chi et java language internalitonalle internalization to code 75 Les types de bases (2) : les entiers Les entiers (avec signe ) byte : codé sur 8 bits, peuvent représenter des entiers allant de -27 à 27 –1 (- 128 à +127) short : codé sur 16 bits, peuvent représenter des entiers allant de -215 à 215 –1 int : codé sur 32 bits, peuvent représenter des entiers allant de -231 à 231 –1 long : codé sur 64 bits, peuvent représenter des entiers allant de -263 à 263 –1 Notation 2 entier normal en base décimal 2L entier au format long en base décimal 02 entier en valeur octale (base 8) 0x2 entier en valeur hexadécimale (base 16) Opérations sur les entiers opérateurs arithmétiques +, -, * / :division entière si les 2 arguments sont des entiers % : reste de la division entière exemples : 15 / 4 donne 3 15 % 2 donne 1 76 Les types de bases (3) : les entiers Opérations sur les entiers (suite) les opérateurs d’incrémentation et de décrémentation ++ et -- ajoute ou retranche 1 à une variable int n = 12; n ++; //Maintenant n vaut 13 n++; « équivalent à » n = n+1; / n--; « équivalent à » n = n-1; 8++; est une instruction illégale peut s’utiliser de manière suffixée : ++n. La différence avec la version préfixée se voit quand on les utilisent dans les expressions. En version suffixée la (dé/inc)rémentation s’effectue en premier int m=7; int n=7; int a=2 * ++m; //a vaut 16, m vaut 8 int b=2 * n++; //b vaut 14, n vaut 8 77 Exemple AdditionEntier.java 3 variables déclarées localement à la méthode main public class AdditionEntier { public static void main(String args[]) { int nb1, nb2, result; Somme = 30 Somme de 1020 nb1 = 10; 30 egal 30 nb2 = 20; result = nb1 + nb2; Utilisation de la méthode System.out.println("Somme = " + result); println() permet l’affichage System.out.println("Somme de " + nb1+nb2); sur la console. C’est une System.out.println(nb1+nb2+" egal " + result); méthode fournie par L’API } } L’opérateur + permet de faire une addition entre deux nombres, et une concaténation entre une chaîne (String) et une chaîne ou un nombre. 78 Les types de bases (5) : les réels Les réels float : codé sur 32 bits, peuvent représenter des nombres allant de -1035 à + 1035 double : codé sur 64 bits, peuvent représenter des nombres allant de -10400 à +10400 Notation 4.55 ou 4.55D réel double précision 4.55f réel simple précision 79 Les types de bases (6) : les réels Les opérateurs opérateurs classiques +, -, *, / attention pour la division : 15 / 4 donne 3 15 % 2 donne 1 11.0 / 4 donne 2.75 (si l’un des termes de la division est un réel, la division retournera un réel). puissance utilisation de la méthode pow de la classe Math. double y = Math.pow(x, a) équivalent à x^a, x et a étant de type double method static --> pad besion d'une instance 80 Les types de bases (7) : les booléens Les booléens boolean : contient soit true soit false Les opérateurs logiques de comparaisons Egalité : opérateur == Différence : opérateur != supérieur et inférieur strictement à : opérateurs > et < supérieur et inférieur ou égal : opérateurs >= et 5); // x vaut faux, 5 n'est pas supérieur strictement à 5 x= (5