Programmation Par Objets et Langage Java Partie II. Introduction à Java Najib T

Programmation Par Objets et Langage Java Partie II. Introduction à Java Najib Tounsi Ecole Mohammadia d'Ingénieurs, Rabat Année 2017/2018 1ère année Génie Informatique http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2.pdf La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 1 of 75 Partie II. Introduction à Java La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 2 of 75 Langage de programmation avec des TADs. Le langage se prête bien à la programmation avec les types abstraits de données. Module (ou TAD) = classe (ou interface) Opération = méthode sur un objets Structure de données = propriétés (attributs) de l'objet La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 3 of 75 Exemple de la classe Pile La classe Pile (source complet, documentation associée ) public class Pile { // // Déclarations des attributs de la pile // static final int MAX = 8; char[] t; int top; // // Programmation des opérations (méthodes) de la pile // public Pile(){ // Initialise une pile vide t = new char[MAX]; top = -1; } public void empiler(char c){ // Empile le caractère donné if (!estPleine()) t[++top] = c; else System.out.println("Pile pleine"); } public char sommet(){ // Retourne le caractère au sommet de la pile if (!estVide()) return t[top]; else { System.out.println("Pile vide Sommet"); return '\0'; } } public void depiler(){ // décapite la pile (retire le sommet ) if (!estVide()) top--; else System.out.println("Pile vide Depiler"); } public boolean estVide(){ // Teste si la pile est vide return (top < 0); } public boolean estPleine(){ // teste si la pile est pleine return (top >= (MAX - 1)); } }; // Fin class Pile A noter: La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 4 of 75 Aspects présentation Une classe est un bloc dans lequel sont déclarée des données et des fonctions qui les utilisent. Les spécifications aussi, sous forme de commentaires ici. C'est donc une implantation d'un TAD, i.e. choix de représentation (tableau t + indice sommet de pile top) de la pile et programmation des méthodes. Une seule unité de compilation La syntaxe des instructions est proche de C. 1. Ici on a tout mis dans un même fichier. Avec les interfaces Java, on peut séparer en deux partie: Spécification abstraites & Représentation. (voir plus tard.) Deux unités de compilation. 2. Remarque: Dans ce dernier cas, il est possible de définir plusieurs implantations (représentations) pour un même TAD (spécification abstraite). La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 5 of 75 Programme Java qui utilise une pile Un programme principal (classe avec fonction main.) Lire un mot et imprimer son image miroir. public class TestPile { static public void main(String args[]){ // Imprime l'mage miroire d'un mot char c; Pile p = new Pile(); // On lit les lettres et on les empile while ((c=Support.readChar()) != '#') { p.empiler (c) ; if( p.estPleine()) break; } // On depile les lettres et on les imprime while (!p.estVide()) { c = p.sommet(); System.out.println (c); p.depiler(); } } } La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 6 of 75 A noter On voit qu'on n'a pas besoin d'utiliser un tableau t[] et une variable top. Plutôt un objet p de classe (type) Pile. L'objet p est créé avec l'instruction new Pile(). Les instructions p.empiler(c), p.sommet() etc. sont les appels aux fonctions (méthodes) de manipulation de l'objet p. Notation: objet . méthode-à-appliquer() On dit qu'on envoie un message à l'objet. Quand la méthode p.empiler(c) est appelée, le corps de la méthode est exécutée (avec t[++top] = c; ), où t et top sont les données représentant l'objet p sur lequel s'effectue de l'appel. On voit donc que c'est l'objet lui même qui est responsable des instructions qui le manipulent. Les programmes, comme main ici, qui utilisent p n'ont pas à savoir comment p réagit à un message ( est-ce qu'il fait t[++top] = c; ou autre.) Ce qui compte c'est l'effet final de l'envoi du message, i.e. L'empilement de c sur p. Note: main est elle même une fonction enveloppée (déclarée) dans une classe. Mais elles est static. (Voir plus tard). Elle ne s'applique pas à un objet particulier. C'est en fait, le point d'entrée dans un programme Java. what else ... La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 7 of 75 Spécificités de Java autres que la notions de classe. Programming in the small... Dans la suite de ce chapitre, on va s'intéresser à l'aspect programmation procédurale du langage Java Instructions de base du langage Compilation / exécution API Java La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 8 of 75 Hello World Programme main dans une classe HelloWorld (fichier HelloWorld.java) // Mon premier programme Java class HelloWorld { static public void main(String args[]){ System.out.println("Hello, World"); } } Un programme Java est constitué d'au moins la fonction void main (). Définie dans une classe class HelloWorld. Classe écrite dans dans un fichier source HelloWorld.java . Même nom que la classe ici. Instruction System.out.println("Hello, World"); qui imprime ses arguments et va à la ligne. (L'entête de la méthode main() et l'appel à println() seront expliqués plus tard) // introduit un commentaire jusqu'à la fin de la ligne. /* permet un commentaire sur plusieurs lignes */. La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 9 of 75 Un programme plus complet (avec E/S de données) Programme qui lit un nom et une température en Celcius, convertit cette dernière en Fahrenait et affiche bonjour avec cette nouvelle valeur. (source Bonjour.java) import java.util.Scanner; class Bonjour { static public void main(String args[]) { Scanner clavier = new Scanner(System.in); int c; String nom; double f; // Partie lecture de données System.out.print("Quelle est votre nom?: "); nom = clavier.nextLine(); System.out.print("Quelle t° fait-il aujourd'hui?: "); c = clavier.nextInt(); // Partie calcul f = 9./5 * c + 32; // Partie sortie des résultats System.out.println("Bonjour " + nom); System.out.print("Il faut " + c + "° Celsius,"); System.out.println(" soit "+ f + "° Fahrenait."); } } Types prédéfinis primitifs int et double. Types scalaires. Autres types primitifs: byte, short, char, int, long, float, double, boolean. Commencent par une lettre minuscule. Type prédéfini String. Classe prédéfinie en réalité. Usage de la classe Java Scanner (du package java.util) pour la lecture de données (voir travaux dirigés) nextInt(), nextDouble(), nextLine() ... sont des méthodes de cette classe println() vs print(). Impression avec ou sans saut de ligne. Opération + (de concaténation) pour imprimer plusieurs données. A retenir surtout: Les instructions Java sont souvent des appels de méthodes sur des objets. La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 10 of 75 Un programme plus complet (exécution) On compile et on exécute (en mode ligne commande) $ javac Bonjour.java $ java Bonjour Quelle est votre nom?: Ali Quelle t° fait-il aujourd'hui?: 17 Bonjour Ali Il faut 17° Celcius, soit 62.6° Fahrenait. $ _ La commande javac sert à compiler le fichier source Bonjour.java . La commande java sert à exécuter la méthode main de la classe Bonjour qui vient d'être compilée. L'absence d'une telle fonction dans cette classe est une erreur: Exception in thread "main" java.lang.NoSuchMethodError: main Plus sur ce sujet plus tard. La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 11 of 75 Conversions entre entiers et réels Dans la formule utilisée dans programme précédent f = 9./5 * c + 32 , on a écrit 9./5 pour que 9 ÷ 5 donne un réel double précision. L'expression est alors évaluée en réel double. Voici quelques conversions élémentaires int i; double d; i = 1.23; // Erreur: Javac trouve un double là où il faut un // int. En effet, 1.23 est un littéral réel double. d = 2; // OK 2.0, conversion implicite i = 3; // OK d = 1.23; // OK i = d; // Idem. Erreur: risque de perte de précision. // d peut contenir un réel très précis. d = i; // OK 3.0, conversion implicite aussi. i = (int) -1.23; // OK valeur tronquée i = -1. i = (int) d; // idem, conversion (troncature) forcée (cast) Cast = conversion explicite. La Programmation par les Objets et le Langage Java. Partie II: Langage de Base http://www.emi.ma/ntounsi/COURS/Java/PooJavaPart-2-... 12 of 75 Typage fort Java est un langage à typage fort. Chaque variable a un type. Sa valeur doit être de même type. (Identity conversion). Dans une expression, le calcul doit se faire sur des valeurs de même type. Sauf cas simples, comme les valeurs numériques. int i = 2 * "A"; est une erreur. Le passage entre entiers et réels (ou caractère et entier) est plus souple. de int à double, possible toujours (implicite): double d = 123; . de double uploads/s3/ poojavapart-2.pdf

  • 22
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager