0% ont trouvé ce document utile (0 vote)
36 vues27 pages

PooJavaPart 1

Transféré par

Haytem boss
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
36 vues27 pages

PooJavaPart 1

Transféré par

Haytem boss
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Programmation Par Objets et


Langage Java
Partie I. Fondement de la POO (Modularité/Abstraction)

Najib Tounsi
Ecole Mohammadia d'Ingénieurs, Rabat

Année 2017/2018
1ère année Génie Informatique
http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-1.pdf

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 1 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Sommaire

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 2 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Fondement de la POO
(Modularité/Abstraction)
Modularité
Programmation par morceaux appelés modules.

Module qui implémente une fonctionnalité (variables et codes


sources) bien définie et dont la description est faite à travers
une interface précise de sorte qu'on n'a pas besoin de
connaître son code pour utiliser un module.

Cette décomposition de logiciel en module

facilite le développement d'un logiciel


la localisation et le correction des erreurs
limite leur impact
et permet la réutilisation des modules

Reste à savoir décomposer : comment?

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 3 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

... Fondement de la POO


(Modularité/Abstraction)
Abstraction
L'abstraction tente de réduire et factoriser les détails afin que le
programmeur puisse se concentrer sur les concepts importants.

L'abstraction de données, est l'idée importante derrière la


notion de type. (ℝ est l'ensemble des réels et ℕ l'ensemble des
entiers ... propriétés et manipulations différentes).

Cela permet la programmation sans avoir à connaître les détails


(données, codes) de représentation des objets manipulés, détails
qui sont définis séparément.

L'important c'est de savoir quoi faire avec un objet.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 4 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

... Fondement de la POO


(Modularité/Abstraction)
Cette séparation entre utilisation et représentation permet:

de changer de représentation sans changer les aspects


significatifs d'un programme.
Un point du plan peut être représenté (dans un programme)
en coordonnées polaires ou cartésiennes, il restera toujours
un point qu'on peut tracer, déplacer, et dont on peut
imprimer les coordonnées...
de partager des définitions (interfaces communes) par une
famille d'objets qui ont des représentations ou comportements
différents, tout en ayant une même signification.
Par exemple, des figures géométriques ont toutes une aire et
un pourtour, mais leur calcul est différent selon que c'est un
carré, un cercle ou autre.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 5 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Exemples Introductifs
Programmer sans abstraction de données

On va énumérer quelques exemples qui illustrent comment on peut


améliorer et faciliter l'écriture de programme en faisant abstraction
des détails de représentation.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 6 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Programmer sans abstraction:


Exemple 1
Soit le programme qui lit une chaîne de caractère et l'imprime en ordre
inverse (image miroir)
(Exemple1)
#include <stdio.h>
#define MAX 80
main(){
int curChar=0;
char c, t[MAX];

/* On lit et mémorise des caractères */


while ((c=getchar())!='\n') {
t[curChar++] = c;
if(curChar==MAX) break;
}

/* On les imprime en ordre inverse */


while (curChar>0)
putchar( t[--curChar] );
}

A noter: On a choisi un tableau, on manipule directement le tableau.


(Autre méthode)
Programme développé par raffinement successif.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 7 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Programmer sans abstraction:


Exemple 2
Soit maintenant à réutiliser/adapter programme pour tester si la
chaîne est un palindrome (le problème est proche).

(Exemple2)
#include <stdio.h>
#define MAX 80
char t[MAX], s[MAX];
main(){
int curChar=0, i=0;
char c;

/* On lit et mémorise des caractères */


while ((c=getchar())!='\n') {
t[curChar++]=c;
if(curChar==MAX) break;
}

/* On duplique la chaîne en ordre inverse */


i = 0;
while (curChar>0)
s[i++] = t[--curChar];

/* et on l'imprime pour voir (ou on teste l'identité des deux) */


printf("%s %s\n", t, s);
}

A noter: Même remarque. On a utilisé un deuxième tableau pour


comparer.

On pourrait tester sur le même tableau... Cela reste un programme


dépendant de la notation tableau!

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 8 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Programmer sans abstraction:


Exemple 3
Soit maintenant un programme qui lit une "expression arithmétique" et
vérifie si elle est bien parenthésée (parenthèses en correspondances,
car images miroirs)

(a * (c + d ) - (-5) )

Réutiliser/modifier le même programme devient plus difficile. Mais le


problème est proche. (Exemple3)
#include <stdio.h>
#define MAX 80
char t[MAX];
main(){
int curChar=0;
int nbO=0; // nombre parenthèses Ouvrantes
int nbF=0; // nombre parenthèses Fermantes
char c;
int i;
/* On lit et mémorise uniquement les parenthèses */
while ((c=getchar())!='\n') {
if (c=='(' || c==')' )
t[curChar++] = c;
else;
if(curChar==MAX) break;
}

/* On parcourt le tableau est compte les parenthèses */


for (i=0; i<curChar; i++){
if (t[i] == '(') nbO++;
else {
nbF++;
if (nbF >nbO) break;
}
}
if (i<curChar || nbO != nbF)
printf ("Mal Parenthésée :-(");
else
printf ("bien Parenthésée :-)");
}

A noter: Cela reste un programme dépendant de sa structure de


donnée: on est contraint de penser et coder en terme de tableau.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 9 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Programmer sans abstraction:


Exemple 4
Problème: Vérifier si une expression générale est bien parenthésée.

avec { ( [ < > ] ) }

Reprendre le programme précédent et l'adapter se complique. Il faut


chercher une autre idée.

L'idée c'est de mémoriser dans leur ordre d'arrivée les symboles


ouvrants déjà rencontrés, et de vérifier si chaque symbole fermant
correspond bien au dernier symbole ouvrant rencontré. C'est la
notion de pile.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 10 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Programme avec abstraction (Pile)


Considérer les données sous la forme d'une pile, et
raisonner avec la pile.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 11 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Exemple-3 résolu avec la pile


A la place d'un tableau t [MAX] des programmes précédents, on va
déclarer une abstraction PILE matérialisée avec un objet p.

(Exemple3-pile).
#include <stdlib.h>
#include "pile.h" // Voir plus loin
#define MAX 20
main(){
int curChar=0;
char c; int b=0;
PILE p; // a la place t[MAX]

p = create ();

/* On lit et empile (resp. depile) les parenthèses


* ouvrantes (resp. fermantes)
*/
while ((c=getchar())!='\n') {
if (c=='(') empiler (p, c);
else if (c==')')
if(estVide(p)) b=1;
else if (sommet(p) != '(') b=1;
else depiler (p);
else;
if(curChar==MAX) break;
}

/* On teste si la pile est vide et b=0. Cas favorable. */

if (estVide(p) && b==0)


printf ("bien Parenthésée :-)");
else printf ("Mal Parenthésée :-(");
}

A noter:

On conçoit son programme à un niveau abstrait


On ne se préoccupe pas des détails dus à une structure particulière
de données (e.g. tableau...)
P est un objet abstrait.
On le connaît à travers les opérations (empiler, dépiler,
sommet, ... ) que l'on peut y effectuer.
L'algorithme est dirigé par cette conception de d'objet de type pile.
On dit un Type Abstrait de Données

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 12 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Type Abstrait de Données Pile


La définition de la Pile (en C)
/*
Type Abstrait PILE de caractères
CopyLeft: :-)
Author: Najib Tounsi
Date: 06/10/04 00:19
Description: TAD pile en langage C
*/

/*
* Structure de données d'une pile
*/

#define MAX 20
typedef struct {
char t[MAX]; /* tableau des éléments empilés */
int top; /* indice du sommet de la pile */
} * PILE;

/*
* Interface abstraite : Liste des opérations que l'on fait sur une pile
(déclarations des profiles)
*/

PILE create();
/* crée et initialise une pile vide */

void empile(PILE, char);


/* empile le caractère donné */

char sommet(PILE);
/* retourne le caractère au sommet de la pile */

void depiler(PILE);
/* décapite la pile (retire le sommet ) */

int estVide(PILE);
/* teste si la pile est vide */

int estPleine(PILE);
/* teste si la pile est pleine */

/*
* Représentation (Implementation)
* On choisit une structure de données
* et on programme les opérations
*/

/* cf. structure de données plus haut */


/* Programmation des opérations */

PILE create(){

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 13 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

/* On crée une pile et on retourne son adresse */


PILE p = (PILE) malloc(MAX);
p->top = -1;
return p;
}

void empiler(PILE p, char c){


if (!estPleine(p))
p->t[++p->top] = c;
else
printf("Pile Pleine : %c\n", p->t[p->top]);
}

char sommet(PILE p){


return p->t[p->top];
}

void depiler(PILE p){


if (!estVide(p))
p->top--;
else
printf("Pile vide\n");
}

int estVide(PILE p){


return (p->top < 0);
}

int estPleine(PILE p){


return (p->top >= (MAX - 1));
}

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 14 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Type Abstrait de Données Pile


On a deux parties

La description des opérations qu'on fait sur une pile (sous forme de
déclaration de fonctions)
Avec commentaires :-)
La description de l'algorithme de ces opérations (ici définition de
fonctions) et la spécification de la représentation choisie pour une
pile (ici structure C avec un tableau)

