LIP6 cours L3 : POBJ Programmation par Objets en Java - PowerPoint PPT Presentation

1 / 58
About This Presentation
Title:

LIP6 cours L3 : POBJ Programmation par Objets en Java

Description:

De la programmation imp rative et proc durale la programmation orient e objets ... Qui en appellent d'autres... main() init() calcule() trie() affiche ... – PowerPoint PPT presentation

Number of Views:143
Avg rating:3.0/5.0
Slides: 59
Provided by: sig9
Category:

less

Transcript and Presenter's Notes

Title: LIP6 cours L3 : POBJ Programmation par Objets en Java


1
LIP6 cours L3 POBJ Programmation par Objets
(en Java)
  • Olivier Sigaud
  • LIP6/AnimatLab
  • olivier.sigaud_at_lip6.fr
  • 01.44.27.88.53

2
Plan du cours 1
  • De la programmation impérative et procédurale à
    la programmation orientée objets
  • Structures de contrôle
  • Décomposition
  • Variables
  • Java historique, types de base, tableaux
  • Les classes
  • Types, instances, objets,
  • Attributs
  • Méthodes
  • Construction d'un objet

3
De la programmation impérative et procédurale à
la programmation orientée objets
4
Prog. impérative et procédurale
  • Objectif écrire une séquence d'instructions de
    telle façon qu'un ordinateur produise une sortie
    appropriée pour une certaine entrée
  • Ingrédients
  • variables
  • tests
  • boucles
  • structures
  • décomposition en fonctions
  • passages de paramètres

5
Tests
  • Permettent d'exécuter une séquence d'instructions
    uniquement si une certaine condition est vérifiée

if (alt0) bloc1 else if
(bgt1) bloc2 else bloc 3
6
Boucles While
  • Permettent d'exprimer la répétition, de réaliser
    plusieurs fois le même bloc d'instructions

int i10 do System.out.println(i)
i-- while (igt0)
int i10 while (igt0) System.out.println(i
) i--
7
Boucles for (1)
  • Equivalentes aux boucles while()
  • for (int i0ilt10i)
  • System.out.println(i)
  • int i9
  • for (igt0i--)
  • System.out.println(i)

8
Boucles for (2)
  • int j3
  • for (int i0(ij)lt20ii4)
  • System.out.println(i)
  • int i
  • for (i0ilt10)
  • System.out.println(i)
  • ii2

9
Décomposition fonctionnelle
  • Le programme est une fonction principale
  • int main(argc, argv)
  • Cette fonction appelle des sous-fonctions
  • Qui en appellent d'autres

main()
init()
calcule()
trie()
affiche()
compare()
permute()
factorise()
10
Savoir décomposer
  • Une bonne décomposition en fonctions fait
    apparaître des sous-fonctions ltlt naturelles gtgt,
    i.e. qui ont un sens autonome
  • Plus un algorithme est complexe, plus il faut le
    décomposer en nombreuses fonctions plus simples
  • On doit comprendre immédiatement ce que fait
    toute fonction
  • Erreur tout mettre dans une grosse fonction

11
Les blocs
  • Tout ensemble d'instruction entre "" est un
    bloc
  • Une fonction est un bloc particulier
  • Dans une fonction, il peut y avoir plusieurs
    blocs
  • Eviter plus de 3 niveaux de blocs imbriqués

12
Effets de bord
  • On appelle effet de bord le fait quun
    traitement local (réalisé dans un bloc) produise
    sur les données un effet qui persiste une fois
    que le pointeur dinstruction est sorti de ce
    bloc
  • Exemple type variables globales

13
Variables
  • Une variable correspond à un emplacement mémoire
  • C'est un emplacement alloué pour faire des
    calculs
  • Le nom de la variable permet au compilateur de
    retrouver l'emplacement.

14
Déclaration et allocation
variable
emplacement mémoire
double epsilon
epsilon
  • epsilon est une variable.
  • A cette variable est associé un type.
  • En pratique, la machine virtuelle associe à la
    variable ladresse en mémoire dun emplacement
    dont la taille dépend du type et où sera stockée
    la valeur depsilon
  • La déclaration induit lallocation de
    lemplacement

