30
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Embed Size (px)

Citation preview

Page 1: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

A propos de java

Sun, fin 1995

C++ nettoyé

semi-interprété

(ou : semi-compilé)

Page 2: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Langages compilés

Autres fichierscompilés(bibliothèques …)

Fichiercode machine

Fichiersource

compilation

Fichierexécutable

Édition de liens

exécutioncode machine lié à l’architecturede la machine

Pascal, ADA, C, C++, ...

Page 3: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Autres fichiers sources chargés à la demande

Fichiersource

Exécutionpar un interpréteur

Langages interprétés

Interprétation : traduction du code source en code machine « à la volée »

Lisp, Prolog, shell Unix,Javascript, php, ...

Page 4: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Et Java?

pseudo-code

Pseudo-code : code pour une machine abstraitepossède des fonctionnalités communes à toutes les architectures

exécution

Interprétation du pseudo-code

compilation

Fichiersource

.javaFichiercode machine

.class

par une "machinevirtuelle"

Page 5: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

• Pré-compilation en un code universel (pseudo-code ou byte-code)donc indépendant de toute architecture

• Puis interprétation par une machine virtuelle (propre à chaque architecture de machine)

(toutefois il existe des compilateurs en code natif)

Vieille idée : voir le 1er Pascal

+ portabilité du code compilé

- exécution moins rapide

Page 6: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

A propos de java

Sun, fin 1995

C++ nettoyé

semi-interprété

pour des applications distribuées(sur Internet notamment)

Page 7: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Client Serveur

Navigateur Serveur web

Visualisationdu document

Intro.html?

Intro.html

1

2

3

Le succès de Java a d'abord été lié au web

Page 8: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Applet

programme invoqué dans un document HTML et exécuté par un navigateur

<OBJECTclassid="http://www.ici.fr/monApp.class"></OBJECT>

(depuis HTML 4, <OBJECT> remplace <APPLET>)

Page 9: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Trois sortes de programmes Java

• Applet : programme invoqué dans un document HTML et exécuté par un navigateur

• Application : programme "classique"

• Servlet

programme invoqué par un serveur web et exécuté sur la machine du serveur

Page 10: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Java en tant que langage de programmation par objets

Exemple d'application : Shogun

Page 11: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Une application = un ensemble d'objets qui ont chacun leur rôle à jouer et qui interagissent

Composants graphiques

fenêtre

barre de menu

bouton

zones de texte

panneau (sur lequel est affiché le jeu)

Objets autres…

Page 12: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Objets autres :

échiquier

ensemble de pièces 1

ensemble de pièces 2

jeu gère une partie

gère la "grille" elle même

pièces

pièces

une pièce gère sa position sur l'échiquierelle sait se déplacer et s'afficher

Page 13: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Les objets collaborent entre eux, chacun étant responsable des actions qu'il effectue

Ex : afficher le jeu

panneau jeu : "jeu, affiche-toi"

jeu : "echiquier, affiche-toi""ens. pièces 1, affiche-toi"

"ens. pièces 2, affiche-toi"

ens. pièces 1 : à chaque pièce : "pièce, affiche-toi"

ens. pièces 2 : à chaque pièce : "pièce, affiche-toi"

Page 14: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Ex: gérer le début de mouvement du joueur 1

Clic! sur panneau de jeu en (i,j)

jeu est averti

(i,j) c'est quelle case?

c'est (l,c)

as-tu une pièce en (l,c)? pièces

jeu echiquier

pièce, es-tu en (l,c)?

ens pièces 1

Page 15: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Les objets sont des instances de classes

Une classe est un "modèle" qui définit

- la structure d’un objet (ses attributs)

- et son comportement (ses méthodes)

La structure des objets est (+ ou -) encapsulée,ainsi que certaines de leurs méthodes

Page 16: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Partie privée "encapsulée"

attributs

private : accessible seulement dans le corps des méthodes de la classe

