Introduction aux Objets et à Java F. Mallet [email protected] http://deptinfo.unice.fr/~fmallet/java/gse.html 2011/2012 F. Mallet - GSE 4 1-1 Introduction aux objets et à Java Plan du cours Introduction oduc o Créer ses premières classes Réutilisation: héritage et composition Patrons de conception: Décoration, MVC Interface avec le langage C: JNI Communication avec l’extérieur: sockets 2011/2012 F. Mallet - GSE 4 2 Introduction aux objets et à Java Chapitre I – Introduction aux objets Objectifs Objec s Définir la programmation orientéeorientée-objet • Historique • Avantages Notions N ti essentielles ti ll • Type, Variable • Classe, Objet, Référence • Champ/attribut, méthode Eléments syntaxiques du langage 2011/2012 F. Mallet - GSE 4 3 Introduction aux objets et à Java Types de données (1/2) Les es objets obje s Java Ja a représentent ep ése e Les objets du système modélisé • Une personne (nom (nom, prénom prénom, date de naissance…) • Des formes géométriques (triangle (triangle, cercle cercle, …)) • Des portes logiques (et, ou, inverseur, mux, …) • Des bases de données et fichiers (images (images, texte texte, son, vidéo…) 2011/2012 F. Mallet - GSE 4 4 Introduction aux objets et à Java Types de données (2/2) Le type yp encode les données Domaine de valeurs p autorisées ((arithmétiques, q , booléennes…)) Opérations On distingue g Types primitifs (caractères, entiers, réels, booléens) Types yp composés p • Image = ensemble de pixels de couleur • Couleur = Rouge + Vert + Bleu 2011/2012 F. Mallet - GSE 4 5 Introduction aux objets et à Java Valeurs numériques Chiffres numériques q : BInary y digiT g = BIT Signaux électriques encodés = valeurs logiques gq ((0 et 1)) Binaire: 2 valeurs logiques Ensembles finis: encodés sur p plusieurs BITs 1 octet = 8 bits (28 = 256 valeurs logiques) 1 mot = 32 bits ((232 valeurs logiques) gq ) Ensembles infinis ? Entiers naturels, nombres réels, … 2011/2012 F. Mallet - GSE 4 6 Introduction aux objets et à Java Type primitif boolean Domaine de valeurs: vrai ou faux {true, false} Opérations autorisées Affectation Comparaison Opérations p booléennes = ==, != &&, ||, ! Exemples p 2011/2012 boolean estVisible = true; if (estVisible) … F. Mallet - GSE 4 7 Introduction aux objets et à Java Type primitif char Domaine de valeurs: Unicode 16 bits Code ASCII (7 bits: 128 caractères) Code ANSI ((8 bits,, ISO-latin-1,, ISO-8859-1)) Opérations p autorisées Affectation Comparaison p = ==, != Exemples p 2011/2012 char c = 'c'; // code ASCII 99 c = '\u00e9'; \u00e9 ; // code unicode 00e9 => > é F. Mallet - GSE 4 8 Introduction aux objets et à Java Nombres entiers relatifs Domaine de valeurs 8 bits 16 bits 32 bits 64 bits [-128,127] [-128 127] [-32768, 32767] [-231, 231-1] [[-2 263, 263-1] 1] byte short int long Opérations autorisées Affectation Comparaison Opérations arithmétiques Opérations p binaires = ==, != +, -, *, /, % (int, long) &, (int, long) ||, ~, <<, >> Division entière: 23 = 3 * 7 + 2 / % 23 / 0 2011/2012 quotient de la division entière reste de la division entière Erreur ! F. Mallet - GSE 4 23/7 → 3 23%7 → 2 9 Introduction aux objets et à Java Nombres approchés Domaine de valeurs 32 bit bits 64 bits ?? ?? floatt fl double Opérations autorisées Affectation Comparaison p Opérations arithmétiques Opérations binaires = ==, != +, -, *, / &, |, ~, <<, >> Particularités Division approchée: 23.0 / 0 → +∞ 2011/2012 F. Mallet - GSE 4 10 Introduction aux objets et à Java Nombres approchés – IEEE 754 Codage Codage sur su 3 32 b bits s => 232 valeurs a eu s Complément à 2 (int) Virgule flottante (float) 2011/2012 Signe Exposant Mantisse S E=]0 255[ E=]0,255[ M S 0 1 0 1 0 0 0 255 255 255 >0 0 0 >0 0 0 F. Mallet - GSE 4 [-231, 231-1] [ 2128, 2128] [-2 Nombre représenté ((-1))Sx2E-127x(1,M) ( , )2 (-1)Sx2-126x(0,M)2 +0 -0 NaN + Not a Number ! 11 Introduction aux objets et à Java Variable Case de la mémoire Nom (identifiant): cercle, nom2, _1, … Type : primitif ou composé Valeur: dans le domaine défini par le type • Change au cours du programme (#constante) Déclaration Initialisation Utilisation int premiere; premiere i = 12 12; premiere = premiere + 1; Obligatoire: initialisation avant utilisation ! 2011/2012 F. Mallet - GSE 4 12 Introduction aux objets et à Java Affectation = Pour donner/forcer une valeur à une variable <variable> = <expression>; Asymétrique L’expression est évaluée puis i lla variable i bl est affectée ff é à ((prend d comme valeur) l ) la valeur calculée Exemples premiere = 12 + 6 / 5 * 5; premiere = premiere * 2 + 1; ppremiere = Math.max(12, ( , p premiere); ); 2011/2012 F. Mallet - GSE 4 13 Introduction aux objets et à Java Affectations combinées += + Incrémente une variable <variable> += <expression>; Attention Surchargé pour tous les types numériques • byte, y , short,, int,, long, g, float,, double Différent d’une addition • byte b = 127; • b = b + b; b += b Variantes -=, *=, /=, <<=, >>=, &=, |= b++, ++b 2011/2012 F. Mallet - GSE 4 14 Introduction aux objets et à Java Classe = Type composé Types primitifs normalisés par le langage boolean, char, byte, short, int, long, float, double Composition = choix des champs/attributs (nom + type) Couleur: rouge (8 bits) + vert (8 bits) + bleu (8 bits) Image: ensemble de points de couleur Nom: séquence/chaîne de caractères Date: ? Compromis espace mémoire/temps de calcul C Couleur: l RGB vs. YUV Nombre complexe: ou 2011/2012 c = re + i.im c=n.e c n.ei.φ F. Mallet - GSE 4 15 Introduction aux objets et à Java Classe: syntaxe Couleur Complexe class CouleurRGB { byte rouge; b t vert; byte t byte bleu; } class ComplexeCartesien { double reelle; d bl i double imaginaire; i i } class CouleurYUV { byte luminance; byte chrominanceRouge; b te chrominanceBle byte chrominanceBleue; e } class ComplexePolaire { double norme; double phase; } 2011/2012 F. Mallet - GSE 4 16 Introduction aux objets et à Java Objet = instance d’une d une classe Type yp → Classe → valeurs objets Complexe c1; // référence c1 = new Complexe(1, -1); c1 2011/2012 → → variables références Complexe c2; // référence c2 = new Complexe(2, 0); c2 F. Mallet - GSE 4 17 Introduction aux objets et à Java Méthode = opération sur les objets Norme d’un complexe p class ComplexeCartesien { double re; double im; ; class ComplexePolaire { double norme; double p phase; ; double norme () { double re2 = re re*re; re; double im2 = im*im; return Math.sqrt(re2+im2); } double norme() { return norme; } double phase () { return Math Math.atan2(im, atan2(im re); } double phase() { return phase; } } 2011/2012 } F. Mallet - GSE 4 18 Introduction aux objets et à Java Notation pointée Pour ou accéde accéder au aux membres e b es d d’un u obje objet Membre = champs + méthodes Exemple 2011/2012 Complexe c1 = new Complexe(); désigne g le champ p reelle de c1 c1.norme() désigne la méthode norme de c1 c1.reelle F. Mallet - GSE 4 19 Introduction aux objets et à Java Méthodes et paramètres Données o ées supplémentaires supp é e a es Le calcul de la norme nécessite seulement la valeur de ‘reelle’ reelle et de ‘imaginaire’ imaginaire Certaines méthodes nécessitent des paramètres • Signature int addition(int x, x int y); • Corps int addition(int x, int y) { return x + y ; } 2011/2012 F. Mallet - GSE 4 20 Introduction aux objets et à Java Classe Registre class Registre { // bloc de déclaration de classe int etat = 0 ; void decaleAGauche (int poidsFaible) { etat = etat << 1 + poidsFaible; } int getEtat() { return etat ; } } 2011/2012 F. Mallet - GSE 4 21 Introduction aux objets et à Java Commentaires: Classe Registre class Registre { // bloc de déclaration de classe /* représente l’état / l état du registre */ / int etat = 0 ; // les champs sont initialisés par défaut (cf. Type) /** décale à gauche l'état du registre * @param poidsFaible nouveau bit de poids faible */ void decaleAGauche (int poidsFaible) { etat = etat << 1 + poidsFaible; } /** @return la valeur courante du registre */ int getEtat() { return etat ; } } 2011/2012 F. Mallet - GSE 4 22 Introduction aux objets et à Java BlueJ - http://www.bluej.org p j g Deakin University University of Southern Danemark Kent University RegistreADecalage reg1; reg1 = new RegistreADecalage(); classes références 2011/2012 objets F. Mallet - GSE 4 23 Introduction aux objets et à Java Vocabulaire 2011/2012 F. Mallet - GSE 4 24