Cours informatique 2013-2014. Contenu : Introduction à la généricité; Généricité et héritage; Joker / bounded / erasure; Boxing / unboxing; for each.

Documents pareils
GUIDE INSTALLATION IAS

[SIMULATEUR DE CREDIT IMMOBILIER]

Les stratégies de Backup dans WSS V3

2. Trouvez la version du firmware que vous souhaitez télécharger dans la rubrique Boot From CD, correspondant à votre modèle de SSD.

Gestion des Prospects : Adresses à exporter

ENREGISTEUR NUMERIQUE USB Guide utilisateur

Nouveautés apportées à l assessment-tool

Processus des services

CYBERLEARN COURS MOODLE. SUPPORT DE TRAVAIL Pour professeur-es et assistant-es d'enseignement

Pour répondre au besoin de sécurité juridique et de prévisibilité, la Loi type devrait traiter des questions suivantes:

Partage de documents entre tablettes et transfert de ressources

Service de mobilité interbancaire - Règlement

Manuel d utilisation de Nomad Trading

GUIDE DE L UTILISATEUR

livraisons en centrale

PHASE 1 : choix et définition du sujet du TM.

Charte de la gestion cookies groupe PVCP 25/09/2014

LE TABLEAU DE BORD REMONTEE DES COMPTES. Outils de gestion prévisionnelle, d'analyse financière et du contrôle de gestion. TABLE DES MATIERES

Utiliser les activités de cours de Moodle : le Questionnaire

Çi-dessous le livret du module de réservation de sièges. Via Thomascookagent.be (pour les agences)

DOSSIER DE CANDIDATURE. Master Transport, Logistique Et Commerce International

Manuel d'utilisation: Gestion commerciale - CRM

Projet de renouvellement de l infrastructure informatique de la Mairie de Châtel-Guyon. Cahier des charges

BOURSE EXPLO RA SUP (Région Rhône-Alpes) Toutes destinations-séjour académique et stage

Service de mobilité interbancaire - Règlement

Dossier Spécial. Les 5 étapes pour vendre ACT! Apprendre à détecter un besoin en Gestion de Contacts

trak monitor Système de gestion de salles de charge HOPPECKE Vos avantages : Domaines d exploitation typiques Motive Power Systems

«NAVIGUER SUR INTERNET v 2» Support de formation tutoré «Réponses aux remarques les plus souvent posées»

Basculer entre un réseau domestique et celui de votre lieu de travail

DOSSIER DE CANDIDATURE. Programme Executive MBA

LE RVER EN UN COUP D ŒIL

Chap 10 : L évaluation et la valorisation du potentiel de l équipe commerciale

Extensions d inventaire

Article I - Objet. Article II - Conditions d'utilisation de la eboutique

ÉTAPES CLÉS DE LA RÉPONSE AUX VIOLATIONS DU RESPECT DE LA

Gestionnaire de Prêts Margill 4.1

Meilleures pratiques en matière d'indexation de contenu. Mise à niveau à partir de versions antérieures à la version 6.5

LIVRE BLANC SEM. Google AdWords Le guide ultime du SEM pour votre Boutique en ligne

