1 une introduction à java ift 287 (semaine 1). 2 aperçu de java comparable au c++ –syntaxe très...

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

Upload: rousel-viguier

Post on 04-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

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 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

2

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 3: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

3

• 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 4: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

4

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 5: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

5

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 6: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

6

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 7: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

7

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 8: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

8

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 9: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

9

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 10: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

10

Les structures de contrôle

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

• On retrouve :– break– continue

Page 11: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

11

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 12: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

12

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”);

Page 13: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

13

Contenu d'une classe

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

– public– protected– private

Caract.CapacitésNaissanc

eMort

Page 14: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

14

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 15: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

15

Les méthodes

• On appelle la méthode meth d’un objet obj avec les paramètres params par : 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 16: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

16

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 17: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

17

É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 18: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

18

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 19: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

19

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 20: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

20

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 21: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

21

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 22: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

22

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 23: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

23

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 24: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

24

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 25: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

25

/** 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 26: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

26

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 27: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

27

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 28: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

28

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 29: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

29

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 30: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

30

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 31: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

31

Bibliothèques

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

ligne avec le SDK téléchargé à partir du site de SUN – java.sun.com

Page 32: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

32

Packages courant

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

Page 33: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

33

Java 1.5

• aussi appelé– Java 2 Platform Standard Edition (J2SE) 5.0

• nouveautés– types génériques (template)– conversion automatique entre type primitif et

«wrapper class»– itérateur intégré aux boucles for– type énuméré– printf de C– primitives de traitement de la concurrence– JVM plus efficace

Page 34: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

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 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

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 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

36

Java 1.6

• web service and développement XML

• simplification développement GUI• meilleur support desktop natif• accès simplifié aux services natifs

de sécurité• comprend NetBeans 5.5

(environnement de développement similaire à Eclipse)

Page 37: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

37

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). – Pas de classes paramétrées.

Page 38: 1 Une introduction à Java IFT 287 (Semaine 1). 2 Aperçu de Java Comparable au C++ –Syntaxe très proche du C++ –Prog. Orienté-objet –… et prog. structurée

38

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)