Larchitecture.NET: Le typage © Patrick Smacchia © Patrick Smacchia/Microsoft Research Cambridge 2004 Les supports (cours et lab)

Slides:



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

Premier programme en C :
Langage C# et Plate-forme .NET
Formation universitaire à .NET: Introduction à C#
C++ 6ème cours Patrick Reuter maître de conférences
Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
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)
C.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
8. Les tableaux P. Costamagna – ISEN N1.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
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.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
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.
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
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.
Introduction au paradigme orienté-objet (suite)
POO-L3 H. Fauconnier1 Supplément gratuit…. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double.
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.
Langages orientés objets
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
C++ : fonctions et opérateurs
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
CSI1502 Principes fondamentaux en conception des logiciels
Méthode et Outils pour la Programmation
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Formation universitaire à.NET: Introduction Formation universitaire à.NET: Introduction © Patrick Smacchia © Patrick Smacchia/Microsoft.
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.
12/04/ Le polymorphisme Cours 8 Cours 8.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Réaliser par: Sadok Amel Cheboui hassiba
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.
Les surcharges d'opérateurs
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Cours du 5 novembre.
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Les classes Introduction aux Langages Orientés Objets
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Héritage Conception par Objet et programmation Java
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
Langage de Programmation Orientée Objet : 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é.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
LES CLASSES ET LES OBJETS
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Transcription de la présentation:

Larchitecture.NET: Le typage © Patrick Smacchia © Patrick Smacchia/Microsoft Research Cambridge 2004 Les supports (cours et lab) de cette formation peuvent être utilisés gratuitement dans le cadre de tout enseignement à but non lucratif. Contacter moi avant toute utilisation non personnelle de ces supports :

Le typage2 Plan CTS (Common Type System) CTS (Common Type System) Types valeur vs. Types référence Types valeur vs. Types référence La classe System.Object La classe System.Object Boxing / Unboxing Boxing / Unboxing Les types primitifs Les types primitifs Les membres Les membres

Le typage3 La problématique Lensemble des types (standard ou propriétaires) doit saffranchir de la notion de langage. Lensemble des types (standard ou propriétaires) doit saffranchir de la notion de langage. Un type défini en C# doit être utilisable par une application développée en VB.NET. Un type défini en C# doit être utilisable par une application développée en VB.NET. Un type défini en C# doit pouvoir dériver dun type défini en VB.NET. Un type défini en C# doit pouvoir dériver dun type défini en VB.NET. La représentation physique (octet par octet) des instances dun type doit être la même indépendamment du langage. La représentation physique (octet par octet) des instances dun type doit être la même indépendamment du langage. CTS (Common Type System)

Le typage4 Les problèmes Or, lévolution des langages montre quils ont chacun leurs spécificités: Or, lévolution des langages montre quils ont chacun leurs spécificités: Types primitifs en Java et C++ (, …) et pas en SmallTalk. Types primitifs en Java et C++ ( float, int …) et pas en SmallTalk. Héritage multiple dimplémentation en C++ et Eiffel et pas en Java. Héritage multiple dimplémentation en C++ et Eiffel et pas en Java. Accès direct à la mémoire (pointeurs) en C++ et pas en Java. Accès direct à la mémoire (pointeurs) en C++ et pas en Java. Types génériques (templates) en C++ et pas en Java. Types génériques (templates) en C++ et pas en Java. Java utilise constamment la notion de référence. C ne connaît pas la notion de référence. Java utilise constamment la notion de référence. C ne connaît pas la notion de référence. Des choix et des compromis ont dû être faits. Des choix et des compromis ont dû être faits. CTS (Common Type System)

Le typage5 Vue globale du CTS CTS CTS (Common Type System) Types valeur Types référence Types valeur Standard Propriétaires ClassesInterfacesPointeurs Types références Propriétaire

Le typage6 Plan CTS (Common Type System) CTS (Common Type System) Types valeur vs. Types référence Types valeur vs. Types référence La classe System.Object La classe System.Object Boxing / Unboxing Boxing / Unboxing Les types primitifs Les types primitifs

