37
1 Une introduction à Java IFT 287 (Semaine 1) U N IV E R S IT É DE SHERBROOKE

1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

Embed Size (px)

Citation preview

Page 1: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

1

Une introduction à Java

IFT 287(Semaine 1)

U N IV E R S IT É D ESH ERBROOKE

Page 2: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

2

Java - Historique

• Développé par Sun Microsystems en 1994– Inventeur James Gosling (canadien!)

• Objectif– langage sûr (fortement typé)– gestion automatique de la mémoire– usage sur le web

Page 3: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

3

Aperçu de JavaComparable au C++

– Syntaxe très proche du C++

– Prog. Orienté-objet– … et prog. structurée– Fortement typé– Types de bases– Gestion des tableaux– Exceptions

… mais différent– Interprété– Gestion implicite de la

mémoire– Existence d’une

classe Objet– Bibliothèque de base

très développée– Pas de gestion

explicite des pointeurs

– Pas de surcharge d’opérateurs

Page 4: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

4

• Code javaCode javaimport java.lang.*class PremierProg { public static void main (String[] args){ System.out.println(“Bonjour!”);

}}

• Code C++Code C++#include <iostream.h>int main (int argc, char *argv[]) { cout << “Bonjour!” << endl;}

Premier exemple

Page 5: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

5

Compilation/interprétation

Pour obtenir un programme :• à partir du code C++, on compile

directement le source : gcc programme.cc

• à partir du java, on transforme le source dans un langage qui sera interprété dans la machine virtuel :

javac PremierProg.javajava PremierProg

Page 6: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

6

Processus d’obtention d’un exécutable

Fichier .java(source)

Fichier .class(bytecode)

libjava.soInterprétation:Java

Compilation :javac

import java.lang.*class PremierProg { public static void main (String[] args){ System.out.println(“Bonjour!”); }}

import java.lang.*class PremierProg { public static void main (String[] args){ System.out.println(“Bonjour!”); }}

class PremierProg { method public static void main (java.lang.String[]) max_stack 2 { getstatic java.io.PrintStream java.lang.System.out ldc "Bonjour!" invokevirtual void java.io.PrintStream.println(java.lang.String) return } }

class PremierProg { method public static void main (java.lang.String[]) max_stack 2 { getstatic java.io.PrintStream java.lang.System.out ldc "Bonjour!" invokevirtual void java.io.PrintStream.println(java.lang.String) return } }

Page 7: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

7

Conventions• Fichier : porte le nom de la classe

qu’il décrit (PremierProg.java)• Package : commencent par une

minuscule (java.lang.*)• Classe : commencent par une

majuscule (String)• Variable : commence par une

minuscule (maVariable)• Constante : en majuscule

(UNE_CONSTANTE)

Page 8: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

8

Catégories de types

• Types primitifs– entier, caractère, point flottant,

booléen• Types références

– classes et vecteurs– ce sont des pointeurs vers des objets– allocation avec new– pas de destructeur (garbage

collection par la machine virtuelle).

Page 9: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

9

Types primitifs

• boolean : true ou false• byte : -128 à 127• short : -32768 à 32767• int : -2147483648 à 2147483647• long : -9223372036854775808 à

9223372036854775807• char : \u0000 à \uffff• float : 1e-45 à 1e+38• double : 1e-324 à 1e+308

Page 10: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

10

Les tableaux

• Semblable au C++• Par exemple

int numero[] = new int[3];

• L'indexation commence à 0• Création implicite d'une classe• Accès à la longueur par le champ lengthnoms.length ;

• Tableaux multidimensionnels– int[][][] a = new int[l][m][n];

Page 11: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

11

Les structures de contrôle

• Les mêmes qu’en C++ :– if– while / for / do…until– case– goto

• On retrouve :– break– continue

Page 12: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

12

Le paradigme « orienté-objet »

• Caractéristique : encapsulation, héritage et polymorphisme

• Les entités sont des objets dont le modèle est une classe

• On fait agir les objets en activant des méthodes

Page 13: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

13

