II. Principes généraux Instanciation

Documents pareils
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Chapitre 2. Classes et objets

Généralités sur le Langage Java et éléments syntaxiques.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

I. Introduction aux fonctions : les fonctions standards

Diagramme de classes

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Le langage C. Séance n 4

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

BANQUES DE DONNÉES PÉDAGOGIQUES

Héritage presque multiple en Java (1/2)

Chapitre 1 : Introduction aux bases de données

Chapitre 10. Les interfaces Comparable et Comparator 1

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

4. Groupement d objets

Premiers pas sur e-lyco

Le chiffre est le signe, le nombre est la valeur.

RMI le langage Java XII-1 JMF

Java 7 Les fondamentaux du langage Java

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Langage Java. Classe de première SI

MEDIAplus elearning. version 6.6

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Programmation Objet - Cours II

TP1 : Initiation à Java et Eclipse

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Le meilleur de l'open source dans votre cyber cafe

VOS PREMIERS PAS AVEC TRACENPOCHE

Recherche dans un tableau

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Cours Informatique Master STEP

Structurer ses données : les tableaux. Introduction à la programmation

Créer un tableau avec LibreOffice / Calc

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

Premiers Pas en Programmation Objet : les Classes et les Objets

Installation et paramétrage. Accès aux modèles, autotextes et clip- art partagés

Écrire en ligne et de manière collaborative avec Etherpad. Pour les utilisateurs (enseignants, élèves)

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

OASIS Date de publication

GOL502 Industries de services

1/ Présentation de SQL Server :

Les Enseignants de l Ere Technologique - Tunisie. Niveau 1

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

COMMUNICATEUR BLISS COMMANDE PAR UN SENSEUR DE POSITION DE L'OEIL

Création de site Internet avec Jimdo

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

MATHÉMATIQUES. Les préalables pour l algèbre MAT-P020-1 DÉFINITION DU DOMAINE D EXAMEN

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

ACTIVITÉ DE PROGRAMMATION

v7.1 SP2 Guide des Nouveautés

Manuel de l'utilisateur d'intego VirusBarrier Express et VirusBarrier Plus

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

DirXML License Auditing Tool version Guide de l'utilisateur

Initiation à JAVA et à la programmation objet.

Plan Pédagogique du cours

UML. Diagrammes de classes (suite) Delphine Longuet.

Introduction à JDBC. Accès aux bases de données en Java

A.-M. Cubat PMB - Import de notices à partir d un tableur Page 1 Source :

ALGORITHMIQUE ET PROGRAMMATION En C

Introduction au langage C

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Les diagrammes de modélisation

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

OpenOffice Base Gestionnaire de Base de Données

Partie 1 : la construction du nombre chez l'enfant. Page 2. Partie 2 : Des jeux et des nombres Page 8

Programmation par les Objets en Java


B2i. LE B2i Brevet Informatique et Internet. Niveau : tous. 1 S'approprier un environnement informatique de travail. b2ico1.odt.

Retrouver un mot de passe perdu de Windows

Windows Front-End Installation Guide HOPEX V1R1 FR

Java Licence Professionnelle CISII,

Module SMS pour Microsoft Outlook MD et Outlook MD Express. Guide d'aide. Guide d'aide du module SMS de Rogers Page 1 sur 40 Tous droits réservés

TD3: tableaux avancées, première classe et chaînes

Import des utilisateurs depuis Sconet et STSweb - mise à jour du 04/10/06

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Mise à jour 46 de l ENT itslearning Août 2014

Documentation Cobian

as Architecture des Systèmes d Information

Navigation dans Windows

Présentation de GnuCash

Rappels Entrées -Sorties

ipra*cool v 1.08 guide de l utilisateur ipra*cool v.1-08 Guide de l'utilisateur ipra*cool v

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Manuel d'utilisation Force.com

LES NOMBRES DECIMAUX. I. Les programmes

Bases de programmation. Cours 5. Structurer les données

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

UE Programmation Impérative Licence 2ème Année

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Transcription:

