IJA - TD 2 Bases du langage

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Rappels C.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
(Classes prédéfinies – API Java)
L’ interruption de boucle
C.
Programmer en JAVA par Tama
JAV - TD 6 Structures de données JAVA
Stéphane Frénot - - Dpt Télécommunications IJA20 JAVA Le cœur du langage.
Packages et résolution de noms
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Principes de programmation (suite)
Programmation orientée objet
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Langage Oriente Objet Cours 4.
33 Types de données et opérateurs. 3-2 Objectifs A la fin de ce cours, vous serez capables de : Décrire les types de données primitives Déclarer et initialiser.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Langage Oriente Objet Cours 3.
Classes abstraites et Interfaces
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Le langage JAVA Année scolaire
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Révision des notions OO et Java Semaine 1 Jian-Yun Nie.
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Principes de programmation
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
8PRO100 Éléments de programmation Les types composés.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI 1502 Principes fondamentaux de conception de logiciels
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Javascript 1° PARTIE : LES BASES
2.1 - Historique Chapitre 2 : Introduction au langage C++
4 Introduction des objets. Les chaînes et tableaux
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Strings et Tableaux en Java
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
CSI2520 Un langage de programmation impérative et concurrente.
Cours du 5 novembre.
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Introduction au langage JAVA
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
PRO-1027 Programmation Scientifique en C
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Transcription de la présentation:

IJA - TD 2 Bases du langage Caractéristiques du langage et principe de base Le mot-clé static Ant et le packaging d'applications

Bases du langage Types dits primitifs Opérateurs (pas classes donc pas majuscules!) byte : 1 octet short : 2 octets int : 4 octets long : 8 octets float : 4 octets double : 8 octets boolean : true false char : 2 octets (Unicode) Opérateurs Arithmétique : =+-*/% Relationnels : <><= >= == != Logiques : ! && || Incréments : ++ -- Bit Wise : & | ^ ~ >> << >>> Affectation : = += -= *= /= %= Conditionnel : ?:

Bloc de programmation { } n ’importe où, mais la plupart du temps autour d’une classe ou d’une méthode Aucune instruction/déclaration en dehors d’un bloc Une variable peut être déclarée n’importe où dans un bloc. Elle possède la portée de ce bloc.

