21
1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel un programme informatique ? / un langage de programmation ? / un paradigme de programmation ? Le paradigme impératif instructions, séquence, états, variables d’état, affectation Algorithmique simple (Java noyau C) o instructions de contrôle: tests (if, ?:, switch), boucles (for, while, do / break, continue, return), bloc d’instructions (simples, imbriqués) o Types primitifs: noms, codage, opérateurs + librairie Math, typage fort, déclaration de variables, initialisation, constantes de type (2f, 0xA2, …) o Tableaux de types simples: déclaration (types), initialisation (notation accolades), manipulation (notation crochets: itération, affectation, lecture) o Chaînes de caractères (Java): String avec construction, déclaration et manipulations simples Découpage fonctionnel o Fonctions: méthodes statiques, signature, paramètres formels, application, paramètres effectifs (passage par valeurs) o Raffinement fonctionnel: granularité générale (modules, Résumé du cours précédent (I11)

1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

Embed Size (px)

Citation preview

Page 1: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

1

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Java : Programmation Impérative

Paradigme impératifAlgorithmique simpleDécoupage fonctionnel

•Qu’est-ce qu’ un programme informatique ? / un langage de programmation ? / un paradigme de programmation ?•Le paradigme impératifinstructions, séquence, états, variables d’état, affectation •Algorithmique simple (Java noyau C)

o instructions de contrôle: tests (if, ?:, switch), boucles (for, while, do / break, continue, return), bloc d’instructions (simples, imbriqués)

o Types primitifs: noms, codage, opérateurs + librairie Math, typage fort, déclaration de variables, initialisation, constantes de type (2f, 0xA2, …)

o Tableaux de types simples: déclaration (types), initialisation (notation accolades), manipulation (notation crochets: itération, affectation, lecture)

o Chaînes de caractères (Java): String avec construction, déclaration et manipulations simples

•Découpage fonctionnel o Fonctions: méthodes statiques, signature, paramètres formels, application, paramètres

effectifs (passage par valeurs)o Raffinement fonctionnel: granularité générale (modules, fonction, instruction, …),

raffinement

Résumé du cours précédent (I11)

Résumé du cours précédent (I11)

Page 2: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

2Qu’est-ce qu’un programme informatique ?

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Mais, pour en donner une vision quelque peu concrète et usuelle, on peut voir un programme comme ce qui doit être exécuté par un ordinateur pour :•soit transformer des données d’un état initial vers un état final,•soit faire transiter des données d’un endroit à un autre,•soit les deux à la fois.

oDéf.3: un programme informatique est un ensemble d’instructions, rédigées pour qu’un ordinateur puisse, à l’aide de ses informations mémorisées, résoudre un problème donné. [Petit Robert]

Qu’est-ce qu’un programme informatique ?oDéf.1: un programme informatique est une séquence d'instructions sous forme compréhensible par l'ordinateur (dite binaire), décrivant une tâche à accomplir par celui-ci.[http://www.linux-france.org/article/kafkafr/node59.html]

oDéf.2: un programme informatique est une liste d'instructions, rédigée par un programmeur, sans laquelle un ordinateur ne saurait rien faire d'autre que rouiller. [http://rad2000.free.fr/glosntci.htm]

Page 3: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

3Exemple de programme informatique

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Page 4: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

4 Qu’est-ce qu’un paradigme de programmation ?

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Qu’est-ce qu’un paradigme de programmation ?oDéf.: Un paradigme de programmation est un style fondamental de programmation informatique qui traite de la manière dont les solutions aux problèmes doivent être formulées dans un langage de programmation(à comparer à la méthodologie, qui est une manière de résoudre des problèmes spécifiques de génie logiciel).[http://fr.wikipedia.org/wiki/Paradigme_%28programmation%29].

Un paradigme de programmation conditionne la vision que le développeur se fera de l’exécution de son programme.Il en existe de nombreux. Par exemple, les paradigmes :

Page 5: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

5 Qu’est-ce qu’un paradigme de programmation ?

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Page 6: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

6Qu’est-ce que le paradigme impératif ?

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Qu’est-ce que le paradigme impératif ?oDéf.: Le paradigme impératif est un paradigme de programmation qui repose sur trois notions principales que sont :

• celle de séquence d’instructions,• de variables mutables,• et d’affectation.

Page 7: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

7Algorithmique simple

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Qu’est-ce que l’algorithmiqueoDéf.: L’algorithmique est l’ensemble des instructions permettant de réaliser un traitement recherché sur des données. En paradigme impératif, c’est une séquence d’instructions.

Les ensembles suivants d’instructions sont équivalents :

boucles (for / while / do) ou récursivité (appels récursifs)

Page 8: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

8Qu’est-ce que le découpage fonctionnel ?

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Qu’est-ce que le découpage fonctionnel ?oDéf.: Le découpage fonctionnel consiste à morceler un traitement en plusieurs parties fonctionnelles (ou méthodes en O-O).

Page 9: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

9Objectifs de ce cours (I21)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Ce cours (I21)Ce cours (I21)

• Classes et objets simples sans méthode

• Aspects dynamiques : le « garbage collector »

• Méthodes d’instance simples

• Connaissance de base de classes de l’API Java

• Méthodes d’instance spéciales

• Propriétés de classes : attributs et méthodes de classes

• Les tableaux d’objets versus les types ensemblistes ArrayList<E> et TreeMap<K,V> de Java

• Premiers éléments de conception logicielle

• La notion de package

• Prolongement : les classes comme types abstraits

Page 10: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

10Comment réaliser le clavier de cette calculatrice ?

Classes et objets simples : exemple

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Il faudrait disposer de boutons tels que :

⇛ chaque bouton soit différent des autres par :sa légende, sa couleur, sa position et sa taille...⇛ mais que tous possèdent :une légende, une couleur, des coordonnées, une largeur et une hauteur...

Page 11: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

11Classes et objets simples : exemples (1)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classe DOMINO

Classe BOUTON

Classe MAISON

Classe PIONClasse

POISSON

Classe LOTO

Classe LIVRE

Classe BILLET

Classe ACROBATIE

Page 12: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

12Classes et objets simples : exemples (2)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

1 couleur1 formen trous

Classes & Objets

ClasseDOMINO

ClasseBOUTON

ClassePION

ClassePOISSON

ClasseLOTO

ClasseLIVRE

ClasseBILLET Classe

ACROBATIE

2 marques 1 couleur1 forme1 valeur

n lignesm colonnesn*m valeursn*m positions

1 couleur1 espèce1 nourriture

1 pays1 valeur1 nom de

monnaie

1 titre1 auteurn pages

1 nom de figure

n acrobates

Descripteurs des attributs

des objets

Instances particulières

valuées

1 objet = 1 instance de classe

Objets BOUTON Objets DOMINO Objets PION

Objets LOTO

Objets POISSON

Un objetACROBATIEObjets LIVRE

Objets BILLET

Page 13: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

13Classes et objets simples : code de classe (1)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes & Objets

Descripteurs des attributs

des objets

Instances particulières

valuées

1 objet = 1 instance de classe

/** Classe représentant un domino * avec ses 2 marques. */class Domino { // Attributs communs // à tous les objets // (données propres) int m1; // marque 1 int m2; // marque 2

// ...à suivre...}

un domino (2,5)

m1 = 2m2 = 5

un domino (3,4)

m1 = 3m2 = 4

un domino (2,5)

m1 = 2m2 = 5

un domino (6,6)

m1 = 6m2 = 6

Déclarations non statiqueDéclarations non statique

Page 14: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

14Constructeur d’objets (détail 1)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

La signature des construc-

teurs estparticulière :

elle n’admet

pas de type de retour !

La signature des construc-

teurs estparticulière :

elle n’admet

pas de type de retour !

Déclaration « public » seulement et non plus « public

static » !

Déclaration « public » seulement et non plus « public

static » !

Page 15: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

15Constructeur d’objets (détail 2)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Dès l’entrée dans le constructeur, le futur objet a déjà un emplacement mémoire qui lui est réservé. Pour valuer l’objet, le constructeur doit donc référencer cet espace mémoire

MAIS il ne le connaît pas directement ! Pour cela, Java lui fournit la variable spéciale « this » (dite d’auto-référencement).

Notation pointée habituelleNotation pointée habituelle

Page 16: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

16Constructeur d’objets (détail 3)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

MAIS on peut aussi vouloir construire des dominos selon d’autres schémas.

Par exemples :o un domino doubleo un domino par défaut.

Page 17: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

17Construction d’objet : new

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

La classe étant maintenant finalisée, il ne reste qu’à construire des dominos !

class MainDominos { /** Construction de dominos */ public static void main(String[] args) { Domino d1 = new Domino(2,5); Domino d2 = new Domino(3,4); Domino d3 = new Domino(6); Domino d4 = new Domino(2,5); // Faire quelque chose des dominos... if ( d4.m1!=d4.m2 ) d4.m1 = d4.m2; }}

domino d1

m1 = 2m2 = 5

domino d2

m1 = 3m2 = 4

domino d3

m1 = 6m2 = 6

domino d4

m1 = 2m2 = 5d1 et d4 sont des objets différents !d1 et d4 sont des objets différents !

Page 18: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

18Accès aux attributs des objets : OID versus this

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

this:Domino

d4: Domino

m1 = 2m2 = 5

Visionexterne

Visioninterne

En de

hors

de l’

obje

t,on

util

isel’o

bjet

Dan

sl’o

bjet

,on

"es

t"

l’obj

et

classe MainDominos

+$ Main(String[])

classe Domino

m1 : intm2 : int

+Domino(int,int)+Domino(int)+Domino()

+ = public$ = static

Page 19: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

19

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes et objets simples : VISION EXTERNE

classe MainDominos

Quand le code en cours d’exécution se trouve

Un domino

m1 = 2m2 = 5

Un domino

m1 = 3m2 = 4

d2d4

Visionexterne

+ = public$ = static

Page 20: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

20

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Classes et objets simples: VISION INTERNE

classe Domino

m1 : intm2 : int

Quand le code en cours d’exécution se trouve

Dominos déjà construits

m1 = 3m2 = 4

Visioninterne

+ = public

Page 21: 1 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Java : Programmation Impérative Paradigme impératif Algorithmique simple Découpage fonctionnel Quest-ce

21

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Acta est fabula* * « La pièce est jouée. » On annonçait ainsi la fin de la représentation dans le théâtre antique.