II. Principes généraux Instanciation Éléments de vocabulaire (rappel) Identificateur : c'est un mot significatif d'un programme. Certains identificateurs sont prédéfinis pour un langage donné (par exemple, en java : int, println, class, ) et d'autres sont définis (déclarés) par un programmeur. Déclaration d'un identificateur : c'est l'association entre un type et un identificateur choisi par le programmeur qui est alors défini. En java, le type précède l'identificateur. Paramètres effectifs (arguments) d'une fonction : ce sont les arguments de la fonction lors de son appel. Par exemple, dans l'appel : System.out.println("le résultat est "+res); le paramètre effectif de println est l'expression «"le résultat est "+res» qui est de type String. De même, dans l'appel : echange(i,j,t); de la fonction echange dont le rôle est d'échanger les contenus des cases d'indices i et j dans le tableau de décimaux t, les paramètres effectifs sont les expressions limitées aux variables i, j et t. Paramètres formels d'une fonction : ce sont les variables qui permettront de recevoir les paramètres effectifs de la fonction lors de son appel. Il faut un paramètre formel pour chaque donnée utile lors de l'exécution de la fonction. Par exemple, en java, pour les fonctions vues précédemment, on pourrait avoir respectivement : et : println(string S) S est le seul paramètre formel de println. echange(int a,int b,double[] t) les paramètres formels ont des noms propres à la fonction, indépendants de ceux des paramètres effectifs. Type de retour d'une fonction : c'est le type de la valeur renvoyée par la fonction. Il peut être vu comme la déclaration de l'identificateur qui représente le nom de la fonction et le précède donc. Il vaut void si la fonction ne renvoie rien (ne comporte pas d'instruction return). Signature (ou en-tête) d'une fonction : c'est la ligne importante à connaître pour l'utilisateur de la fonction car elle donne le «mode d'emploi» de la fonction (le nom, les paramètres d'entrée et le type de sortie). Elle est formée de la déclaration de l'identificateur de la fonction suivie, entre parenthèses, par la liste de ses paramètres formels séparés par des virgules. Par exemple, en java : void println(string s) demande une chaîne et ne renvoie rien, double random() ne demande rien et fournit un décimal, void echange(int a, int b, double[] t) nécessite deux entiers ainsi que la référence à un tableau d'entiers et ne renvoie rien. PAGE 1 SUR 7

Éléments de cours : vision intensive ou extensive d'une classe Les propriétés des objets sont complètement spécifiées : tous les attributs d un objet ont une valeur. Plusieurs objets de même catégorie peuvent avoir les mêmes attributs (la même structure de description) avec des valeurs différentes. void int valeur void Chrono void int pas valeur : 4 valeur : 10 valeur : 0 Chrono 3 Chrono 6 Chrono 5 pas : 2 pas : 1 Chrono 1 pas : 1 valeur : 201 Chrono 4 valeur : 201 Chrono 2 pas : 3 pas : 1 définition intensive valeur : 1036 pas : 2 (partie de la) définition extensive Définitions d'une classe. La description d'une classe regroupe des propriétés qui peuvent être vues comme des contraintes à respecter ; c'est la définition intensive de la classe exprimée ici dans un formalisme proche de java. Les objets qui respectent ces contraintes sont des instances de la classe. L'ensemble des instances d'une classe est la définition extensive de la classe. Le lien entre chaque instance et la classe est appelé lien. Dans un langage objet (orientée objet), ce ne sont pas les objets qui sont décrits mais les classes, qui sont les catégories abstraites auxquelles appartiennent les objets de structures de description identiques 1. Les objets appartenant à une classe sont dits des instances de la classe, dès lors qu elles la spécifient totalement 2. Une classe peut être vue de deux manières : 1. Vision intensive (description). Une classe est un modèle ou schéma (frame) pour des objets (les instances). La classe est alors définie par sa description, c est-à-dire l ensemble des contraintes posées sur la description de ces objets. Cet ensemble de contraintes est la définition intensive ou intension de la classe. En java, cette définition est la description de la classe, qui contient tout ce que définit le programmeur. Elle comprend l ensemble des attributs et des méthodes qui seront partagés par les instances. La description de l'instance doit alors s'unifier avec celle de void void void Chrono Chrono 1 int valeur int pas valeur : 0 pas : 1 1 Dans un langage quelconque, un programme est toujours abstrait. Les données sont fournies au cours de l utilisation du programme. Dans un langage objet, les données seront les valeurs des attributs des instances et des valeurs supplémentaires apportées par l utilisateur. 2 «instance» est un anglicisme. En anglais, une instance d une entité générique abstraite est un exemple, une occurrence de cette entité, c est-à-dire une entité spécifique, précise, qui satisfait aux contraintes posées sur l entité générique. PAGE 2 SUR 7