Exemples de blocs de programmation class Test1 { private int i; public void fonction(){ int i=5; System.out.println("I1:"+i); { int j=10; System.out.println ("I2: "+i); } System.out.println("I3: "+j); System.out.println("I3:"+i); class Test2 { static { System.out.println("coucou"); } class Test3 { { System.out.println("coucou"); } Test1 : permet de déclarer temporairement un attribut dans une fonction, sans qu'il empiète sur le reste du code Test2 : permet de connaître l'instant où une classe est chargée Test3 : permet d'exécuter du code à chaque nouvelle instance d'objet

Les structures de contrôle et expressions Essentiellement les mêmes qu'en C if, switch, for, while, do while Fonctionnement du switch sur type primitif uniquement Constantes et booléens public static final boolean STATE_OK=true; protected static boolean myState=STATE_OK; if (MaClasse.myState){... } en C if (valeur==0){ /*Etat OK*/ Eviter les constantes String (car ce sont des objets) (== ne fonctionne pas, il faut utiliser .equals)

Machine Virtuelle : Emulateur Byte-Code/P-Code/J-Code opcode : 1 octet pour l'instruction 0,n opérandes MicroProcesseur logiciel Jeu d'instructions Registres (pc, optop, frame, vars) Pile, Heap Ramasse-miettes Espace de stockage des méthodes Tas de constantes ==> Compilé ou Interprété Compilateur javac Byte-Code .class MV Interpréteur SE Matériel Source .java Interprété, car il y a de bon et de mauvais interprètes. Il y a donc de bonnes et des mauvaises machine virtuelles. Expliquer qu'il s'agit d'un microprocesseur logiciel

Une première classe MV Ecrire une classe Test1 représentant des objets ayant un attribut interne de type entier (int) appelé val. Compiler cette classe (le compilateur s’appelle javac) Quels sont les fichiers générés ? Lancer la commande javap -c sur la classe Test1. Que voit-on ? Exécuter cette classe dans la machine virtuelle. Que se passe-t’il et pourquoi

Une classe cliente Ecrire une classe Test2 cliente de la première (qui utilise des référence sur des objets de la première) qui possède deux attributs (att1, att2) de type Test1. Compiler cette classe Exécuter cette classe. Que se passe t’il ? Lancer la commande javap -p sur la classe Test2. Que voit-on ?

Le Main Ajouter dans Test2 une méthode main(String[])ayant la signature suivante : public static void main(String [] arg) A quoi sert le paramètre arg de cette méthode ? Compiler cette classe Exécuter cette classe : que se passe t’il ?

Objets impossibles Dans la méthode main(String[]) de Test2, déclarez une variable t1 de classe Test1 mais instanciez un objet de type Test2 Compiler. Que se passe-t’il ? Dans la méthode main(String []) déclarez un objet de type Toto, instanciez le. -Compiler. Que se passe t’il ?

“l’œuf ou la poule?” Chaque objet provient d'une classe dont on fabrique une instance Object o1=new Object(); Mais comme “tout est objet”, comment fait- on pour avoir le premier objet ? Soit il existe un premier objet fourni au démarrage de la machine virtuelle au démarrage Soit il existe des objets toujours disponibles ...

La classe vue comme un objet Toutes les classes instanciées sont connues de la machine virtuelle. Elles pourraient donc être également utilisées comme des objets. Hello new h2 coucou ... Hello h2=new Hello(); Res r=h2.coucou(); class Hello{ public void coucou(){} } Comment écrire une méthode coucou dans la classe hello, mais dont le destinataire ne soit pas une des instances, mais la classe ?

Le mot clé static On ajoute un mot-clé à la signature des méthodes public static coucou1(){...} /*Cette méthode est connue de la classe */ public void coucou2(){ ... } /*Cette méthode est connue des instances-objets*/ Comment l'objet h2 fait-il pour invoquer une méthode statique sur la classe Hello? On adapte le destinataire du message : Hello.coucou() ==> Indique que coucou() est relatif à la classe et non pas à une de ses instances Hello +static coucou1() +coucou2() ... Hello h2=new Hello(); h2.coucou2(); Hello.coucou1(); public class Hello{ public void static coucou1(){...} public void coucou2(){...} }

Exercice Ecrire le code d'une classe Client, utilisant une classe DivisionO réalisée en utilisant des méthodes d'objets Compiler Ecrire une classe DivisionO en objet Compiler, Lancer Modifier le code de la classe Client pour utiliser une classe DivisionS qui présente des méthodes statiques Ecrire une classe DivisionS en statique Insister sur l'écriture du client en premier. Il ne compile pas... public class Client{ public static void main(String[] arg){ DivisionO d=new DivisionO(); d.divise(10,30); } Il est possible de faire un client qui construit Division avec 2 attributs... Expliquer la différence. Les deux codes sont possibles au début. public class DivisionO{ public int divise(int a, int b){return a/b;} Botter en touche le int/real, double and co... public class Client{public static void main(String[] arg){ DivsionS.divise(a,b); public class DivisionS{ public static int divise (int a, int b){return a/b;} Expliquer que les deux méthodes peuvent cohabiter dans la même classe

Conséquences directes La classe est également vue comme un objet Les attributs et les méthodes statiques sont associés à la classe et non à chaque objet Toutes les instances de la classe peuvent être vus comme partageant la valeur des attributs "static" Il n'est pas nécessaire d'instancier une classe pour accéder à ses éléments statiques La notion de static peut être perçue comme représentant les valeurs communes à toutes les instances d'une même classe

Exemple du mot clé static public class Circle { public static int count = 0; public static double PI = 3.14; protected double x, y, r; public Circle(double r){this.r = r; count++;} public static Circle bigger(Circle c1, Circle c2){ if (c1.r > c2.r) return c1; else return c2; } public class UneClasseExemple{ public UneClasseExemple(){ Circle c1 = new Circle(10); Circle c2 = new Circle(20); int n = Circle.count; // n = 2 Circle c4 = Circle.bigger(c1, c2); // c4 = c2 bigger(Circle, Circle) count 2 4 5 1000 getX() getY() getArea() getR() getPerimeter() 2 3 10 getX() getY() getArea() getR() getPerimeter()

Rappel sur : “Pourquoi le main est static ?” Static main(String [] arg) public class HelloWorld { public static void main(String [] arg){ System.out.println("Hello, World !"); } HelloWorld HelloWorld.java Compilateur javac HelloWorld.java HelloWorld HelloWorld.class Machine Virtuelle java HelloWorld

Exercice Décrire en terme d'objets et de messages la commande d'affichage System.out.println("coucou"); Lancer le programme de gestion des divisions. Quelles sont les différences entre approche statique et l'autre ? A quoi ressemble l'approche statique ? out est un attribut static de la classe System. Insister sur le fait que le seul moyen de le savoir est que la classe Systeme prend une majuscule. L'approche statique ressemble à de la programmation procédurale classique. public class Client { public static void main(String [] a){ Coucou c=FabriqueCoucou.fabrique(); } public class FabriqueCoucou{ public static Coucou fabrique(){ return new Coucou(); public class Coucou{}

Pourquoi ? Pourquoi ne pas tout faire en statique ? Parce qu'en programmation objet on manipule des objets qui sont beaucoup plus faciles à réorganiser Qu'est ce qui est statique ? Le main (on n'a pas le choix, il n'y a pas encore d'objet) Les constantes : public static final int ETAT_STABLE=1; … toto.setState(UneClasse.ETAT_STABLE); Les fonctions communes de service Dans ce cas on essaye de les regrouper dans une classe de service