15
Initialisation
double epsilon 0.005
epsilon
0.005
  • En Java, une variable non initialisée vaut
    null, false, 0
  • Une variable peut être initialisée lors de la
    déclaration type nomVariable valeur
  • Initialisation déclaration affectation
  • Souvent, on peut aussi déclarer dabord, puis
    affecter plus tard, mais gare aux variables
    déclarées mais non affectées

16
Blocs et variables locales
  • On appelle portée d'une variable l'espace au
    sein du programme où cette variable est connue
  • La portée d'une variable locale est le bloc dans
    lequel elle est définie
  • De lespace mémoire est alloué temporairement
    pour les variables locales du bloc, le temps
    pendant lequel le pointeur d'instruction parcourt
    le bloc.
  • En pratique, les variables locales sont stockées
    sur une pile et dépilée quand on sort du bloc

17
Portée dune variable locale
  • int methode()
  • double longueur 1.5

longueur
1. 5
longueur
1. 5
18
Variables globales
  • Variables globales visibles dans tout le
    programme, allouées pour toute la durée du
    programme
  • NB l'usage des variables globales est plus
    facile à première vue, mais inefficace et
    déstructurant
  • Inefficace ne sont pas stockées dans la pile,
    mais dans la mémoire globale gt accès plus long
  • Déstructurant éparpillement des données et des
    fonctions
  • Programmation par effet de bord
  • Elles tendent à disparaître en POO
  • Mais on verra des effets de bord locaux aux
    objets

19
Passage de paramètres
  • A l'appel de chaque fonction, de l'espace mémoire
    local est alloué pour chaque paramètre d'entrée
    (comme pour une variable locale)
  • Les valeurs des paramètres d'entrée sont copiées
    avant l'appel de la fonction
  • Le calcul s'effectue sur ces copies
  • La valeur retournée est copiée dans une variable
    de la fonction appelante

20
Exemple
  • main()
  • float a 23.3
  • float b 12.6
  • float resultat division(a,b)
  • float division(float dividende, float diviseur)
  • return dividende/diviseur

main()
division()
23.3
a
dividende

12.6
b

diviseur

resultat
23.3/ 12.6
retour
21
En C les structures
  • Types complexes constituées de types plus simples
  • struct Camion
  • int nbRoues
  • int nbRemorques
  • float longueur
  • Déclaration Camion moncamion
  • Camion est un nouveau type
  • Usage moncamion.nbRoues 18
  • Transition vers la programmation orientée objets

22
Programmation orientée objets
  • Tous les ingrédients de la programmation
    impérative et procédurale sont présents
  • Mais la décomposition en arbre de fonctions n'est
    pas assez structurante pour des programmes très
    complexes
  • Structurer le programme autour des objets
    manipulés
  • Les traitements sont associés aux objets
  • Permet de raisonner dans le langage du problème
  • Séparation plus claire entre données et
    traitements
  • Confinement des effets de bord aux objets

23
Décomposition classique en fonctions
main()
Données
init()
calcule()
Données
factorise()
trie()
compare()
permute()
24
Décomposition orientée objets
Données
Données
trie()
init()
calcule()
compare()
permute()
factorise()
25
Présentation de Java
26
Doù vient java ?
  • Apparition en 1995
  • La syntaxe dérive de C (80s), qui dérive de
    celle de C (1985)
  • Simplification vis-à-vis de C
  • Présence du garbage collector (gain de 30 à 40
    en temps de développement, perte en temps
    dexécution) (DARPA)
  • Langage incontournable dans lindustrie HighTech

27
Historique
C (1972)
Internet (1966)
Hypertexte (1986)
POO (1980s)
WWW (1992)
C (1980)
Applet
Application
Java (1995)
28
Types de base et opérateurs
  • Booléens boolean gt true, false
  • Entiers short, int, long (entiers signés)
  • Flottants float, double (IEEE 754)
  • Caractères char (Unicode)
  • and
  • or
  • ! gt lt

29
Tableaux
  • int montableau // ne réserve pas la place
    mémoire !!!
  • int montableau // ne réserve pas la place
    mémoire !!!
  • int5 montableau // ne compile pas !!!
  • int montableau5 // ne compile plus !!!
  • Indices de 0 à n-1

30
Déclaration de tableaux
double valeurs valeurs new double5
valeurs1 0.005

valeurs0
valeurs0


0.005
valeurs1
valeurs2





valeurs4

valeurs4
Les cases du tableau sont allouées au new
ou n4 valeurs new doublen1
31
Dimensions multiples
valeurs00
double valeurs valeurs new double 55