Les classes• On crée une nouvelle instance (un

objet) d’une classe avec le mot-clé new

• Par exemple pour créer une nouvelle chaîne de caractères dont la valeur est “Bonjour” :String maChaine = new String (“Bonjour”);

• Raccourci String maChaine = “Bonjour”;

Page 14: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

14

Contenu d'une classe

• Champs• Méthodes• Constructeurs• Destructeurs (Finalizer)• Visibilité

– public– protected– private– package

Caract.CapacitésNaissanc

eMort

Page 15: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

15

Privilèges d’accès

Soit un membre m déclaré dans une class A

classe A

visibilitéB sous-

classe de A

B n'est pas sous-classe

de AB sous-

classe de A

B n'est pas sous-classe

de A

private O N N N Nprotected O O O O Npublic O O O O Opackage O O O N N

B et A package différentB et A même package

accès au membre m à partir declasse B

Page 16: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

16

Les méthodes

• On appelle la méthode meth d’un objet obj avec les paramètres params comme suit :

obj.meth(params)• Comme pour une procédure C on

transmet des paramètres et on reçoit une valeur de retour :

char prem = maChaine.charAt(0)

Page 17: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

17

Exemplepublic class Test2 {

public static void main(String[] args) {

Personne p1 = new Personne("Denys Arcand");

Personne p2 = new Personne("Denise Robert");

Personne[] personnes = new Personne[3];

personnes[0] = p1;

personnes[1] = p2;

p1.setConjoint(p2);

p2.setConjoint(p1);

}

}

Page 18: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

18

Égalité entre objets

• ==– égalité sur les références– v1 == v2 ssi v1 et v2 réfère au même objet

• equals– pour vérifier si deux objets distincts sont égaux en

contenu

– v1.equals(v2) ssi v1 est égal en contenu à v2

– À redéfinir dans chaque classe, car l’implémentation de equals dans la classe Object est faite avec ==

Page 19: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

19

Passage d’argument

• Le passage en java est toujours par valeur• Comme les variables de type référence

contiennent un pointeur vers un objet, seul le pointeur est copié lors d’un appel; l’objet référencé n’est pas copié, donc la méthode appelée peut modifier l’objet référencé.

• Attention aux effets de bord• Nécessité de dupliquer un objet valeur si on

ne veut pas qu’il soit modifié par la méthode appelée– o.clone()

Page 20: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

20

La classe String

• Du package java.lang• Représente une chaîne de

caractères immutable• Exemple

String prenom = new String ("Benoit");

• Pour les accents, il est conseillé d'utiliser l'unicode : \uxxxx où xxxx est le code du caractère

• Création dynamique de String avec " " et +x = "Je me nomme " + prenom + " !" ;

Page 21: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

21

Méthodes de la classe String

• boolean equals(Object o)• int compareTo(Object o)• String concat(String str)• boolean endsWith(String suffix)• boolean startsWith(String prefix)• char[] toCharArray()• String substring(int beginIndex)• …

Page 22: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

22

La classe StringBuffer

• Du package java.lang• Contrairement à String est mutable• Permet de créer une créer une chaîne

de caractères par morceaux• Création :

StringBuffer = new StringBuffer (32) ;

StringBuffer = new StringBuffer ("Allo") ;

Page 23: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

23

Méthodes de StringBuffer

• StringBuffer append(String s)• int capacity()• StringBuffer delete (int start, int end)• StringBuffer insert (int offset, String s)• StringBuffer reverse ()• String subString (int start, int end)• String toString ()• …

Page 24: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

24

La classe Vector• Du package java.util• Représente un tableau qui peut grossir

dynamiquement• Exemple

Vector<String> noms = new Vectors<String>(2);

noms.add("Benoit");

noms.add("Marc");

noms.add("Bob");

noms.capacity();

noms.lastElement();

La capacité de noms est augmenté de 1

Page 25: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

25

Méthodes de la classe Vector

• boolean add (E o)• int capacity ()• boolean contains (Object o)• E get (int index)• E set(int index, E o)• boolean isEmpty()• boolean remove(Object o)• E lastElement()• …

