DEUG MIAS Option Info Introduction JAVA - PowerPoint PPT Presentation

1 / 43
About This Presentation
Title:

DEUG MIAS Option Info Introduction JAVA

Description:

Int r t du nommage par package : permet de faire cohabiter deux classes de m me nom ne provenant pas du m me package : NomPackage.NomClasse ... – PowerPoint PPT presentation

Number of Views:32
Avg rating:3.0/5.0
Slides: 44
Provided by: sig9
Category:

less

Transcript and Presenter's Notes

Title: DEUG MIAS Option Info Introduction JAVA


1
DEUG MIAS Option Info Introduction à JAVA
  • Olivier Sigaud
  • LIP6/AnimatLab
  • olivier.sigaud_at_lip6.fr
  • 01.44.27.88.53

2
Plan du cours 3
  • Passage darguments
  • Modularité et packages
  • Encapsulation et contrôle d'accès
  • CLASSPATH
  • JAVADOC

3
Passage darguments
  • class Main
  • public static void main(String args)
  • for (int i0iltargs.lengthi)
  • System.out.println(argsi)
  • bashgt java Main bonjour monde
  • bashgt bonjour
  • bashgt monde

4
Modularité
  • La modularité est une propriété fondamentale de
    tous les langages orientés objets.
  • Le découpage en module est une technique de
    structuration de la conception
  • Le but est d'assurer le maximum d'indépendance
    entre des modules
  • Un des moyens de programmer de façon modulaire
    est de découper le programme en packages

5
Module Vue externe
Volant
Voiture demarrer() conduire() stopper()
BoiteDeVitesse
Injecteur
Embrayage
Pistons
Moteur
Bougies
6
Packages
  • Le but de la modularisation est de découper les
    gros programmes en modules bien séparés
  • La difficulté consiste à minimiser les
    interactions entre modules
  • Bien identifier les interfaces
  • Les ltlt paquetages gtgt ou ltlt packages gtgt
    fournissent une représentation du découpage en
    modules qui permet d'exprimer ce qui est visible
    d'un module à l'autre
  • Les packages peuvent être imbriqués

7
Syntaxe
  • Déclaration package Vehicules en début de tous
    les fichiers du package
  • Tous ces fichiers doivent être rassemblés dans un
    répertoire Vehicules
  • Si on ne déclare pas de package, il existe un
    package par défaut
  • De l'extérieur, les classes publiques sont
    visibles sous le nom Vehicules.Voiture
  • Les autres classes ne sont pas visibles

8
Exemple
  • On dispose dun package Vehicules dans lequel est
    définie la classe Voiture
  • package Principal
  • class Main
  • public static void main(String args)
  • Vehicules.Voiture maVoiture new
    Vehicules.Voiture()
  • maVoiture.demarrer()

9
Import
  • Utiliser Vehicules.Voiture partout où l'on a
    besoin d'une voiture n'est pas très pratique
  • On peut déclarer au début d'un fichier que la
    classe Voiture provient du package Vehicules
  • import Vehicules.Voiture
  • Dès lors, la classe Voiture est connue comme si
    l'on était dans le package Vehicules (si elle est
    publique)
  • Cas imbriqué import NomPackage1. NomPackage2.

10
Exemple
  • package Principal
  • import Vehicules.Voiture // ou import
    Vehicules.
  • class Main
  • public static void main(String args)
  • Voiture maVoiture new Voiture()
  • maVoiture.demarrer()
  • Pour importer toutes les classes publiques d'un
    package import NomPackage.

11
Conflit de noms
  • Si on a une classe Vehicules.Voiture et une
    classe BienDeConsommation.Voiture
  • import Vehicules.Voiture
  • import BienDeConsommation.Voiture
  • Quand on parle de la classe Voiture, on ne sait
    pas de laquelle des deux il sagit
  • Dans ce cas, il ne faut importer que lune des
    deux

12
Exemple
  • package Principal
  • import BienDeConsommation.Voiture // ou import
    Vehicules.
  • class Main
  • public static void main(String args)
  • Voiture monEpave new Voiture() // il sagit
    de BienDeConso.Voiture
  • Vehicules.Voiture maVoiture new Vehicules
    .Voiture()
  • monEpave.vendre()
  • maVoiture.demarrer()

13
Packages imbriqués
  • Il est fréquent davoir des packages imbriqués
    les uns dans les autres
  • Si Package1 contient Package2
  • import Package1. importe le contenu de Package1
    mais pas celui de Package2
  • import Package1.Package2. importe le contenu de
    Package2
  • import Package1.
  • import Package1.Package2. pour avoir les deux
  • Exemple java.awt., java.awt.event.