valeurs0


valeurs02


valeurs2


valeurs04


valeurs4

valeurs10


valeurs12


valeurs14
32
Déclaration et allocation simultanée
  • double valeurs 0.2,6.3,7.456,80.0,10.10
  • System.out.println(valeurs.length) gt 5
  • Vérification de non débordement
    IndexArrayOutOfBounds

33
Classes, Types, Objets, Instances, Attributs,
Méthodes
34
Les classes
  • Les programmes manipulent des objets
  • Chaque objet est une instance d'une classe
  • Une classe désigne un type dont les objets sont
    des instances
  • Par exemple, le mot bonjour est un
    représentant de la classe des mots, une instance
    du type mot.
  • Un programme est structuré sous forme d'un
    ensemble de classes qui se partagent les
    traitements à effectuer

35
Objets, Classes et Instances
  • Une classe définit
  • Un type
  • Une description commune pour un ensemble
    dobjets, via un ensemble dattributs
  • Les traitements associés à ces objets, via un
    ensemble de méthodes
  • Chaque objet indidivuel est défini par lensemble
    des valeurs que prennent ses attributs
  • Cest le rôle des constructeurs de créer des
    objets individuels

36
Les attributs
  • Les attributs d'une classe décrivent les éléments
    qui composent les objets de cette classe
  • Tous les attributs sont dotés d'un type défini au
    niveau de la classe (type de base, interface ou
    autre classe)
  • Les attributs sont vus comme des variables
    globales internes à un objet
  • La portée d'un attribut est l'objet dans lequel
    il est défini l'attribut garde sa valeur d'une
    méthode à l'autre tant qu'aucune méthode ne le
    modifie
  • On programme donc par effet de bord à lintérieur
    dun objet

37
Usage des attributs
  • Les attributs servent à représenter diverses
    relations
  • caractéristiques ou qualités d'un objet
  • composants d'un objet complexe
  • objets en relation avec l'objet
  • Lorsqu'on utilise un attribut dans une méthode,
    il ne faut pas re-déclarer son type (sinon, on
    déclare en fait une variable locale de même nom)
  • Eviter d'avoir une variable locale dans une
    méthode qui porte le même nom qu'un attribut
    (risque de confusion, source classique de bugs)

38
Exemple (1)
  • class Voiture
  • double longueur 1.5
  • public void demarrer()
  • double longueur 3.1
  • if (longueurlt2)

39
Exemple (2)
  • class Voiture
  • double longueur 1.5
  • public Voiture(double longueur)
  • this.longueur longueur
  • Ou bien
  • public Voiture(double lon)
  • longueur lon

40
Les méthodes
  • A chaque classe sont associées des méthodes, qui
    correspondent aux traitements que le programme
    peut effectuer sur les objets de cette classe
  • Par exemple, on peut épeler un mot, l'imprimer,
    le réécrire à l'envers, etc.
  • Il faut s'efforcer d'associer à une classe des
    méthodes qui lui sont naturelles (difficile !)

41
Exemple
  • class Voiture
  • double longueur
  • public Voiture(double lg)
  • longueur lg
  • public double getLongueur()
  • return longueur
  • public static void main(String args)
  • Voiture mavoiture new Voiture(2.8)
  • La méthode "getLongueur()" est une méthode de la
    classe Voiture

42
Surcharge
  • Une même classe peut avoir plusieurs méthodes de
    même nom, mais avec des paramètres de types
    différents
  • A ne par confondre avec la surdéfinition
    (paramètres de mêmes types, dans le cas de
    lhéritage)

43
Méthodes et fonctions
JAVA
C
  • struct Voiture
  • Embrayage embrayage
  • Moteur moteur
  • BoiteVitesse boite
  • void demarrer(Voiture v)
  • enfoncer(v.embrayage)
  • faireTourner(v.moteur)
  • passerVitesse(v.boite, 1)
  • relacher(v.embrayage)

class Voiture Embrayage embrayage Moteur
moteur BoiteVitesse boite public void
demarrer() embrayage.enfoncer()
moteur.faireTourner(.) boite.passerVitesse(1)
embrayage.relacher()
44
Lobjet comme contexte
  • class Nombre
  • //attribut
  • int valeur
  • //constructeur
  • Nombre(int val)
  • valeurval
  • //methode
  • int ajoute(int val)
  • return (valeur val)

