1 Java : Programmation Impérative Résumé du cours précédent (I11) Paradigme impératif Algorithmique simple Découpage fonctionnel Qu est-ce qu 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 o o o instructions de contrôle: tests (if,?:, switch), boucles (for, while, do / break, continue, return), bloc d instructions (simples, imbriqués) Types primitifs: noms, codage, opérateurs + librairie Math, typage fort, déclaration de variables, initialisation, constantes de type (2f, 0xA2, ) Tableaux de types simples: déclaration (types), initialisation (notation accolades), manipulation (notation crochets: itération, affectation, lecture) Chaînes de caractères (Java): String avec construction, déclaration et manipulations simples Découpage fonctionnel o o Fonctions: méthodes statiques, signature, paramètres formels, application, paramètres effectifs (passage par valeurs) Raffinement fonctionnel: granularité générale (modules, fonction, instruction, ), raffinement
2 Qu est-ce qu un programme informatique? Qu est-ce qu un programme informatique? o Dé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] o Dé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] o Dé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] 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.
3 Exemple de programme informatique Exemple de programme qui des données d un état initial vers un état final : un traitement de texte
4 Qu est-ce qu un paradigme de programmation? Qu est-ce qu un paradigme de programmation? o Dé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 : -, -, -, -, -, -,
5 Qu est-ce qu un paradigme de programmation? - en, un programme est vu comme une suite ordonnée de transformations d états, - en, un programme est vu comme une suite d'évaluations de fonctions sans états, - en, les développeurs doivent considérer le programme comme une collection d objets en interaction, - en, un programme est un ensemble de déclarations de faits et de règles qui concourent à représenter des connaissances et à les unifier pour répondre à des buts, - la permet aux développeurs de voir les applications comme des ensembles de processus agissant sur des états localement partagées. [wikipedia]
6 Qu est-ce que le paradigme impératif? Qu est-ce que le paradigme impératif? o Dé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. - : «fais ceci» impérativement! - : «fais ceci ; puis fais cela ; etc.» - Dans les langages impératifs, les variables portent des états (valeurs) et une opération spéciale permet d y écrire : l affectation. Pour la lecture, une simple référence à la variable par son nom est équivalente à sa valeur (son état). Lorsqu une variable ne peut être affectée qu une seule fois, elle est dite «immutable» (constante), alors que lorsqu elle peut être réaffectée autant de fois que nécessaire, elle devient «mutable».
7 Algorithmique simple Qu est-ce que l algorithmique o Dé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. Pour exprimer un algorithme, on utilise des de traitement de données : - de tests : if /?: / switch...case - de boucles : for / while / do Ces seules instructions de contrôle permettent de résoudre tous les problèmes calculables (numériques comme symboliques). Les ensembles suivants d instructions sont équivalents : boucles (for / while / do) ou récursivité (appels récursifs)
8 Qu est-ce que le découpage fonctionnel? Qu est-ce que le découpage fonctionnel? o Déf.: Le découpage fonctionnel consiste à morceler un traitement en plusieurs parties fonctionnelles (ou méthodes en O-O). On peut vouloir découper un traitement pour deux raisons : - : quand un traitement est trop long (une page de code), on préfère le découper en traitements plus petits, qui seront alors invoqués séquentiellement. - : (c est le cas le plus intéressant et le plus courant) il consiste à prévoir à l avance et à extraire d un traitement quelconque toutes les parties susceptibles d être utilisées en d autres endroits du programme (cela nécessite une certaine analyse). Des deux types de découpage seul le second corresponde à ce qui est également appelé le.
9 Objectifs de ce cours (I21) Ce cours (I21) s 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
10 s et objets simples : exemple Comment réaliser le clavier de cette calculatrice? 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... On peut donc dire que tous les boutons ont des : mais que chacun a. Il en va de même pour tout ce qu on a envie de nommer des au sens large du terme.
11 BOUTON PION s et objets simples : exemples (1) Tout ce qu on a envie de nommer au sens où cela possède des caractéristiques, peut être décrit par une entité générale que l on nommera, en O-O,. Inversement, tout ce qui peut être décrit à l aide d une entité générale, ici, peut permettre de générer autant d, tous distincts par les valeurs de leurs attributs. DOMINO POISSON BILLET LOTO LIVRE ACROBATIE MAISON
12 s et objets simples : exemples (2) Objets BOUTON BOUTON Objets DOMINO DOMINO Objets PION Objets LOTO Objets BILLET 1 couleur 1 forme n trous LOTO n lignes m colonnes n*m valeurs n*m positions BILLET 1 pays 1 valeur 1 nom de monnaie s Descripteurs des attributs des objets & Objets LIVRE PION 2 marques 1 couleur 1 forme 1 valeur Instances particulières valuées 1 objet = 1 instance de classe Objets LIVRE 1 titre 1 auteur n pages Un objet ACROBATIE Objets POISSON POISSON 1 couleur 1 espèce 1 nourriture ACROBATIE 1 nom de figure n acrobates
13 s et objets simples : code de classe (1) Descripteurs des attributs des objets 1 objet = 1 instance de classe s & Objets Instances particulières valuées /** 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 un domino (2,5) m1 = 2 m2 = 5 un domino (2,5) un domino (3,4) m1 = 3 m2 = 4 un domino (6,6) //...à suivre... } m1 = 2 m2 = 5 m1 = 6 m2 = 6 Déclarations non statique
14 Constructeur d objets (détail 1) Pour disposer d un objet, il faut le construire. Un constructeur porte le et est généralement déclaré. Il attend des qui permettront de construire un objet. /** représentant un domino avec ses 2 marques. */ class Domino { // Attributs int m1; // marque 1 int m2; // marque 2 /** Le constructeur de domino */ public Domino (int vm1, int vm2){ // Instructions de construction // qui doivent affecter les marques // du // avec les valeurs des paramètres } } Déclaration «public» seulement et non plus «public static»! La signature des constructeurs est particulière : elle n admet pas de type de retour!
15 Constructeur d objets (détail 2) 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). /** représentant un domino avec ses 2 marques. */ class Domino { // Attributs int m1; // marque 1 int m2; // marque 2 /** Le constructeur de domino */ public Domino (int vm1, int vm2){ // Instructions d initialisation // du m1 = vm1; // marque 1 m2 = vm2; // marque 2 } } Notation pointée habituelle Moyennant l usage de «this», le constructeur peut accéder aux de.
16 MAIS on peut aussi vouloir construire des dominos selon d autres schémas. Par exemples : o un domino double o un domino par défaut. Constructeur d objets (détail 3) ICI, on dira qu il y a de constructeurs. /** représentant un domino avec ses 2 marques. */ class Domino { // Attributs int m1; // marque 1 int m2; // marque 2 /** Constructeur avec 2 marques */ public Domino (int vm1, int vm2){ m1 = vm1; m2 = vm2; } /** Constructeur de domino double */ public Domino (int vm){ m1 = m2 = vm; } /** Constructeur de domino par défaut */ public Domino (){ m1 = 0; m2 = 0; } }
17 Construction d objet : new La classe étant maintenant finalisée, il ne reste qu à construire des dominos! Toute construction d objet en Java doit être faite à l aide de l opérateur d instanciation : qui retourne l objet valide nouvellement construit. 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; } } d1 et d4 sont des objets différents! domino d4 m1 = 2 m2 = 5 domino d1 domino d2 domino d3 m1 = 6 m2 = 6 m1 = 3 m2 = 4 m1 = 2 m2 = 5
18 + = public $ = static Accès aux attributs des objets : OID versus this classe MainDominos +$ Main(String[]) Domino d4 = new Domino(2,5); if ( m1!= m2 ) m1 = m2; Vision externe La méthode main voit le domino au travers de sa référence ou OID. classe Domino Ici,. m1 : int m2 : int +Domino(int,int) +Domino(int) +Domino() Vision interne m1 = vm1; m2 = vm2; d4: Domino this:domino m1 = 2 m2 = 5 Elle ne peut faire autrement que de l utiliser. De plus, this n a pas de sens dans main. Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde