92
Programmation Programmation Orientée Objet - Orientée Objet - JAVA JAVA Marcelo Zanconi Marcelo Zanconi Sup2i Sup2i

Programmation Orientée Objet - JAVA

  • Upload
    brick

  • View
    89

  • Download
    1

Embed Size (px)

DESCRIPTION

Programmation Orientée Objet - JAVA. Marcelo Zanconi Sup2i. Révision Objets/Classes. Objet: Une entité décrite par quelques propriétés, appelées attributs , un comportement , donné par un ensemble de méthodes et un état, donné par un ensemble de valeurs. Classe. - PowerPoint PPT Presentation

Citation preview

  • Programmation Oriente Objet - JAVAMarcelo Zanconi Sup2i

  • Rvision Objets/ClassesObjet: Une entit dcrite parquelques proprits, appeles attributs, un comportement , donn par un ensemble de mthodes et un tat, donn par un ensemble de valeurs

  • ClasseUne classe est une structure avec des attributs et des mthodesUne classe est aussi un ensemble d'objets qui partage les mmes caractristiques et le mme comportement. Une classe dfinit aussi un nouveau type de donne et chaque lment ainsi dclar est une instance de la classe.

  • Classes en JavaFichier .java Gnralement une classe par fichierChaque fichier contient UNE classe publique (public class)Le mot cl class pour crer une classepublic class Car {

    }

  • Classes Formalits Le nom d'une classe commence par une lettre majuscule. Nous pouvons mettre de majuscules et minuscules a volont.

  • Classes Modificateurspublic: idem variables et mthodesabstract: la classe ne peut pas tre instancie, elle sera utilise comme classe de base dans un hritage. Squelette d'une superclasse. final: classe qui n'est pas 'hritable'. Notre classe Car est publique avec ses mthodes et pourra participer dans une relation de hritage.

  • Cration de Classes Oprateur new pour crer une instance (nouvel objet).L'oprateur retourne un objet avec L'ensemble de attributs et mthodes dfinis dans la classe. Les valeurs par dfaut dpendent du constructeur (a voir)

    Car yourCar = new Car("orange");ClasseobjetcrationconstructeurCarmycarnewCar()=

  • Un constructeur? Mthode spciale dfinie dans la classeCre une nouvel instance d'un objetAppel automatiquement avec l'oprateur newPorte le mme nom que la classe ou il est dfiniEn absence de constructeur, le compilateur fournit en un.public class Car {// public Car(){// Corp du constructeur }

    }

  • Surcharge du ConstructeurPlusieurs constructeurs sont possiblespublic class Car { String color ; public Car(){//Constructeur sans paramtres}public Car( String c ){color = c; }

    }

  • Attributs d'une classeAussi appels variablesDfinit l'tat d'un objetLeurs valeurs sont particulires une instanceDclaration:

    Notation DOT pour acceder aux attributs: nomInstance.nomAttributpublic class Car {String color;String name;float weight;}myBeautifulCat.name;

  • Attributs Formalits Les variables commencent par une lettre minuscule. On peut ajouter de majuscules pour plus de clairet.

  • Attributs Modificateursprivateprotectedpublic protected est le modificateur par dfaut. (Attn: en C++ est private). Normalement les variables son private ou protected et seront visibles par l'action des mthodes. (Concept d'encapsulation).

  • Attributs statiques de classeAttributs partags par toutes les instances d'une classe. Toutes les instances ont les mmes valeurs pour ces attributs. Assimilables une variable globale... Dclars en utilisant le mot cl static Accessibles par la classe et par les instances de la classes.

    public class Car {String color;String name;float weight;static int motornumber;}Car.numberOfMoteurs;

  • Mthodes d'instanceBloc de code pour dfinir le comportement d'une instance et manipuler ses attributs.Dclare dans les classes et rfrenables par les instances, (selon les modificateurs...) Possibilit de surcharge

    Utilisation:public class MyClass { // public void myMethod() {// my actions}}myInstance.myMethod();

  • Mthodes Modificateursprivate: protectedpublic:static: mthode de classefinal: la mthode ne peut pas tre substitue dans une sous-classe (pas d'hritage)abstract: mthode d'une classe abstraite, dfinie les signatures des mthodesnative: mthode externe crite dans une autre langagesynchronized: un seul thread a la fois.

  • Mthodes de ClasseBloc de code pour dfinir un comportement gnral. Dclare en utilisant le mot cl staticPossibilit de surchargeElle ne peut pas utiliser des attributs d'instance et ne peut pas appeler des mthodes d'instance

    Utilisation:public class MyClass {public static void myMethod() {//mes actions}}MyClass.myMethod();

  • Mthodes de classes Les mthodes statiques n'accdent qu'aux variables locales ou aux autres membres statiques de la classe. Les fonctions mathmatiques sont un exemple de mthodes statiques. public class Car {String color;String name;float weight;static int motorNumber;public static int assignMotor() { return motorNumber++;}}

  • Mthodes Formalits Elles commencent par une lettre minuscule.On peut ajouter de majuscules a volont

  • RsumMthodes de classe o statiquesVariable de classe partage par toutes les instances d'une classe. Synonyme MyClass.myMethod()Utiliser mot cl static Variable de classe Comment les utilisermyInstance.myVariableVariables d'instance ou Attributs

  • Notation "." Accs aux: AttributsMthodesRetourne la valeur d'un attribut

    Appeler une mthodemyInstance.nameOfAttribute;myInstance.nameOfMethod();

  • Le pointeur "this"Pointeur explicit a l'instance actuelle (celle qui a appel la mthode). Utilis pour rfrencer l'instance actuelle

    Pour rfrencer les attributs/mthodes de l'instance actuelle.

    Appelle le constructeur de l'instanceDoit tre la premire instructionmyMethod(this);this.myVariable;this("Tomi","White");

  • Le pointeur "this"Exemple:public class MyClass {int test = 6;public MyClass() {int test = 4;System.out.println("Test = " + this.test);System.out.println("Test = " + test);}

    public static void main(String args[]) {new MyClass();}}

  • AggregationAssociation d'un objet vers un autre Un attribut d'une classe B est d'une classe A (Rappel: une classe est un type de donne). Exemple: ajouter a la classe CatLike un Matre, qui a un nom, prnom 1,n0,11,n0,1CatLikeString nameString colorfloat weightMaitre moiMaitreString prenomString nomint ageAddress myAddresseAddresseString streetString cityString zipCodeString country

  • EncapsulationUn objet est une boite noire ou seulement quelques proprits et comportement sont exports. Un objet ne peut pas tre modifi que par les mthodes d'instances dclares publicLes attributs sont dclars private ou protectedAttributs privs

    Methodes publiquesMon objetMon programme

  • Encapsulation"Enfermer" l'organisation interne d'une classe et protger son accs de l'extrieur. Les attributs ne sont modifiables qu'a partir des mthodes publiques (d'instance) de la classe.

  • Getter/Setter (Les Accesseurs) Les valeurs des attributs d'une classe sont obtenues par "les getters"Normalement: getXXX(); (XXX nom d'attribut)Les valeurs des attributs d'une classe sont attribues par "les setters"Normalement: setXXX(ValueType newValue);

  • Les Accesseurspublic class Car {String color; // par default protectedString name;float weight;static int motorNumber;public Car () {... } public String getColor() {return color;} }

  • Les accesseursSyntaxeSoit myNumber un attribut private/protected dfinit comme int

    Soit checked un attribut private/protected dfinit comme boolenpublic int getMyNumber() { ... }

    public void setMyNumber(int myNumber) { ... }public boolean isChecked() { ... }

    public void setChecked(boolean checked) {...}

  • Utilisation d'une classeDfinition d'une classeDclaration d'une variable: Car mavoiture; // mavoiture = null Cration de l'objet: instance de la classe.mavoiture = new Car () Opration combin: Car mavoiture = new Car () ;Initialisation d'une instance par appel au constructeurL'oprateur new fait une demande pour obtenir la mmoire ncessaire au stockage de l'instance.

  • Initialisation d'une instanceDfinir un (ou plusieurs) constructeur pour les instances. Ce constructeur travaille sur les attributs d'instance mais pas sur les attributs de classe (statiques). Pour les attributs de classe: methode static.

  • Initialisation de variables de Classe public class Car { ... static int motorNumber; ...static { motorNumber = 0;} ... }Charg par la JVM au moment de l'excution

  • La Classe String String Prenom1 = new String ("Pierre");String Prenom2 = "Pierre" ;Comparateurs: Ne pas utiliser: >, 0, -1, 1)

  • La Classe StringConcatnation:Prenom1.concat(Prenom2);Prenom1 + Prenom2 ; Extraction:String Prenom3 = Prenom1.substring(0,2) -> Pi (la chaine de 2 caractres a partir de 0)String Prenom3 = Prenom1.substring(3) ->rre (la chaine a partir de la position 3)Longueur:Prenom3.length();

  • La Classe StringtoLowerCase, toUpperCasetrim: liminer les espacesreplace(oldChar,newChar)Prenom3 = Prenom1.replace('r', 'l') -> Piellevalueof(int i)int i = 54 ;Prenom3 = Prenom3.valueOf(i) -> "54"int j = Integer.parseInt(Prenom3); -> 54

  • La Classe StringBufferPlus de flexibilitappend, capacity, charAt, delete, insert, length, replace, reverse, setCharAt, setLength, substringStringBuffer S1=new StringBuffer(), S2= new StringBuffer();S1.append("Cours"); -> "Cours"S1.append(123); -> "Cours123"System.out.println(S1); -> "Cours123"

  • La Classe StringBufferS1.insert(3,"XXX"); -> "CouXXXrs123"System.out.println(S1.length()); -> 11System.out.println(S1.capacity()); -> 16 (?)et 30 autres mthodes...

  • La Classe StringTokenizerPour travailler avec une chane et la sparer en morceaux (tokens).import java.util.StringTokenizer; String s = "Java est un langage moderne"; StringTokenizer st = new StringTokenizer(s); System.out.println("Nombre de mots:" + st.countTokens()); (-> 5) while (st.hasMoreTokens()) { System.out.println(st.nextToken());} -> Java est un ...

  • La Classe StringTokenizerCreation:StringTokenizer (string s) ; StringTokenizer (string s, String delim); StringTokenizer st = StringTokenizer( "Le-Prof-explique-tres-bien","-");System.out.println(st.countTokens()) -> 5 StringTokenizer St2 = new StringTokenizer( "Le-Prof-et tres-modeste!","- ");System.out.println(St2.countTokens()); -> 5

  • La Classe StringTokenizerStringTokenizer (string s, String delim, boolean token)StringTokenizer St2 = new StringTokenizer ( "Le-Prof-explique tres-bien!","- ", true); System.out.println(St2.countTokens()); -> 9

  • L'hritage Une classe peut tre hritire d'une classe 'a la UML'. Elle hrite, en principe, les attributs et les mthodes de la classe mre dclars comme default, public ou protected Peut redfinir le comportement de quelques mthodes de la classe mre et ajouter de nouveaux attributs. Dclar par le mot cl extends Une classe peut avoir au maximum UNE CLASSE MERE, pas d'hritage multiple comme dans la conception UML.

  • IllustrationCatLikeString nameString colorfloat weightMaitre moiCat extends CatLikeHritage implicite de tous les attributs et mthodesTiger extends CatLikeUne sous classe est une relation is-a Hritage implicite de tous les attributs et mthodes

  • Mot cl super Appel les mthodes de la classe mrepublic class Cat extends CatLike { // public Cat(String name, String color, int weight, Maitre moi){ // Appel le constructeur de la superclasse // Toujours la premiere instruction super(name,color,weight,owner);}

    public void eat() {// We call the super class methodsuper.shout();System.out.println(name + " eats");}}

  • Constructeur et HritageLa classe de base et la classe drive ont au moins un constructeur public:le constructeur de la classe drive doit appeler le constructeur de la classe de base disponible.La classe de base na aucun constructeur. La classe drive peut ne pas appeler explicitement le constructeur de la classe de base. La classe drive ne possde aucun constructeur. Dans ce cas, la classe de base doit avoir un constructeur public sans argument (par dfaut ou un explicite).

  • Constructeur et Hritagepublic class Shape { int x=9, y=6 ; public int getX() {return x;}

    public static void main (String[] args) { Shape s ; Circle c1 = new Circle(); }}public class Circle extends Shape{float radius;public Circle() {radius = 2; System.out.println(getX()); }}9La cration de c1cre les variables de Shape

  • Constructeur et Hritagepublic class Shape { int x, y ; public Shape() { x = 0 ; y = 0;}public Shape (int X, int Y ) { x = X; y = Y;}

    }

    public class Circle extends Shape { float radius; public Circle() { radius = 0;} public Circle (int x, int y, float r ) { super(x,y); radius = r;}}public static void main () { shape s; circle c1; circle c2(2, 3, 3.5); c1.getX()? c2.getX? }0 2

  • Constructeur et Heritagepublic class Shape {int x=9, y=6 ;public int getX(){return x;}

    public static void main (){ Shape s ; Circle c1 = new Circle(); System.out.println(c1.getX());}}public class Circle extends Shape{ float radius; }9La creation de Circlecree un instance de Shape

  • Constructeur et HeritageUne classe fille doit appeler le constructeur de sa classe mre:S'il y a un constructeur mre par dfaut, l'appel se fait automatiquement. (super()).S'il n'y a pas, il faut appeler explicitement un constructeur.Conclusion: la classe fille appelle toujours un constructeur de la classe mre il faut en fournir un!!!

  • Mot cl final Empche l'hritageUne classe ne peut pas hriter d'une classe marque comme finalEmpche la surcharge: Une mthode marque comme final ne peut pas tre surcharger, i.e. une sousclasse ne peut pas le redfinir. Empche l'attribution d'un attribut Un attribut marqu comme final ne peut pas changer de valeur une fois initialis il garde sa valeur durant toute l'excutionUtiliser pour les constantes

  • PolymorphismePermet d'utiliser une instance avec la classe mre. ExempleCrer un tableau de Tigers et ajouter un CatLike

    Array of TigersTiger georgesTiger gertrudeCatLike georgetteTiger alberta

  • PolymorphismePermet la dclaration d'une variable de type 'mre' et l'instancier avec un type de la sousclasse. public static void main (String args[]){ CatLike myCat = new Cat("Fifou","Blue",70,me,"Tigrou"); CatLike myCatLike = new CatLike("Doudou","Green",6); CatLike [] tabCatLike = new CatLike [4]; tabCatLike[0] = myCat; tabCatLike[1] = myCatLike;

    System.out.println("The first cat of my table is: " + tabCatLike[0].getName());}

  • Objet superclasseLa classe Objet est la mre de toutes les classes; on l'appelle la racine. Pas besoin de faire extendsLa classe Objet a ses mthodes, qu'on peut surcharger.

    MthodeDescriptionpublic boolean equals(Object o)L'objet est-il gal a o? public String toString()Retourne une chane, reprsentant l'objetpublic int hashCode()Retourne le hash-code de l'objetpublic void finalize()Mthode appele pour dtruire l'objet

  • La superclasse Objet Mthode equals() public class MyClass extends Object { public boolean equals (Object o) { boolean result = false;

    if(o instanceof MyClass) { ... } return result; } }

  • La superclasse ObjetLa mthode toString() public class MyClass extends Object {

    public String toString() { return "Here is my wonderful object"; } }

  • La classe Abstract Squelette des sousclasses.Dclare avec le mot cl abstractPas d'instanciation !!new MyAbstractClass() est illegal!Caractrise parAttributs et mthodes d'instance Attributs et mthodes de classeConstructeurs !!Mthodes abstraites (signature)Pas de corpsObligatoirement dfinies dans les sousclasses

  • Mthodes AbstraitesPas de bloc de codeAcceptes pour les classes abstraites ou les interfacesUne sousclasse doit dfinir le corpsUtilises pour la spcialisation. public abstract class CatLike {public abstract void shout ();//The subclasses MUST redefine this method !!}public class Cat extends CatLike { // Override Method redefinitionpublic void shout () {System.out.println("Miaouuuu");}}

  • InterfaceEst un 'contrat' entre les classesDfinit quelques mthodes a implmenter (avec le mot cl implement)Mthodes abstraitesPas d'instanciation Dclare par le mot cl interface

  • InterfaceExample

    Dans Tiger, nous devons dfinir les mthodes pour l'interface Animal et Wild et les mthodes abstraites de CatLikeextendsimplementsabstract class CatLike {interface Wild {class Tiger extends CatLike implements Wild {interface Animal {extends

  • Ramasse miettes ou Garbage CollectorEliminer les rfrences inutiles

  • References et objetsMmoire divise en deux:La Pile ou StackLe Sac ou HeapLa PileLe Sac Objets du sac Objets du sac1001000110111101

    Objets cres par new100100011001000110111101

  • liminer une rfrence Affecte une instanceValeur nullUn nouvel objetCatLike myCat = new CatLike("White");System.out.println(myCat.color); // White

    myCat = new CatLike("Red"); // Remove old ref.System.out.println(myCat.color); // Red

    myCat = null;

    System.out.println(myCat.color);// NullPointerException !!

  • Ramasse Miettes Nettoyer la mmoireliminer les instances d'objets sans rfrencesLe Ramasse Miettes peut tre appeler par la machine Java automatiquement ou par l'utilisateur.

    La mthode d'objet finalize() est appele avant la destruction de l'instance d'objet. System.gc();protected void finalize() throws Throwable { }

  • Ramasse Miettes Garder le contenu d'une classe. public class Life { int num; public Life( int num ) { this.num = num; System.out.println("Object " + this.num + "exists"); } @Override protected void finalize() throws Throwable { System.out.println("Object " + this.num +"destroyed"); }}

  • ExampleAttention Guess what will be written in the consolepublic class ExGc { public static void main (String[] args) { Life v1 = new Life(1); Life v2 = new Life(2); Life v4 = new Life(4); Life v3 = new Life(3);

    //Destroy the objects v1 = null; v2 = null; System.gc(); v4 = new Life(5); v3 = v4; System.gc(); }}The consoleObject 1 exists.Object 2 exists.Object 4 exists.Object 3 exists.Object 1 destroyed.Object 2 destroyed.Object 5 exists.Object 4 destroyedObject 3 destroyed

  • Conception de Paquetages

  • Conception de Paquetages Les classes Java peuvent se rassemblent dans le paquetages (packets). Le mot cl package indiquent que la classe est un paquet. Les paquets sont enregistrs dans un fichier et peuvent tre utiliss par l'auteur et par d'autres utilisateurs. Facilite le dveloppement en quipe. Ingnierie de programmation. Dclaration public pour les objets exportablesUtilisation de la notation dot pour les rfrencer.

  • Conception de Paquetages Illustration

    package utilites; public class Sommes { public static int sommerEntiers(int min, int max) { ... } public static int sommerCarrs(int min, int max) { ... } public static int sommerCubes(int min, int max) { ... } }

    La classe public Sommes doit figurer dans un fichier de nom Sommes.java.

  • Conception de PaquetagesUne application pourra utiliser ces fonctions en important la classe utilites.Sommes qui les dfinit. La porte de la dfinition de la classe utilites.Sommes est etendue au paquetage de l' application. Utiliser import. package application; import utilites.Sommes; class A { ... Sommes.sommerEntiers(1, 10) ... }

  • Paquetages Formalits Les noms de paquetages toujours composs de lettres minuscules. Notation dot "." pour sparer les parts d'un paquetage.

  • Les exceptionsUne exception est un moyen de traiter 'gentiment' les erreurs de programmation.Toute excution dangereuse mise entre "parenthses" d'exception sera excute par un bloc de code.Le dclenchement d'une exception provoque la fin d'excution de la fonction o elle se trouve.

  • Les exceptionsTraitementDclenchementBonne dfinition des exceptions.

  • Les exceptionstry { ... instructions dangereuses ...}catch (exception e1){ ... code traitement e1 ...}catch (exception e2){... code traitement e2 ...}... finally {code commun avant de la sortie du try}

  • Exempletry { if (b == 0) throw new DivisionParZero ; x = a/b; }catch (DivisionParZero) { system.out.println("b es zero"); }

  • Les ExceptionsIOExceptionFileNotFoundExceptionNullPointerException : accs un objet valant null. .ArrayIndexOutOfBoundsException NumberFormatException : erreur lors de la conversion dune chane de caractres en nombre.TerminalException pour signaler des erreurs.

  • Exceptions et Classespublic class Test { public static float Division (int a, int b) throws DivisionParZero { if (b == 0) throw new DivisionParZero() ; return x = a/b; }public static void main (String [] args) { int x, y ; Terminal.ecrireString("Entrez un nombre :"); x = Terminal.lireInt(); y = 0 ; try { Terminal.ecrireIntln(Division(x,y)); } catch (DivisionParZero e) { Terminal.ecrireStringln("DivisionParZero "+y); } }}class DivisionParZero extends Exception {}

  • Les ThreadsUn thread est une mthode que s'excute concurremment avec le programme. L'opration de threads requiert 3 tapes: dfinition en crant une classe qui hrite de la class Thread, prdfinie en Java. Cette classe doit surcharger la mthode run() de la classe Thread. cration d'une instance de cette nouvelle Classe. lancement de l'instance en appelant la mthode start() dfinie par la classe Thread

  • Les ThreadsL'appel la mthode start() passe le thread l'tat "prt", ce qui lui permet de dmarrer ds que possible (mais pas ncessairement immdiatement). C'est la machine virtuelle JAVA qui dcide du moment auquel le thread va s'excuter. Lorsque le thread dmarre, JAVA appelle sa mthode run(). Un thread se termine lorsque sa mthode run() termine.

  • Les Threads class MonThread extends Thread { MonThread() { ... code du constructeur ...} public void run() { ... code a excuter dans le thread ... } }MonThread p = new MonThread(); p.start();

  • Threads & RunnableL'autre moyen de crer un thread est de dclarer une classe qui implmente l'interface Runnable. Cette interface dclare seulement une mthode : run(). La classe Thread a un crateur qui prend une instance implmentant Runnable en argument. La classe se dclare comme dans le cas prcdent, mais on implmente Runnable au lieu d'hriter de Thread : Cration et lancement comme dans le cas prcedent

  • Threads & RunnableClass MonThread2 implements Runnable { MonThread2() { ... code du constructeur ... } public void run() { ... code excuter dans le thread ... } }public static void main(String[] args) { MonThread2 p = new MonThread2(); Thread t = new Thread(p); t.start(); }

  • ThreadsQuelques methodes de la classe Thread: sleep( long ms ) : le thread qui appelle sleep() est bloqu pendant ms millisecondes. isAlive() : retourne vrai si le thread auquel on applique la mthode est vivant (c'est dire t dmarr par start() et que sa mthode run() n'est pas encore termine. Le thread vivant est donc prt, bloqu ou en cours d'excution. getPriority() et setPriority( int prio ) permettent de manipuler la priorit du thread.

  • Threads & Espace de mmoireLes threads d'un mme processus partagent le mme espace mmoire. Chaque instance de la classe thread possde ses propres variables (attributs). Pour partager une variable entre plusieurs threads, on a souvent recours une variable de classe:

  • Threads & Mmoirepublic class exemplePartage extends Thread { private static String chaineCommune = "vide"; private String nom; exemplePartage ( String s ) { nom = s; } public void run() { chaineCommune = chaineCommune + nom; } public static void main(String args[]) { Thread T1 = new exemplePartage( "T1" ); Thread T2 = new exemplePartage( "T2" ); T1.start(); T2.start(); System.out.println( chaineCommune ); } }

  • Threads & MmoireRsultats de l'exemple prcdent:vide : le thread principal affiche chaineCommune avant que le systme n'ai donn la main aux threads T1 et T2 videT1 : au moment de l'affichage, le thread T1 s'est excut, mais pas T2 videT2 : idem videT1T2 ou videT2T1 : les deux threads se sont excuts, dans un ordre arbitraire

  • Synchronisationvidement, le rsultat prcdent n'est pas toujours la hauteur de nos expectatives.Tout d'abord, il est trs simple pour un thread d'attendre que tel autre thread soit termin : la mthode join() de la classe Thread bloque jusqu' ce que le thread termine. Ainsi, T1.join() permet d'attendre la fin de T1.

  • Synchronisationpublic class exempleConcurrent extends Thread { private static int compte = 0; public void run() { int tmp = compte; try { Thread.sleep(1); // ms } catch (InterruptedException e) { System.out.println("ouch!\n"); return; } tmp = tmp + 1; compte = tmp; } public static void main(String args[]) throws InterruptedException { Thread T1 = new exempleConcurrent(); Thread T2 = new exempleConcurrent(); T1.start(); T2.start(); T1.join(); T2.join(); System.out.println( "compteur=" + compte ); } }

  • SynchronisationLes deux threads T1 et T2 accdent une mme variable partage compte,travaillent sur une copie locale tmp qui est incrmente avant d'tre rcrite dans compte. Un appel sleep pour simuler un traitement plus long et augmenter la probabilit que le systme bascule d'une tche l'autre durant l'excution de run.

  • SynchronisationLes problmes d'accs concurrents se rglent en JAVA l'aide du mot cl synchronized, qui permet de dclarer qu'une mthode ou un bloc d'instructions est critique : un seul thread la fois peut se trouver dans une partie synchronise sur un objet. Utilisation d'un verrou lock, en fait un smaphore. Chaque objet JAVA possde un verrou. Pour excuter une section de code synchronise (bloc ou mthode), il faut possder le verrou.

  • SynchronisationSi un thread commence excuter une section synchronise, aucun autre thread ne pourra entrer dans une section synchronise du mme objet (mme par une autre mthode) tant que le verrou n'aura pas t libr La libration de la partie synchronise se fait en la quittant ou en appelant la mthode wait(). Attention, si l'on veut synchroniser une mthode pour tous les objets de cette classe (accs des variables de classes partages par plusieurs threads), il faut que la mthode synchronise soit une mthode de classe (static)

  • SynchronisationLes mthodes wait(), notify() et notifyAll() permettent de synchroniser diffrents threads. Ces mthodes sont dfinies dans la classe Object, mais ne doivent s'utiliser que dans des mthodes synchronized.

  • Synchronisationwait() : le thread qui appelle cette mthode est bloqu jusqu' ce qu'un autre thread appelle notify() ou notifyAll(). Notons que wait() libre le verrou, ce qui permet d'autres threads d'excuter des mthodes synchronises du mme objet. notify() et notifyAll() permettent de dbloquer une tche bloqu par wait(). Attention, si une tche T1 appelle wait() dans une mthode de l'objet O, seule une autre mthode du mme objet pourra la dbloquer; cette mthode devra tre synchronise et excute par une autre tche T2.

  • Synchronisationpublic class Evenement { private boolean Etat; // tat de l'vnement public Evenement() { Etat = false; } public synchronized void set() { Etat = true; // dbloque les threads qui attendent cet vnement: notifyAll(); } public synchronized void reset() { Etat = false; } public synchronized void attente() { if(Etat==false) { try { wait(); }// bloque jusqu'a un notify() catch(InterruptedException e) {}; } }

  • SynchronisationLa synchronisation entre tches est un art difficile : Pas assez: des rsultats errons ou inesprs a chaque excution.Trop: pnaliser les performances : l'entre dans une mthode synchonized est coteuse (prise du verrou), et on perd les avantages des traitements en parallle. Mal conue entrane facilement l'apparition d'interblocages (deadlocks) : plusieurs tches peuvent s'attendre mutuellement, et plus rien ne se passe. viter les anciens mcanismes de synchronisation.

    [Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*Content Starter Set*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*Content Starter Set*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*Content Starter Set*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*First 6 then 4[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*You have the declared type and the real typeYou can put in an array of declared type instance of declared type AND real type which extends the declared type.[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*You have the declared type and the real typeYou can put in an array of declared type instance of declared type AND real type which extends the declared type.[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*Constructors are only called by the subclasses ones[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*Constructors are only called by the subclasses ones[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*Constructors are only called by the subclasses ones[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*Constructors are only called by the subclasses ones[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*[Title of the course]*Copyright 2004-2005 NameOfTheOrganization. All rights reserved.*Content Starter Set*