Licence d informatique. Hugues Fauconnier. hf@liafa.univ-paris-diderot.fr (2012-2013)



Documents pareils
INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

PROGRAMMATION PAR OBJETS

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

as Architecture des Systèmes d Information

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Auto-évaluation Programmation en Java

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Initiation à JAVA et à la programmation objet.

Programmer en JAVA. par Tama

TP1 : Initiation à Java et Eclipse

Génie Logiciel avec Ada. 4 février 2013

Java Licence Professionnelle CISII,

Introduction au langage Java

Cours 1: Java et les objets

Java Licence Professionnelle CISII,

Langage Java. Classe de première SI

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Une introduction à Java

Objets et Programmation. origine des langages orientés-objet

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

INITIATION AU LANGAGE JAVA

Java Licence professionnelle CISII,

Design patterns. Design patterns - définition. Design patterns - avantages

Environnements de développement (intégrés)

Chapitre I Notions de base et outils de travail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Introduction à Java. Philippe Genoud.

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Java c est quoi? Java pourquoi?

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Héritage presque multiple en Java (1/2)

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Java 1.5 : principales nouveautés

1 Définition d une classe en Java

Plan du cours. Historique du langage Nouveautés de Java 7

Programmation Objet Java Correction

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Chapitre 10. Les interfaces Comparable et Comparator 1

Threads. Threads. USTL routier 1

Web Tier : déploiement de servlets

Bases Java - Eclipse / Netbeans

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Développement Logiciel

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Gestion distribuée (par sockets) de banque en Java

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

RMI le langage Java XII-1 JMF

Corrigé des exercices sur les références

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Généralités sur le Langage Java et éléments syntaxiques.

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Java - la plateforme

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

La JVM. La machine virtuelle Java. La JVM. La JVM

Chapitre VI- La validation de la composition.

Premiers Pas en Programmation Objet : les Classes et les Objets

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Package Java.util Classe générique

Programmation Internet en Java

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

COMPARAISONDESLANGAGESC, C++, JAVA ET

Interfaces graphiques avec l API Swing

Remote Method Invocation (RMI)

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

TP1. Outils Java Eléments de correction

Initiation à la programmation orientée-objet avec le langage Java

TD/TP PAC - Programmation n 3

Flux de données Lecture/Ecriture Fichiers

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Synchro et Threads Java TM

ACTIVITÉ DE PROGRAMMATION

La technologie Java Card TM

Remote Method Invocation Les classes implémentant Serializable

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Introduction : les processus. Introduction : les threads. Plan

Programmation en Java IUT GEII (MC-II1) 1

LOG4430 : Architecture logicielle et conception avancée

Un ordonnanceur stupide

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Création d un service web avec NetBeans 5.5 et SJAS 9

Arbres binaires de recherche

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Programmeur Java 1.4 et 5.0

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Transcription:

Cours programmationorientée objet en Java Licence d informatique Hugues Fauconnier hf@liafa.univ-paris-diderot.fr (2012-2013)

Plan du cours Introduction: programmation objet pourquoi? Comment? Un exemple en Java Classes et objets (révision) Méthodes et variables, constructeurs, contrôle d accès, constructeurs Héritage: liaison dynamique et typage Extension de classe, méthode et héritage, variables et héritage, constructeurs et héritage Héritage: compléments classes abstraites et interfaces, classes internes et emboîtées, classe Object, clonage, Exemple de programmation objet: interface graphique et Swing Exceptions Divers: Noms, conversions, héritage et tableaux Généricité Généralités, types génériques imbriqués, types paramètres bornés, méthodes génériques Types de données String et expressions régulières, Collections, Conteneurs, itérations Diverses classes: Threads String expressions régulières, systèmes, fichiers, E/S Introduction à la programmation concurrente Compléments Reflections, annotations, documentation Les objets dans d autres langages Le site du cours: http://www.liafa.univ-paris-diderot.fr/~hf/verif/ens/an12-13/poo/l3.poo.html Didel: http://didel.script.univ-paris-diderot.fr/claroline/course/index.php?cid=poo POO-L3 H. Fauconnier 2

