Java
Java est un langage orienté objet. Un objet est, de manière intuitive, un ensemble de données et un ensemble de fonctions/procédures s’appliquant sur ces données. Exemple : une calculatrice élémentaire. Les deux nombres représentent les données et les opérations de base comme la multiplication ou la soustraction sont les fonctions. Les fonctions/procédures sont appelées des méthodes. Les méthodes décrivent le comportement de l’objet. Un programme en Java est un ensemble d’objets exécutant des méthodes ou demandant l’exécution de méthodes par les autres objets en leur envoyant des messages. L’ensemble des objets de même type forme une classe d’objets. 1.2 Identifier et créer un objet Tous les objets manipulés en Java doivent être identifiés. Cette identification permet de désigner et donc de manipuler l’objet : modifier ses données ou demander l’exécution de méthodes. Une identification s’effectue en mentionnant deux caractéristiques : quel est l’identifiant de l’objet et sa classe : ClasseObjet NomObjet ; Exemple : Pour pouvoir manipuler la calculatrice, nous déclarons un identifiant d’objet : c. Cet identifiant permettra de désigner des objets de la classe des calculatrices. Calculatrice c ; La ligne précédente est une déclaration. Cette définition ne permet pas d’avoir l’objet identifié par c à notre disposition, c’est-à-dire qu’on ne peut pas, par exemple, demander à la calculatrice ayant l’identifiant c d’effectuer une opération arithmétique. Il faut pour cela créer l’objet. La création s’effectue à l’aide de l’opérateur new. Cette instruction fait partie du jeu d’instructions de base du langage. Une création d’objet suit la syntaxe suivante : NomObjet = new ClasseObjet(…) ; Exemple : Pour pouvoir manipuler la calculatrice, nous créons un objet de la classe Calculatrice. L’objet est désigné à l’aide de l’identifiant c. Autrement dit, c référence un objet de la classe des calculatrices c = new Calculatrice() ; 1.3 Les données Les données manipulées dans un objet décrivent l’état d’un objet. Ainsi dans un objet de la classe des thermostats, la température qui est une valeur numérique représente la température désirée. Le comportement est lui limiter à deux fonctionnalités : monter la température et descendre la température. Maintenant considérons un client et ses commandes : Si nous considérons maintenant des objets de ces classes : Un client à des caractéristiques de base (nom, ville,…) qui sont du texte et des caractéristiques plus complexes : la liste des commandes. Cette liste est en fait un objet composé d’un ensemble de commandes. De fait, nous voyons que chaque commande est-elle même un objet et, que chaque ligne de commande contient deux informations : l’article et la quantité commandé. L’article est un objet et la quantité est une valeur numérique. 1.4 Les classes Une classe est décrite dans un document portant l’extension .java. Ce document ne doit contenir qu’une seule classe et le nom du document est le même nom que celui de la classe. Exemple : Nom du fichier associé à la classe LignesDeCdes : LignesDeCdes.java 1.4.1 Description type d’une classe Une classe est décrite à l’aide du mot-clef class : class maClasse { … description de la classe (données + méthodes) … } La description proprement dite, appelée corps de la classe, est spécifiée entre accolades. Exemple : description de la classe lignes de commandes. Une ligne de commande contient un article et une quantité commandée. L’article s’appelle article_commande et est un objet de la classe Article. La quantité est une valeur entière. class LignesDeCdes { Article article_commande ; int qte_cdee ; } Dans un objet il ne peut y avoir que deux types d’attributs : des objets, des valeurs primitives (qui ne sont pas des objets).
Données primitives
Les tableaux permettent de manipuler des listes d’objets ou de données primitives. Un tableau qu’il soit un tableau d’objets ou un tableau de valeurs primitives est lui-même un objet. La déclaration et la manipulation des tableaux s’effectuent à l’aide des crochets []. Le premier indice du tableau est toujours 0. Le nom du tableau indicé permet d’accéder à un item du tableau. Exemple : déclaration d’un tableau tableauValeurs de valeurs entières. Ce tableau contient dix cases. int[] tableauValeurs ; Les tableaux étant des objets, il convient donc de créer le tableau proprement dit après l’avoir identifié. Cette opération est effectuée à l’aide du mot clef new. tableauValeurs = new int[10] ; Accès au cinquième élément du tableau et initialisation de sa valeur (à 9) : tableauValeurs[4] = 9 ; Plus généralement, il est tout à fait possible d’avoir un tableau d’objets. Dans ce cas, nous avons la même procédure en deux temps : déclaration puis création du tableau : LignesDeCdes[] les_lignes ; … les_lignes = new LignesDeCdes[10] ; Le résultat produit par cette dernière instruction a été la déclaration d’un tableau de 10 identifiants d’objets LignesDeCdes. Il faut donc ensuite créer chaque élément du tableau individuellement. Ainsi, si nous considérons la création de la troisième ligne de commande : les_lignes[2] = new LignesDeCdes() ; 1.4.4 Les chaînes de caractères Pour manipuler les chaînes de caractères, Java propose une classe prédéfinie : String. Pour créer une chaîne, plusieurs commandes sont possibles : création d’un objet ou affectation directe. String chaine1, chaine2; … chaine1 = new String(« toto ») ; chaine2 = « titi » ; 1.4.5 Accès aux données Les fonctions et procédures vont manipuler les données. L’accès aux données d’un objet doit mentionner deux éléments : quel est l’objet accédé et quelle information de cet objet souhaitons nous consulter et/ou modifier. En Java, nous « connectons » ces deux informations à l’aide d’un point : NomObjet.NomDonnee Exemple : modifier la valeur du premier nombre, nommé Nombre1 de notre calculatrice c, en initialisant la valeur à 10 c.Nombre1 = 10 ; 1.4.6 Traduction Java de l’exemple Nous nous limitons ici à la définition des attributs. Lorsque les attributs sont des objets, nous n’avons donc que la spécification de l’identifiant. Notons que chaque classe est contenue dans un fichier différent : Client.java, Commande.java, LigneCommande.java, Article.java. class Client { String nom, ville, telephone ; Commande[] commandes ; } class Commande { String noCde ; LigneDeCde[] lesLignes; } class LigneCommande { Article articleCommande ; int qte; } class Article { …; } 1.5 JBuilder 3 JBuilder est un outil d’aide au développement : aide à la définition d’interfaces, documentation, déboguage… La réalisation d’un programme s’effectue dans un projet : un projet regroupe un ensemble de classes et de fichiers de documentation. Les classes sont des fichiers textes portant l’extension .java et les documents sont des pages Web portant l’extension .html. 1.6 Exercice L’objectif est de créer une première classe élémentaire pour découvrir l’environnement JBuilder 3. Cette classe a pour objet de décrire des bureaux. Un bureau est défini par un numéro de bureau et un occupant. La première étape est de créer un projet : l’appel de l’expert se fait avec la commande Fichier/Nouveau Projet. L’expert projet permet de donner une première description du projet. Cette description est utilisée par JBuilder pour créer le premier document décrivant votre projet. Ce document est présenté dans l’outil de navigation du projet. Le navigateur présente dans la partie gauche deux zones : la zone supérieure répertorie l’ensemble des composants du projet. La partie inférieure gauche indique les caractéristiques du composant sélectionné. La partie droite affiche le document.
Créer une seconde classe dans votre projet décrivant les occupants des bureaux. Les occupants ont un numéro de badge (valeur entière), un nom et un prénom. 2. Modifiez la classe Bureau afin que l’occupant soit un objet de la classe créée précédemment. Demandez la création de deux bureaux et affichez leurs contenus. 3. Modifiez la classe Bureau afin de pouvoir représenter le fait qu’il y ait deux personnes occupant un bureau. Prenez cette modification en compte en utilisant un tableau à deux positions. Demandez la création d’un bureau, initialisez les valeurs et affichez les valeurs. 1.7 Ce qu’il faut retenir Comment définir une classe ; Comment identifier et créer des objets ; Les types de données primitives ; La méthode main ; Ecrire, compiler et exécuter un programme avec JBuilder. 1.8 Vos notes 2 TP n° 2 : définir des méthodes Dans le TP précédent, nous nous sommes focalisés sur la description des données. Nous abordons dans ce TP la description du comportement des données. Le comportement des données est décrit à l’aide de méthodes. Les méthodes sont des fonctions ou procédures. Les méthodes décrivent des traitements. 2.1 Squelette d’une méthode La description d’une méthode contient les éléments suivants : son nom, les arguments, la valeur de retour et la description du traitement. Autrement dit : TypeDonneeRetour NomMethode(ListeDesArguments) { Description de la méthode } De fait, la description d’une classe devient : description des données et description des méthodes. class NomClasse { /* Description des données */ typeDonnee1 nomDonnee1 ; typeDonnee2 nomDonnee2 ; … /* Description des méthodes */ typeRetour1 methode1(…) { … } typeRetour2 methode2 Exemple : reprenons l’exemple du TP précédent : une calculatrice élémentaire. Nous ajoutons une méthode additionner à la classe. La classe contient deux nombres entiers nb1 et nb2 : class Calculatrice { /* Description des données */ int nb1, nb2 ; /* Description des méthodes */ … } Décrivons tout d’abord l’entête : la valeur retournée est un nombre entier, le nom de la méthode est additionner et la liste des arguments est vide car les deux nombres à additionner sont déjà dans la calculatrice (nb1 et nb2). Le corps de la méthode doit additionner ces deux valeurs et indiquer que le total doit être la valeur à retourner. Autrement dit : int additionner() { int total ; // déclaration d’une variable total = nb1 + nb2 ; // traitement return total ; // retour de la méthode } Nous voyons sur l’exemple que nous pouvons déclarer des variables ou plus généralement des données dans le corps d’une méthode. Le corps d’une méthode contient trois éléments principaux : Instructions de déclarations de données + instructions de traitements + instructions de retour Notons aussi dans l’exemple que la valeur retournée est bien une valeur entière (cf. déclaration de total). 2.2 Valeur de retour L’instruction de retour, qui « normalement » conclut le corps de la méthode est return suivi de l’objet retourné. Le type de l’objet doit être le même que celui mentionné dans l’entête de la méthode.