Java : Programmation Objet en Java et Initialisation et Hritage, Exception, Collection, Thread et Sw - PowerPoint PPT Presentation

1 / 65
About This Presentation
Title:

Java : Programmation Objet en Java et Initialisation et Hritage, Exception, Collection, Thread et Sw

Description:

Programmation Objet en Java et Initialisation et H ritage. 5 ... Add(i, obj) : ajout o on veut. ArrayList. Rapide d'acc s. Long l'ajout et au retrait ... – PowerPoint PPT presentation

Number of Views:203
Avg rating:3.0/5.0
Slides: 66
Provided by: i3s
Category:

less

Transcript and Presenter's Notes

Title: Java : Programmation Objet en Java et Initialisation et Hritage, Exception, Collection, Thread et Sw


1
Java Programmation Objet en Java et
Initialisation et Héritage, Exception,
Collection, Thread et Swing
  • Les outils de bases pour le cours programmation
    avancée

2
Présentation du cours
  • Des techniques de programmation
  • Design pattern
  • Motifs de conception
  • Utilisation des outils vu précédemment
  • Réflexivité et chargement dynamique
  • RTTI
  • JavaBean en illustration
  • à utiliser comme des outils à réutiliser

3
Organisation des cours
  • Intervenant
  • Michel Buffa
  • Philippe Renevier
  • Volume horaire
  • 18h de cours
  • 33h de TD
  • Le mardi
  • Un projet et une soutenance orale individuelle

4
Programmation Objet en Java et Initialisation et
Héritage
5
Constructeur par défaut
  • sans argument
  • ajouter par le compilateur sil ny a pas de
    constructeur
  • // DefaultConstructor.java
  • class MyObj
  • int i 0
  • public class DefaultConstructor
  • public static void main(String args)
  • MyObj nc new MyObj () // Default!
  • nc.i 4
  • ///

6
Constructeur par défaut
  • Par contre, il nest pas ajouter sil existe déjà
    un constructeur (avec ou sans argument)
  • class MyObj
  • int i0
  • MyObj (int j) i j
  • DefaultConstructor.java10 cannot find symbol
  • symbol constructor MyObj()
  • location class MyObj
  • MyObj obj new MyObj()
  • 1 error