Bibliographie De nombreux livres sur java (attention java >= 1.5) dernière version 1.7 En ligne: http://mindview.net/books/tij4 Thinking in Java, 4th edition Bruce Eckel http://docs.oracle.com/javase/ Livre conseillé: The Java Programming language fourth edition AW Ken Arnold, James Gosling, David Holmes POO-L3 H. Fauconnier 3

Chapitre I Introduction

A) Généralités Problème du logiciel: Taille Coût : développement et maintenance Fiabilité Solutions : Modularité Réutiliser le logiciel Certification Comment? POO-L3 H. Fauconnier 5

Typage Histoire: Fonctions et procédures (60 Fortran) Typage des données (70) Pascal Algol Modules: données + fonctions regroupées (80) ada Programmation objet: classes, objets et héritage POO-L3 H. Fauconnier 6

B) Principes de base de la POO Objet et classe: Classe = définitions pour des données (variables) + fonctions (méthodes) agissant sur ces données Objet = élément d une classe (instance) avec un état (une méthode ou une variable peut être ) de classe = commune à la classe ou d instance = dépendant de l instance POO-L3 H. Fauconnier 7

Principes de bases (suite) Encapsulation et séparation de la spécification et de l implémentation Séparer l implémentation de la spécification. Héritage: Ne doit être visible de l extérieur que ce qui est nécessaire, les détails d implémentation sont «cachés» Une classe peut hériter des propriétés d une autre classe: un classe peut être une extension d une autre classe. POO-L3 H. Fauconnier 8

Principes de bases de la POO Mais surtout notion de polymorphisme: Si une classe A est une extension d une classe B: A doit pouvoir redéfinir certaines méthodes (disons f()) Un objet a de classe A doit pouvoir être considéré comme un objet de classe B On doit donc accepter : B b; b=a; (a a toutes les propriétés d un B) b.f() Doit appeler la méthode redéfinie dans A! C est le transtypage (exemple: méthode paint des interfaces graphiques) POO-L3 H. Fauconnier 9

Principes de bases Polymorphisme: Ici l association entre le nom f() et le code (code de A ou code de B) a lieu dynamiquement (=à l exécution) Liaison dynamique On peut aussi vouloir «paramétrer» une classe (ou une méthode) par une autre classe. Exemple: Pile d entiers Dans ce cas aussi un nom peut correspondre à plusieurs codes, mais ici l association peut avoir lieu de façon statique (au moment de la compilation) POO-L3 H. Fauconnier 10

C) Comment assurer la réutilisation du logiciel? Type abstrait de données définir le type par ses propriétés (spécification) Interface, spécification et implémentation Une interface et une spécification (=les propriétés à assurer) pour définir un type Une (ou plusieurs) implémentation du type abstrait de données Ces implémentations doivent vérifier la spécification POO-L3 H. Fauconnier 11

Comment assurer la réutilisation du logiciel? Pour l utilisateur du type abstrait de données Accès uniquement à l interface (pas d accès à l implémentation) Utilisation des propriétés du type abstrait telles que définies dans la spécification. (L utilisateur est lui-même un type abstrait avec une interface et une spécification) POO-L3 H. Fauconnier 12

Comment assurer la réutilisation du logiciel? Mais en utilisant un type abstrait l utilisateur n'en connaît pas l implémentation il sait uniquement que la spécification du type abstrait est supposée être vérifiée par l'implémentation. Pour la réalisation concrète, une implémentation particulière est choisie Il y a naturellement polymorphisme POO-L3 H. Fauconnier 13

Notion de contrat (Eiffel) Un client et un vendeur Un contrat lie le vendeur et le client (spécification) Le client ne peut utiliser l objet que par son interface La réalisation de l objet est cachée au client Le contrat est conditionné par l utilisation correcte de l objet (pré-condition) Sous réserve de la pré-condition le vendeur s engage à ce que l objet vérifie sa spécification (postcondition) Le vendeur peut déléguer: l objet délégué doit vérifier au moins le contrat (héritage) POO-L3 H. Fauconnier 14

D) Un exemple Pile abstraite et diverses implémentations POO-L3 H. Fauconnier 15