class NombreMain public static void main(String
args) Nombre n new Nombre(8) int
resultat n.ajoute(5) System.out.println(result
at)
45
Construction
46
Les constructeurs
  • Pour utiliser un objet, il faut dabord le
    construire
  • Construire
  • allouer un emplacement en mémoire
  • initialiser les attributs (en général)
  • C'est le rôle des constructeurs
  • Un constructeur se présente syntaxiquement comme
    une méthode qui porte le même nom que la classe
    et ne renvoie rien
  • L'appel du constructeur se fait via lallocateur
    new
  • Lallocateur new renvoie lidentité de
    lobjet (en Java, l'adresse de lemplacement
    mémoire alloué)

47
Etat dun objet
  • Létat dun objet est défini par lensemble des
    valeurs que prennent chacun de ses attributs
  • Chaque changement de valeur dun attribut
    implique un changement détat
  • En général, quand on crée un objet on initialise
    son état
  • Instanciation allocation initialisation

48
Exemple de construction
  • class Voiture
  • private double longueur
  • public Voiture(double lg)
  • longueur lg
  • public static void main(String args)
  • Voiture mavoiture new Voiture(2.80)

49
Construction d'un objet
Objet valeurs
Variable référence
Voiture objet créé avec new
mavoiture
Voiture mavoiture new Voiture()
La variable est une sorte de télécommande sur
l'objet
50
Oubli de l'allocation mémoire
Voiture mavoiture mavoiture.demarre()
null
mavoiture
  • La déclaration de variable alloue la référence,
    mais pas lobjet
  • La référence vaut null
  • Oubli de lallocation de lobjet gt
    NullPointerException
  • Erreur archi-fréquente !!!

51
Constructeurs multiples
  • Il peut y avoir plusieurs constructeurs pour une
    même classe, avec des paramètres de types
    différents
  • Cela signifie que l'on peut surcharger les
    constructeurs comme toutes les méthodes
  • Tant qu'aucun constructeur n'est créé, il existe
    un constructeur par défaut, qui ne prend pas de
    paramètres et ne fait rien, sauf allouer la
    mémoire (les attributs sont initialisés aux
    valeurs par défaut)
  • Du coup, quand on rajoute un constructeur avec
    des paramètres, le constructeur par défaut
    disparaît ?
  • On verra les conséquences avec lhéritage ?

52
Exemple de classe personnelle
  • class Voiture
  • private double length
  • private String name
  • public double getLength()
  • return length
  • public String getName()
  • return name

53
Exemple (suite)
  • class Voiture
  • public Voiture()
  • public Voiture(string nom, double len)
  • name nom
  • length len
  • public static void main(String args)
  • Voiture v new Voiture ( coccinelle , 3.5)

54
Mon premier programme Java
  • Ouvrir un fichier MaClasse.java
  • Taper
  • class MaClasse
  • public static void main(String args)
  • System.out.println( Hello, Java world
    ! )
  • javac MaClasse.java
  • java MaClasse

55
Lancer Java
  • Mettre la classe MaClasse dans un fichier
    MaClasse.java (une seule classe par fichier)
  • Taper javac MaClasse.java permet de générer du
    bytecode exécutable par la machine virtuelle
    (JVM)
  • Taper java MaClasse permet d'exécuter la méthode
    public static void main(String args) de la
    classe MaClasse si elle en a une.

56
Environnement JAVA
  • Fichier MaClasse.java gt fichier source dans
    lequel on décrit le code de la classe
  • Compilateur javac MaClasse.java
  • Génère du byteCode gt MaClasse.class
  • Machine virtuelle java MaClasse
  • Exécute le byteCode gt fait tourner le programme
  • On verra la compilation de plusieurs fichiers
    plus tard

57
La méthode main() passage darguments
  • class Main
  • public static void main(String args)
  • for (int i0iltargs.lengthi)
  • System.out.println(argsi)
  • bashgt javac Main.java
  • bashgt java Main bonjour monde
  • bashgt bonjour
  • bashgt monde

58
LAPI de Java
  • (Très grand) ensemble de classes toutes faites
    que lon peut utiliser dans ses programmes
  • Cf. java.sun.com/j2se/1.5.0/docs/api
Write a Comment
User Comments (0)
About PowerShow.com