Le typage7 Pile et tas En.NET, les variables et les objets peuvent être physiquement stockés dans deux types de zone mémoire: En.NET, les variables et les objets peuvent être physiquement stockés dans deux types de zone mémoire: La pile (stack) dun thread. La pile (stack) dun thread. Le tas dun processus. Le tas dun processus. (On ne parle pas ici des registres des processeurs) Types valeur vs. Types référence

Le typage8 Pile et tas Avantages de la pile/désavantage du tas: Avantages de la pile/désavantage du tas: Accès optimisés (directement au niveau des instructions machines). Accès optimisés (directement au niveau des instructions machines). Pas de problème daccès concurrents à une pile (puisquil y a une pile par thread). Pas de problème daccès concurrents à une pile (puisquil y a une pile par thread). Avantages du tas/désavantage de la pile: Avantages du tas/désavantage de la pile: La pile est limité en taille (de lordre du Mo). La pile est limité en taille (de lordre du Mo). La pile est utilisé pour stocker des petits objets accédés souvent (,, …) La pile est utilisé pour stocker des petits objets accédés souvent ( int, double, bool …) Le tas est utilisé pour stocker des gros objets globaux au processus. Le tas est utilisé pour stocker des gros objets globaux au processus. Types valeur vs. Types référence

Le typage9 Types valeur et types référence Lendroit où est stocké un objet (pile ou tas) dépend de son type: Lendroit où est stocké un objet (pile ou tas) dépend de son type: Les instances des types valeurs sont par défaut stockées sur la pile. Les instances des types valeurs sont par défaut stockées sur la pile. Les instances des types références sont TOUJOURS stockées sur le tas. Chacune de ces instances admet une référence dans une pile. Les instances des types références sont TOUJOURS stockées sur le tas. Chacune de ces instances admet une référence dans une pile. Notez que les champs de types valeurs dun type références sont physiquement stockés sur le tas. Notez que les champs de types valeurs dun type références sont physiquement stockés sur le tas. Types valeur vs. Types référence

Le typage10 Types valeur et types référence Les types valeurs sont: Les types valeurs sont: Les types primitifs (,, …). Les types primitifs ( int, bool, double …). Les énumérations. Les énumérations. Les structures. Les structures. Les types références sont les classes (standard, propriétaire,, tableau…). Les types références sont les classes (standard, propriétaire, string, tableau…). Types valeur vs. Types référence

Le typage11 Accès, Affectation Les instances des types valeurs sont toujours accédées directement. Les instances des types références sont toujours accédées par lintermédiaire dune référence. Les instances des types valeurs sont toujours accédées directement. Les instances des types références sont toujours accédées par lintermédiaire dune référence. Laffectation entre instances de types valeur se traduit par une copie du contenu. Laffectation entre instances de types valeur se traduit par une copie du contenu. Laffectation entre instances de types référence se traduit par une copie de la référence. Laffectation entre instances de types référence se traduit par une copie de la référence. Types valeur vs. Types référence

Le typage12 Accès, Affectation: Exemple struct type_val // type_val est un type valeur, car cest une structure. { public int m_i; public type_val(int i) { m_i=i;} } class type_ref // type_ref est un type référence, car cest une classe. { public int m_i; public type_ref(int i) { m_i=i;} } class Prog { static void Main(string[] args) { type_val v1 = new type_val(6); type_val v2 = v1; v2.m_i = 9; // Que vaut v1.i? Combien y a t-il dinstances de type_val? type_ref r1 = new type_ref(6); type_ref r2 = r1; r2.m_i = 9; // Que vaut r1.i? Combien y a t-il dinstances de type_ref? } Types valeur vs. Types référence

Le typage13 Comparaison Les instances des types valeurs se comparent sur leurs contenus (égalité). Les instances des types références se comparent sur leurs identités. Les instances des types valeurs se comparent sur leurs contenus (égalité). Les instances des types références se comparent sur leurs identités. Types valeur vs. Types référence

Le typage14 Comparaison: Exemple using System; public class Article { public int Prix = 0; } class Prog { static void Main(string[] args) { int i1 = 10; int i2 = 10; Article Article1 = new Article(); Article1.Prix = 10; Article Article2 = new Article(); Article2.Prix = 10; string s1 = "Foo"; string s2 = "Foo"; bool bval = (i1 == i2); bool bref = (Article1 == Article2); bool bstr = (s1 == s2); // que valent bval, bref et bstr ? } Types valeur vs. Types référence

Le typage15 Passage dargument Les instances des types valeurs sont par défaut passées par valeur. Les instances des types références sont toujours passées par référence. Les instances des types valeurs sont par défaut passées par valeur. Les instances des types références sont toujours passées par référence. Types valeur vs. Types référence

Le typage16 Passage dargument: Exemple public class Article { public int Prix = 0; } class Prog { static void Main(string[] args) { // int est un type valeur. int ii = 10; // Article est un type référence. Article Article = new Article(); Article.Prix = 10; fct( ii, Article ); // Que vaut ii? Que vaut Article.Prix? } static void fct( int i, Article A ) { i = 100; A.Prix = 100; } Types valeur vs. Types référence

Le typage17 Plan CTS (Common Type System) CTS (Common Type System) Types valeur vs. Types référence Types valeur vs. Types référence La classe System.Object La classe System.Object Boxing / Unboxing Boxing / Unboxing Les types primitifs Les types primitifs

Le typage18 La classe System.Object Tous les types (références et valeurs) dérivent automatiquement et implicitement de la classe. Tous les types (références et valeurs) dérivent automatiquement et implicitement de la classe System.Object. C# définit les alias et vers. C# définit les alias object et Object vers System.Object. La classe System.Object

Le typage19 Les méthodes System.Type GetType() Renvoie le type de lobjet. virtual String ToString() Obtient une chaîne de caractères qui décrit lobjet. virtual void Finalize() Libère les ressources allouées à lobjet. virtual bool Equals(object obj) Compare lobjet courant à obj. virtual int GetHashCode() Obtient une valeur de hachage sur lobjet. La classe System.Object

Le typage20 La méthode ToString() using System; class CPersonne // on aurait pu mettre struct à la place de class { stringm_Nom; intm_Age; public CPersonne(string Nom,int Age) { m_Nom = Nom; m_Age = Age; } public override string ToString() { return "Nom:" + m_Nom + " Age:" + m_Age; } class TheClass { static void Main(string[] args) { CPersonne Raymond = new CPersonne("Raymond",50); // WriteLine() appelle automatiquement Raymond.ToString() Console.WriteLine( Raymond ); } La classe System.Object

Le typage21 La méthode Finalize() 1/3 Cette méthode est appelée par le ramasse-miettes juste avant que lobjet soit détruit. Cette méthode est appelée par le ramasse-miettes juste avant que lobjet soit détruit. On peut lutiliser pour libérer des ressources. On peut lutiliser pour libérer des ressources. Inconvénient majeur: le ramasse-miettes étant non déterministe, on ne peut contrôler le moment de son appel. Inconvénient majeur: le ramasse-miettes étant non déterministe, on ne peut contrôler le moment de son appel. La classe System.Object

Le typage22 La méthode Finalize() 2/3 En C# la méthode virtuelle ne peut être redéfinit directement. Pour la redéfinir, il faut utiliser la syntaxe du destructeur: En C# la méthode virtuelle Finalize() ne peut être redéfinit directement. Pour la redéfinir, il faut utiliser la syntaxe du destructeur:... public class Article { public int Prix; public Article(int Prix) { this.Prix = Prix; }// constructeur ~Article() { }// destructeur }... La classe System.Object

Le typage23 La méthode Finalize() 3/3 Pour libérer les ressources dune manière déterministe, il faut utiliser linterface : Pour libérer les ressources dune manière déterministe, il faut utiliser linterface IDisposable :... public class Article : IDisposable { // Déclaration des champs et méthodes... public void Dispose() { /* désalloue ici ce qui doit l'être*/ } }... Article B = new Article(); using(B) { // Ici éventuellement utilisation de B. // Cette zone est appelée zone de validité de B. }// Cette accolade provoque l'appel automatique de B.Dispose(). // Fin de la zone de validité de B.... La classe System.Object

Le typage24 Plan CTS (Common Type System) CTS (Common Type System) Types valeur vs. Types référence Types valeur vs. Types référence La classe System.Object La classe System.Object Boxing / Unboxing Boxing / Unboxing Les types primitifs Les types primitifs

Le typage25 La problématique Beaucoup de méthodes ont besoin darguments sous forme dune référence de type. Beaucoup de méthodes ont besoin darguments sous forme dune référence de type System.Object. Les instances des types valeurs nadmettent pas de référence du tout. Les instances des types valeurs nadmettent pas de référence du tout. Or, les types valeur dérivent tous de. Il serait dommage de ne pas pouvoir référencer leurs instances avec une référence de type. Or, les types valeur dérivent tous de System.Object. Il serait dommage de ne pas pouvoir référencer leurs instances avec une référence de type System.Object. Boxing / Unboxing

Le typage26 La solution: Le boxing class Prog { static void f(object o){} public static void Main( String[] argv ) { int i = 9 ; f(i); } Le code CIL de cette méthode Main() est le suivant :.locals init ([0] int32 i) IL_0000: ldc.i4.s 9 IL_0002: stloc.0 IL_0003: ldloc.0 IL_0004: box [mscorlib]System.Int32 IL_0009: call void Prog::f(object) IL_000e: ret Boxing / Unboxing

Le typage27 Description Lopération de boxing seffectue en interne en trois étapes : Lopération de boxing seffectue en interne en trois étapes : Une nouvelle instance du type valeur est créée et allouée sur le tas. Une nouvelle instance du type valeur est créée et allouée sur le tas. Cette instance est initialisée avec létat de linstance allouée sur le tas. Dans le cas de notre entier, une copie de quatre octets est effectuée. Cette instance est initialisée avec létat de linstance allouée sur le tas. Dans le cas de notre entier, une copie de quatre octets est effectuée. Une référence vers la nouvelle instance est utilisée à la place de linstance allouée sur le tas. Une référence vers la nouvelle instance est utilisée à la place de linstance allouée sur le tas. Boxing / Unboxing

Le typage28 Boxing implicite: DANGER static void f(object o1,object o2){ if(o1==o2) Console.WriteLine("Même références"); else Console.WriteLine("Références différentes"); } public static void Main( String[] argv ){ int i = 9 ; f(i,i); } static void f(object o1,object o2){ if(o1==o2) Console.WriteLine("Même références"); else Console.WriteLine("Références différentes"); } public static void Main( String[] argv ){ int i = 9 ; object o = i; f(o,o); } Boxing / Unboxing

Le typage29 Unboxing Lopération inverse du boxing existe. Lopération inverse du boxing existe. Elle ne peut se réaliser que si le type de lobjet boxé est exactement le type destination du unboxing: Elle ne peut se réaliser que si le type de lobjet boxé est exactement le type destination du unboxing: class Prog { public static void Main( String[] argv ) { int i = 9 ; Object o = i; // i est Boxé int j = (int) o; // o est UnBoxé } Boxing / Unboxing

Le typage30 Plan CTS (Common Type System) CTS (Common Type System) Types valeur vs. Types référence Types valeur vs. Types référence La classe System.Object La classe System.Object Boxing / Unboxing Boxing / Unboxing Les types primitifs Les types primitifs

Le typage31 Représentation de nombres entiers Les types primitifs

Le typage32 Représentation de nombres réels Les types primitifs

Le typage33 Plan CTS (Common Type System) CTS (Common Type System) Types valeur vs. Types référence Types valeur vs. Types référence La classe System.Object La classe System.Object Boxing / Unboxing Boxing / Unboxing Les types primitifs Les types primitifs

Le typage34 Question? Mots clés : Mots clés : CTS (Common Type System) Pile/tas Type valeur/type référence Égalité/identitéSystem.Object Type primitif Boxing/Unboxing