(les caractères apparaissent en vidéo inversé : blanc sur fond

Cible de Sécurité - Blancco DataCleaner+ v4.8

Logiciel de gestion des inscriptions en CPGE

Note de cadrage de la version Apogée 4.10

Alcatel OmniPCX Office

Règlement de la BCL Collecte directe des données paiement. Note de guidance relative à la transmission des données paiements

Changement de régime fiscal des Mutuelles et des IP : remarques d ordre actuariel

Scénario 2 : La promesse

Fiche de projet pour les institutions publiques

PROPOSITION DE CREATION DE SITE INTERNET

PREPARATION DE VOTRE PFMP Réalisé et testé par Laurence Martin, enseignante au LP du Toulois et chargée de mission en économie et gestion option vente

Annexe 2 Annexe technique de la convention individuelle d habilitation «professionnel de l automobile»

Archivage et valeur probatoire. Livre blanc

Prénom et nom de l enfant : Sexe de l enfant : M F L âge de l enfant : Nom de la garderie ou du CPE : Adresse : Téléphone :

Nous proposons 3 syntaxes au choix :

Il existe un format informatique appelé.csv (Comma-Separated Values, des valeurs séparées par des virgules).

Résumé du module 6 : Coût et structure du capital

Approche générale de l OCRCVM pour l évaluation des risques de crédit liés aux contreparties

Développement Durable et Énergies Renouvelables

Guide du locataire - Résidentiel. Foire aux questions (FAQ)

OBSERVATION DES CLASSES

Terrain de jeu Analogie au sport professionnel

Financement des investissements Page 1 sur 6

Kluwer ERP Dashboard - VERO.

FICHE DE POSTE Fonction : Chef de Division Contrôle des opérations Financières FONCTION : CHEF DE DIVISION CONTRÔLE DES OPÉRATIONS FINANCIÈRES

PROCESSUS DE CERTIFICATION DES MONITEURS JE NAGE INFORMATIONS POUR LES MAITRE ÉVALUATEURS

Promotion Le défi des étoiles Aéroplan Q1. Qu est-ce que la promotion Le défi des étoiles Aéroplan?

RÈGLEMENT DU CONCOURS

Les prix de l électricité en France : évolutions passées et perspectives

FORMATION SUR «CLOUD COMPUTING : CONCEPTS, TECHNOLOGIES ET APPROCHES DE MIGRATION»

GUIDE DU PROGRAMME DE VÉRIFICATION DE LA CONFORMITÉ ET DE L UTILISATION DES DONNÉES DU FICHIER CENTRAL DES SINISTRES AUTOMOBILES

KDJHU HQHUJ\ manuel de l'xwlolvdteur tebis

Proposition de Veille Internet Campagnes Electorales 2012

esil PROJET DE MODELISATION ORIENTEE OBJET INFORMATIQUE - 3 ANNEE

A toutes les Directrices et à tous les Directeurs des établissements scolaires de l enseignement secondaire et secondaire technique

Guide d aide à la rédaction d un essai

Environnement & Architecture GPAO Clipper

FOCUS : LES SYSTÈMES D INFORMATION

ITIL V3. Les principes de la conception des services

Vente de Capacités de Stockage de gaz du 13 mai 2015

- Le service aux tables. - Le service rapide & commande pour emporter. - Le service à l auto. - La livraison. o Voir le feuillet Livraison.

Amandine CUER INDUSTRIELS! GAGNEZ DU TEMPS DANS VOS ECHANGES AVEC VOS INFORMATIQUE - INTERNET - TELECOMMUNICATIONS LA LETTRE D INFORMATION - MAI 2011

Haut Conseil de la santé publique

DM/Administrator fonctionne sans agents d administration spécifiques sur les contrôleurs de domaines.

SERVEUR HORUS NG dans les EPLE

Sociétés Non Financières - taux endettement - % PIB, valeur nominale

CAHIER DES CLAUSES TECHNIQUES PARTICULIERES

Règles de marché. En vue de vous garantir des exécutions au meilleur cours, les contre-valeurs maximales par ordre sont de :

ASSODESK.COM Aide en ligne

Procédure d installation

Impôt des personnes physiques - Habitation propre et avantages fiscaux avant 2015

Directory List & Print (Pro) by Infonautics GmbH, Switzerland

CONDITIONS GENERALES DE VENTE

République Française Services du Premier Ministre

- culture - tourisme - sport - actions sociales

Je suis capable tout seul!

Ministère de l enseignement supérieur Université du 7 Novembre à Carthage

Comme nous devons clôturer nos systèmes actuels avant la transition, veuillez noter les dates suivantes :

SAP SAP ERP SAP ERP FINANCIALS

Transcription:

Curs infrmatique 2013-2014 Cntenu : Intrductin à la généricité; Généricité et héritage; Jker / bunded / erasure; Bxing / unbxing; fr each. Estimatin temps : Curs : 2x45 minutes TP : 90 minutes HEG Genève http://www.hesge.ch/heg/

Cntenu Intrductin par l exemple; Généricité; Nte; Généricité et héritage; Jker (wildcard) Type paramétré avec cntrainte (bunded); Effacement de type (erasure); Cmplément : bxing / unbxing / autbxing; fr each. Cnclusin; Travail pratique. page 2 sur 67 v01.01

INTRODUCTION page 3 sur 67 v01.01

Mtivatin Suite à la nuvelle versin 5.0 qui a succédé à la versin 1.4 (septembre 2004) la généricité a fait sn apparitin parmi e nmbreuse autres extensins page 4 sur 67 v01.01

Mtivatin La prgrammatin générique permet de mettre en œuvre des algrithmes indépendants de leur implémentatin par l abstractin des types sus-jacents; La prgrammatin générique permet également une prgrammatin plus lisible et plus cmpact en décrivant les types des bjets manipulés par un paramètre; La prgrammatin générique permet une prgrammatin plus stable en permettant au cmpilateur la détectin d erreurs qui ne s exprimeraient autrement qu à l exécutin; Le plymrphisme paramétrique u la généricité permet la définitin de classes et d interfaces paramétrés par un u des types; On parle aussi de «plymrphisme paramétrique de type». page 5 sur 67 v01.01

Première apprche L élabratin d une classe u d une interface puvant prendre en charge des bjets indépendamment de leur type est un avantage certain. Par exemple : une cllectin d bjets de types de différentes classes (Carré, Rnd, Triangle); une classe gérant des instances d Object. Mais cette apprche pse des difficultés : Obligatin de «typeguarder» (dwncast) les bjets pur les utiliser : dnc de devir déterminer leur type au préalable Risque de lever une exceptin «ClassCastExceptin». Impssibilité de cntraindre qu une classe u une cllectin ne cntienne qu un seul type d bjet u des bjets dérivant d un parent spécifique; page 6 sur 67 v01.01 Les erreurs de typage ne snt détectées qu à l'exécutin (exceptin levée uniquement lrs de l exécutin).

Exemple : prblématique du typeguard Nus prendrns l exemple classique d une classe passepartut : la classe «Bite» Psns que cette classe sit respnsable de gérer une dnnée dnt le type de l instance gérée n est pas cnnu d avance Utilisatin de la classe! k Le cmpilateur ne peut pas détecter ce prblème. C est seulement à l exécutin qu une exceptin sera levée. page 7 sur 67 v01.01

Exemple : prblématique du typeguard Analyse : page 8 sur 67 v01.01 Le type géré dans la classe Bite est Object private Object ; La méthde utilisée returne également un type Object public Object get () {...} Dans l utilisatin des instances, si nus essayns d assigner la valeur de retur de get sans typeguarder, le cmpilateur indique l erreur «Incmpatible types» car il ne peut pas gérer cette situatin i = bi.get(); // Erreur à la cmpilatin Il faut lui indiquer explicitement le type «prmis» de l instance fille d Object par un typeguard i = (Integer)bi.get(); // C est OK bi étant un Integer Mais il est alrs pssible d annncer un type qui n est pas celui effectivement assigné lrs de l exécutin s = (String)bi.get(); // bi returne un Integer! Le cmpilateur ne purra pas détecter cette situatin en tute généralité!

Exemple : apprche générique Apprche avec un type générique : Naïvement, nus purrins créer une classes permettant de cnnaître le type de la dnnée d une manière u d une autre. Mais cette apprche blige à mettre en place des mécanismes plus u mins cmplexes qui fnt perdre l intérêt de cette apprche. L idéal serait de puvir annncer à la classe le type qui sera à prendre en charge. A partir de là, la classe se cmprtera cmme si elle avait été écrite spécifiquement pur ce type et la sécurisatin du cde sera cnservée C est le cncept de la généricité page 9 sur 67 v01.01

Exemple : apprche générique T : paramètre frmel de type. Il représente une classe u une interface (mais pas un type de base). Le type de la dnnée traitée n est pas défini à priri, mais sera celui défini par le paramètre T. La méthde get returne une référence sur un bjet de classe T. La méthde set prend en paramètre une référence sur un bjet de classe T. T sera du même type que le paramètre de la classe. Le type de la classe n est chisi qu au mment de l'instanciatin. Mais une fis ce type défini, il ne purra plus être changé. Etant dnné que le type a été défini, il n est plus nécessaire de typeguarder. En cas d incmpatibilité de type, le cmpilateur peut le déterminer et alrs plus aucun risque n est pssible à l exécutin. page 10 sur 67 v01.01

Exemple : apprche générique Analyse : La classe Bite utilise un paramètre frmel T (T pur type) public class Bite<T> {...} Le type T peut être utilisé n imprte ù dans la classe, naturellement en respectant les règles de prgrammatin, par exemple pur déclarer le type d une variable private T t; Le type T peut être utilisé cmme type de retur d une méthde public T get () {...} Le type T peut être utilisé cmme paramètre d une méthde public vid set (T t) {...} Le type T peut également être utilisé pur instancier une classe u une interface générique. Par exemple : ArrayList<T> al = new ArrayList<T> (); page 11 sur 67 v01.01

Exemple : détectin d erreurs de type page 12 sur 67 v01.01 incmpatible types required: Integer fund: String

Principes généraux de la généricité C est à la cmpilatin que les paramètres de type snt remplacés par le type spécifié; Une seule classe cmpilée est prduite indépendamment du nmbre d instanciatins demandées dans l applicatin; Après la cmpilatin, les variables de type ne snt pas cnservés; Techniquement, dans certains cas le cmpilateur ajute des typeguard pur assurer les cntraintes de type; Les paramètres frmels génériques ne peuvent pas être utilisé pur la créatin d bjet (p. ex T t = new T();) Il n est pas pssible d utiliser instancef avec le paramètre frmel générique, car à l exécutin le type n est pas cnnu vir plus lin) page 13 sur 67 v01.01