14
Conventions de nommage
  • Intérêt du nommage par package permet de faire
    cohabiter deux classes de même nom ne provenant
    pas du même package NomPackage.NomClasse
  • Risque d'avoir deux classes de même nom dans deux
    packages de même nom
  • Convention des noms de packages fournis sur
    internet com.site.package.autrepackage

15
Quelques Packages
  • java.io Entrées/Sorties
  • java.applet Manipulation des applets
  • java.math Traitements mathématiques
  • java.lang Primitives du langage
  • java.util Utilitaires, structures de données
  • java.awt Interface graphique AWT
  • java.awt.events Evénements graphiques AWT
  • javax.swing Interface graphique AWT
  • javax.swing.eventEvénements graphique AWT

16
Packages fréquents
  • Interface graphique (IHM)
  • Couche de communication
  • Bases de données...
  • Couches basses/supérieures

17
Encapsulation
  • Outre les packages, le second élément pour
    réaliser modularité et encapsulation est
    lexistence dun mécanisme de contrôle de la
    visibilité des données
  • Consiste à ne laisser apparaître d'un code que ce
    qui doit être visible de l'extérieur
  • On parle de contrôle daccès
  • On peut masquer des membres d'une classe ou des
    classes d'un package

18
Contrôle d'accès package
  • public classes accessibles sans restriction
  • par défaut éléments visibles de la totalité du
    package, mais pas hors du package
  • Eviter quune classe porte le même nom que le
    package qui la contient

19
Contrôle d'accès classes
  • public éléments accessibles sans restriction
  • private éléments accessibles uniquement dans la
    classe locale. Membres non hérités
  • protected éléments accessibles uniquement dans
    la classe et ses sous-classes
  • par défaut équivalent de public

20
Module Vue externe
Volant
Voiture demarrer() conduire() stopper()
BoiteDeVitesse
Injecteur
Embrayage
Pistons
Moteur
Bougies
21
Membres privés
  • Vue d'un conducteur
  • public class Voiture
  • public Embrayage embrayage
  • public BoiteVitesse boite
  • public Volant volant
  • private Moteur moteur
  • private Bougies bougies
  • public void demarrer()...
  • public void conduire()...
  • public void stopper ()...
  • private void amortirChaos()...
  • private void activerBougie()...
  • Problème pas la même vue pour un garagiste

22
Accesseurs et modifieurs
  • En général, il est bon que les attributs d'une
    classe ne soient modifiés que par les objets de
    cette classe
  • Avoir des méthodes spécifiques pour lire et
    modifier les attributs les accesseurs
  • Les accesseurs sont des méthodes comme les autres
  • Syntaxe
  • Type get Nom de l'attribut () renvoie
    l'attribut
  • void set Nom de l'attribut (Type valeur)
    affecte l'attribut

23
Exemple
  • public class Personne
  • private int age
  • public int getAge()
  • return age
  • public void setAge (int a)
  • age a
  • public class Medecin
  • public static void main(String args)
  • Personne jean new Personne()

24
Intérêt des accesseurs
  • On peut modifier l'attribut sans renommer les
    accesseurs
  • Exemple
  • Si int age devient Date dateDeNaissance
  • Partout où l'on a utilisé l'attribut age, il faut
    modifier le code
  • Si l'on a utilisé getAge() setAge(), alors il
    suffit de changer le code de l'accesseur

25
Classe interne
  • Notion de inner class
  • Exemple
  • class A
  • class B
  • methode1DeB() 
  • methode2DeB() 
  • methodeDeA()
  • Cest encore un moyen dencapsulation, mais cest
    à éviter autant que possible

26
Danger des classes internes
  • Nom1.Nom2 peut désigner
  • La classe Nom2 dans le package Nom1
  • La classe Nom2 interne à la classe Nom1
  • Certains compilateurs sy perdent
  • Eviter autant que possible davoir une classe qui
    porte le même nom quun package

27
Réutilisation
  • Lintérêt principal de la modularité et de
    lencapsulation est la possibilité de réutiliser
    les programmes
  • Il est plus facile de réutiliser des morceaux de
    code en programmation orientée objets
  • Si une classe correspond à un objet concret et si
    ses méthodes sont naturelles, tout programme qui
    la met en uvre peut réutiliser ses méthodes
  • Il est aussi plus facile d'interpréter ce que
    fait le programme si les noms de classe,
    d'attributs et de méthodes sont naturels

28
Le CLASSPATH (1)
  • javac est capable de compiler à la volée les
    classes nécessaires pour compiler dautres
    classes
  • class Voiture
  • Moteur moteur
  • La compilation de Voiture.java entraîne la
    compilation de Moteur.java
  • Le CLASSPATH est une variable d'environnement qui
    décrit tous les chemins où Java doit aller
    chercher des packages