Tout ce qui dépend du "tableau" est alors confiné dans les définitions
de fonctions. Donc localisé.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 15 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Type Abstrait de Données Pile:


Intérêt
Abstraction

Le (les) programme (s) principal main est programmé sans être


contraint par les détails de représentation des objets qu'il manipule.
La mise au point est facilitée.
Le programme peut évoluer (ou être réutilisé) vers la solution
d'un problème proche sans grande difficulté.
Les erreurs peuvent facilement être localisées.
L'évolutivité aussi
On peut par exemple tester si une expression générale est bien
parenthésée.
C'est parce qu'on a conçu la solution du problème en terme de
données, plutôt qu'en terme de traitements à effectuer.

Modularité

Pour maîtriser la complexité d'un système logiciel, il est nécessaire


de le décomposer en éléments plus simples, appelés modules. Le
système sera vu comme composé de plusieurs unités, chacune
réalisant une tâche bien spécifique.

La programmation par abstraction est implicitement


"modularisable" en plusieurs parties logiques (et peut-être réparties
en plusieurs fichiers sources, compilés séparement)

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 16 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Type Abstrait de Données


On appelle type abstrait de données (TAD) un ensemble
d'objets caractérisés par les opérations qui leur sont applicables.
Ang. Abstract Data Type (ADT)

Pile
empiler(), dépiler(), sommet() ...
Rectangle
tracer(), périmètre(), surface(), zoomer()...
Fenêtre
afficher(), cacher(), agrandir(), deplacer()...
Collection
ajouter(), supprimer(), appartient()...

Ce qui importe, c'est le concept véhiculé par un objet (et non la


structure de données sous-jacente)

/* C'est plus stable */

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 17 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Spécification d'un TAD


Aspect Syntaxique
Profile des opérations (entête, prototype)
Ex. Plus: N x N → N
Aspect Sémantique
Sémantique des opérations, i.e. sens / comportement du type de
donnée.
Ex. Plus (Succ (x), y)) = Succ (Plus(x, y))
Représentation
Choix d’implantation (algorithme des opérations et déclaration
de données)

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 18 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Aspect Syntaxique d'un TAD


Profile des opérations (ou entêtes)

Soit 𝔹 (les booléens), ℙ (les piles) et ℕ(les entiers)


Type ℙ =
vide : → ℙ
/* Crée une pile vide et la retourne en résultat.*/
sommet : ℙ → ℕ
emPiler : ℙ x ℕ → ℙ
dépiler : ℙ → ℙ
pileVide: ℙ → 𝔹
pilePleine: ℙ → 𝔹
Fin

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 19 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Aspect sémantique d'un TAD


Spécification du comportement (Fait partie de la description d'un TAD)

Par Commentaires: Verbosité, mais simple et facile (Clarté ?)


vide () : Crée une pile vide et la retourne en résultat.
empiler (p, n) : Rajoute l’entier n au sommet de la pile p, et la
retourne en résultat.
pileVide (p) : Teste si la pile p est vide.
etc.

Pré/Post conditions:
Ce qu'exige une opération, et ce qu'elle garantit
Pas toujours faciles mais plus formelles.
Empiler (p, n)
Requiert: Non PilePleine( p )
Garantit: Non PileVide( p ), Sommet( p ) = n

cf. Programmation par contrat, langage Eiffel, ou assertions de


Java.

Par Axiomes: On dit aussi de Spécifications algébriques.


(Formelles)

Dépiler (Vide ()) = ERREUR


Dépiler (Empiler (p, n)) = p
Sommet (Vide ()) = ERREUR
Sommet (Empiler (p, n)) = n
PileVide (Vide()) = VRAI
PileVide (Empiler (p, n)) = FAUX

Les axiomes traduisent les invariants qui caractérisent les


propriétés d’un objet.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 20 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Notion de Constructeur.
Opérations permettant d'obtenir (construire) tous objets potentiels
d'un certain type.

Les axiomes spécifient l'effet de certaines opérations (dites sélecteurs


ou fonctions d’accès) sur d'autres (dites constructeurs)

Constructeurs pour le TAD pile:

vide()
empiler()

Exemples:

empiler ( empiler ( empiler ( vide(), 1), 4), 3)


empiler ( empiler ( ( vide(), 1), 4)
empiler ( empiler ( empiler ( vide(), 1), 4), 5)

☞ Notion importante reprise dans les langages à objets.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 21 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Autre exemple de TAD. Une date


Objet Date (constituée de 3 entiers)
Type Date =
Opérations
Date : 𝐍 X 𝐍 X 𝐍 → Date
Jour : Date → 𝐍
Mois : Date → 𝐍
Année : Date → 𝐍
Demain : Date → Date
Axiomes
Jour ( Date ( j, m, a)) = j;
Mois ( Date ( j, m, a)) = m;
Année ( Date ( j, m, a)) = a;
Demain ( Date ( j, m, a)) = si j< 28 alors Date(j+1, m, a)
sinon /* faire le plus dur ...*/
Date(1, m+1, a)
Fin

Remarque : Pour plus d’abstraction, introduire les TADs Jour/Mois


/Année au lieu des trois
entiers.

Exercices:

Quelles seraient les pré/post conditions de l'exemple Date.


Définir les TADs correspondant aux objets :
Collection (d'entiers)
Un article de commerce
Un autre TAD de votre choix (inspiré de l'informatique
matériel/logiciel)
Entiers naturels (utiliser axiomes de Peano)
Indiquer les constructeurs éventuels.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 22 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Autre exemple de TAD. Une


collection
Type Collection C =
Opérations
Vide : → C
Ajouter : C X 𝐍 → C
Appartient : C X 𝐍 → B
Supprimer : C X 𝐍 → C
EstVide : C → B

Axiomes
/* Ensemble sans double */

Collection c; x, y entiers */
Appartient ( Vide(), x) = Faux
Appartient ( Ajouter (c, y), x) = si (x=y) alors Vrai
sinon Appartient( c, x)
Supprimer ( Vide(), x) = Vide()
Supprimer ( Ajouter (c, y), x) = si (x=y) alors Supprimer (c, x)
sinon Ajouter ( Supprimer (c, x), y)
EstVide ( Vide()) = Vrai
EstVide ( Ajouter (c, y)) = Faux

Fin

Exercice: Collection avec doubles?

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 23 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Représentation de TAD
Choix d'implémentation du TAD (concrétisation).

Structure de données + algorithmes des


opérations

Type Pile:
Représentation
tableau t [MAX]; /* Tableau pour les éléments de la pile*/
entier top; /* Indice du sommet de la pile +/

opérations
Vide (p) { p.top = -1; }
Empiler (p, n) { p.top = p.top+1;
p.t[p.top] = n;
}
Depiler(p) { p.top = p.top-1; }
Sommet(p) { return p.t[p.top]; }
PilePleine(p) { return p.top = (MAX-1); }
PileVide(p) { return p.top < 0; }
fin

Remarque: Prise en compte des cas d'exceptions dans les algorithmes


(spécification. sans Pré/post):

On teste les cas d'erreurs à l'intérieur des opérations


Empiler (p, n) {
if top<(MAX)
p.top = p.top+1;
p.t[p.top] = n;
else
erreur("pile pleine");
endif
}

où erreur() est une fonction donnée de traitement d'erreurs.

(Mais voir plus tard les exceptions)

Exercices:

1. Programmer le reste des opérations.


2. Choisir et programmer la représentation des TADs des exercices

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 24 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

précédents.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 25 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

En Résumé
Au lieu de programmer avec t [ expression ], top++, ... on fait empiler
(p, c), sommet (p) etc.

On ne connaît pas comment est fait l'objet p. On a uniquement besoin


de savoir avec quoi le manipuler (quelles opérations?). On appelle cela
Interface de l'objet

p est donc comme une boite noire avec des boutons (qui sont les
opérations qu'on exécute ).
Si on change l'intérieur de la "boite", on ne change pas les
programmes qui l'utilisent.
On peut définir la pile (i.e. fichier pile.h) différemment ou
améliorer les algorithmes, on n'a pas besoin de refaire les
programmes qui l'utilisent. Tant qu'on n'a pas touché à l'entête
des fonctions, i.e. l'interface de la pile).
On peut en avoir plusieurs versions.
On peut donc définir la pile de plusieurs façons et choisir celle
qui convient à un cas d'utilisation le moment venu.
En plus, on peut réutiliser cette boite dans plusieurs systèmes qui
ont en besoin. Sa spécification est parfaitement déterminée.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 26 of 27
La Programmation par les Objets et le Langage Java Partie I: Les Fondements

Notion d'encapsulation
Le TAD Pile (boîte noire) encapsule en son sein (cf. fichier pile.h)
les variables représentant un objet pile et les instructions qui les
utilisent dans les opérations sur l'objet.
En dehors de ce fichier ces variables ne sont pas connues.
En fait, il vaut mieux qu'on n'y accède pas, pour les protéger de
toute fausse manipulation.
On dit aussi Information Hiding.
Critère très important
mise au point et maintenance facilitées
Les corrections/modifications sont localisées.

http://www.emi.ma/~ntounsi/COURS/Java/PooJavaPart-1... 27 of 27

Vous aimerez peut-être aussi