JAVA Le c - PowerPoint PPT Presentation

About This Presentation
Title:

JAVA Le c

Description:

St phane Fr not - stephane.frenot_at_insa-lyon.fr - Dpt T l communications ... en surcharge il faut qu'elles aient le m me nom, mais une signature diff rente ... – PowerPoint PPT presentation

Number of Views:40
Avg rating:3.0/5.0
Slides: 82
Provided by: LISI61
Category:
Tags: java | aient

less

Transcript and Presenter's Notes

Title: JAVA Le c


1
JAVALe cœur du langage
2
Programmation Objet Objectifs
  • Simplifier
  • Code plus lisible
  • Code facilement maintenable
  • Code plus  humain 
  • Organiser
  • Développement
  • Suivit
  • gt Projets Mieux Gérés gt Gains

3
Classes et Objet
  • En java tout est objet
  • Tout objet est défini par une classe
  • Classe Type
  • Objet Instance du type
  • Guitare c
  • cnew Guitare("Fender")

c
"Fender"
4
Objets
  • Morceau de programme identifié par
  • Ses Attributs
  • Représentés par des variables déclarée dans
    l'objet
  • Représentent un état de l'objet
  • Ses méthodes
  • fonctions auxquelles l'objet sait répondre
  • Représentent un comportement de l'objet
  • Objet Eleve durand ?
  • Objet Connexion uneConnexion ?

listeCours()
180 m 80 kg "Jean"
getAge()
5
Classes
  • Usine de fabrication d'objets
  • Outil du programmeur
  • Permet de définir le comportement des objets
  • Prennent la Première lettre en majuscule
  • Classe Elève
  • Classe Connexion

6
Création d'un objet
  • Pour manipuler un objet, on déclare une référence
    sur la classe de cet objet
  • Circle c
  • Pour créer un objet, on instancie une classe en
    appliquant l'opérateur new sur un de ses
    constructeurs. Une nouvelle instance de cette
    classe est alors allouée en mémoire
  • c new Circle()

7
Constructeur
  • Tout objet doit avoir ses valeurs initiales
    positionnées. Un constructeur permet de fixer ces
    valeurs à la création de l'objet
  • Toute classe possède un constructeur par défaut,
    implicite. Il peut être redéfini. Une classe peut
    avoir plusieurs constructeurs qui diffèrent par
    le nombre et la nature de leurs paramètres.
  • Un constructeur est une méthode qui possède le
    même nom que la classe, mais qui ne renvoie rien

8
Création d'un objet
  • class Circle
  • protected double x, y, r
  • public Circle(double x, double y, double r)
  • this.x x this.y y this.r r
  • public Circle(Circle c)
  • this.x c.getX() yc.getY() rc.getR()
  • public Circle()
  • this(0.0, 0.0, 0.0)
  • public double getX()return this.x
  • public double getY()return this.y
  • public double getR()return this.r

Circle(double x, double y, double z)
Circle(Circle c)
Circle()
2 3 10
getX()
getY()
getR()
9
Définition d'une classe
Circle(double x, double y, double z)
  • class Circle
  • /cf précédent/
  • public int perimeter()
  • return (Math.PI2r)
  • public int area()
  • return (Math.PIrr)

Circle(Circle c)
Circle()
2 3 10
getX()
getY()
area()
getR()
perimetre()
10
Attributs et Variables
  • Les attributs sont relatifs aux objets
  • Ils sont définis dans la classe
  • Les variables sont relatives à une méthode
  • Elles sont définies dans une méthode

class Bidon protected Toto x public int
calcul() int tmp0 while(tmp lt CONST_X)
xx.ajoute(tmp)
calcul()
x 0x123
11
Exercice
  • Instancier un objet de la classe Patient, avec
    comme nom durand et comme prénom paul
  • Réaliser une classe de gestion de division

12
Instance et Classe statique
  • La classe est également vue comme un objet
  • Les attributs et les méthodes statiques sont
    associés à la classe
  • Toutes les instances de la classe partagent la
    valeur de attributs "static"
  • Il n'est pas nécessaire d'instancier une classe
    pour accéder à ses éléments statiques

