Cours JAVA : Notions de Base, 2021/2022 PDF
Document Details
Uploaded by PleasantIndianapolis2890
Université Cadi Ayyad Marrakech
2022
Laila AMIR
Tags
Related
- CCS1303 OOP Lecture 02 - Data Types & Defining Classes (PDF)
- SE101.3 Object Oriented Programming using Java PDF
- Introduction to Java Programming and Data Structures (2019) by Y. Daniel Liang - PDF
- Curs 1: Lucrul cu obiecte JAVA PDF
- Object Oriented Programming(OOP) Lectures 2 & 3 PDF
- Java Text - Liang (1) PDF
Summary
These lecture notes offer an introduction to Java programming, focusing on fundamental concepts like data types, control structures, and object-oriented principles. The material is geared towards undergraduate-level students in a computer science program.
Full Transcript
Introduction à Java Types de données Structures de contrôles Entrees-Sorties standards Programmations Orientées Objet - JAVA Chap 2 : Notions pour premiers programmes Pr. Laila AMIR Licence SIR (Systèmes informatiques Répartis...
Introduction à Java Types de données Structures de contrôles Entrees-Sorties standards Programmations Orientées Objet - JAVA Chap 2 : Notions pour premiers programmes Pr. Laila AMIR Licence SIR (Systèmes informatiques Répartis) Année universitaire 2021/2022 Laila AMIR Programmations Orientées Objet 1 / 35 Introduction à Java Types de données Structures de contrôles Entrees-Sorties standards Plan 1 Introduction à Java Origine? Pourquoi JAVA? JAVA : JVM, JDK, API Premier programme (application) 2 Types de données Types primitifs Types prédéfinis Classes Enveloppes Classes String, StringBuffer,... 3 Structures de contrôles 4 Entrees-Sorties standards Ecriture, lecture de caractère La classe Scanner Laila AMIR Programmations Orientées Objet 2 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Plan 1 Introduction à Java Origine? Pourquoi JAVA? JAVA : JVM, JDK, API Premier programme (application) 2 Types de données Types primitifs Types prédéfinis Classes Enveloppes Classes String, StringBuffer,... 3 Structures de contrôles 4 Entrees-Sorties standards Ecriture, lecture de caractère La classe Scanner Laila AMIR Programmations Orientées Objet 3 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Origine? L’origine du language Java Java est un langage moderne orienté objet a été mis au point en 1991 par la compagnie ”Sun Microsystems”; Le projet de développement au départ est connu sous le nom ”Oak”, dont le but est de constituer un language pouvant être intégré dans les électroménagers afin de les contrôler, et permettre une communication entre les appareils. L’origine du nom ”Java” En l’honneur de la boisson préférée des programmeurs: le café, dont une partie de la production provient de l’ı̂le Java. Laila AMIR Programmations Orientées Objet 4 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Pourquoi JAVA? Java est un langage objet : Comme la plupart des langages récents, Java est orienté objet. Chaque fichier source contient la définition d’une ou plusieurs classes qui sont utilisées les unes avec les autres pour former une application. La programmation objet permet entre autres : L’encapsulation [modélisation de l’objet comme une boite noire qui contient un état (variables) et un comportement (méthodes)] La réutilisation du code [utiliser ce qui a déjà été créé (classes déjà faites) plus tard dans un autre projet] éviter le code redondant [ne pas écrire x fois les mêmes fonctions au sein d’un même projet..] Laila AMIR Programmations Orientées Objet 5 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Pourquoi JAVA? Java est simple : Le choix de ses auteurs a été d’abandonner des éléments mal compris ou mal exploités des autres langages, Certains concepts à l’origine de nombreux ”bugs” ont été supprimés en JAVA. : la notion de pointeurs (pour éviter les incidents en manipulant directement la mémoire), la surcharge des opérateurs, l’héritage multiple (pour éviter les ambiguités), ou traités implicitement : la libération de mémoire devient automatique grâce au garbage collector... les chaı̂nes de caractères et les tableaux sont désormais des objets faisant partie intégrante du langage. Laila AMIR Programmations Orientées Objet 6 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Pourquoi JAVA? Java est robuste et sûr : Le compilateur Java est fortement typé ; toutes les variables sont typées et il n’existe pas de conversion automatique qui risquerait une perte de données. Si une telle conversion doit être réalisée, le développeur doit obligatoirement utiliser un cast ou une méthode statique fournie en standard pour la réaliser. Le traitement des exceptions est obligatoire. Le compilateur vérifie que les erreurs sont traitées par le développeur. Dans le cas contraire le code ne compilera pas; Un débordement de tableau déclenchera automatiquement une exception; Laila AMIR Programmations Orientées Objet 7 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Pourquoi JAVA? Java est sécurisé : La gestion de la mémoire n’est pas à la charge du développeur Garbage Collector (ramasse-miettes) : un programme qui libère la mémoire des objets qui ne sont plus référencé. Pas de pointeurs : le fait de ne pas manipuler les pointeurs et donc d’accéder à des zones mémoire sensibles diminue fortement l’introduction des virus informatiques. Le chargeur de classes (ClassLoader) est responsable du chargement dynamique des classes. Il vérifie que la classe chargée n’en écrase pas une autre en mémoire; Le gestionnaire de sécurité (la classe SecurityManager) permet de définir un certain nombre d’autorisations d’entrée/sortie locales et sur le réseau (Applet uniquement) Laila AMIR Programmations Orientées Objet 8 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Pourquoi JAVA? Java est interprété, et portable : La source est compilée en pseudo code ou byte-code puis exécuté par un interpréteur Java : la Java Virtual Machine (JVM). Ce concept est à la base du slogan de Sun pour Java : WORA (Write Once, Run Anywhere : écrire une fois, exécuter partout). Le bytecode peut être exécuté et obtenir quasiment les mêmes résultats sur toutes les machines disposant d’une JVM. La machine virtuelle JVM existe par défaut sur de nombreuses plateformes (Linux, Unix, Windows, Mac,...); Java est multi-thread : Une application peut être décomposée en unités d’exécution fonctionnant simultanément (parallélisme). Laila AMIR Programmations Orientées Objet 9 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) JAVA : JVM, JDK, API JAVA est un environnement de programmation objet composé de : le langage orienté objet JAVA la machine virtuelle JVM un ensemble d’outils de développement JDK (compilateur, générateur de documentation,...) un ensemble de classes standards API (application programming interface ou bibliothèque) Laila AMIR Programmations Orientées Objet 10 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Outils de de développement JDK L’outil de base : le JDK (Java Development Kit) de SUN : gratuit comprend de nombreux outils : le compilateur : javac l’interpréteur d’application : java l’interpréteur d’applet : appletviewer le débogueur : jdb le générateur de documentation : javadoc Laila AMIR Programmations Orientées Objet 11 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Liens pour JDK et API Des environnements de développement non commerciaux : http://www.eclipse.org/ http://www.netbeans.org/ Des environnements de développement commerciaux: Visual J++ (Microsoft) JBuilder (Borland/Inprise) Des classes Java (API): https://docs.oracle.com/en/java/javase/13/docs/api/index.html Laila AMIR Programmations Orientées Objet 12 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Premier programme (application) public class PremProg { public static void main (String args[]) { System.out.println (”1er programme Java”); } } Tout code java doit être défini à l’intérieur d’une classe Le code de la classe doit être enregistré dans un fichier de même nom que la classe : PremProg.java L’entrée pour l’exécution est la méthode main() qui doit être publique et statique et située dans une classe qui elle même doit être publique. Laila AMIR Programmations Orientées Objet 13 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Compilation & Exécution javac est le compilateur qui convertit le code PremProg.java en fichier PremProg.class (bytecode Java). javac PremProg.java S’il ne donne pas de messages d’erreur, javac produit alors le fichier PremProg.class au même endroit que PremProg.java. Ce fichier appelé ”byte code” contient le code binaire qui peut être exécuté sur n’importe quelle machine virtuelle Java. Laila AMIR Programmations Orientées Objet 14 / 35 Introduction à Java Origine? Types de données Pourquoi JAVA? Structures de contrôles JAVA : JVM, JDK, API Entrees-Sorties standards Premier programme (application) Compilation & Exécution Notons que l’on peut compiler d’un seul coup plusieurs fichiers dans un même répertoire, par la commande : javac *.java Les fichiers.class générés portent les mêmes noms que les fichiers sources. L’exécution du programme est appelée par la commande suivante : java PremProg La commande java lance la machine virtuelle JVM pour exécuter le ”byte code”. On ne précise pas l’extension.class dans ce cas. Laila AMIR Programmations Orientées Objet 15 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Plan 1 Introduction à Java Origine? Pourquoi JAVA? JAVA : JVM, JDK, API Premier programme (application) 2 Types de données Types primitifs Types prédéfinis Classes Enveloppes Classes String, StringBuffer,... 3 Structures de contrôles 4 Entrees-Sorties standards Ecriture, lecture de caractère La classe Scanner Laila AMIR Programmations Orientées Objet 16 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Types de données 2 grands groupes de types de données : Types primitifs, Types de données prédéfinis : objets (instances de classe) Java manipule différemment les valeurs des types primitifs et les objets : Les variables contiennent : des valeurs de types primitifs ou des références aux objets Laila AMIR Programmations Orientées Objet 17 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Types primitifs Une constante ”entière” est de type long si elle est suffixée boolean –> true ou false par ”L” et de type int sinon char (16-bit, Unicode) Une constante ”flottante” est de byte entier (signé ) 8-bit type float si elle est suffixée short entier (signé ) 16-bit par ”F” et de type double sinon int entier (signé ) 32-bit long entier (signé ) 64-bit Exemples : float flottant (IEEE 754) 32-bit int a = 35 double flottant (IEEE 754) 64-bit long b = 2589L double c = 4.567e2 float d = 0.123587E-25F Laila AMIR Programmations Orientées Objet 18 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Classes Enveloppes Les classes enveloppes (Wrappers) sont des classes qui encapsulent les données de type primitif, afin de pouvoir les utiliser comme des objets. Type primitif Classe enveloppe boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double Les classes Byte, Short, Integer, Long, Float, Double se sont des sous-classes de la classe Number. Laila AMIR Programmations Orientées Objet 19 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Classes Enveloppes Depuis Java 5, les opérations de conversion d’un type primitif vers un objet d’une classe enveloppe, et la conversion inverse sont devenues automatique. Toutes les sous-classes de Number possèdent les méthodes byte byteValue(), short shortValue(), int intValue(), long longValue() et double doubleValue() qui réalisent les conversions des types primitifs. Toutes les classes enveloppes ont une méthode x X.parseX(String s) qui essaie de convertir une chaı̂ne de caractères en une donnée de type primitif, si c’est possible (lèvent une exception NumberFormatException sinon). Laila AMIR Programmations Orientées Objet 20 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Exemple Integer obj = new Integer(95545); long l = obj.longValue(); // renvoie la valeur (long) de cet objet Integer Double obj = new Double(”10.35”); double d = obj.doubleValue(); int x =Integer.parseInt(”9”); double c = Double.parseDouble(”5”); Laila AMIR Programmations Orientées Objet 21 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Types de données prédéfinis : chaı̂nes de caractères En Java, les chaı̂nes de caractères sont des objets des classes String ou StringBuffer. La classe String : java.lang.String (1) La classe String gère des chaı̂nes de caractères non modifiables. Les valeurs littérales (”abc”) peuvent être transformées en String. L’opérateur + permet la concaténation de 2 String. Laila AMIR Programmations Orientées Objet 22 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Exemples d’utilisation de la classe String String s = ”bonjour”; // s = ”bonjour” int lg = s.length(); // lg = 7 String s = ”Java” + ”Soft”; // s = ”JavaSoft” char[] data = {’J’, ’a’, ’v’, ’a’}; String name = new String(data); String s = String.valueOf(2 * 3.14159); // s = ”6.28318” int i = Integer.valueOf(”123”); // i = 123 String s = ”java”; if (s == ”java”) {...} // Erreur if (s.equals(”java”)) {...} // Ok Laila AMIR Programmations Orientées Objet 23 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards La classe StringBuffer Il est très souvent utile de modifier des objets String. La classe StringBuffer : java.lang.StringBuffer La classe StringBuffer gère des chaı̂nes de caractères modifiable (setCharAt(), append(), insert()) La méthode toString() convertie une StringBuffer en String Laila AMIR Programmations Orientées Objet 24 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Exemples d’utilisation de la classe StringBuffer StringBuffer sb = ”abc”; // Error: can’t convert String to StringBuffer StringBuffer sb = new StringBuffer(”abc”); sb.setCharAt(1, ’B’); // sb= ”aBc” sb.insert(1, ”1234”); // sb = ”a1234Bc” sb.append(”defg”); // sb = ”a1234Bcdefg” String s = sb.toString(); // s = ”a1234Bcdefg” sb.append(”hij”); // sb = ”a1234Bcdefghij” s = ”a1234Bcdefg” Laila AMIR Programmations Orientées Objet 25 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Les tableaux (1) manipulés par des références vérification des bornes à l’utilisation pas de tableau statique. allocation dynamique par new taille fixée une fois pour toute taille accessible par le ”champ” length Déclaration : Les tableaux peuvent être déclarés suivant les syntaxes suivantes : type [] nom ; type nom [] ; Laila AMIR Programmations Orientées Objet 26 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Les tableaux (2) Création (allocation) : par new après (ou dans) la déclaration : int tab[]; // déclaration tab = new int; // création ou implicite par initialisation Initialisation : int tab[] = {1, 2, 3}; // à la déclaration // Sinon, valeurs par défaut : 0 ou false ou null (selon type de base) Laila AMIR Programmations Orientées Objet 27 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Les tableaux (3) De même pour les tableau 2D : int [][] Matrice = new int ; La taille des tableaux de la seconde dimension peut ne pas être identique pour chaque occurrence. Exemple : int Mat[][] = new int[]; Mat = new int; Mat = new int; La taille peut être consultée par length : System.out.println (tab.length) ; System.out.println (Matrice.length) ; // 1ère dimension System.out.println (Matrice.length) ; // 2ème dimension System.out.println (Mat.length) ; Laila AMIR Programmations Orientées Objet 28 / 35 Introduction à Java Types de données Types primitifs Structures de contrôles Types prédéfinis Entrees-Sorties standards Tableaux d’objets Des tableaux contenant des (références à des) objets d’une classe donnée peuvent être déclarés et créés pour toute classe (prédéfinie ou bien écrite par le programmeur). Exemple : Un tableau de chaı̂nes de caractères (classe String) : String[] tabChaines; tabChaines = new String; tabChaines = ”OUI”; tabChaines = ”NON”; Laila AMIR Programmations Orientées Objet 29 / 35 Introduction à Java Types de données Structures de contrôles Entrees-Sorties standards Plan 1 Introduction à Java Origine? Pourquoi JAVA? JAVA : JVM, JDK, API Premier programme (application) 2 Types de données Types primitifs Types prédéfinis Classes Enveloppes Classes String, StringBuffer,... 3 Structures de contrôles 4 Entrees-Sorties standards Ecriture, lecture de caractère La classe Scanner Laila AMIR Programmations Orientées Objet 30 / 35 Introduction à Java Types de données Structures de contrôles Entrees-Sorties standards Structures de contrôles Les instructions de contrôle sont identiques à celles du C/C++ : if ( condition ) {... } ; switch ( variable ) { case const1 : {... } break ; case const2 : {... } break ; default : {... } }; for ( init ; condition ; modif ) {... } ; while ( condition ) {... } ; Laila AMIR Programmations Orientées Objet 31 / 35 Introduction à Java Types de données Ecriture, lecture de caractère Structures de contrôles La classe Scanner Entrees-Sorties standards Plan 1 Introduction à Java Origine? Pourquoi JAVA? JAVA : JVM, JDK, API Premier programme (application) 2 Types de données Types primitifs Types prédéfinis Classes Enveloppes Classes String, StringBuffer,... 3 Structures de contrôles 4 Entrees-Sorties standards Ecriture, lecture de caractère La classe Scanner Laila AMIR Programmations Orientées Objet 32 / 35 Introduction à Java Types de données Ecriture, lecture de caractère Structures de contrôles La classe Scanner Entrees-Sorties standards Ecriture, lecture de caractère Ecriture : float z=1.732f; System.out.print(”z=”); System.out.print(z); System.out.println(”,2z=”+(2*z)); Lecture : // Lecture d’un caractère int car = System.in.read(); // Lecture de 10 caractères byte buf[] = new byte; int nbLus = System.in.read(buf); Laila AMIR Programmations Orientées Objet 33 / 35 Introduction à Java Types de données Ecriture, lecture de caractère Structures de contrôles La classe Scanner Entrees-Sorties standards La classe Scanner On utilise la classe Scanner pour lire autre type que des caractères. import java.util.Scanner;.... Scanner sc = new Scanner(System.in); String ch = sc.next(); int k = sc.nextInt(); double val; Il existe une méthode nextXyz() et if (sc.hasNextDouble()) une méthode hasNextXyz() pour val = sc.nextDouble(); chaque type primitif xyz String ligne = sc.nextLine(); Laila AMIR Programmations Orientées Objet 34 / 35 Introduction à Java Types de données Ecriture, lecture de caractère Structures de contrôles La classe Scanner Entrees-Sorties standards Exemple import java.util.Scanner; public class MonProgramme { public static void main(String[] args){ System.out.print(”Entrez un int : ”); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for (int i=0; i