la classe, c'est-à-dire que, à chaque propriété de l'instance : un couple attribut-valeur, doit correspondre un couple attribut-type dans la description de la classe, tel que les noms des attributs soient les mêmes et que la valeur corresponde au type. Voir ci-dessus. 2. Vision extensive (population). La classe est aussi définie par l ensemble non délimité d objets qui respectent la définition intensive de la classe. Cet ensemble est dit définition extensive ou extension de la classe. Le lien entre une instance I et une classe C à laquelle elle appartient est le lien. On dit que I C (dans l'exemple pour chaque i, chrono i Chrono). Il est représenté par une flèche de l'instance à la classe (Ce sont les flèches qui figurent dans la figure précédente). Application en java Description d'une classe Voilà un exemple de description de classes : class Disque { Point centre; double rayon; double getperimetre() { return 2*Math.PI*this.rayon; } double getsurface() { return Math.PI*this.rayon*this.rayon; } // modifie la taille du cercle d'un facteur donné void echelle(double facteur) { rayon=this.rayon*facteur; } } Disque.java définition d'attributs définition de méthodes class Point Point.java { double absc,ord; } Description d'une classe. La définition de chaque membre (attribut ou méthode) passe par l'association d'un identificateur à un type (déclaration). Le type peut être un type de base (int, double, char ) ou le nom d'une classe. Pour un attribut, le type représente le domaine (de valeurs) de l'attribut, c'est-à-dire l'ensemble de ses valeurs possibles (son domaine de définition). Pour une méthode, comme pour une fonction, le type est celui de la donnée qu'elle renvoie (void si aucune donnée n'est renvoyée.). Éléments importants sur la description des classes en java noms de la classe et du fichier qui la contient. Le fichier qui contient une classe doit être nommé comme cette classe en ajoutant l'extension java. Dans l'exemple ci-dessus, les fichiers contenant les classes Disque et Point sont respectivement stockées dans des fichiers Disque.java et Point.java. À noter que cette contrainte est invisible dans l'environnement BlueJ qui prend en charge la gestion des fichiers sans que l'utilisateur ait à faire un quelconque choix. portée 1 des membres. Les identificateurs des membres sont utilisables dans toute la classe, quel que soit l'ordre dans lequel ils sont déclarés. Il est donc possible d'intercaler les définitions d'attributs et de méthodes ou d'utiliser un membre dans une partie de la description de la classe qui précède sa définition (voir ci-contre). paramètres formels des méthodes. Comme pour les fonctions, il ne faut mettre en paramètre formel d'une class Disque { Point centre; double getperimetre() { return 2*Math.PI*rayon; } double rayon; 1 La portée ou visibilité d'un identificateur est la zone où il est connu, donc utilisable. PAGE 3 SUR 7