13
Exemple du mot clé statique
  • public class Circle
  • public static int count 0
  • public static double PI 3.14
  • protected double x, y, r
  • public Circle(double r)this.r r count
  • ... /cf ppt précédent/
  • public static Circle bigger(Circle c1, Circle
    c2)
  • if (c1.r gt c2.r) return c1 else return c2
  • public class UneClasseExemple
  • public UneClasseExemple()
  • Circle c1 new Circle(10)
  • Circle c2 new Circle(20)
  • int n Circle.count // n 2
  • Circle c4 Circle.bigger(c1, c2) // c4 c2

bigger(Circle, Circle)
count 2
4 5 1000
getX()
getY()
area()
getR()
perimetre()
2 3 10
getX()
getY()
area()
getR()
perimetre()
14
Exercice
  • Réaliser la classe Division avec des méthodes
    statiques
  • Comment lancer un programme ?

15
Enfin mon premier programme
main(String arg)
  • public class HelloWorld
  • public static void main(String arg)
  • System.out.println("Hello, World !")

HelloWorld
HelloWorld.java
Compilateur javac HelloWorld.java
HelloWorld
HelloWorld.class
Machine Virtuelle java HelloWorld.java
16
Composition de classe
  • Une classe est un agrégat d'attributs et de
    méthodes les membres
  • Principe de COMPOSITION

Patient
String
nom prenom
Durand
String
String getNom()
Paul
17
D'où viennent les objets ?
  • Les objets n'apparaissent que s'ils sont
    fabriqués par quelque chose...
  • Et qu'on a obtenu une référence dessus (statique,
    récupération suite à un appel)
  • SI ON N'A PAS UN OBJET, IL SUFFIT DE LE FABRIQUER

18
D'où vient une classe ?
  • Soit on l'a défini entièrement
  • Soit on nous l'a fourni
  • SI ON A BESOIN D'UNE CLASSE, IL SUFFIT DE
    L'ECRIRE
  • Java fournit plus de 10 000 classes dans le kit
    de base (bibliothèque standard)
  • La difficulté est d'en connaître leurs existences

19
Communication entre objets
  • Les objets communiquent entre eux en s'échangeant
    de messages
  • Un message est un appel de fonction d'un objet
    vers un autre  Invoquer une méthode 
  • gt Unique manière de communiquer entre objets

Patient
getNom()
ListePatients
String
nom prenom
Durand
String
String getNom()
Paul
0x234
20
Syntaxe d'un message
  • ltréférenceDeL'objetgt.ltnomDuMessagegt
  • gt Quels sont les messages impliqués
  • gt Exercice réaliser la classe Addition

class PaintShopPro Cercle leCerclenew
Cercle(0,0,10) public int uneFonction()
int surfaceleCercle.getArea() return
surface
21
Référence et this
  • Pour pouvoir accéder à un objet il faut avoir une
    référence dessus.
  • La référence est le nom qu'on lui donne
    localement
  • Si on veut se parler à soi-même on utilise
     this 

class Cercle public void afficheToi()
System.out.println( "Je suis un cercle de
surface"this.getArea()
22
Méthodes static
  • Les méthodes statiques peuvent elles accéder à
    this ?

23
Message or Not Message
  • Vector tmpnew Vector()
  • tmp.addElement("10")
  • c.r 3
  • a c.area()
  • pi Math.PI
  • b Math.sqrt(2.0)
  • System.out.println("toto""titi")
  • System.out.println("Bonjour")
  • int a2
  • int b3
  • int cab
  • String toto"Hello,"
  • String titi"World!" 
  • String tatatototiti

24
Notion d'encapsulation
  • La programmation objet permet de ne rendre
    visible de l'extérieur que certaines parties de
    l'objet
  • L'utilisateur d'un objet n'accède qu'à sa partie
    publique. L'autre partie est dite privée.

Partie publique
Partie privée
25
Notion d'encapsulation
  • Intérêts
  • Modification de la partie privée, tout en gardant
    la même définition publique
  • Masquer certains détails
  • D'une manière générale
  • Tous les attributs d'une classe sont "protected"
  • Certaines méthodes sont "public" d'autres privées

26
Exemple
public class ClientWeb protected void
connect(String unServer) / ouvrir une
connexion reseau / protected String
getDocument() / Demander au serveur la page
/ public String getPageWeb(String
server) this.connect(server) String
tmpthis.getDocument() return tmp
27
Surcharge de méthode
  • La surcharge (overloading) permet à plusieurs
    méthodes ou constructeurs de partager le même
    nom.
  • Pour que deux méthodes soient en surcharge il
    faut qu'elles aient le même nom, mais une
    signature différente (paramètres de la fonction)

28
Surcharge exemple
  • class Point
  • protected double x,y
  • public Point () this.x0.0 this.y0.0
  • public Point (double x, double y)this.xx
    this.yy
  • //Calcule la distance entre moi et un autre
    point
  • public double distance(Point autre)
  • double dxthis.x-autre.getX()
  • double dythis.y-autre.getY()
  • return Math.sqrt(dxdxdydy)
  • //Calcule la distance entre moi et une autre
    coordonnée
  • public double distance(double x, double y)
  • double dxthis.x-x
  • double dythis.y-y
  • return Math.sqrt(dxdxdydy)
  • //Calcule la distance entre moi et une autre
    coordonnée
  • public double distance(int x, int y)
  • double dxthis.x-(double)x

29
Surcharge exemple
  • Appel
  • Quand une méthode est appelée le nombre et le
    type des arguments permettent de définir la
    signature de la méthode qui sera invoquée.

Point p1new Point() Point p2new Point(20.0,
30.0) p2.distance(p1) p2.distance(50.0,
60.0) p2.distance(50, 60) p2.distance()
30
Les types primitifs
  • Types
  • byte 1 octet
  • short 2 octets
  • int 4 octets
  • long 8 octets
  • float 4 octets
  • double 8 octets
  • boolean true false
  • char 2 octets (Unicode)
  • Ce ne sont pas des objets java. Donc et
    Pourquoi ?
  • Un type primitif ne prend pas de majuscule

31
Les types primitifs
  • Les affectations non implicites doivent être
    castées (sinon erreur à la compilation).
  • int i 258
  • long l i // ok
  • byte b i // error Explicit cast needed
    to convert int to byte
  • byte b 258 // error Explicit cast needed
    to convert int to byte
  • byte b (byte)i // ok mais b 2
  • Pas de message sur un type primitif
  • Définition de classes Wrapper Integer
  • Définition de fonctions de conversion

32
Les classes Wrapper
  • Classes qui encapsulent un type de base
  • gt Permettre aux classes qui manipulent des
    Objets de manipuler des types de base
  • int i4
  • Integer jnew Integer (4)
  • Integer knew Integer (i)

33
Les trois représentation dun nombre
String.valueOf(k)
String k5
Integer jnew Integer(5)
j.toString()
Integer.toString(i)
j.intValue()
Integer.parseInt(k)
new Integer(i)
int i5
34
Passage de paramètres dans les méthodes
  • Le mode de passage des paramètres dans les
    méthodes dépend de la nature des paramètres
  • par référence pour les objets
  • par copie pour les types primitifs

public class C void methode1(int i,
StringBuffer s) i s.append("d") void
methode2() int i 0 StringBuffer s new
StringBuffer("abc") methode1(i,
s) System.out.println("i" i ", s" s)
// i0, sabcd
35
Principes de base
  • Aucune instruction en dehors dune classe
  • Tous la communication se fait par échange de
    messages

public class MaClasse int i12 String
toto"Bonjour" public static void main(String
arg) MaClasse unRepresentantnew
MaClasse() System.out.println("Je dis
 ") System.out.println(unRepresentant.disBo
njour()) public String disBonjour()return
toto
36
Résumé
  • Des objets, des classes pour fabriquer ces objets
  • Des attributs soit des variables, soit des
    méthodes
  • L'encapsulation permet de masquer du code
  • Les membres static sont attachés à la classe
  • Seuls les types de base ne sont pas des objets
  • Les classes prennent leur première lettre en
    Majuscule
  • On ne travaille que sur des références d'objet
    sauf pour les types de base

37
Un peu d'algorithmique Java
38
Bases du langage
  • Types
  • byte 1 octet
  • short 2 octets
  • int 4 octets
  • long 8 octets
  • float 4 octets
  • double 8 octets
  • boolean true false
  • char 2 octets (Unicode)
  • Instructions
  • if
  • while, do while, for
  • selection (switch)
  • Opérateurs
  • Arithmétique -/
  • Relationnels ltgtlt gt !
  • Logiques !
  • Incréments --
  • Bit Wise gtgt ltlt gtgtgt
  • Affectation - /

39
Bloc de programmation
  • n importe où, mais la plupart du temps
    autour dune classe ou dune méthode
  • Aucune instruction/déclaration hors dun bloc
  • Une variable peut être déclarée nimporte où dans
    un bloc. Elle possède la portée de ce bloc

40
Les structures de contrôle et expression
  • Essentiellement les mêmes qu'en C
  • if, switch, for, while, do while
  • , , , , ltlt, ?
  • Fonctionnement du switch sur type primitif

41
Les tableaux
  • Déclaration
  • int array_of_int // équivalent à int
    array_of_int
  • Color rgb_cube
  • Création et initialisation
  • array_of_int new int42
  • rgb_cube new Color256256256
  • int primes 1, 2, 3, 5, 7, 74
  • array_of_int0 3
  • Utilisation
  • int l array_of_int.length// l 42
  • int e array_of_int50 // Lève une
    ArrayIndexOutOfBoundsException

42
Les exceptions (1)
  • Elles permettent de séparer un bloc
    d'instructions de la gestion des erreurs pouvant
    survenir dans ce bloc.

try // Code pouvant lever des IOException ou
des SecurityException catch (IOException e)
// Gestion des IOException et des sous-classes
de IOException catch (Exception e) // Gestion
de toutes les autres exceptions finally //
Dans tous les cas
43
Les exceptions (2)
  • Ce sont des instances de classes dérivant de
    java.lang.Exception
  • La levée d'une exception provoque une remontée
    dans l'appel des méthodes jusqu'à ce qu'un bloc
    catch acceptant cette exception soit trouvé. Si
    aucun bloc catch n'est trouvé, l'exception est
    capturée par l'interpréteur et le programme
    s'arrête.
  • L'appel à une méthode pouvant lever une exception
    doit
  • soit être contenu dans un bloc try/catch
  • soit être situé dans une méthode propageant
    (throws) cette classe d'exception
  • Un bloc (optionnel) finally peut-être posé à la
    suite des catch. Son contenu est exécuté après un
    catch ou après un break, un continue ou un return
    dans le bloc try

44
Les exceptions (3)
class RobotLaveur void demarre() try
uneMachineALaver.laver()
catch(PasDAssietteException e) ...
catch(BrasCasseException e) ...
finaly ... ...
1
6
7
class MachineALaver void laver() throws
PasDAssietteException ...
assiettesSales.depiler()
5
4
8
2
class PileSale... assiette depiler ()
throws PasDAssietteException if
(pileVide()) throw new
PasDAssietteException( fin de pile )
return (Assiette)elemeentSuivant()
3
45
Les unités de compilation
  • Le code source d'une classe est appelé unité de
    compilation.
  • Il est recommandé (mais pas imposé) de ne mettre
    qu'une classe par unité de compilation.
  • L'unité de compilation (le fichier) doit avoir le
    même nom que la classe qu'elle contient.

46
Les packages définition
  • Unité d'organisation des classes
  • Organisation logique time.clock.Watch
  • Organisation physique time/clock/Watch.class
  • Espace de nommage hiérarchique
  • Description de la hiérarchie package
    time.clock
  • Notion de nom complet time.clock.Watch
  • Les bibliothèques java sont organisées en package
  • java.util, java.net, org.objectweb,
  • Deux classes ayant le même nom complet ne peuvent
    pas s'exécuter en même temps.

47
Nom de classe résolution
  • Pour résoudre un nom de classe dans une autre
    classe

... time.clock.Watch totonew time.clock.Watch()
...
import time.clock.Watch ... Watch totonew
Watch() ...
import time.clock. ... Watch totonew
Watch() Clock titinew Clock() ...
import time. ... Watch totonew Watch() Clock
titinew Clock() ...
48
Nom de classe résolution
  • Pour résoudre le nom d'une classe soit
  • On donne son nom complet lors de l'utilisation
  • On résout initialement son nom
  • On résout initialement tous les noms d'un package
  • Les noms des classes du package java.lang n'ont
    pas à être résolus
  • On peut donc avoir deux classes Date
  • java.util.Date
  • java.sql.Date

49
Les packages organisation
graph/2D/Circle.java package graph.2D public
class Circle() ...
graph/3D/Sphere.java package graph.3D public
class Sphere() ...
paintShop/MainClass.java package
paintShop import graph.2D. public class
MainClass() public static void main(String
args) graph.2D.Circle c1 new
graph.2D.Circle(50) Circle c2 new
Circle(70) graph.3D.Sphere s1 new
graph.3D.Sphere(100) Sphere s2 new
Sphere(40) // error class paintShop.Sphere not
found
50
Où trouver une classe ?
  • Les outils du système cherchent toutes les
    classes
  • Compilation et Exécution typage fort C E
  • Les classes sont recherchées sur le système de
    fichiers
  • Les classes standards sont automatiquement
    trouvées par les outils
  • Pour indiquer l'endroit sur le système de fichier
    à partir duquel il faut chercher les classes on
    utilise le classpath
  • Fonctionnement identique au path d'exécution

51
Le classpath
  • Il indique à partir de quel endroit recherche une
    classe
  • javac -classpath /usr/local titi.Toto.java
  • La classe titi.Toto est recherchée à partir du
    répertoire
  • /usr/local /Résolution physique/
  • Il faut donc que la classe soit définie dans le
    fichier
  • /usr/local/titi/Toto.java /Résolution java/

52
Le classpath le jar
  • Un jar est une archive java
  • Regroupement de fichiers dans un fichier
  • Extension du système de fichiers

jar tvf toto.jar
tutu/ tutu/ours/ tutu/ours/Grumly.class
vi Test.java
package test import tutu.ours.Grumly public
class Test  Grumly totonew Grumly()
javac ? ???
53
On revient sur la POO
54
Destruction d'un objet
  • La destruction des objets est prise en charge par
    le garbage collector (GC).
  • Le GC détruit les objets pour lesquels il
    n'existe plus de référence.
  • Les destructions sont asynchrones (le GC est
    géré dans une thread de basse priorité).
  • Aucune garantie n'est apportée quant à la
    destruction d'un objet.
  • Si l'objet possède la méthode finalize, celle-ci
    est appelée lorsque l'objet est détruit.

55
Destruction d'un objet
  • public class Circle
  • ...
  • void finalize() System.out.println("Je suis
    garbage collecte")
  • ...
  • Circle c1
  • if (condition)
  • Circle c2 new Circle() // c2 référence une
    nouvelle instance
  • c1 c2
  • // La référence c2 n'est plus valide mais il
    reste une référence,c1,
  • // sur l'instance
  • c1null // L'instance ne possède plus de
    référence. Elle n'est plus
  • // accessible. A tout moment le gc
    peut détruire l'objet.
  • ...

56
Classes et objets
  • public class Circle
  • protected double x, y // Coordonnée du centre
  • protected double r // rayon du cercle
  • public Circle(double r) this.r r
  • public double area() return 3.14159 r r
  • public void setX(int i)this.xi
  • public void setY(int i)this.yi
  • public class MonPremierProgramme()
  • public static void main(String args)
  • Circle c // c, référence sur un objet
    Circle, mais pas encore un objet
  • c new Circle(5.0) // c référence
    maintenant un objet alloué en mémoire
  • c.setX(10)
  • c.setY(10)
  • System.out.println("Aire de c " c.area())

57
L'héritage
  • Objectifs
  • Organiser les classes dans une hiérarchie de
    fonctionnement
  • Les classes présentent dans ces relations
    d'héritage un rapport parent / fils
  • La relation d'héritage représente une relation
    sémantique non standard entre le père et le fils
  • Il n'existe pas de relation d'héritage
    universelle entre les classes. C'est le rôle de
    l'architecte d'application de définir la relation
    qu'il sous-entend

58
L'héritage syntaxe
public class Circle extends FormeGeométrique
  • La classe parente présente généralement soit des
    fonctions générales à toutes les classes filles,
    soit des fonctions types qui doivent être
    (re)définie dans dans les classes filles

59
Héritage
  • La relation d'héritage indique ce que l'objet est.

Object
FormesGraphiques
FormesEuclidiennes
Ellipse
Trapeze
Rectangle
Cercle
60
Sous-type
  • Une sous-classe étend les capacités de sa super
    classe. Elle hérite des capacités de sa parente
    et y ajoute les siennes
  • De plus une sous-classe est une spécialisation de
    sa super-classe. Toute instance de la sous-classe
    est une instance de la super-classe (pas
    nécessairement l'inverse).

61
L'héritage
  • gt Ce qu une classe EST
  • Une classe ne peut hériter (extends) que d'une
    seule classe.
  • Les classes dérivent, par défaut, de
    java.lang.Object
  • Une référence sur une classe C peut contenir des
    instances de C ou des classes dérivées de C.
  • L'opérateur instanceOf permet de déterminer la
    classe d'une instance.
  • Les classes final ne peuvent pas être redéfinies
    dans les sous-classes.
  • super et this pour accéder aux membres dune
    classe

62
L'héritage
  • public class Ellipse
  • public double r1, r2
  • public Ellipse(double r1, double r2) this.r1
    r1 this.r2 r2)
  • public double area...
  • final class Circle extends Ellipse
  • public Circle(double r) super(r, r)
  • public double getRadius() return r1
  • Ellipse e new Ellipse(2.0, 4.0)
  • Circle c new Circle(2.0)
  • System.out.println("Aire de e" e.area() ",
    Aire de c" c.area())
  • System.out.println((e instanceOf Circle)) //
    false
  • System.out.println((e instanceOf Ellipse)) //
    true
  • System.out.println((c instanceOf Circle)) //
    true
  • System.out.println((c instanceOf Ellipse)) //
    true (car Circle dérive de Ellipse)
  • e c

63
Liaison dynamique de méthodes
  • Liaison dynamique des méthodes (dynamic binding
    of methods) Indique que la méthode invoquée
    n'est choisie qu'au dernier moment (run-time), et
    non pas à la compilation.
  • Différence entre Variable/Type et Objet/Classe
  • Une variable est un lieu de stockage ayant un
    type associé. Ce type est déterminé à la
    compilation. Déclaration statique.
  • Un objet est une instance d'une classe. Son type
    est déterminé quand l'objet est crée (à
    l'exécution).

64
Polymorphisme
  • Dans les langages statiques, il faut que la
    partie gauche(lhs) et droite (rhs) d'un
    assignement soient de types compatibles
  • Dans les langages objets, la partie droite droite
    doit être d'un sous-type de la partie gauche.

class FormesGeometrique class Cercle extends
FormesGeometrique class Rectangle extends
FormesGeometrique FormesGeometrique forme1,
forme2 forme1new Cercle() forme2new
Rectangle() Cercle forme3 forme3forme1
//Erreur de compilation forme1 de type
FormesGeométrique
65
Le masquage des variables
  • Une classe peut définir des variables portant le
    même nom que celles de ses classes ancêtres.
  • Une classe peut accéder aux attributs redéfinis
    de sa classe mère en utilisant super ou par cast.
  • Une classe peut accéder aux méthodes redéfinies
    de sa classe mère en utilisant super.

66
Le masquage des variables
  • class A
  • int x
  • void m() ...
  • class B extends A
  • int x
  • void m() ...
  • class C extends B
  • int x, a
  • void m() ...
  • void test()
  • a super.x // a reçoit la valeur de la
    variable x de la classe B
  • a super.super.x // Syntax error
  • a ((B)this).x // a reçoit la valeur de la
    variable x de la classe B
  • a ((A)this).x // a reçoit la valeur de la
    variable x de la classe A
  • super.m() // Appel à la méthode m de
    la classe B
  • super.super.m() // Syntax error
  • ((B)this).m() // Appel à la méthode m de
    la classe C (et non B)

67
Surcharge interdite final
  • Constantes
  • Interdiction de surcharges

public static final int MAX30 protected final
String toto"coucou"
68
Les classes abstraites
  • Une classe abstraite est une classe ayant au
    moins une méthode abstraite.
  • Une méthode abstraite ne possède pas de
    définition.
  • Une classe abstraite ne peut pas être instanciée
    (new).
  • Une classe dérivée d'une classe abstraite ne
    redéfinissant pas toutes les méthodes abstraites
    est elle-même abstraite.

69
Les classes abstraites
  • abstract class Shape
  • public abstract double perimeter()
  • class Circle extends Shape
  • ...
  • public double perimeter() return 2 Math.PI
    r
  • class Rectangle extends Shape
  • ...
  • public double perimeter() return 2 (height
    width)
  • ...
  • Shape shapes new Circle(2), new
    Rectangle(2,3), new Circle(5)
  • double sum_of_perimeters 0
  • for(int i0 iltshapes.length i)
  • sum_of_perimeters shapesi.perimeter()

70
Les inner classes
  • Introduites avec java 1.1
  • Elles permettent de
  • Déclarer une classe dans un bloc (inner class)
  • Instancier une classes anonymes (anonymous class)
  • Elles affinent la localisation des classes
  • Elles simplifient le développement
  • Elles offrent une (autre) réponse pour les
    pointeurs de fonctions
  • Elles sont une caractéristique du compilateur et
    non de la JVM
  • Attention elles peuvent réduire la lisibilité
    des sources.

71
Les inner classes
  • public class FixedStack
  • Object array
  • int top 0
  • public void push(Object item) ...
  • public Object pop() ...
  • public isEmpty() ...
  • public java.util.Enumeration element() return
    new Enumerator()
  • class Enumerator implements java.util.Enumeration
  • int count top
  • public boolean hasMoreElements() return count
    gt 0
  • public Object nextElement()
  • if (count 0) throw NoSuchElementExceptio("Fi
    xedStack")
  • return array--count

72
Les interfaces (1)
  • gt Quels comportements une classe peut avoir en
    plus de ce qu elle est
  • Spécification formelle de classe
  • Indique les services rendus par la classe qui
    implante l'interface
  • !!! Technique / Conceptuel
  • Une interface correspond à une classe où toutes
    les méthodes sont abstraites.
  • Une classe peut implémenter (implements) une ou
    plusieurs interfaces tout en héritant (extends)
    d'une classe.
  • Une interface peut hériter (extends) de plusieurs
    interfaces.

73
Les interfaces (2)
  • abstract class Shape public abstract double
    perimeter()
  • interface Drawable public void draw()
  • class Circle extends Shape implements Drawable,
    Serializable
  • public double perimeter() return 2 Math.PI
    r
  • public void draw() ...
  • class Rectangle extends Shape implements
    Drawable, Serializable
  • ...
  • public double perimeter() return 2 (height
    width)
  • public void draw() ...
  • ...
  • Drawable drawables new Circle(2), new
    Rectangle(2,3), new Circle(5)
  • for(int i0 iltdrawables.length i)
  • drawablesi.draw()

74
Un langage oo
  • Echange de messages (méthodes)
  • Encapsulation
  • Abstraction par les classes
  • Composition, Héritage, Interfaces

75
Trucs _at_stuches
76
Règles d'écriture de code Java
  • Un fichier .java par classe
  • Entête classique description...
  • Commentaires JavaDoc
  • Début de bloc / .... /
  • Balises _at_author, _at_version, _at_see, _at_param,
    _at_return, _at_exception
  • Exemple
  • /
  • Affiche un bouton rond
  • ltpregt
  • BoutonRond b new BoutonRond(titre)
  • monPanel.add(b)
  • lt/pregt
  • _at_see awt.button
  • _at_author C. Nicolas
  • /

77
Convention de nommage
  • paquetages minuscule
  • classes MajusulePourLaPremiereLettreDeChaqueMot
  • méthodes minusculePourLaPremiereCommeLaClasseApr
    ès
  • constantes MAJUSCULE_AVEC_SOULIGNE
  • variables/méthodes priv/protected termineParSoulig
    ne_
  • variables/méthodes statiques termineParDeuxSoulig
    nes__
  • variables locales à une méthode minuscules_avec_so
    ulignes
  • méthodes fabriquant des objets de classe X newX
  • méthodes de conversion retournant des objets de
    type X toX
  • accesseur d'un attribut y de type X X getY()
  • accesseur de modification void setY(X valeur)
  • classe de définition d'une exception FinDeLaClass
    eAvecLeMotException
  • interface se distinguant d'une classe
    similaire InterfaceSeTermineParIfc
  • classe qui se distingue de son interface ClasseSe
    TermineParImp

78
Recommandations 1/2
  • Pas de variables d'instance publiques
  • Pas d'accesseurs inutiles
  • Identifier les variables immuables (pas de
    synchro)
  • Peu de variables/méthodes statiques (classe)
  • Long plutôt que int et double / float
  • moins d'erreur de dépassement
  • Protected mieux que Private
  • Minimiser les accès aux variables d'instance dans
    les méthodes
  • utiliser des accesseurs protected
  • Pas de surcharge sans nouveau paramètre (sinon
    utiliser instanceof())
  • Méthodes simples
  • Préferer void x.methode1().methode2()
  • méthodes publiques synchronized
  • Si surcharge de Object.equals() alors surcharge
    de Object.hashcode( )
  • Pas de clonage intempestif
  • Utiliser notifyAll plutot que notify ou resume

79
Recommandations 2/2
  • Si possible créer un constructeur sans paramètre
  • Class.newInstance()
  • Pas de final sinon pour de l'optimisation de
    performances
  • Interfaces mieux que classes abstraites (héritage
    simple)
  • Préférer abstract void maMethodeVide() à void
    maMethodeVide()
  • Import java.awt.Button mieux que java.awt.
  • Nommer les thread pour le débogage en distant
  • Utiliser plutôt implements Runnable que extends
    Thread
  • Ne pas abuser du Garbage Collector (-verbosegc et
    -prof)
  • BufferedInputStream optimisation des
    performances
  • Surcharger toString des classes définies
    (debogage)
  • Ne pas croire tout ce qu'on dit !

80
Ressources Java Livres
  • JavaSeries O'Reilly
  • Couvre tous les aspects tutorial, thread, jdbc,
    Beans
  • Ecris par les concepteurs du langage Exploring
    Java (valise), Niemeyer, Peck
  • Bibles de référence
  • The Java Language Specification James Gosling,
    Bill Joy, Guy Steele Addison-Wesley
  • Core java (2.0) v1
  • Java client-server
  • Cédric Nicolas, Christophe Avare, Frédéric
    Najman, Eyrolle
  • Sun (http//www.sun.com/)
  • Spécifications Java, VM, JavaBeans...
  • Conception Objets
  • Design Patterns Erich Gamma ITP

81
Ressources Java Web
  • http//www.sun.com
  • jdk, documents, pointeurs, projets
  • http//www.gamelan.com
  • Applet, Scripts, JavaScripts
  • http//www.stars.com
  • Codes, Exemples, Tutoriels (pas que Java)
  • JavaDevelopperConnexion
  • http//java.sun.com/jdc
  • http//java.sun.com/jdc/techDocs/newsletter/index.
    html
  • http//www.blackdown.org
Write a Comment
User Comments (0)
About PowerShow.com