Illustratin généricité et méthde Classique Générique Plus besin de typeguard OK! Le cmpilateur le détecte page 14 sur 67 v01.01! Le cmpilateur ne vit rien! Le cmpilateur le détecte

Les classes illustratives (1/2) page 15 sur 67 v01.01

Les classes illustratives (2/2) page 16 sur 67 v01.01

GÉNÉRICITÉ page 17 sur 67 v01.01

Généricité multiple En intrductin, nus avns explré la généricité avec un seul paramètre générique; Il est en fait pssible de paramétrer une classe avec plus d un paramètre générique; Cmme exemple illustratif, nus prendrns l exemple classique KVS (key-value stre) Stckage d une dnnées (value) avec une clé (key); L intérêt de KVS est que les types de la clé ainsi que celui de la dnnées ne snt pas définis a priri et peuvent être n imprte quelle classe; La clé permet l identificatin de la dnnée dans des structures telles les cllectins, les structures assciatives; Sn utilisatin est fréquente dans les tables lkup / hash, les fichiers de cnfiguratin, les cluds, certaines bases de dnnées, etc. C est purqui la ntin de généricité est particulièrement apprpriée pur cet exemple. page 18 sur 67 v01.01

Généricité multiple : exemple KVS OK! Ne fnctinne pas : erreurs détectées à la cmpilatin page 19 sur 67 v01.01

Généricité : cllectin Dans les cllectins, les types des références peuvent être de n imprte quel type (car ref Object); Dnc lrs du parcurs de éléments, il peut arriver qu un des types ne sit pas celui attendu; Avec la généricité ce prblème disparaît, car le cmpilateur peut décuvrir ces cas. page 20 sur 67 v01.01

Généricité : cllectin // SANS utilisatin de la généricité // AVEC utilisatin de la généricité!! page 21 sur 67 v01.01 Le cmpilateur ne vit pas

NOTE page 22 sur 67 v01.01

Intrductin Une nte est un message du cmpilateur signalant une pératin de cnversin unchecked u unsafe : Nte: GestinPersnne.java uses unchecked r unsafe peratins. Nte: Recmpile with -Xlint:unchecked fr details. Ces messages snt issues du fait que l n cherche à créer des instances sans spécifier leur type : ArrayList() à la place de ArrayList<Emplye>() Dnc le cmpilateur ne peut pas vérifier le type et fait perdre la sécurisatin des pératins; Il va cnsidérer la classe cmme un «raw type» «Un «raw type» est une classe générique u une interface sans que sn paramètre de type ne sit renseigné» Aucune infrmatin n est dispnible lrs de l exécutin; Ce cmprtement est là pur cnserver une cmpatibilité avec les anciens cdes. page 23 sur 67 v01.01

Intrductin Il est pssible de de cmpiler avec l ptin : Xlint:unchecked! Pur tus les prjets activer ce paramètre afin de permettre au cmpilateur de TOUT nus signaler. Le cmpilateur prduira alrs des erreurs plutôt que des ntes; indique que le cmpilateur n a pas assez d infrmatin pur réaliser tus les cntrôles nécessaire pur en assure la fiabilité. GestinPersnne.java:4: warning: [unchecked] unchecked cnversin fund : Bite required: Bite<java.lang.Integer> b = creerbite(); 1 warning Cependant certaines des erreurs signalées peuvent être issue d une intentin, il est pssible d inhiber lcalement la génératin des erreurs avec : page 24 sur 67 v01.01 @SuppressWarnings("unchecked") Indique à la classe, la méthde u l instructin que le cde est «type-unsafe» et permettra quand même la génératin du cde.!! MAIS ATTENTION!!

GÉNÉRICITÉ ET HÉRITAGE page 25 sur 67 v01.01

Intrductin illustrative Lrsqu une classe générique est étendue, la cvariance des variables n est pas maintenue avec la classe fille (il n est pas permis d assigner une référence d un bjet de type classe fille sur une variable déclarée du type de la classe du parent, ce qui est pssible avec les classes nn génériques); Pur illustrer ce fait, nus prendrns l exemple de la définitin d un Emplye et d un Client qui snt tus deux des Persnne; Nus reprendrns ntre classe générique Bite pur l exemple de base; Ensuite nus bserverns ce qui se passe au niveau d une ArrayList. page 26 sur 67 v01.01

Illustratin : cvariance! page 27 sur 67 v01.01 Le cmpilateur interdit

Illustratin : cllectin!! page 28 sur 67 v01.01 Impssible : même si Emplyé est classe fille de Persnne. HEUREUSEMENT : sinn il aurait été pssible de placer des Persnne dans la liste Emplye et lrs du parcurs de la liste n aurait déclenché une exceptin! (par exemple avec un itérateur).

JOKER (WILDCARD) page 29 sur 67 v01.01

Intrductin ArrayList<T> implémente List<T> dnc ArrayList<T> est un sus type de List<T>; De même ArrayList<Persnne> implémente List<Persnne> dnc ArrayList<Persnne> est un sus type de List<Persnne>; Attentin : si Emplye est une classe fille de Persnne ArrayList<Emplye> N EST PAS un sus-type de ArrayList<Persnne> En effet, si c était le cas, il serait pssible d écrire Nus suhaitns une liste d Emplye Heureusement ne cmpile pas page 30 sur 67 v01.01

Intrductin Mais cette cntrainte empêche, par exemple, de calculer la masse salariale glbale; En effet : pur calculer la masse salariale glbale, il faut inclure les Emplye ET les Specialiste; Ce qui n est pas permis.! page 31 sur 67 v01.01

Intrductin : jker <?> Ce que l n aimerait, c est que l apprche de généricité puisse fnctinner pur un type particulier d bjet, mais également pur tutes ses sus-classes u ses classes parentes; Le jker -?- (u «wildcard») permet de lever la cntrainte de type en indiquant que n imprte quel type de référence est accepté : dnc pur un type incnnu. Mais alrs quel intérêt? Le jker permet d élargir les types pssibles acceptés : Sans jker : seule le type passée en paramètre est acceptée; Avec jker : tus les types snt acceptés (type incnnu). Mais il sera pssible de faire des restrictins qui permettrnt d accepter une référence sur une classe dnnée ainsi que tutes les classes filles u parentes du type spécifié. Nus allns explrer ces situatins dans la suite; Il faut garder en tête qu un jker n est pas l équivalent d un type. page 32 sur 67 v01.01

Jker type Le jker s applique sur : Un type classe <? extends Persnne> Un type interface <? extends Cmparable> Un paramètre frmel de type <? Acceptatin type <?> type incnnu. <? extends A> type incnnu qui peut être A u une de ses classes filles. <? super A> Type incnnu qui peut être A u une de ses classes parentes. A : classe u interface u paramètre de type. page 33 sur 67 v01.01

Exemple : jker <?> Reprenns l exemple précédent avec ntre Bite <?>! Il est dnc pssible de réaliser tutes les pératins sans cntrainte. page 34 sur 67 v01.01

Exemple : jker <?> Remarque : Bite<?> b1; N est pas équivalent à Bite<Object> b1; Car ce dernier cas n accepte que des types Object!!! page 35 sur 67 v01.01

Jker : ce qu il peut faire Le jker peut : Typer Une variable Bite<? extends T> als; Une cllectin ArrayList<? extends T> Une valeur de retur de méthde public <? extends T> m ()! PAS: public ArrayList <? extends T> m() page 36 sur 67 v01.01

Jker : ce qu il ne peut pas faire Le jker ne peut pas : Pas déclarer une variable <? extends T> mavariable;// NON Pas instancier des bjets al = new ArrayList<? extends T>(); // NON Pas super type pur la déclaratin d une classe class A implements Cmparable<? super A> // NON Pas typer des éléments de tableau tab = new ArrayList<? extends T>[5]; // NON! tab = new ArrayList<?>[5]; // OK! ArrayList<? extends T>[] tab; // OK Restrictin instanciatin type avec jker (A parent de B) ArrayList<? extends A> al = new ArrayList<B>(); Al.add(new A()); // NON page 37 sur 67 v01.01

Jker <? extends A> Nus aimerins une Bite qui permette de gérer les salaires de tus les Emplyés; Si nus utilisns : Bite<Emplye> be; alrs, nus ne purrns pas traiter les spécialistes! Si nus utilisns : Bite<?> b = new Bite<Persnne>();! alrs, nus purrns ajuter des Persnnes qui n nt pas de salaire et lever une exceptin lrs de sn traitement! Ou pire créer une instance de n imprte quel autre type (b = new Bite(Integer);) Il est pssible d utiliser : Bite<? extends Emplye> be; page 38 sur 67 v01.01

Exemple 1 : jker <? extends A> Classe Emplye et tutes ses classes filles page 39 sur 67 v01.01

Exemple 2 : jker <? extends A> page 40 sur 67 v01.01

Jker <? super A> Nus aimerins une Bite qui permette de gérer les salaires de tus les Emplyés ainsi que tus ses parents; Object L utilisns de : Bite<? extends Emplye>be; Accepte les types Emplye et ses sus-types, mais il ne sera pas pssible de traiter des types Persnne Il est pssible d utiliser : Bite<? super Emplye> be; Peut traiter des types Emplye, Persnne et Object page 41 sur 67 v01.01

Jker synthèse (1/2) Instanciatin avec le jker (u wildcard); Il est pssible d utiliser le jker pur élargir les types de classes des instances gérées par la classe générique; Ceci s applique sur : Le jker : Une classe; Une interface; Un paramètre de type. <?> : tut type; <? extends A> : type A et tus les sus-type de A; <? super A> : type A et tus les sur-type de A. A cntraint le jker «?» : impse une cntrainte sur le type incnnu. A : classe u interface u paramètre de type. page 42 sur 67 v01.01

Jker synthèse (2/2) Pur généraliser le paramètre d une méthde C<T> cmment chisir entre : C<? extends T> page 43 sur 67 v01.01 C<? super T> Un truc : extends : prducteur est à chisir cmme paramètre d une méthde qui dit furnir une référence sur un type T; «type de retur». super : cnsmmateur est à chisir cmme paramètre d une méthde qui reçit une référence sur un type T; «type du paramètre». Si la méthde est à la fis prducteur et cnsmmateur Rend une référence sur un type T et prend en paramètre un type T : pas de généralisatin envisageable reste C<T>

TYPE PARAMÉTRÉ AVEC CONTRAINTE (BOUNDED) page 44 sur 67 v01.01

Intrductin Un paramètre frmel de type T ne dit rien sur sa nature Dnc n ne sait à priri pas les méthdes qui nus sernt accessibles; Sauf pur les méthdes de la classe Object, car parente de tutes les classes; Pur utiliser le type T il faut puvir annncer les méthdes qui sernt dispnibles et dnc annncer un type u un de ses parents (classe u interface); Si A cntient la méthde m()et que T hérite de A, il faut indiquer que le type T hérite de A pur avir accès à m(). Même raisnnement pur l implémentatin des interfaces. page 45 sur 67 v01.01

Intrductin Un paramètre frmel de type T ne dit rien sur sa nature Dnc n ne sait pas à priri les méthdes qui nus sernt accessibles; Sauf pur les méthdes de la classe Object, car parente de tutes les classes; Pur utiliser le type T il faut puvir annncer les méthdes qui sernt dispnibles et dnc annncer un type u un de ses parents (classe u interface); Si A cntient la méthde m() il faut que T hérite de A <T extends A> Si T dit hériter de plusieurs classes <T extends A & B> Si T dit implémenter des interfaces <T extends I> u <T extends I1 & I2> Si T hérite de classes et implémente des interfaces (les classes en premier) page 46 sur 67 v01.01 <T extends A & B & I1 & I2>

Exemple (1/2) Nus désirns truver le salaire le plus petit; Nus suhaitns puvir cmparer avec la même méthde des Emplye u des Specialiste; Nus mdifins en premier la classe Emplye pur la rendre cmparable sur la base du salaire; page 47 sur 67 v01.01

Exemple (2/2) page 48 sur 67 v01.01

EFFACEMENT DE TYPE (ERASURE) page 49 sur 67 v01.01

Intrductin La cmpilatin des types génériques en Java repse sur l effacement des types (erasure); Le principe est d effacer tutes les infrmatins de type qui snt placées entre les chevrns <... >; Les variables de types restant snt remplacées par le type le plus haut dans la chaîne d héritage. Sans indicatin de brne, c est Objet qui est utilisé; A chaque fis qu il est nécessaire, des typeguard snt insérés. page 50 sur 67 v01.01

Cnséquences Cnséquences : Lrs de la cmpilatin, il n existera finalement qu une seule classe qui sera partagée par tutes les instances; C est purqui, les variables de type paramétrant une classe ne prtent pas sur les méthdes et les variables statiques; Les paramètres de type n existent plus à l exécutin, dnc il ne faut pas utiliser : instanceof ; Il est pssible d utiliser une classe générique sans paramètre (raw type), mais : Le cmpilateur ne peut pas faire de vérificatin; Utilisé principalement par sucis de cmpatibilité avec les anciens cdes. page 51 sur 67 v01.01

COMPLÉMENT Bxing / unbxing / autbxing Cnventin : i : pur le type primitif int; i : pur une référence sur un bjet de type Integer i -> pur bject Même cnventin pur les autres types (f/f, b/b, etc.) page 52 sur 67 v01.01

Intrductin Principe de base Les types primitifs (par exemple : int, flat, blean, etc.) ne snt pas des bjets instances d une classe (ils n n pas de référence) et dnc ne peuvent pas être traité cmme des bjets; Il n est dnc pas pssible d assigner directement un type de primitif à une variable de classe Pas pssible : Integer i1 = 1; int i1 = new Integer (1); Pssible : Integer i2 = new Integer (1); int i = i2.intvalue(); Cependant, il serait suhaitable de puvir faire des assignatins telles : Integer i1 = 8; int i2 = i1; ArrayList al = new ArrayList (); al.add (1); al.add ("hell"); al.add(true); page 53 sur 67 v01.01

Principe Pur réaliser les assignatins vues ci-dessus, il est nécessaire d encapsuler la dnnée dans une classe; Ainsi la dnnée de type primitif est gérée par une classe et peut dnc être utilisée cmme tel; Cette classe particulière est dénmmée un «wrapper». L actin d «encapsuler» / de «décapsuler» un type primitif dans une classe wrapper crrespndante : bxing / unbxing; Il existe des classes «wrapper» pur tus les types primitifs : Types primitifs blean byte char flat int lng shrt page 54 sur 67 v01.01 Classes wrapper Blean Byte Character Flat Integer Lng Shrt «vir début du curs de 632.1 Prgrammatin (2 e semestre)»

Bxing, unbxing, aut-bxing / aut-unbxing Bxing Unbxing cnsiste à «encapsuler» une dnnée primitive dans sn wrapper (du type primitif à sa classe wrapper crrespndante) Integer i = new Integer (1); // 1 : type primitif cnsiste à retruver la dnnée dans sn type primitif (de la classe wrapper à sn type primitif crrespndant) Integer i = new Integer (1); int i = i.intvalue(); // i : classe wrapper aut-bxing cnsiste à avir des «encapsulatins» autmatique sans que le dévelppeur n ai à indiquer explicitement l pératin de bxing Integer i = 152; aut-unbxing cnsiste à avir des «décapsulatin» autmatique sans que le dévelppeur n ai à indiquer explicitement l pératin d unbxing Integer i = new Integer (1); int i = i; page 55 sur 67 v01.01

Pints d attentin : cmparaisn (1/5) Les bjets pssèdent un état et une identité (référence mémire) alrs que les types primitifs nt seulement un état (leur valeur) La cmparaisn entre deux entités dit être faite avec grande attentin : Opératin Cmprtement i1 == i2 Cmpare les identités (leurs références mémire) : «est-ce le même bjet?» Opératin Cmprtement i1 == i2 Cmpare les valeurs «est-ce la même valeur?» x == y x.equals (y) Cnsidère deux primitives et cmpare leurs valeurs! x dit être un bjet. Cnsidère deux bjets et cmpare les valeurs de leurs états internes via la méthde «equals» i1.equals (i2) i1.equals (i2) Cmpare les valeurs (par la méthde «equals» de l bjet i1) «les états des dnnées pertinentes internes des deux bjets snt-ils les mêmes?» Ne cmpile pas page 56 sur 67 v01.01

Pints d attentin : null (2/5) Les bjets wrapper ne peuvent pas être null, en effet les types primitifs ne peuvent pas l être Integer i1 = null; Int i2 = i1; // lève une exceptin NullPinterExceptin page 57 sur 67 v01.01

Pints d attentin : créatins inutiles d instances (3/5) Créatin inutile d bjets par le mécanisme de l autbxing. Par exemple dans les bucles L pérateur + ne s applique pas sur des bjets de type Integer : unbxing pur l additin. Le résultat dit être wrappé dans un bjet de type Integer : créatin d une instance Integer. Cde équivalent Ce cde n utilisant pas le bxing / unbxing mntre le travail réalisé à chaque itératin!! Un des effets de brd est que la créatin d bjets inutiles peut dépasser la limite du cache et peut ptentiellement ralentir significativement l applicatin ainsi que déclencher de fréquents «garbage cllectin». page 58 sur 67 v01.01

Pints d attentin : surcharge des méthdes (4/5) En cas de surcharge de méthdes dnt la signature ne change que par le type primitif et le wrapper, des effets de brd peuvent apparaître Seln que l n utilise une dnnée de type primitif u wrapper, nus invquns l une u l autre des méthdes; Avec l autbxing, le risque d appeler une méthde nn suhaitée est bien réel, surtut dans les cllectins et classes cmpsées page 59 sur 67 v01.01

Pints d attentin : pérateur lgique de cmparaisn (5/5) Les pérateurs lgiques de cmparaisn de devraient pas mixer des types primitifs avec des type wrapper (bjet); En effet lrs de l unbxing, une référence null peut apparaître et une exceptin sera levée dans ce cas page 60 sur 67 v01.01

COMPLÉMENT Fr each page 61 sur 67 v01.01

Intrductin «fr each» est utilisé spécifiquement pur l itératin dans des ensembles u des cllectins; Syntaxe fr (type variable : ensemble) { } instructins Itère sur les indices Utilisatin d un itérateur Itère directement sur les éléments page 62 sur 67 v01.01

Intrductin Dans la majrité des cas, la bucle «fr each» est plus rapide que la bule «fr»; Bien que le cntrôle ne sit pas cmplet (n ne cnnaît pas la psitin des éléments parcurus, «fr each» nus permet : De ne pas gérer d indice; De ne pas avir besin de cnnaître u de chercher le nmbre des éléments; Que les éléments sernt pris dans l rdre, si un rdre existe. page 63 sur 67 v01.01

CONCLUSION Synthèse page 64 sur 67 v01.01

PARTIE INTERACTIVE Questins - répnses page 65 sur 67 v01.01

TRAVAIL PRATIQUE Temps : 90 minutes page 66 sur 67 v01.01

FIN DU COURS HEG_CmpsantsEtPatterns_634-1W_IntrGenericite_2013-2014_FR_JSI_01.01d.pd page 67 sur 67 v01.01