C est un langage populaire (une partie du cours IFT 1810, C++ langage du IFT 1969). (cours IFT 1166, IFT 1169) est une extension du langage C qui est plus populaire que C. Ses nouveautés rendent plus agréable le C et permettent aussi de faire la programmation orientée objet (POO). JAVA (IFT 1810, IFT 1170, IFT 1176) utilise surtout la C++. syntaxe du orienté objet. De plus, Java est un langage purement Dans le cours IFT 1810, on introduit à la programmation orientée objet (POO), à l’aperçu du langage JAVA sans aller dans les détails. Le but de ce résumé est de vous permettre de saisir des explications en classe au lieu de copier des programmes écrits au tableau. Les exemples expliqués en classe et disponibles sur le site Web du cours utilisent l’environnement JCreator. Bonne chance et bon succès! Le Van Nguyen IFT 1810 (par Le Van N.) Java_1 : Quelques mots de la POO et un aperçu du Java 1 Quelques mots sur la POO : Dans notre vie quotidienne, on travaille très souvent avec des objets : Un tableau est un objet. On peut construire un tableau par plusieurs manières : Matériel : en bois, en métal, en plastique dur, . . . Couleur : noire, blanche, . . . Largeur : 4.2 mètre, 3.8 mètre, . . . Hauteur : 2.3 mètre, 1.90 mètre, . . . Il faut que le tableau existe avant de parler comment travailler avec un tableau. Que peut-on faire avec un tableau ? En français, on est habitude avec l’action : - écrire au tableau effacer le tableau laver le tableau etc … En POO, on écrit souvent sous la forme : tableau.écrire(. . .) appliquer la méthode écrire sur l’objet tableau tableau.effacer(. . .) appliquer la méthode effacer sur l’objet tableau etc . . . Une porte est un autre objet. On peut construire une porte par plusieurs manières : en bois, en métal, en pailles, . . . Que peut-on faire avec une porte ? - ouvrir la porte - fermer la porte - etc … C’est la même chose en programmation orientée objet (POO) : Quelles sont les caractéristiques (champs, attributs) d’un objet ? Comment construire un objet ? Quelles sont les méthodes qu’on peut appliquer sur l’objet ? En Java, on rencontre fréquemment l’instruction : Objet.méthode( . . .) On applique une méthode sur un objet. IFT 1810 (par Le Van N.) Java_1 : Quelques mots de la POO et un aperçu du Java 2 En Java, System.out est l’objet sortie de la classe System : c’est l’écran. L’instruction : System.out.println( expression ); ou System.out.print ( expression ); ou System.out.printf(. . .); représente l’affichage d’une expression à l’écran. Le suffixe ln (new line : nouvelle ligne) correspond à un changement de ligne après l’affichage (comme \n en C). Pour IFT 1810, on utilise davantage System.out.printf(...); Exemple : System.out.printf("La taille vaut %.2f metre\n", taille); Premier exemple d'introduction : (explications : en classe, au premier cours de la partie POO avec Java) Réaliser un projet en Java permettant de déclarer, d’initialiser les informations suivantes de l’étudiante Lise Charbonneau qui a le code permanent "CHAL12599305" (elle est née le 12 septembre 1993 2013 – 1993 = 20 ans à 2013 le ministère de l’éducation a ajouté 50 au mois de naissance d’une étudiante : 50 + 9 = 59) Le projet permet de : - afficher le nom et prénom tel quel, en tous majuscules, en tous minuscules - déterminer le sexe (féminin ou masculin) - calculer l’âge brut à l’année 2013 L’exécution du projet donne, par exemple, ce qui suit : --------------------Configuration: <Default>-------------------Le nom et prénom tel quel : Charbonneau Lise Le nom et prénom en tous majuscules : CHARBONNEAU LISE Le nom et prénom en tous minuscules : charbonneau lise Sexe : féminin L'âge à 2013 est 20 ans Quelques réfléxions sur le problème à programmer : En langage C, on a déjà travaillé avec certains types de base habituels : int pour les entiers, char pour les caractères, float ou double pour les réels. Les identificateurs de ces types sont en tous minuscules. Il n’y a pas beaucoup de manipulations possibles avec des informations de ces types. IFT 1810 (par Le Van N.) Java_1 : Quelques mots de la POO et un aperçu du Java 3 Une classe est une sorte de type élargi, on parle souvent : age est une variable de type int taille est une variable de type double nomPre est un objet de la classe String des opérations sur des types de base : age1 + age2 : somme des deux âges age1 * age2 : produit des deux âges etc ... des méthodes appliquées sur un objet d’une classe : String nomPre = "Charbonneau Lise"; nomPre est un objet de la classe String nomPre.toUpperCase() vaut "CHARBONNEAU LISE" on applique la méthode toUpperCase() pour convertir une chaîne en tous majuscules nomPre.toLowerCase() vaut "charbonneau lise" on applique la méthode toLowerCase() pour convertir une chaîne en tous minuscules nomPre.charAt(0) vaut ‘C’ le caractère à l’indice 0 du nom et prénom est la lettre ‘C’ nomPre.charAt(2) vaut ‘a’ le caractère à l’indice 2 du nom et prénom est la lettre ‘a’ nomPre.substring(2,7) vaut "arbon" la sous-chaîne entre l’indice 2 inclu et l’indice 7 exclu du nom et prénom est la chaîne de caractères "arbon" etc . . . Integer.parseInt("93") vaut 93 On utilise la méthode de conversion d’une chaîne numérique en valeur entière de la classe Integer. etc . . . On rentre alors dans le monde de la programmation orientée objet dont on parle constamment des objets d’une classe, des méthodes appliquées sur un objet, des méthodes d’une classe! De plus, le Java utilise une partie de syntaxe du C++, une extension du langage C. On retrouvera une partie du C en Java avec quelques nouveautés du C++ dans la plupart des exemples vus en IFT 1810 : - commentaires en ligne avec // commentaire . . . IFT 1810 (par Le Van N.) Java_1 : Quelques mots de la POO et un aperçu du Java 4 - flexibilité des déclarations mélanger les déclarations et les traitements - etc . . . Le programme suivant sera expliqué en détails en classe. /* Fichier Introd1.java public class Introd1 { public static void main(String[] args) { final int ANNEE_COURANTE = 2013; String nomPre = "Charbonneau Lise", codePerm = "CHAL07539305"; System.out.printf("Le nom et prénom tel quel : %s\n", nomPre); System.out.printf("Le nom et prénom en tous majuscules : %s\n", nomPre.toUpperCase()); System.out.printf("Le nom et prénom en tous minuscules : %s\n", nomPre.toLowerCase()); if (codePerm.charAt(6) >= '5') System.out.printf("Sexe : féminin\n"); else System.out.printf("Sexe : masculin\n\n"); int anneeNais = 1900 + Integer.parseInt( codePerm.substring(8, 10)) ; System.out.printf("L'âge à %d est %d ans\n\n", ANNEE_COURANTE, ANNEE_COURANTE - anneeNais); } } Observations et commentaires du programme : Aux pages 3 et 4, on a déjà parlé un peu de la POO et du Java pour une partie du programme. Les explications suivantes sont destinées surtout aux étudiants qui connaissent le C mais pas encore du Java, ni de la programmation orientée objet (POO). 1. L’identificateur String se commence par une lettre majuscule. Ce n’est pas un type, c’est le nom d’une classe, une terminologie fréquemment utilisée en POO. IFT 1810 (par Le Van N.) Java_1 : Quelques mots de la POO et un aperçu du Java 5 2. Le Java vu dans IFT 1810 utilise souvent des classes prédéfinies (String, Integer, . . .) et leurs méthodes. 3. Le Java utilise certaines conventions pour les identificateurs (constantes en lettres majuscules, variables, méthodes : premier mot en minuscules, début d’un nouveau mot en majuscule : nbPieds, nbLivres, toUpperCase(), etc). 4. La déclaration en Java : final int ANNEE_COURANTE = 2013; est équivalente à celle-ci du C : const int ANNEE_COURANTE = 2013; ANNEE_COURANTE est de type int et sa valeur est "finale" (inchangée => c’est une constante). 5. La déclaration en Java : String nomPre = "Charbonneau Lise", codePermanent = "CHAL12599001"; déclare et initialise 2 objets nomPre et codePermanent de la classe String qu’on pourra appliquer plusieurs méthodes existantes sur ces deux objets. 6. Les clauses de visibilité public, static seront expliqués plus tard. IFT 1810 (par Le Van N.) Java_1 : Quelques mots de la POO et un aperçu du Java 6 Trois formes d’accès en Java : 1. forme 1 (très fréquente : 80 % des cas) : objet.méthode (……..) Appliquer une méthode sur l’objet Exemples : "Bonsoir".length() retourne 7 (longueur de la chaîne) "Bonsoir".charAt(0) retourne ‘B’ (le caractère à l’indice 0 est la lettre ‘B’) "Bonsoir".indexOf(‘n’) retourne 2 (on trouve la lettre ‘n’ à l’indice 2 "Bonsoir".substring(1, 3) retourne "on" (la sous-chaîne délimitée entre l’indice 1 inclus et l’indice 3 exclu) 2. forme 2 (moins fréquente : 15 % des cas) : classe.méthode static(……..) Utiliser une méthode static d’une classe Exemples : Integer.parseInt("17") retourne 17 (valeur entière) Math.sqrt(16.0) retourne la racine carrée de 16.0 qui vaut 4.0 3. forme 3 (peu fréquente : 5 % des cas) : classe.champ static Accès à un champ (attribut) static d’une classe Exemples : Math.PI vaut 3.14159… (valeur PI de la classe Math) Integer.MAX_VALUE retourne 231-1 (l’entier le plus grand) IFT 1810 (par Le Van N.) Java_1 : Quelques mots de la POO et un aperçu du Java 7