La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

F. Voisin : Introduction à Java 1 Introduction à Java Frédéric VOISIN FIIFO - « Remise à Niveau »

Présentations similaires


Présentation au sujet: "F. Voisin : Introduction à Java 1 Introduction à Java Frédéric VOISIN FIIFO - « Remise à Niveau »"— Transcription de la présentation:

1 F. Voisin : Introduction à Java 1 Introduction à Java Frédéric VOISIN FIIFO - « Remise à Niveau »

2 F. Voisin : Introduction à Java 2 Bref Historique des Langages à Objets n SIMULA (1967) : ancêtre des langages à objets n Smalltalk ( ) : le premier « vrai » langage à objets u original, voire déroutant (syntaxe) u très « dynamique » (tout est redéfinissable dans le langage) u environnements de programmation, prototypage, … n C++ (~ 1985) : Langage « orienté objet », issu du langage C et de SIMULA u performant, puissant (trop ! Difficile à maîtriser) u plutôt « statique », orienté « Génie Logiciel » n Java (~1996, Sun): emprunte à Smalltalk et à C++ n C# (2001, Microsoft) : simplification de C++, concurrent de Java n Autres acteurs: u Ada 95: puissant, mais beaucoup le trouvent trop lourd u divers dialectes de Pascal : Delphi u Les « langages Microsoft » VBA, Visual C++, J++

3 F. Voisin : Introduction à Java 3 Le Marketing Java n Moderne : objet, modulaire, typé n Largement disponible : « gratuit », « propriétaire » mais pas trop n Portable : multi-plateformes (O.S.), Internationalisation (Unicode) n Orienté WEB: u chargement dynamique de code u « appliquettes » (applets) associées aux navigateurs u modèles de sécurité pour le téléchargement de code (« bac à sable », vérification du bytecode, authentification, téléchargement du code autorisé ou non selon la source) n Fiabilité: vérifications dynamiques à lexécution; « ramasse-miettes » n Support des « processus légers » (threads) n Orienté systèmes distribués et ouverts: invocation à distance (RMI), API CORBA, JDBC, Réseaux, … n Multi-usages: de la « machine à laver » aux « composants métiers », en passant par les applications audio/vidéo et la JavaCard ;-)

4 F. Voisin : Introduction à Java 4 Le Marketing Java (fin) n Au centre dun effort de normalisation u Norme J2EE (« Java 2 Enterprise Edition »): 13 services pour environnements ouverts (annuaires, gestion de messages, de transactions, …): JDBC, RMI, JSP/servlet, JNDI, JTS, JMS, EJB... u EJB (« Enterprise Java Beans »): développement orienté composants u JSP/Servlet (Java Server Page/ Server Applets): WEB dynamique avec code Java exécuté du côté serveur et non pas client ;-| Réaction Microsoft :.NET (évolution de COM+, IIS,...) autour de C# n Les acronymes à connaître: u JVM: la « machine virtuelle Java » (le « moteur » dexécution) u J2RE : (« runtime » : les librairies mais pas le compilateur…) u J2EE (Enterprise Edition), J2SE (Standard Edition) u J2ME: (Mobile Edition) n très « mode » actuellement : développement « multi plateformes » (PCs, Internet/Intranet, PDA, PocketPC, mobiles,….)