méthode que les données nécessaire à son fonctionnement. De ce fait, dans les exemples ci-dessus, la plupart des méthodes ne nécessitent pas de paramètre car elle utilisent uniquement les attributs. La méthode echelle est un cas particulier dès lors qu'elle nécessite la donnée d'un facteur d'échelle qui ne figure pas dans la classe. Les paramètres formels des méthodes ne comportent donc que les informations nécessaires qui sont extérieures à la classe et doivent être fournies par l'utilisateur de la méthode. Instanciation d'une classe Une fois qu'une classe a été compilée avec succès, il est possible de créer des instances de cette classe. L'instruction de création est new. Elle permet de réserver de la mémoire pour stocker le nouvel objet et renvoie l'adresse du début de la zone allouée. Dans le cadre de l'exemple précédent, en java, on peut avoir par exemple la suite d'instructions suivantes : Point p1=new Point(); p1.absc=1;p1.ord=1; Disque d=new Disque(); d.rayon=1; d.centre=p1; création d'une nouvelle instance de la classe Point affectation des abscisses et ordonnées du nouveau point création d'un nouveau disque affectation du rayon du nouveau disque affectation au centre du point créé. Utilisation d'une instance. La création d'une instance en java se fait toujours grâce à l'instruction new sauf pour certains objets particuliers, les String et les tableaux, dont les instances peuvent directement être écrites avec une syntaxe particulière. Par ailleurs, nous verrons qu'il est possible de spécifier des paramètres à la création d'une instance (nous pourrions par exemple avoir «new Point(1,1)» en spécifiant directement les abscisse et ordonnée initiales du nouveau point). Pour ce faire, nous utiliserons la notion de constructeur qui sera introduite plus tard. Exercices Faites un compte-rendu en format numérique qui contient vos réponses aux questions posées. Vous n'êtes pas tenu de le faire dans une seule séance mais n'en passez pas plus de deux. Ne faites pas tout si vous n'avez pas le temps ; privilégiez la qualité à la quantité. Une fois ce compte-rendu rédigé, envoyez-le moi (joel.savelli@u-bourgogne.fr) en n'oubliant pas de spécifier LPSIL et CI3 dans l'objet du message (n'oubliez pas non plus d'écrire votre nom dans le document). Exercice 1. Manipulation de BlueJ Utilisez BlueJ pour construire dans un même projet Geom les classes Disque et Point données plus haut en exemple (Description d'une classe). classe Main Pour utiliser les classes ainsi créées, il est possible de définir une classe (par exemple une classe Main) comportant une méthode main comme celle vue à la première séance. Le corps de cette méthode peut contenir un code comme celui de la figure précédente (Utilisation d'une instance). 1. En utilisant le menu contextuel associé à l'icone de la classe Disque, tentez d'exécuter les méthodes getsurface, getperimetre et echelle. Que se passe t-il? (ou plutôt que ne se passe t-il pas?). Expliquez cette situation. Si vous n'y parvenez pas, demandez de l'aide. 2. Écrivez dans un fonction main d'une classe Main le code qui permet de représenter la situation de la figure «Définition d'objets à partir d'autres objets» de la fiche «II. Principes généraux ; encapsulation (base)». Testez ce code en lançant la fonction Main.main("") à l'aide de la souris. 3. En utilisant aussi la souris, exécutez directement la méthode new associée à une classe pour créer une instance de cette classe. La machine propose PAGE 4 SUR 7