public : accessible par toute méthode de toute classe

+ des méthodes de « cuisine interne »

Partie publique

méthodes de « service »

Une classe ordinaire

Page 17: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

La classe Piece (simplifiée)

// fichier Piece.java

public class Piece {

// attributsprivate int joueur;private int lig;private int col;private int depl; // méthodes

}

0 1

2

3

4

1

6

2

Deux instancesde Piece

Page 18: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

// méthodes private int tirage()

{…}

public Piece(int j, int l, int c){…}

public int quelDeplacement(){…}

public void deplacer(int nouvL,int nouvC){…}

public void afficher(…){…}

public String toString(){…}

}Pas besoin de connaître le corpsdes méthodes pour communiqueravec une instance de Piece

Page 19: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Ex: l'objet jeu demande à la pièce p de se déplacer en case (4,3)

p.deplacer(4,3)

D'ailleurs, jeu n'a pas le droit de modifier directement p :

p.lig = 4; p.col = 3;

car col et lig sont encapsulés

C'est p qui modifie son propre état

jeu n'a pas besoin de savoir comment p procède

Page 20: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

On dit que les objets communiquent par envoi de message :

jeu envoie à p le message "deplacer(4,3)"

Page 21: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Constructeur : méthode qui sert à initialiser automatiquement un objet lors de sa création

Mais comment crée-t-on un objet?

Intérêt : éviter les oublis d'initialisation

public Piece(int j, int l, int c){joueur = j;

lig = l; col = c;

depl = tirage();}

Page 22: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Commençons par savoir nommer les objets

Il existe des variables appelées références, qui servent à désigner des objets

Piece p1;

// déclaration d'une référence

Piece p1 = null;

// déclaration + initialisation

Page 23: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

@

new Piece(0,2,3)

3. Retourne l'adresse @ de l'objet … … reste à récupérer cette adresse

1. Crée une instance de la classe Piece réservation d'une place en mémoire

2. Appelle un constructeur sur cet objet Initialisation de l'objet

0

2

3

4

Création d'un objet

Page 24: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

p @

0

2

3

2

@

Piece p;

p = new Piece (0,2,3);

Page 25: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Equivalent Delphi de ces actions

var p : Piece ;

p := Piece.create(0,2,3);

Piece p ;

p = new Piece (0,2,3);

Page 26: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Objets et références ne sont pas liés "à vie"

Un objet peut avoir plusieurs noms, aucun nom, ou changer de nom

Piece p1 = new Piece (0,2,3);

Piece p2 = p1;

p1 = new Piece(0,1,1);

p2 = null;

Page 27: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Structure d'une application Java

• un ensemble de classes, dont l’une comporte une méthode main

public class Hello{ public static void main (String args[])

{ System.out.println("Bonjour, monde!");

}}

Page 28: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

public class MonAppliTest{ public static void main (String args[]) {

Piece p = new Piece(0,1,1);String etat = p.toString();System.out.println("état de p :" + etat);int d = p.quelDeplacement();p.deplace(1+d,1);etat = p.toString();System.out.println("état de p :"+ etat);

}}

Page 29: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

Bibliographie

• Java 2 : notions fondamentales (vol I), Sun microsystems, 1999Très orienté "pratique"

• Programmer en Java (2ème éd), Claude Delannoy, Eyrolles, 2002 Précis, couvre en détails beaucoup d’aspects de Java

• Le langage Java, concepts et pratique, Irène Charon, Hermès, 2000

• Java La synthèse (2ème éd), InterEditions, 1998Bien pour concepts de programmation,en retard sur classes graphiques

A la bibliothèque de l'IUT

Autre

Page 30: A propos de java Sun, fin 1995 C++ nettoyé semi-interprété (ou : semi-compilé)

http://java.sun.com/docs/books/tutorial/index.htmltutoriaux sur le site de Sun (in english of course)

http://www.developpez.comtout pour les développeurs francophones

Web