5 F. Voisin : Introduction à Java 5 Bref Historique de Java n JDK (« Java Development Kit ») : u Java 1.0.2: version de tous les navigateurs Web u Java 1.1.5: 1997 F 504 classes, 23 paquetages F Abstract Window Toolkit (awt) : interface graphique u Java 1.2 (dit encore Java 2 !) : 1998 F 1520 classes, 59 paquetages F Swing (IHM), Drag and Drop, amélioration audio, amélioration I/O u Java 1.3: amélioration des « collections » notamment (2130 classes !) u Java 1.4 (2001/2002): la version courante : cryptographie, modèles de sécurité… (2738 classes…) u Java 1.5 (fin septembre 2004 ?): classes « génériques » (à la C++/C# ?) n compatibilité ascendante en gros (« deprecated » features)

6 F. Voisin : Introduction à Java 6 Java: la portabilité n portabilité du code compilé et pas seulement du source (via la bonne JVM) ! u Basé sur le portage de la « Java Virtual Machine »: interpréteur de « code intermédiaire » et du « Java Runtime Environment » u ce sont la JVM et le JRE qui sont réécrits pour chaque O.S. ! u 1. on (pré-)compile le code source dans le code de cette JVM (bytecode), 2. à lexécution la JVM interprète le code produit spécification publique de cette JVM, laspect « propriétaire » du langage permet déviter les dérives comme il y en a eu avec les extensions à html … n le même code compilé peut tourner sous Solaris, Windows, Linux, MacOS,… u facile à distribuer u compatible avec les environnements des utilisateurs

7 F. Voisin : Introduction à Java 7 Write once, run everywhere ! bytecode (.class) Source java (.java) javac (sun) javac (Mac) javac (windows) Sun Java (JVM) Mac Java (JVM) Windows Java (JVM) Navigateur Java (JVM) bytecode (.class) bytecode (.class) … Archive (.jar) Source java (.java) Source java (.java)

8 F. Voisin : Introduction à Java 8 Java: les principaux outils n java : la JVM = linterprète de « bytecode » n javac : le compilateur n appletviewer : JVM pour lexécution des appliquettes n jar : le gestionnaire darchives java (multi-fichiers, compressé) n javadoc : le générateur de documentation u commentaires « normalisés » --> document html la documentation reste en phase avec le source, à moindres efforts ! n Il existe de nombreux environnements de développement dont ECLIPSE

9 F. Voisin : Introduction à Java 9 Compilation / Exécution n Unité de base Java = la classe public class MaClasse {// public = indication de visibilité définition de « variables dinstances » définition de « méthodes » (fonctions/procédures) } Un fichier peut contenir plusieurs classes, une seule dentre elles doit avoir lattribut public. Les autres sont des classes auxiliaires. n Un fichier peut débuter par une déclaration de « paquetage » et/ou des importations de classes (venant dautres paquetages) n Correspondances entre classes (publiques) et fichiers n correspondance entre la structure de paquetages et lorganisation du code source en fichiers/répertoires (détails vus ultérieurement)

10 F. Voisin : Introduction à Java 10 Compilation / Exécution (suite) public class Accueil{ // un nom de classe débute par une Majuscule public static void main (String[] args) { System.out.println("Bienvenue chez Java"); } } La classe doit être contenue dans un fichier de nom Accueil.java Compilation: javac Accueil.java // javac nom-fichier crée dans les bons cas Accueil.class Variable denvironnement CLASSPATH pour localiser les classes nécessaires: une liste ordonnée de répertoires ou darchives (.jar) séparés par ' : ' Remarques: public = visible par tout le monde static = la méthode nest pas associée à un objet particulier mais à la classe en tant que telle.

11 F. Voisin : Introduction à Java 11 Compilation / Exécution (fin) Exécution: java Accueil paramètres-optionnels // java Nom-Classe La valeur de CLASSPATH doit permettre daccéder au fichier Accueil.class la JVM recherche dans Accueil.class une méthode de profil public static void main (String[] args) et lexécute n Si une telle méthode nexiste pas = erreur au lancement ! Exception … in java.lang.NoSuchMethodError: main Causes possibles derreur : Le fichier Accueil.class nest pas accessible via la variable CLASSPATH la classe Accueil et la méthode main doivent être public la méthode main doit être static

12 F. Voisin : Introduction à Java 12 Un autre exemple simple public class Echo { public static void main (String[] args) { for(int i = 0; i < args.length; i++) System.out.println(args[i] + " " + args[i]); // out est un un objet défini comme attribut de la classe System // println est une méthode appliquée à lobjet System.out // lopérateur + représente ici la concaténation de chaînes } // length est un attribut prédéfini des tableaux } javac Echo.java java Echo Bonjour les RN Bonjour les RN

13 F. Voisin : Introduction à Java 13 Java: les bases n Syntaxe des instructions très proche de celle de C, la sémantique pas toujours n on distingue « types primitifs » et « objets » (instances des classes) u types primitifs : boolean char, byte short, int, long float, double void Classes java : mot-clef class ; Instances créées par le mot-clef new n pas de type « entier » non signé (unsigned du langage C) n promotion automatique vers le type le plus fort

14 F. Voisin : Introduction à Java 14 Types de données primitifs

15 F. Voisin : Introduction à Java 15 Java: les références aux instances n on manipule toujours les objets par le biais de « références » (pointeurs) C monC; // monC est une « référence » sur une instance de C // qui ne référence rien pour linstant (i.e. null ) monC = new C(); : // allocation + mémorisation de la référence dans monC C monC = new C(); // déclaration avec initialisation u C[] maTableDeC = new C[10]; // maTableDeC référence un tableau de 10 références à des instances de C // mais maTableDeC[0] … maTableDeC[9] sont toujours null ! u for(int i = 0; i < maTableDeC.length; i++) maTableDeC[i] = new C(); une fois allouée, les références sont transparentes: maTableDeC[3].val = 12; // en supposant un attribut val dans C ! n la désallocation est gérée par le système (« ramasse-miettes »)

16 F. Voisin : Introduction à Java 16 n Il existe des abréviations: C maTableDeC[] = { new C(), new C(), new C() }; String[] matieres; // ou String matieres[];!! matieres = new String[3]; matiere[0] = new String( " java " ); // ou matiere[0]= " java " ? matiere[1] = new String( " ACSI " ); matiere[2] = new String( " BD " ); for(int i = 0; i < matieres.length; i++) System.out.println(matiere[i]); int[] table = { 1, 3, 5 }; // en déduit new int[3] tout seul // int table[3] est syntaxiquement incorrect !

17 F. Voisin : Introduction à Java 17 Java: les références aux instances (suite) n Que veulent dire « affectation » et « égalité » des références ?? C monC1 = new C(); C monC2 = new C(); int t1[] = { 1, 2, 3}; int t2[] = { 4, 5, 6, 7, 8};... monC1 = monC2; // ?? Coréférence (partage) ! t1 = t2; // Cest comme du C, vous avez dit ??? NON !! if (monC1 == monC2)… // teste légalité des références ! n On aura souvent besoin dune autre «égalité » (ou équivalence, plutôt !) : if (monC1.equals(monC2))… // quelle méthode equals pour C ? Même problème pour la copie : affectation "=" ou clone() ? Si on clone, quel type de clonage ?

18 F. Voisin : Introduction à Java 18 Des types primitifs aux classes et inversement n Il existe des contextes dans lesquels on veut des objets et non pas des valeurs de type primitif (ex: les « conteneurs » ou « collection » dobjets) ArrayList a = new ArrayList(); a.add(1);// KO. 1 nest pas une instance if ('a'.equals('b'))…// KO if (1.equals(x)) …// KO n Il existe des « wrappers » (enveloppes) pour faire la correspondance u Boolean Character, Byte// new Character( ' c ' ) u Short, Integer, Long// new Integer(3) u Float, Double Void// non instanciable !! a.add(Integer(1));// OK !

19 F. Voisin : Introduction à Java 19 Les wrappers (suite) Integer Y = Integer(1); Integer X = Integer(3); Il existe des méthodes de conversion inverse: intValue() // X.intValue() + 3 les classes « wrapper » définissent des méthodes dinstance : Y.equals(X), Y.compareTo(X), Y.toString(), … n elles définissent aussi des méthodes ou attributs « statiques » Integer.MAX_VALUE Integer.MIN_VALUE Integer.parseInt(String) // retourne une valeur Integer.valueOf(String) // retourne un Integer Integer.toString(int) // retourne une String

20 F. Voisin : Introduction à Java 20 Exercice n Faire la somme dune suite dentiers passés sur la ligne de commande ! On prend deux entiers n1, n2 sur la ligne de commande on crée un tableau de n1 int, initialisé avec les entiers de 0 à n1 on crée un tableau de n2 instances de Integer initialisé avec les enveloppes des entiers de 0 à n2 -1 u on calcule la somme des entiers stockés dans les deux tableaux et on limprime.

21 F. Voisin : Introduction à Java 21 Quelques classes importantes Object : equals(Object), toString(), getClass(), clone() String : les chaînes de caractères (ont le statut de constantes !) charAt, compareTo, equals, concat, indexOf, length Attention : les String ne sont pas des tableaux de caractères ! String char[] byte[] StringBuffer : les chaînes de caractères modifiables charAt, delete, reverse, append, Math : que des méthodes et attributs statiques ( cos, sqrt, pi, …) Random : générateur de nombres aléatoires avec des méthodes telles que nextInt(), nextInt(int), nextBoolean(),…

22 F. Voisin : Introduction à Java 22 Quelques classes importantes (suite) n Les diverses collections (conteneur dinstances) : ArrayList boolean add(Object) // ajout à la fin ! void add(int, Object) // ajout à une place précise ! int size() int indexOf(Object) // indice de la première occurrence ! Object get(int) // Object ??? Iterator iterator() TreeSet: collection « triée » déléments « comparables » (satisfaisant linterface Comparable, c.à.d. munis de int compareTo(Object) ) Les itérateurs ( Iterator ): ils savent parcourir les collections boolean hasNext() Object next() void remove() // comportement pas toujours défini.

23 F. Voisin : Introduction à Java 23 Opérateurs, Priorité et Associativité

24 F. Voisin : Introduction à Java 24 Les Concepts Objets n Classe : une description dun ensemble dobjets avec leurs comportements u définit la structure des instances de la classe (attributs) + les actions quils peuvent effectuer (méthodes) sert à créer les instances: new MaClasse() sert à typer : MaClasse C; // C référencera une instance de MaClasse u définit aussi ce qui est visible (champs, méthodes) et par qui (autres classes) 4 niveaux: public, protected, paquetage, private définit ce qui est attaché à la classe en tant que telle ( static ) et ce qui est attaché à une instance particulière définit ce qui ne peut pas être modifié ( final ) et ce qui peut lêtre n Objets (instances) : les individus qui appartiennent à la classe

25 F. Voisin : Introduction à Java 25 Un exemple simple public class Point2D { private double x = 0.0; // La structure des instances est cachée private double y = 0.0; // Point2D : « Constructeur » : sert à initialiser les instances nouvellement créées public Point2D(double monX, double monY) { x = monX; y = monY; } public Point2D() // un autre constructeur « par défaut » { x = 0.0; y = 0.0; } public void move(double dx, double dy) { x += dx; y += dy; } // modifie linstance courante public String toString() // crée une String « au vol » { return " ( " + x + ", " + y + " ) " ; } public Point2D symetrique() // crée une nouvelle instance { return new Point2D(-x, -y); } }

26 F. Voisin : Introduction à Java 26 Une classe de test simple public class TestPoint2D { public static void main(String[] args) { Point2D p = new Point2D(12.0, 23.0); System.out.println(p.toString()); p1.move(-5.0, 2.0); System.out.println(p.toString()); System.out.println(p.symetrique().toString()); System.out.println(p.toString()); } Remarque 1: Plutôt que de définir une classe de test, on aurait pu définir dans Point2D une méthode main de test (unitaire) de la classe. Remarque 2: on ne dit pas doù vient Point2D ! Il faudrait aussi une méthode clone() et une méthode equals() !

27 F. Voisin : Introduction à Java 27 public class Employe { private String nom;// on pourrait ajouter ladresse, le prénom, lâge... private float sal; private int id;// chaque employé a un numéro de badge unique private static int dernierId = 0;// pour produire des « id » distincts private static Employe[] listeEmployes = new Employe[50] ; // on se limite à 50 employés // à suivre... Un exemple plus complet

28 F. Voisin : Introduction à Java 28 Exemple (suite) public Employe(String nom, float sal) { // constructeur ! this.nom = nom; this.sal = sal; this.id = Employe.newId(this); } // ou dans ce dernier cas: id = newId(this) private static int newId(Employe e) { listeEmployes[dernierId] = e; return dernierId++ ; } public String toString(){ // abréviation possible ci-dessous return nom + " " + (new Integer ( id)).toString() + " " + (new Float(sal)).toString(); } public static void listingEmployes() { for(int i = 0; i < Employe.dernierId; i++) System.out.println(listeEmployes[i].toString()); } } // fin de la classe Employe

29 F. Voisin : Introduction à Java 29 Exemple (fin) public class TestEmploye { public static void main(String[] args) { Employe e1 = new Employe("Dupont", F); Employe e2 = new Employe("Albert", F); Employe e3 = new Employe("Valentine", 500F); Employe.listingEmployes(); } n Attention: dans cette version, on ne peut avoir de facto quune seule entreprise (celle-ci est implicite, à cause de la liste des employées qui est une variable « statique »)

30 F. Voisin : Introduction à Java 30 import java.util.ArrayList; // pour la classe ArrayList ci-dessous public class Employe { // sans changement: attributs nom, sal, id et dernierId // de même que les méthodes Employe et toString private static ArrayList listeEmployes = new ArrayList(); private static int newId(Employe e) { listeEmployes.add(e); return dernierId++; } public static void listingEmployes() { for(int i = 0; i < listeEmployes.size(); i++) System.out.println(listeEmployes.get(i).toString()); }// ou ((Employe) listeEmployes.get(i)) } Le même exemple revisité

31 F. Voisin : Introduction à Java 31 Retour sur les attributs Chaque instance a son propre jeu de variables dinstances (non static ) Il nexiste quun seul exemplaire des variables « de classe » ( static ) Les règles dinitialisation sont différentes ( static = à la première référence à la classe) n Pour initialiser les variables dinstance, u il existe des valeurs par défaut u il vaut mieux le faire soi-même par le biais des constructeurs ou à la déclaration n Les variables de classe sont accessibles à laide du nom de la classe ou de lintérieur des méthodes (classes ou instances) de la classe final pour dire quun attribut ne change pas de valeur (constante) En général, les attributs ne sont pas public

32 F. Voisin : Introduction à Java 32 Retour sur les méthodes n Méthodes dinstances: public, sauf si elles ne servent que de méthodes auxiliaires pour la réalisation dautres méthodes u Appel: objetReceveur.nomMéthodes(arguments) u dans le corps de la méthode : F on peut accéder aux attributs définis par la classe. on peut désigner le receveur du message par this on peut omettre this u on peut définir des méthodes pour accéder ou modifier les attributs et leur associer un niveau de visibilité. Cela peut éviter de rendre ces attributs directement visibles.

33 F. Voisin : Introduction à Java 33 Retour sur les méthodes (suite) Méthodes de classes ( static ) u même principe pour la visibilité u appel: NomClasse.nomMéthodes(arguments) u accès impossible aux variables dinstance (de quelle instance ???) n Tant les méthodes dinstances que les méthodes de classes peuvent être surchargées (i.e. avoir le même nom) n Deux méthodes surchargées ne peuvent pas se différencier uniquement par le type de la valeur de retour

34 F. Voisin : Introduction à Java 34 Les constructeurs n des méthodes pour initialiser les instances à la création… n si une classe ne définit pas de constructeur, le système fournit un constructeur par défaut, sans argument n si une classe définit au moins un constructeur, il nexiste plus de constructeur par défaut implicite (mais on peut en définir un !) n Le choix du constructeurs appelé est guidé par les paramètres n syntaxe imposée: u pas de type de retour u le nom de la méthode est celui de la classe

35 F. Voisin : Introduction à Java 35 Les constructeurs (suite) n on peut surcharger les constructeurs pour offrir plusieurs syntaxes dappel possibles public Employe(String nom) { this(nom, Employe.salaireParDefaut); System.out.println( " Bienvenu cher " + nom); } où Employe.salaireParDefaut serait une nouvelle variable de classe. Utilisation ? Employe E5 = new Employe( " coco " ); un constructeur peut en appeler un autre via la notation this(…) mais celle-ci doit être la première instruction du nouveau constructeur lappel à new lance automatiquement le constructeur n Erreur (à la compilation) si aucun constructeur nest appelable (visibilité, paramètres), compte-tenu des constructeurs définis

36 F. Voisin : Introduction à Java 36 Exercice Définir deux classes Employe et Entreprise telles que : u Chaque employé a: nom, salaire, ident. unique, éventuellement une entreprise u Chaque entreprise a: nom, statut (liste fixe de statuts : SA, SARL,…) nombre et collection demployés u On peut créer un nouvel employé, lister ses informations, lister tous les employés connus u On peut créer une entreprise, lister ses salariés, embaucher une personne (quitte à la débaucher de son entreprise actuelle), débaucher un employé. Un employé sans employeur actuel reste connu du système. avec toute méthode ou attribut nécessaire…


Télécharger ppt "F. Voisin : Introduction à Java 1 Introduction à Java Frédéric VOISIN FIIFO - « Remise à Niveau »"

Présentations similaires


Annonces Google