Cours de Modèles de Conception et Java PDF

Document Details

Uploaded by Deleted User

Université Saint-Joseph

Rima KILANY CHAMOUN

Tags

java programming software development object-oriented programming computer science

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

Use Quizgecko on...
Browser
Browser