29
Le CLASSPATH (2)
  • Quand les classes à compiler ne sont pas
    immédiatement accessibles, recherche à partir du
    CLASSPATH
  • Sil y a plusieurs classes identiques dans
    plusieurs répertoires différents, on peut choisir
    celle que le compilateur ira chercher
  • Danger si vous navez pas bien positionné le
    CLASSPATH, java utilise peut-être une autre
    classe que celle que vous croyez

30
Positionner le CLASSPATH
  • Un chemin est une suite de répertoires depuis la
    racine de la machine
  • Le CLASSPATH donne une suite de chemins, qui
    désignent tous les répertoires dans lesquels java
    peut aller chercher des classes
  • En csh, tsch ...
  • setenv CLASSPATH chemin1chemin2
  • En bash
  • export CLASSPATHchemin1chemin2

31
Usage du CLASSPATH
  • Le CLASSPATH doit pointer à la racine des
    packages de votre application
  • Il est important que les packages portent le même
    nom que les répertoires qui les contiennent
  • Compilation à la racine des packages
  • Exécution nimporte où
  • Exemple dans /home/moi/MonPackage/MaClasse.java
  • CLASSPATH /home/moi/
  • Compilez dans /home/moi/
  • Exécutez où vous voulez

32
JAVADOC
  • Outil de documentation automatique dun programme
  • Produit un ensemble de fichiers HTML à partir des
    classes, attributs, méthodes et commentaires
  • Respecte le découpage en packages, met des liens,
    option pour ne documenter que ce qui est public.
  • Extrêmement utile pour diffuser son propre code

33
Commentaires
  • On commente
  • Les classes
  • Les attributs
  • Les méthodes
  • Les paramètres
  • Les valeurs de retour

34
Syntaxe des commentaires
  • /
  • ici, un commentaire
  • autres éléments (_at_)
  • /
  • _at_param nomVariable rôle de la variable
  • _at_return rôle de la valeur retournée
  • _at_see classe, package mise dun lien
  • _at_deprecated périmé
  • _at_author nom de lauteur

35
Conventions de notation
  • class MaClasse majuscule pour les classes et
    pour les premières lettres de chaque mot
  • int maVariable minuscule pour les variables,
    attributs et méthodes, mais majuscule pour les
    premières lettres de chaque mot
  • accesseurs get et set NomAttribut (params)
  • Une seule classe par fichier, le fichier porte le
    nom de la classe

36
La classe System
  • Permet daccéder à différentes fonctionnalités du
    système, en particulier les entrées-sorties
  • Les variables in, out et err permettent daccéder
    à lentrée standard, la sortie standard, et la
    sortie standard derreur
  • public static currentTimeMillis() renvoie le nb
    de millisecondes depuis 01/01/1970
  • public static void exit(int status) permet de
    quitter le programme avec un code de sortie
    (status)

37
Exercice une classe Vecteur
  • On souhaite réaliser une classe Vecteur
    permettant de stocker une collection d'objets en
    les plaçant les uns après les autres, de
    retrouver un objet par son numéro et de connaître
    en permanence le nombre d'objets présents.
  • La classe Vecteur dispose des attributs suivants
  • int size // nombre d'objets contenus dans le
    Vecteur
  • int maxSize // taille maximale du Vecteur
  • Object data // tableau contenant les objets
    stockés
  • Ecrivez les méthodes suivantes
  • Vecteur(int max) // initialise le tableau à la
    taille max
  • void add(Object o) // ajoute un objet après ceux
    déjà stockés
  • Object elementAt(int index) // renvoie l'objet
    numéro index
  • void remove(int index) // enlève l'objet numéro
    index
  • void insert(Object o, int index) // insère
    l'objet à la place index

38
Corrigé (1)
  • class Vecteur
  • int size // nombre d'objets contenus dans le
    Vecteur
  • int maxSize // taille maximale du Vecteur
  • Object data // tableau contenant les objets
    stockés
  • Vecteur(int max) //constructeur
  • maxSize max
  • data new ObjectmaxSize
  • size 0

39
Corrigé (2)
  • // class Vecteur // suite
  • void add(Object o)
  • if (size1gtmaxSize)
  • System.out.println("Plus de place pour stocker
    l'objet")
  • data size o
  • size
  • //

40
Corrigé (3)
  • // class Vecteur // suite
  • Object elementAt(int index)
  • if (indexgtsize) return null
  • else return dataindex
  • //

41
Corrigé (4)
  • // class Vecteur // suite
  • void remove(int index)
  • for (int iindexiltsize-1i)
  • dataidatai1
  • datasize-1null
  • size--
  • //

42
Corrigé (5)
  • // class Vecteur // suite
  • void insert(Object o, int index)
  • for (int isizeigtindexi--)
  • dataidatai-1
  • dataindexo
  • size
  • //

43
Besoin d'évasion ?
Write a Comment
User Comments (0)
About PowerShow.com