7
Surchage et signature
  • Signature nom paramètre(s)
  • la différence entre deux méthodes impossible sur
    le type de retour
  • Adaptation des types de paramètres
  • cf Surcharge.java
  • Nombre de paramètre non déterminé
  • void printList (Integer args)
  • for(Integer x args) System.out.println(x "
    " )

8
Mot clef  this 
  • Référence à lobjet
  • public class Incr
  • int i 0
  • Incr increment()
  • i
  • return this
  • void print()
  • System.out.println("i " i)
  • public static void main(String args)
  • Incr x new Incr ()
  • x.increment().increment().increment().print()
  • Permet aussi dappeler dautres constructeurs
  • public Incr() this(0)
  • public Incr(int i) this.i i

9
Mot clef  static 
  • Variable statique
  • static Interger i static Double j
  • Bloc statique
  • static
  • static i new Integer(10) j new
    Double(14.5)
  • note idem pour les non static  Interger i
    Double j i new Integer(10) j new
    Double(14.5)
  • Méthode statique
  • Pas dappel à des éléments non statiques
    (linverse est possible)
  • Par définition, une méthode statique peut être
    appelée via la classe, sans aucune référence à un
    objet.

10
Initialisation
  • Dans une méthode
  • void f()
  • int i
  • i // Error -- i not initialized
  • Champs de classe
  • Ordre important
  • int i f()  int j g(i)  // i initialisé
    avant
  • int j g(i)  int i f()  // illegal forward
    reference

11
Initialisation dun objet
  • Dabord les champs de classes
  • puis le constructeur
  • Cf Init.java

12
Initialisation des classes et des champs
statiques
  • La 1ère fois quun constructeur dune classe X
    est appelé (cest une méthode statique)ou la 1ère
    fois quune méthode statique (ou un champ de
    classe) est appelée ou que la classe est
    utilisée, linterpréteur java doit charger la
    classe X (elle doit être dans le classpath).
  • La classe X est chargée, les éléments statiques
    sont alors initialisés (intialisation statique)
  • Puis cest le schéma classique vu ci-dessus en
    cas de création dobjet
  • Cf Init2.java
  • Ordre dinitialisation

13
Initialisation des tableaux
  • Réservation dune place en mémoire
  • String s new String4
  • int t3 new int2345
  • int t4 new int36
  • Mais besoin dinitialiser chaque élément
  • s0 new String(message)
  • Initialisation rapide
  • int t 1, 2, 3
  • int t2 1, 2, 3, 1, 2, 3, 1, 2, 3,
    1, 2, 3

14
Effacer des objets
  • Garbage Collector
  • libérer la mémoire.
  • Les objets peuvent ne pas être collectés.
  • GC nest pas la destruction.
  • GC ne soccupe que de la mémoire.
  • Problème  allocation de mémoire sans new (jni et
    appel dune dll) ou dune ressource particulière
    (un périphérique). Comment faire ?
  • Pour le reste  finalize( ) 
  • protected void finalize( ) throws Throwable
  • Appeler par le GC quand la jmv détermine quil
    ny a plus de reference sur lobjet.
  • Lobjectif est de libérer des ressources
    particulières, de fermer des connexions.
  • En cas dexception non traîtée, elle est ignorée.
  • finalize nest appelé quune seule fois et peut
    ne pas être appelé
  • Cf TestGC.java
  • Comment peut marcher un GC ?
  • lent  un compteur de référence (quand référence
    mise à null). Problème, référence circulaire.
  • A partir de la  pile  et des ref static, on
    explore tout. On trouve tout ce qui  vit  et on
    recopie le contexte dexécution. Le reste est
    tout simplement  oublié .

15
Regrouper les classes package
  • Lunité de base dune librairie est le package.
  • Mot clef import.
  • import javax.swing. 
  • import java.awt.Color 
  • Import javax.swing.event.MouseInputListener
  • mettre les classes dans une hiérarchie de
    répertoire correspondante.
  • Attention à ne pas prendre de nom  système 

16
Collision de nom
  • package java.awt
  • public class Button
  • public Button(String nom) System.out.println("m
    on bouton "nom)
  • public void coucou( ) System.out.println("mon
    bouton fait coucou")
  • import java.awt.Button
  • public class test4
  • public static void main(String args)
  • Button b new Button("toto")
  • System.out.println(b.getClass())
  • b.coucou()
  • exécution 
  • gtjava test4

17
Collision de nom (nom de package différent)
  • Même exemple que ci-dessus mais dans un nom de
    package différent (package my) pour la classe
    Button
  • gtjavac test5.java
  • gttest5.java2 java.awt.Button is already defined
    in a single-type import
  • gtimport my.Button
  • gt
  • gt1 error
  • Nécessité dêtre explicite (java.awt.Button ou
    my.Button)

18
Accès
  • public
  • default package (pas de marqueur)
  • Accès public en local
  • besoin du . dans le classpath
  • protected
  • donne le default package
  • héritage
  • private
  • Cf Private.java
  • constructeur  contrôle la fabrication
  • class Exemple
  • private Exemple()
  • static Exemple faireUnExemple() return new
    Exemple()

19
Héritage et composition
  • Héritage
  • extends ou implements
  • relation  est-un 
  • mot-clef super accès à la  superclass 
  • Composition (et délégation)
  • champ de classe
  • assemblage liens sémantiques
  • réutilisation
  • non vérification de la relation  est-un 

20
Héritage et Initialisation
  • Initialisation commence par la classe dont on
    hérite
  • class Art Art( ) System.out.println("Art
    constructor")
  • class Drawing extends Art Drawing( )
    System.out.println("Drawing constructor")
  • public class Cartoon extends Drawing
  • public Cartoon() System.out.println("Cartoo
    n constructor")
  • public static void main(String args)
    Cartoon x new Cartoon()
  • gt"Art constructor",
  • gt"Drawing constructor",
  • gt "Cartoon constructor 
  • Et les champs ? cf Heritage.java
  • Compilation javac Heritage/Heritage.java
  • Exécution java Heritage.Heritage

21
Héritage et Initialisation
  • attention à ne pas utiliser quelque chose qui
    n'est pas encore initialisé.
  • PolyConstructors.java
  • Note sur lhéritage de méthode
  • Si une méthode retourne un objet dune classe X,
    une surcharge peut retourner un objet de classe Y
    si Y hérite de X

22
Héritage
  • Mot clef super
  • constructeur de la classe dont on hérite
  • appel aux méthodes et champs de la classe dont on
    hérite
  • Mot clef final
  • Grosso modo cela ne changera pas.
  • Raison conception ou efficacité
  • Une constante dont la valeur est fixée
  • à la compilation (compile-time).
  • à lexécution (run-time)
  • Initialisation dans la déclaration (new
    Randow(40)).nexInt(20)
  • initialisation dans le constructeur (avant
    utilisation !).

23
Les méthodes finales
  • final argument il ne sera pas modifié.
  • class Toto public void spin()
  • public class FinalArguments void with(final
    Toto g)
  • //! g new Toto() // Illegal -- g is final
  • void without( Toto g) g new Toto() //
    OK -- g not final
  • g.spin()
  • Final methods
  • Raison de conception interdit la surchage avec
    lhéritage.
  • Raison defficacité
  • Le compilateur peut changer les appels à cette
    méthode à des appels  en ligne  (i.e. comme du
    code tapé à lendroit de lappel).
  • Le compilateur peut écarter lapproche normale
    (appel de fonction, avec changement de contexte
    dexécution) par linsertion du code à la place
    de lappel.
  • Gain pas de changement de contexte, mais le
    code peut grossir très vite
  • Le compilateur java est censé détecté les
    situations où la recopie est trop importante
  • Toute méthode privée est implicitement finale
  • Pas dhéritage (pas daccès) mais pas forcément
    derreur de compilation (Private.java)
  • lajout de final ne change rien (juste explicite)

24
Les classes finales
  • Une classe finale ne sera jamais déclinée
  • Les champs dune classe finale sont à la
    discrétion du concepteur (finaux ou non).
  • Les méthodes dune classe finale sont
    implicitement finales
  • De toutes façons non surchargeables
  • Lajout du mot clef final ne change rien

25
Classes abstraites
  • Permettent de partager du code tout en forçant la
    personnalisation
  • Une classe abstraite les méthodes ne le sont
    pas forcément
  • Une méthode abstraite la classe doit lêtre
  • Cf. ClasseAbs.java
  • enum

26
Inner Class
  • Des classes internes et anonymes

27
Inner Class
  • Définition
  • Dans une classe
  • Dans une méthode, entre
  • En paramètre (anonyme)
  • Observable
  • ClassePrincipe.class
  • ClassePrincipe1NomInterne.class
  • ClassePrincipe2.class

28
Inner Class pourquoi ?
  • Outil supplémentaire
  • Héritage supplémentaire (sans être un objet du
    type)
  • Masquage de limplémentation (y compris au
    package)
  • Définition de  callback  à la volée
  • Utile pour la programmation événementielle

29
Lien entre linner dans une classe et louter
  • Linner a accès aux éléments de la classe qui
    linclus
  • Accès à linstance de la classe avec
    ltNomDeClassegt.this
  • Création dune instance dune inner classe
  • ltInstance de NomDeClassegt.new ltInnergt( )
  • Ex Bebete.Etat result bebete.new Etat()
  • Bebete est une classe contenant une classe
    interne Etat bebete est une instance de la
    classe Bebete

30
Inner dans un bloc dinstruction
  • Ne peuvent pas être utiliser en dehors de la
    méthode
  • Utile pour personnaliser des objets sans créer de
    classe (masquer limplémentation).
  • Cf. InnerMeth.java

31
Anonymous inner class
  • Une classe sans nom, définit par un new
    ltNomDeClassegt() ltdu codegt
  • On peut ainsi  étendre  nimporte classe
    classe, interface ou classe abstraite
  • Si on a besoin dune référence extérieure, il
    faut que lélément soit  final 

32
Les exceptions
33
Un mécanisme derreur
  • Une exception classe Exception est un objet qui
    implémente de Throwable méthode printStackTrace(
    ) par exemple
  • Se construit généralement avec un message
    (String)
  • Quelques mots clefs
  • throws (la méthode peut lever une ou plusieurs
    exception)
  • throw (lever une exception)

34
Gestion des erreurs
  • Par propagation la méthode  throws  les
    exceptions quelle peut provoquer
  • Par  attrapage 
  • Mot clef try catch (ltExceptiongt e) finally
  • Plusieurs catch possibles (voir aucun)
  • finally en principe toujours exécuté
  • Attention, une seule exception est prise en
    compte, la dernière cf LostException.java (TIJ 3)

35
Les collections
  • Comment ranger ses objets
  • package java.util

36
Une vue densemble
Queue
PriotityQueue
Boites en pointillées interface
Illustration tirée de TIJ 3
37
organiser des objets le tableau
  • Indexation numérique dobjets
  • Type prédéterminé (pas de cast si le type nest
    pas générique)
  • Plusieurs dimension
  • Type primitif
  • Taille fixée à la création

38
organiser des objets la collection
  • Une collection contient des éléments isolés, une
    map des couples
  • Avec les génériques, il est possible de spécifier
    le type des objets contenus
  • Pas derreur de remplissage
  • Pas de cast pour utilisation
  • Adaptation de la taille
  • Pas de type primitif, mais adaptation automatique
    avec les classes contenantes

39
Parcours iterator ou for
  • Iterator interface comme point commun entre les
    contenants (le type de contenant peut ne pas
    importer).
  • Chaque contenant a la méthode iterator( ).
  • Objet suivant next( ).
  • test de fin hasNext( ).
  • For
  • CollectionltString gt postit new
    LinkedListltStringgt( )
  • for(String s postit) System.out.println(s)

40
Collection
  • boolean add(T)
  • Ensures that the container holds the argument.
    Returns false if it doesnt add the argument.
    (Optional.)
  • boolean addAll(Collectionlt? Extends Tgt)
  • Adds all the elements in the argument. Returns
    true if any elements were added. (Optional.)
  • void clear( )
  • Removes all the elements in the container.
    (Optional.)
  • boolean contains(T)
  • true if the container holds the argument.
  • boolean containsAll(Collectionlt?gt)
  • true if the container holds all the elements in
    the argument.
  • boolean isEmpty( )
  • true if the container has no elements.
  • IteratorltTgt iterator( )
  • Returns an Iterator that you can use to move
    through the elements in the container.
  • boolean remove(Object)
  • If the argument is in the container, one instance
    of that element is removed. Returns true if a
    removal occurred. (Optional.)
  • boolean removeAll(Collectionlt?gt))
  • Removes all the elements that are contained in
    the argument. Returns true if any removals
    occurred. (Optional.)
  • boolean retainAll(Collectionlt?gt))

41
List
  • avec ordre d'insertion.
  • Add(i, obj) ajout où on veut.
  • ArrayList
  • Rapide daccès
  • Long à lajout et au retrait
  • LinkedList
  • Comportement de queue et pile
  • Insertion et retrait rapide

42
Set
  • Chaque élément nest ajouté quune seule fois
  • Chaque élément doit implémenter equals pour
    comparaison
  • Pas de garantie dordre
  • HashSet recherche rapide (utilisation de
    hashCode( ) )
  • TreeSet conservation de lordre (arbre)
  • LinkedHashSet ordre inverse

43
Map
  • Association (clef, valeur)
  • Temps daccès constant (table de hachage)
  • MapltK, Vgt
  • void clear( )
  • Removes all mappings from this map (optional
    operation).
  • boolean containsKey(Object key)
  • Returns true if this map contains a mapping for
    the specified key.
  • boolean containsValue(Object value)
  • Returns true if this map maps one or more keys to
    the specified value.
  • V get(Object key)
  • Returns the value to which this map maps the
    specified key.
  • boolean isEmpty()
  • Returns true if this map contains no key-value
    mappings.
  • SetltKgt keySet()
  • Returns a set view of the keys contained in this
    map.
  • V put(K key, V value)
  • Associates the specified value with the specified
    key in this map (optional operation).
  • void putAll(Maplt? extends K,? extends Vgt t)
  • Copies all of the mappings from the specified map
    to this map (optional operation).

44
Les processus
  • Utilisation des Thread et accès synchronisé

45
Pourquoi des processus ?
  • Pour être plus rapide
  • Pour ne pas bloquer un processus (interface).

46
Processus Basic
  • Utilisation de linterface Runnable
  • Méthode public void run( )
  • Utilisation de Thread
  • new Thread(ltune instance Runnablegt)
  • Cf Processus.MainThread (TIJ 4)
  • Méthode start( ) qui lance le processus
  • Méthode yield( ) pour passer la main (via le
    scheduler)

47
Arrêter un processus
  • Java recommande lutilisation de boolean pour les
    processus  long 
  • public void run( )
  • // code
  • while( ! canceled)
  • // code
  • // code

48
Attendre
  • import java.util.concurrent.
  • public void run()
  • try
  • while(! canceled)
  • // Old-style
  • // Thread.sleep(100)
  • // Java SE5/6-style
  • TimeUnit.MILLISECONDS.sleep(100)
  • catch(InterruptedException e)
  • System.err.println("Interrupted")

49
Gérer des processus
  • Java.util.concurrent.Executors
  • Un cadre pour gérer les processus
  • Génère des ExecutorService
  • Sait comment gérer les tâches
  • Auquel on soumet des tâches (objets Runnable)
  • Cf CachedThreadPool.java (TIJ 4)
  • Méthode execute (interface Executor)
  • Méthode shutdown( ) (interface ExecutorService)
    ferme les inscriptions

50
Les différents types de gestion de processus
  • CachedThreadPool
  • Un processus par tâche
  • FixedThreadPool(i)
  • Un maximum de i processus
  • SingleThreadExecutor
  • Un seul processus pour toutes les tâches

51
Des processus avec des valeurs de retours
  • Interface java.util.concurrent.Callable
  • Paramétrable avec le type de retour
  • Méthode public V call( )
  • Fait intervenir des FutureltVgt
  • Cf CallableDemo.java (inspiré de TIJ 4)
  • Méthode submit qui produit un Future
  • Accessible quand isDone( )
  • Par la méthode get( )

52
Partage de ressource
  • Problème daccès concurrent
  • Mot clef synchronized
  • Sur une méthode
  • ou un morceau de code
  • Lorsquun processus veut exécuter un code
    syncronisé
  • La jvm vérifie si le verrou est disponible,
  • Lui donne et
  • Le rend disponible à la fin
  • Un seul verrou par classe
  • Possibilité dutiliser dautre verrous
  • java.util.concurrent.locks.
  • Interface Lock lock( ) et unlock( )

53
La boîte à outils graphiques
  • java.awt et javax.swing

54
java.awt et javax.swing
  • awt 1ère boite à outil de java
  • Éléments de base
  • Component (et Graphics)
  • Container
  • Layout (LayoutManager)
  • swing extension (dabord JFC puis intégrer
    depuis jdk 1.2)
  • swing faire que tout fonctionne de manière
    identique partout

55
Component
  • Définit un élément graphique
  • Une Dimension
  • getSize retourne une Dimension
  • setSize avec une Dimension ou deux entiers
  • Une position
  • getLocation retourne un Point
  • setLocation avec un Point ou deux entiers
  • Coordonnées
  • Origine au coin supérieur gauche
  • x (width) vers la droite et y (height) vers le
    bas
  • Méthode public void paint(Graphics g)

56
Graphics
  • Contexte graphique ( morceau décran )
  • Permet de dessiner
  • Changer de crayon setColor
  • drawRect, drawOval, drawPolygon, drawString,
    fillRect, fillOval
  • drawImage(img, x, y, ImageObserver)
  • Obtenu automatiquement (repaint(),
    redimensionnement, etc.)

57
Double-buffering en AWT
  • java.awt.image.BufferedImage
  • buffImg new BufferedImage(width, height, type)
  • type BufferedImage.TYPE_4BYTE_ABGR par exemple
  • Dans paint(Graphics g)
  • Graphics grph buffImg.createGraphics()
  • // on dessine dans grph
  • g.drawImage(buffImg, 0, 0, null)

58
Container
  • Hérite de Component
  • Porte dautres Component (y compris des
    Container)
  • Organisation
  • LayoutManager
  • add / remove dun Component
  • Unicité de lieu
  • Indice des components

59
LayoutManager
  • Définit lorganisation
  • Basé sur PreferredSize ou une maximisation de
    lélément
  • BorderLayout
  • par défaut dans une fenêtre
  • ajout en précisant la zone
  • add("North" , comp)
  • FlowLayout en ligne
  • GridLayout en tableau
  • GridBagLayout avec des contraintes
  • etc.

60
Méthodes à connaître
  • repaint() !
  • setEnabled(true / false) activé / désactivé
  • (Rectangle) getBounds / setBounds(x,y, w, h)
    positionne et dimensionne
  • getWidth() largeur / getHeight() hauteur
  • getX() et getY() obtenir une coordonnée
  • setVisible(true / false)
  • getBackground et setBackground objet Color,
    définition RGB

61
JComponent
  • Hérite de Container
  • Méthodes de commodité
  • setPreferredSize
  • setDoubleBuffered(true/false) /
    isDoubleBuffered()
  • setOpaque(true / false)
  • Dessin à lécran paint appel
  • paintComponent
  • paintBorder
  • paintChildren

62
Petites listes des JComponents
  • les boutons
  • JButton /JToggleButton / JCheckBox / JRadioButton
  • java.awt.ButtonGroup (méthode add)
  • Les îcones javax.swing.ImageIcon créer avec le
    nom dun fichier image par exemple
  • Les champs textuels
  • JTextField/ JTextArea
  • Menus les JMenuBar, JMenu, JMenuItem
  • Etc
  • http//java.sun.com/docs/books/tutorial/uiswing/

63
JFrame
  • Nest pas un JComponent
  • Pour ajouter getContentPane().add
  • Ne pas oublier le setVisible(true)
  • Méthode pack permet de calculer la taille de la
    fenêtre adéquate

64
Événements (1/2)
  • Chaque élément graphique subit des événements
  • Principe du CallBack
  • Interface pour lécouteur
  • add et remove pour lécouté
  • Appel aux écouteurs par lécouté lorsque
    lévénement se produit
  • Parcours des composants à lécran du dessus vers
    le dessous) jusquau premier  écoutable 

65
Événements (2/2)
  • processEvent transmettre un événement
  • Même processus que pour laffichage
  • Les objets Event
  • package java.awt.event et javax.swing.event
  • getSource() savoir doù il vient
  • Spécialisés MouseEvent, ActionEvent, etc.
Write a Comment
User Comments (0)
About PowerShow.com