Type abstrait de données NOM pile[x] FONCTIONS vide : pile[x] -> Boolean nouvelle : -> pile[x] empiler : X x pile[x] -> pile[x] dépiler : pile[x] -> X x pile[x] PRECONDITIONS dépiler(s: pile[x]) <=> (not vide(s)) AXIOMES forall x in X, s in pile[x] vide(nouvelle()) not vide(empiler(x,s)) dépiler(empiler(x,s))=(x,s) POO-L3 H. Fauconnier 16

Remarques Le type est paramétré par un autre type Les axiomes correspondent aux préconditions Il n y pas de représentation Il faudrait vérifier que cette définition caractérise bien un pile au sens usuel du terme (c est possible) POO-L3 H. Fauconnier 17

Pile abstraite en java package pile; abstract class Pile <T>{ abstract public T empiler(t v); abstract public T dépiler(); abstract public Boolean estvide(); POO-L3 H. Fauconnier 18

Divers package: regroupement de diverses classes abstract: signifie qu il n y a pas d implémentation public: accessible de l extérieur La classe est «paramétrée» par un type POO-L3 H. Fauconnier 19

Implémentations On va implémenter la pile: Avec un objet de classe ArrayList Avec un objet de classe LinkedList Avec la classe Integer pour obtenir une pile de Integer POO-L3 H. Fauconnier 20

Une implémentation package pile; import java.util.emptystackexception; import java.util.arraylist; public class MaPile<T> extends Pile<T>{ private ArrayList<T> items; public MaPile() { items =new ArrayList<T>(10); public Boolean estvide(){ return items.isempty(); public T empiler(t item){ items.add(item); return item; // POO-L3 H. Fauconnier 21

Suite // Public T dépiler(){ int len = items.size(); T item = null; if (len == 0) throw new EmptyStackException(); item = items.elementat(len - 1); items.get(len - 1); return item; POO-L3 H. Fauconnier 22

Autre implémentation avec listes package pile; import java.util.linkedlist; public class SaPile<T> extends Pile<T> { private LinkedList<T> items; public SaPile(){ items = new LinkedList<T>(); public Boolean estvide(){ return items.isempty(); public T empiler(t item){ items.addfirst(item); return item; public T dépiler(){ return items.removefirst(); POO-L3 H. Fauconnier 23

Une pile de Integer public class PileInteger extends Pile<Integer>{ private Integer[] items; private int top=0; private int max=100; public PileInteger(){ items = new Integer[max]; public Integer empiler(integer item){ if (this.estpleine()) throw new EmptyStackException(); items[top++] = item; return item; // POO-L3 H. Fauconnier 24

Suite public synchronized Integer dépiler(){ Integer item = null; if (this.estvide()) throw new EmptyStackException(); item = items[--top]; return item; public Boolean estvide(){ return (top == 0); public boolean estpleine(){ return (top == max -1); protected void finalize() throws Throwable { items = null; super.finalize(); POO-L3 H. Fauconnier 25

Comment utiliser ces classes? Le but est de pouvoir écrire du code utilisant la classe Pile abstraite Au moment de l exécution, bien sûr, ce code s appliquera à un objet concret (qui a une implémentation) Mais ce code doit s appliquer à toute implémentation de Pile POO-L3 H. Fauconnier 26

Un main package pile; public class Main { public static void vider(pile p){ while(!p.estvide()){ System.out.println(p.dépiler()); public static void main(string[] args) { MaPile<Integer> p1= new MaPile<Integer>(); for(int i=0;i<10;i++) p1.empiler(i); vider(p1); SaPile<String> p2= new SaPile<String>(); p2.empiler("un"); p2.empiler("deux"); p2.empiler("trois"); vider(p2); POO-L3 H. Fauconnier 27

E) java: quelques rappels Un source avec le suffixe.java Une classe par fichier source (en principe) même nom pour la classe et le fichier source (sans le suffixe.java) Méthode public static void main(string[]); main est le point d entrée Compilation génère un.class Exécution en lançant la machine java POO-L3 H. Fauconnier 28

Généralités Un peu plus qu un langage de programmation: gratuit! (licence GPL) Indépendant de la plateforme Langage interprété et byte code Syntaxe à la C Orienté objet (classes héritage) Nombreuses bibliothèques Pas de pointeurs! (ou que des pointeurs!) Ramasse-miettes Multi-thread Distribué (WEB) applet, servlet, Dernière version Java SE 7 (GPL) Site:http://www.java.com/fr POO-L3 H. Fauconnier 29

Plateforme Java La compilation génère un.class en bytecode (langage intermédiaire indépendant de la plateforme). Le bytecode est interprété par un interpréteur Java JVM Compilation javac interprétation java POO-L3 H. Fauconnier 30

Langage intermédiaire et Interpréteur Avantage: indépendance de la plateforme Échange de bytecode (applet) Inconvénient: efficacité POO-L3 H. Fauconnier 31

Plateforme Java La plateforme java: software au-dessus d une plateforme exécutable sur un hardware (exemple MacOs, linux ) Java VM Java application Programming Interface (Java API): POO-L3 H. Fauconnier 32

Tout un environnement POO-L3 H. Fauconnier 33

Trois exemples de base Une application Une applet Une application avec interface graphique POO-L3 H. Fauconnier 34

Application: Fichier Appli.java: /** * Une application basique... */ class Appli { public static void main(string[] args) { System.out.println("Bienvenue en L3..."); //affichage POO-L3 H. Fauconnier 35

Compiler, exécuter Créer un fichier Appli.java Compilation: javac Appli.java Création de Appli.class (bytecode) Interpréter le byte code: java Appli Attention aux suffixes!!! (il faut que javac et java soient dans $PATH) Exception in thread "main" java.lang.noclassdeffounderror: Il ne trouve pas le main -> vérifier le nom! Variable CLASSPATH ou option -classpath POO-L3 H. Fauconnier 36

Remarques Commentaires /* */ et // Définition de classe une classe contient des méthodes (=fonctions) et des variables Pas de fonctions ou de variables globales (uniquement dans des classes ou des instances) Méthode main: public static void main(string[] arg) public static Void String Point d entrée POO-L3 H. Fauconnier 37

Remarques Classe System out est une variable de la classe System println méthode de System.out out est une variable de classe qui fait référence à une instance de la classe PrintStream qui implémente un flot de sortie. Cette instance a une méthode println POO-L3 H. Fauconnier 38

Remarques Classe: définit des méthodes et des variables (déclaration) Instance d une classe (objet) Méthode de classe: fonction associée à (toute la) classe. Méthode d instance: fonction associée à une instance particulière. Variable de classe: associée à une classe (globale et partagée par toutes les instances) Variable d instance: associée à un objet (instancié) Patience POO-L3 H. Fauconnier 39

Applet: Applet et WEB Client (navigateur) et serveur WEB Le client fait des requêtes html, le serveur répond par des pages html Applet: Le serveur répond par une page contenant des applets Applet: byte code Code exécuté par le client Permet de faire des animations avec interfaces graphiques sur le client. Une des causes du succès de java. POO-L3 H. Fauconnier 40

Exemple applet Fichier MonApplet.java: /** * Une applet basique... */ import java.applet.applet; import java.awt.graphics; public class MonApplet extends Applet { public void paint(graphics g){ g.drawstring("bienvenue en en L3...", 50,25); POO-L3 H. Fauconnier 41

Remarques: import et package: Un package est un regroupement de classes. Toute classe est dans un package Package par défaut (sans nom) classpath import java.applet.*; Importe le package java.applet Applet est une classe de ce package, Sans importation il faudrait java.applet.applet POO-L3 H. Fauconnier 42

Remarques: La classe Applet contient ce qu il faut pour écrire une applet extends Applet: La classe définie est une extension de la classe Applet: Elle contient tout ce que contient la classe Applet (et peut redéfinir certaines méthodes (paint)) Patience!! POO-L3 H. Fauconnier 43

Remarques Une Applet contient les méthodes paint start et init. En redéfinissant paint, l applet une fois lancée exécutera ce code redéfini. Graphics g argument de paint est un objet qui représente le contexte graphique de l applet. drawstring est une méthode (d instance) qui affiche une chaîne, 50, 25: affichage à partir de la position (x,y) à partir du point (0,0) coin en haut à gauche de l applet. POO-L3 H. Fauconnier 44

Pour exécuter l applet L applet doit être exécutée dans un navigateur capable d interpréter du bytecode correspondant à des applet. Il faut créer un fichier HTML pour le navigateur. POO-L3 H. Fauconnier 45

Html pour l applet Fichier Bienvenu.html: <HTML> <HEAD> <TITLE> Une petite applet </TITLE> <BODY> <APPLET CODE='MonApplet.class' WIDTH=200 Height=50> </APPLET> </BODY> </HTML> POO-L3 H. Fauconnier 46

Html Structure avec balises: Exemples: <HTML> </HTML> url: <a target="_blank" href="http:// www.liafa.jussieu.f/~hf">page de hf</a> Ici: <APPLET CODE='MonApplet.class' WIDTH=200 Height=50> </APPLET> POO-L3 H. Fauconnier 47

Exemple interface graphique Fichier MonSwing.java: /** * Une application basique... avec interface graphique */ import javax.swing.*; public class MonSwing { private static void creerframe() { //Une formule magique... JFrame.setDefaultLookAndFeelDecorated(true); //Creation d'une Frame JFrame frame = new JFrame("MonSwing"); frame.setdefaultcloseoperation(jframe.exit_on_close); //Afficher un message JLabel label = new JLabel("Bienvenue en L3..."); frame.getcontentpane().add(label); //Afficher la fenêtre frame.pack(); frame.setvisible(true); public static void main(string[] args) { creerframe(); POO-L3 H. Fauconnier 48

Remarques Importation de packages Définition d un conteneur top-level JFrame, implémenté comme instance de la classe JFrame Affichage de ce conteneur Définition d un composant JLabel, implémenté comme instance de JLabel Ajout du composant JLabel dans la JFrame Définition du comportement de la Jframe sur un click du bouton de fremeture Une méthode main qui crée la JFrame POO-L3 H. Fauconnier 49

Pour finir Java 1.5 et 6 annotations, types méthodes paramétrés par des types Très nombreux packages Nombreux outils de développement (gratuits) eclipse, netbeans.. POO-L3 H. Fauconnier 50

En plus Entrées-sorties POO-L3 H. Fauconnier 51

Entrée-sortie public static void main(string[] args) { // sortie avec printf ou double a = 5.6d ; double b = 2d ; String mul = "multiplié par" ; String eq="égal"; System.out.printf(Locale.ENGLISH, "%3.2f X %3.2f = %6.4f \n", a,b, a*b); System.out.printf(Locale.FRENCH, "%3.2f %s %3.2f %s %6.4f \n", a, mul,b, eq,a*b); System.out.format( "Aujourd'hui %1$tA, %1$te %1$tB,"+ " il est: %1$tH h %1$tM min %1$tS \n", Calendar.getInstance()); // System.out.flush(); POO-L3 H. Fauconnier 52

Sortie 5.60 X 2.00 = 11.2000 5,60 multiplié par 2,00 égal 11,2000 Aujourd'hui mardi, 10 octobre, il est: 15 h 31 min 01 POO-L3 H. Fauconnier 53

Scanner Scanner sc = new Scanner(System.in); for(boolean fait=false; fait==false;){ try { System.out.println("Répondre o ou O:"); String s1 =sc.next(pattern.compile("[0o]")); fait=true; catch(inputmismatchexception e) { sc.next(); if (sc.hasnextint()){ int i= sc.nextint(); System.out.println("entier lu "+i); System.out.println("next token :"+sc.next()); sc.close(); POO-L3 H. Fauconnier 54

Scanner if (sc.hasnextint()){ int i= sc.nextint(); System.out.println("entier lu "+i); System.out.println("next token :"+sc.next()); sc.close(); String input = "1 stop 2 stop éléphant gris stop rien"; Scanner s = new(scanner(input).usedelimiter("\\s*stop\\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close(); POO-L3 H. Fauconnier 55

Sortie next token :o 1 2 éléphant gris rien POO-L3 H. Fauconnier 56

Les classes System System.out variable (static) de classe PrintStream PrintStream contient print (et printf) System.in variable (static) de classe InputStream Scanner POO-L3 H. Fauconnier 57