un nom, modifiable pour l'instance (en fait, les instances n'ont pas de nom ; il s'agit plutôt d'une variable qui référence l'instance). Créez ainsi une instance de Point et de Disque. Remarquez la zone de l'interface BlueJ (zone de dépôt d'objets) dans laquelle les icones de ces instances apparaissent (en bas à droite de la page précédente). Faites afficher les contenus de ces instances en cliquant sur leur icone. 4. Dans cette situation, tentez d'exécuter à nouveau les méthodes getsurface, getperimetre et echelle. Déduisez-en le contexte dans lequel ces méthodes peuvent être exécutées. Expliquez pourquoi. Demandez de l'aide si vous n'y parvenez pas. Code Pad (partie qui n'a pas à figurer dans le compte-rendu) Le «Code Pad» est une zone qui figure en bas à droite de l'interface de BlueJ. Elle permet d'évaluer des expressions et d'exécuter des lignes de code sans compilation. Plus précisément, il est possible d'effectuer les actions suivantes : 1. Évaluer une expression java ; ci-contre une expression numérique). Faites quelques essais de calcul numérique y compris mettant en jeu des fonctions sophistiquées (par exemple : Math.sin(Math.PI/2) ou Math.random()). Notez qu'il n'y a pas de «;» à placer en fin de ligne dès lors que c'est une expression que l'on calcule et pas une instruction que l'on exécute (le «;» est un terminateur d'instruction). Code Pad 2. Il est aussi possible de calculer des expressions mettant en jeu des objets et des classes. Par exemple, dans l'exemple ci-contre l'évaluation de l'expression : new Point() renvoie une valeur qui est l'adresse de l'instance de la classe Point créée. Le Code Pad n'affiche pas cette adresse mais plutôt la référence à cette instance représentée par une icône (en tout petit à droite). Il est alors possible de faire glisser cette icône dans la zone de dépôt d'objets et d'utiliser le menu contextuel de l'icone de l'instance pour lancer ses méthodes. Faites des essais de création d'instances et d'exécution de leurs méthodes par cette méthode. En utilisant cette technique, tentez de réaliser l'équivalent de la suite d'instructions de l'encadré «u- tilisation d'une instance». Notez que les affectations des valeurs aux attributs des instances sont des instructions et qu'elles doivent être suivies d'un «;». Notez aussi que les instances qui apparaissent dans la zone de dépôt d'objet peuvent être référencées dans le Code Pad par le nom que vous leur avez donné. Exercice 2. Plusieurs exemples En utilisant le modèle de l'exemple «Description d'une classe» et votre travail du TD précédent, utilisez BlueJ pour construire complètement (avec le corps des méthodes) les classes relatives aux situations suivantes. Vous devez faire un projet par situation, qui peut contenir une ou plusieurs classes suivant les besoins. Compilez les classes au fur et à mesure. En utilisant soit une classe Main, soit le Code Pad et la zone de dépôt d'objets, faites des essais d'exécution que vous intégrerez à votre compte-rendu. une planète. Les méthodes doivent permettre de donner les caractéristiques d'une planète et de les restituer globalement. PAGE 5 SUR 7

une personne, une calculatrice. Elle doit comporter un attribut représentant l'affichage, les méthodes qui permettent d'entrer les données, de faire les calculs et celle qui restitue le contenu de l'affichage. un automate distributeur de boissons. On doit pouvoir entrer des pièces de divers montants (avec vérification que le montant en question correspond à une valeur réelle). Il doit pouvoir être possible de choisir sa boisson, de signaler si la somme d'argent introduite est insuffisante, de signaler sinon que la boisson a été distribuée, et d'afficher le crédit restant. un parking (on s'intéresse à la gestion du parking). une bibliothèque (on s'intéresse à la gestion des livres qu'elle contient), une date. Vous devez au moins construire les méthodes qui vérifient que : l'année de la date est ou non bissextile (il ne faut pas afficher le résultat mais renvoyer une valeur booléenne). Vous pouvez vous documenter sur internet pour savoir comment faire. la date est valide. Critiques Comme précédemment, indiquez dans votre compte-rendu ce qui vous paraît incorrect, incomplet ou simplement surprenant dans la partie de cours abordée dans ce TD. Indiquez là aussi ce que vous trouvez peu clair. Pour aller plus loin. Bonne représentation Il peut y avoir des difficultés pour choisir de représenter telle ou telle propriété ou notion et de telle ou telle manière. Voilà quelques exemples de problèmes de représentation qui peuvent subvenir : 1. Attribut ou méthode? Dans l'exemple ci-dessus «Description d'une classe», le choix a été de faire apparaître les notions de centre et de rayon sous forme d'attributs et la surface sous forme de méthode. Pourtant, ce sont trois éléments qui définissent l'état d'un disque et pas son comportement. La raison en est qu'il est suffisant de définir un disque par son centre et son rayon ; ce sont ses propriétés essentielles. Les autres propriétés peuvent être dérivées à partir de ces propriétés de base et doivent même l'être (tout ce qui peut être automatisé doit l'être). La méthode d'accès à la surface n'est pas un comportement de l'objet mais bien une fonction qui lui est applicable. Par ailleurs, dans la suite du cours, tous les accès aux informations sur les objets se feront grâce à des méthodes particulières appelées accesseurs. Pour l'utilisateur, il n'y aura alors plus de différence visible entre les attributs essentiels et dérivables. 2. Limites de la représentation. Dans un cadre informatique, comme dans celui de n'importe quelle modélisation, il ne s'agit pas de représenter exhaustivement le réel. La représentation formelle (modèle) que représente la description d'une classe est effectuée dans des perspectives précises. L'étendue de la représentation doit être limitée par ces perspectives. Par exemple, s'il s'agit de gérer un parking uniquement pour connaître le nombre de places disponibles pour de nouveaux entrants, il est inutile de prévoir la description des voitures contenues dans le parking. Le nombre de voitures est une donnée suffisante. 3. Représentation ou gestion. Une classe ou une instance a deux fonctions : représenter un objet réel (qui peut être abstrait). La classe ou l'instance comprend alors des attributs ou méthodes qui correspondent à des propriétés de l'objet réel. Par exemple, un PAGE 6 SUR 7

disque comprend des attributs pour représenter son centre et son rayon et des méthodes pour calculer son périmètre et sa surface. gérer l'objet informatique. La création d'une instance, l'affichage de ses propriétés, l'accès à ses attributs, sont des fonctions d'une classe ou d'une instance qui n'ont pas de sens dans la réalité, mais elles sont nécessaires pour que le programme fonctionne. Il est nécessaire d'ajouter des attributs ou des méthodes pour répondre à ces besoins mais il est nécessaire de bien les distinguer des attributs ou méthodes de représentation. PAGE 7 SUR 7