Page 26: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

26

/** Permet de créer une personne et de l'associer à une autre personne qui est son conjoint. Chaque personne a un numéro unique, attribuée a sa création. */ public class Personne { // variable de classe // no à allouer à la prochaine personne créée private static int noPersonneCourant = 0; // variables d'instances private String nom; private Personne conjoint; private final int noPersonne;

/** Construit une personne et lui assigne un numéro unique. */ public Personne(String nom) { this.nom = nom; noPersonne = noPersonneCourant; noPersonneCourant = noPersonneCourant + 1; }

/** Retourne une chaîne de caractères représentant la personne. */ public String toString() { return nom + " " + noPersonne; }

/** Associe un conjoint à la personne. */ public void setConjoint(Personne p) { conjoint = p; }}// fin classe

Champs

méthode

Exemple d'une classe

Page 27: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

27

Mot-clé final

• Comment empêcher qu’une variable soit modifiée par la suite ?

• Comment créer une constante ?• final est l'équivalent de const en

C: il empêche la modification de la variable

Page 28: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

28

Variable de classe : mot-clé static

• Est-on obligé de toujours instancier un objet pour utiliser une méthode ?

• Comment faire pour utiliser une variable partagée par tous les objets d’une même classe ?

• Utilisation du mot-clé static• Celui ci rend le champs ou la méthode commune

à tout objet de la classe; on dit qu’il définit une “variable de classe”– A.v1 : accède à la variable v1 de la classe A– a.v2 : accède à la variable v2 de l’objet référencé par a

Page 29: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

29

Exemple la classe java.lang.Math

• La classe Math contient des méthodes pour effectuer des calculs mathématiques

• On appelle les méthodes en indiquant la classe et non l'objet :double x = Math.acos (10);

double y = Math.sqrt(50);

Page 30: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

30

Les exceptions

• Mécanisme pour gérer facilement les cas limites

• Capture la continuation du programme (pile des exécutions) pour pouvoir y revenir le cas échéant

• Même système qu'en C++• Les exceptions sont des objets hérités de

la classe java.lang.Exception• Attention aux baisses de performances

Page 31: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

31

Une trace d'exception~/ift287/h04/tp1 > java Test1

Exception in thread "main" java.lang.NullPointerException

        at Film.addActeur(Film.java:70)

        at Test1.main(Test1.java:20)

invasions.addActeur(girard);invasions.addActeur(girard);

classe Test1

public void addActeur(Personne p){ acteurs[nbActeurs] = p; nbActeurs = nbActeurs + 1;}

public void addActeur(Personne p){ acteurs[nbActeurs] = p; nbActeurs = nbActeurs + 1;}

classe Film

ligne 20

ligne 70

Page 32: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

32

Bibliothèques

• Les APIs de Java sont très développés• On peut trouver une documentation en

ligne sur le site d'Oracle – http://www.oracle.com/technetwork/

java/javase/overview/index.html

Page 33: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

33

Packages courant

• java.lang• java.util• java.math• java.io• java.awt• java.sql• java.net

Page 34: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

34

Types Génériques

• Permet de spécifier des paramètres dénotant des types à utiliser dans une classe

• Exemples classiques : les collections– Collection<E>– Set<E>– List<E>– Map<K,V>

Page 35: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

35

Exemples d’usage de types génériques

import java.util.*;public class Test{ public static void main(String[] args) { Set<Integer> m = new HashSet<Integer>(); m.add(new Integer(1)); for (Integer i : m) System.out.println(i); }}

Page 36: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

36

Conclusion

• Programmation par objets (basé sur les classes, de la famille C++). – Langage extrêmement simplifié (seulement

types de données de base, objets et tableaux).

– Pas de fonctions (seulement des méthodes), – pas de structure de données enregistrement

(seulement des objets), – pas de types somme (i.e. variantes).

Page 37: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif

37

Conclusion

• Compilé vers du bytecode (indépendant du processeur et du système d'exploitation),

• et plus récemment vers du code natif (au vol, plus rapide, moins portable).

• Ramasse-miette • Concurrence (threads)