SlideShare une entreprise Scribd logo
PROGRAMMATION ORIENTEE OBJET  Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   1.  Introduction 2.  Un peu de vocabulaire 3.  Portées de vos déclarations 4.  Fonctions Partagées 5.  La Surcharge 6.  L'Héritage 7.  La Rédéfinition 8.  Le Polymorphisme d'héritage 9. Constructeurs et Destructeurs 10. Les Propriétés 11. Une petite application Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   Cet leçon traite des  fonctionnalités basiques de la POO en VB.Net. En effet,une des évolutions notables  de VB.Net est d'être totalement orienté objet,contrairement aux versions précédentes de VB. 1.  Introduction 1. Aborder de manière exhaustive la POO en VB.NET, 2. Apprendre comment sont utilisées les techniques de la POO en VB.NET 3.Expliquer simplement les concepts suivants:  Création et utilisation de classes et d'objets en VB.NET,  Fonctions Partagées,  Encapsulation,Abstraction,Héritage et Polymorphisme,  Surcharge et Redéfinition,  Constructeurs et Destructeurs. Les objectifs attendus sont : Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   2.  Un peu de vocabulaire Espace de Noms En VB.NET,les classes et autres structures de données concernant un domaine bien défini sont incluses dans un Espace de noms(ou  NameSpace ). Vous pouvez utiliser les classes appartenant à un espace de noms simplement En important cet espace: ceci se fait par le biais du mot-clé  Imports . Le FrameWork.NET fournit un ensemble très fournis de classes pré-définies, groupées ensemble dans divers Espaces de noms. Dans cette leçon, nous utiliserons le namespace  System . Importons le namespace System(déjà disponible dans .NET). Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   2.  Un peu de vocabulaire Classes Vous avez déjà entendu parler des classes? Pour faire simple, une classe ( Class ) est la définition d'un objet de Tous les jours. Par exemple, il est possible de définir une classe  Humain  afin de modéliser tous les êtres humains, Et une nommée  Chien  pour représenter les chiens. Les classes peuvent également gérer des  méthodes  : ce sont (en général) des procédures concernant le fonctionnement de l'objet à modéliser. Voici l'instruction de déclaration d'un espace de noms nommé Animaux: Namespace Animaux Chien  est une classe appartenant à l'espace de noms  Animaux : Class Chien Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   2.  Un peu de vocabulaire Classes (Suite) Et  Aboie  est une procédure de cette classe: Function Aboie() Console.Writeline("Le chien aboie !") End Function Namespace Animaux Class Chien Function Aboie() Console.Writeline("Lechien aboie !") End Function End Class End Namespace En résumé Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   2.  Un peu de vocabulaire Objet Un objet est une instance de classe. Par exemple,  Jimmy  est un objet de type Chien. Pour illustrer ceci, nous Allons créer un objet dans la section suivante. Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   2.  Un peu de vocabulaire Module Il est possible d'utiliser des  modules  pour écrire  des fonctions ou procédures publiques  : Un Module  est donc un Groupe de fonctions. À la différence d'une fonction appartenant à une classe, une fonction publique d'un module Peut être appelée à  tout endroit du code . VB implémente les fonctions (Function) et les procédures ( Sub ). La seule Différence entre une fonction et une procédure est que contrairement à une fonction, une procédure ne retourne Pas de valeur. Public Module modMain L'exécution va démarrer à partir de la procédure  Main(): Sub Main() 'Appelle la fonction ci-dessous: MaFonction() End sub Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   2.  Un peu de vocabulaire Module (Suite) MaFonction  : une petite fonction afin d'utiliser la classe Chien: Function MaFonction() 'Voici comment déclarer une variable nommée Jimmy, de type  chien Chien: 'Nous spécifions Animaux.Chien car la classe Chien fait partie de  l'espace de Nom Animaux (cf.plus haut) Dim Jimmy as Animaux.Chien 'Crée l'objet. Contrairement à VB6, le mot clé Set n'est plus  utilisé! Jimmy= New Animaux.Chien() 'Voici une autre manière de créer un objet: 'Dim Jimmy as New Chien 'Appel de la fonction principale de Jimmy Jimmy.Aboie() End Function End module Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   3.  Portées de vos déclarations Les principales portées sont  Public, Private, Friend et Protected . Une classe peut contenir des attributs ou des méthodes, qui peuvent être de chacuns des 4 types pré-cités: - Ceux qui sont  Public  sont accessibles suite à la création de l'objet. - Ceux qui sont  Private ou Protected  ne sont accessibles qu'à l'intérieur même du module de classe. - Les membres  Protected  sont similaires aux Private, mais ils ont une particularité en cas d'héritage. Ce point sera Abordé plus tard dans la leçon correspondante. - Les membres  Friend  ne sont accessibles qu'à l'intérieur du projet, et pas par des éléments extérieurs au projet en cours. Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   3.  Portées de vos déclarations Continuons sur notre exemple et importons l'espace de noms System: Imports System L'instruction de début de notre espace de noms : Animaux (Tout le code qui suit en fera partie) Namespace Animaux Chien est une classe appartenant à l'espace de noms Animaux: Public Class Chien 'Voiciunevariablepublic Public  AgeDuChien  as Integer Aboie est une fonction publique (Public) de notre classe Chien: Public Function Aboie() Console.Writeline("Le chien aboie !") End Function Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   3.  Portées de vos déclarations Et Marche en est une autre, déclarée en privée (Private): ------------------------------ Private Function Marche() Console.Writeline("Le chien  marche") End Function End Class End Namespace Passons maintenant à notre module: Public Module modMain Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   Sub Main() 'Appelle notre fonction (cf.ci-dessus) MaFonction() End sub 'MaFonction : Appelée à partir de la procédure Main() Function MaFonction() Dim Jimmy as Animaux.Chien Jimmy= New Animaux.Chien() 'Ce qui suit fonctionnera, car Aboie et AgeDuChien sont Public Jimmy.Aboie() jimmy.AgeDuChien=10 'Par contre, l'appel de la fonction Marche() échouera, car il se situe en dehors du module de classe Chien 'Donc le code qui suit est incorrect : décommentez-le 'et essayez de compiler, vous obtiendrez une erreur! 'Jimmy.Marche() End Function End Module Public Module modMain 3.  Portées de vos déclarations Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   Vocabulaire: 3.  Portées de vos déclarations L'encapsulation La gestion de données et des procédures associées à une notion dans une classe s'appelle l'encapsulation. Data Hiding ou Abstraction Habituellement,dans une classe, les variables gérant les données, comme AgeDuChien, sont déclarée en tant Que Private. Ce sont les procédures Property qui sont utilisée pour accéder à ces données. La protection des Données d'un objet en dehors du module de classe est appelée Abstraction, oubien encore DataHiding. Ceci Sert à prévenir des modifications "accidentelles«  des données d'un objet via des fonctions externes au module De classe. Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   4.  Fonctions Partagées Dans une classe, les membres partagés (propriétés et méthodes) peuvent être appelés directement, sans passer Par l'instanciation d'un objet (comme précédement décrit). Le mot-clé  Shared  indique en effet que la propriété ou Méthode ne s'appuie pas sur un objet spécifique mais bien sur la classe elle-même, et qu'elle peut être appelée Directement à partir de cette classe, même si celle-ci n'a aucune instance en cours. Une propriété  Shared  contient quant à elle une valeur commune à tous les objets d'une classe. Imports System Namespace Animaux Class Chien ‘ Et Aboie est maintenant une fonction Public et Shared de cette classe Public Shared Function Aboie() Console.Writeline("Le chien aboie!") End Function ‘ Marche,quant à elle, est une fonction Public, mais non partagée. Public Function Marche() Console.Writeline("Le chien marche...") End Function End Class End Namespace Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   4.  Fonctions Partagées Démarrons notre module, l'exécution se fera à partir de la procédure Main(): Public Module modMain Sub Main() 'Nous pouvons faire appel à la méthode Aboie() directement, 'Sans passer par la création d'un objet de type Chien, 'puisque qu'elle est partagée Animaux.Chien.Aboie() 'Par contre, nous ne pourrons utiliser la méthode Marche() 'que suite à la création d'un objet, puisque celle-ci 'n'est pas partagée. Dim Jimmy as Animaux.Chien Jimmy = New Animaux.Chien() Jimmy.Marche() End sub End Module Nous pouvons déclarer la procédure Main() elle-même comme une méthode partagée dans une classe: c'est-à-dire  Shared SubMain(). Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   Nous pouvons déclarer la procédure Main() elle-même comme une méthode partagée dans une classe: c'est-à-dire Shared Sub Main(). Essayez de déplacer cette procédure Main() du module dans la classe Chien ci-dessus et testez le résultat! Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   5.  La Surcharge La surcharge est une technique simple à utiliser, qui permet d'utiliser le  même nom de fonction avec des Paramètres de différents types . Voyons ce que ça donne sur la classe Addition dans l'exemple qui suit. Comme d'habitude, nous avons besoin de l'espace de noms System: Imports System Class Addition Ensuite,ajoutons 2 fonctions Add(). La première additionne 2 entiers...(Convert.ToString est l'équivalent de la Fonction CStr de VB6) Overloads  Public Sub Add (A as Integer, B as Integer) Console.Writeline("Adding Integers :" +Convert.ToString(a+b)) End Sub ...et la deuxième concatène 2 chaînes de caractères: Overloads  Public Sub Add (A as String, B as String) Console.Writeline("Adding Strings :" +a+b) End Sub Et les 2 ont le même noms? Ceci est possible uniquement car nous avons utilisé le mot-clé  Overloads  dans leur déclaration, pour justement spécifier la  surcharge ! Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   5.  La Surcharge Ici,voyons ce que ça donne avec la procédure Main() suivante, incluse dans le module de classe Addition(et donc Déclarée en tant que partagée, cf paragraphe précédent): Shared Sub Main() Dim monCalcul as Addition 'Créée l'objet monCalcul= New Addition 'Appel de la première fonction... monCalcul.Add(10,20) '...et appel de la seconde: monCalcul.Add ("Bonjour", "comment allez-vous?") End Sub End Class Compléments: Signature C'est ainsi que l'on appelle chaque séquence distincte de paramètres, c'est-à-dire chaque manière de faire Appel à la méthode surchargée. Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   6.  L'Héritage L'héritage est un mécanisme par lequel une  classe dérivée (ou classe fille)  hérite de toutes les caractéristiques de Sa classe de base (ou classe mère ). En bref, il est possible de créer via héritage vos classes à partir d'une classe existante: Il suffit pour cela d'utiliser le mot-clé  Inherits . Voici un exemple simple. Commençons par importer l'espace de noms habituel: Imports System Voici notre classe de base: Class Humain 'Quelque chose que la plupart des êtres humains font: Public Sub Marche() Console.Writeline("Je marche...") End Sub End Class Et maintenant, créons une classe fille nommée  Developpeur : Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   6.  L'Héritage Class Developpeur Inherits Humain 'Nous avons donc déjà accès à la méthode Marche() définie ci-dessus 'Et voici une autre qui illustre ce que certains programmeurs font parfois: Public Sub PiqueDuCode() Console.Writeline("Je pompe du code...") End Sub End Class Ce qui nous permet de coder la procédure  MainClass()  suivante: Class MainClass 'Notreprocédureprincipale: Shared Sub Main() Dim Tom as Developpeur Tom= New Developpeur 'Cet appel est valide puisque Developpeur a accès à cette fonction 'héritée de la classe Humain: Tom.Marche() 'Celui-ci également puisque Tom est une instance de la classe Developpeur Tom.PiqueDuCode() End Sub End Class Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   6.  L'Héritage Compléments: MustInherit Ce mot clé indique qu'une classe ne peut être instanciée, et qu'elle ne peut donc être utilisée que comme Classe de base. Par exemple, si vous déclarez la classe Humain entant que  "MustInherit Humain",  alors vous Ne pourrez pas créer d'objets de type Humain à partir de cette classe, mais seulement à partir de classes dérivées. NotInheritable A l'inverse, ce mot-clé indique que cette classe ne peut pas être héritée, c'est-à-dire servir de classe de base. Par exemple, si vous déclarez la classe Humain entant que  "NotInheritable Humain ", aucune classe dérivée Ne pourra lui être créée. Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   7.  La Rédéfinition Par défaut, une classe dérivée hérite des méthodes de sa classe de base. Mais si une propriété ou une méthode Doit avoir un comportement différent dans la classe fille, elle doit y être redéfinie! En fait, il suffit de définir une nouvelle implémentation de la méthode dans la classe dérivée: Le mot-clé  Overridable  est utilisé pour préciser qu'une méthode peut être redéfinie, Et le mot-clé  Overrides  est quant à lui utilisé pour indiquer quelles méthodes sont redéfinies. Étudions ceci sur un exemple, à partir de notre classe Humain: Imports System Class Humain 'Parle() est redéfinissable: Overridable  Public Sub Parle() Console.Writeline("Je parle") End Sub End Class Maintenant,créons une classe dérivée de Humain: Un Indien (Indien) est un humain (Humain) : Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   7.  La Rédéfinition Class Indien Inherits Humain 'Notre Indien parle l'Hindi, la langue nationale en Inde 'la méthode Parle() qui suit redéfinit laméthode Parle() de la classe de base (Humain) Overrides Public Sub Parle() Console.Writeline("Je parle Hindou") End Sub End Class Important  : Évidemment, un appel de Parle() à partir d'un objet d'une classe dérivée va faire appel à la méthode Parle() de cette même classe. Si vous souhaitez faire référence à la méthode Parle() de la classe de base, il vous suffit alors d'utiliser le mot-clé  MyBase , comme ceci: Mybase.Parle() Voici une classe pour tester nos exemples: Class MainClass 'Notre procédure principale: Shared Sub Main() 'Tom est un humain Dim Tom as Humain Tom= New Humain Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   'Tony est humain, et plus précisement Indien Dim Tony as Indien Tony = New Indien 'Voici un appel à la méthode Parle() de la classe Humain: Tom.Parle() 'Et un appel de la méthode Parle() de la classe Indien Tony.Parle() End Sub End Class 7.  La Rédéfinition Voici une classe pour tester nos exemples: Class MainClass 'Notre procédure principale: Shared Sub Main() 'Tom est un humain Dim Tom as Humain Tom= New Humain Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   7.  La Rédéfinition Compléments: MustOverride Ce mot clé indique qu'une méthode doit être redéfinie pour chaque classe fille. Par exemple, si dans la classe Humain, vous déclarez la méthode Parle entant que "MustOverride Parle", chacune des classes filles devra Redéfinir cette méthode. NotOverridable A l'inverse, ce mot-clé indique que cette procédure ne peut être redéfinie dans une classe fille. Par exemple, si Dans la classe Humain, vous déclarez la méthode Parle entant que "NotOverridable Parle", aucune classe fille Ne pourra redéfinir cette méthode. Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   8.  Le Polymorphisme d'héritage Le polymorphisme est un mécanisme via lequel un objet peut prendre plus d'une forme. Par exemple, si vous avez Une classe de base nommée Humain, un objet de type Humain peut être utilisé pour contenir un objet de n'importe Laquelle de ses classes dérivées. Quand vous appelez une méthode à partir de votre objet, le système déterminera Automatiquement le type de l'objet afin d'appeler la fonction appropriée. Imaginons par exemple une méthode nommée Parle() dans la classe de base Humain. Créons ensuite une classe Fille et redéfinissons-y la méthode Parle(). Puis créez un objet de la classe fille et affectez-lui la variable de la Classe mère: maintenant, si vous faites appel à la méthode Parle() à partir de cette variable, ce sera celle définie Dans votre classe fille qui sera appelée. Au contraire, si vous affectez à cette variable un objet de la classe mère, alors ce sera la méthode Parle() de la Classe mère qui sera appelée. Ceci est déterminé lors de la compilation, c'est ce qu'on appelle une liaison tardive. Reprenons l'exemple du paragraphe précédent: la différence se situe dans la procédure Shared Sub Main(), de la Classe MainClass. Étudions le code pour voir ce qui a changé: Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   8.  Le Polymorphisme d'héritage Import Systems Class Humain 'Parle() peut être redéfinie: Overridable Public Sub Parle() Console.Writeline("Je parle") End Sub End Class Maintenant, créons une classe dérivée de Humain: Un Indien (Indien) est un humain (Humain): Class Indien Inherits Humain 'Notre Indien parle l'Hindi, la langue nationale en Inde 'la méthode Parle() qui suit redéfinit la méthode Parle() de la classe de base (Humain) Overrides Public Sub Parle() Console.Writeline("Je parle Hindou") End Sub End Class Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   8.  Le Polymorphisme d'héritage Étudions soigneusement le code suivant: Class MainClass 'Notre fonction principale: Shared Sub Main() 'Tom est un humain (classe de base) Dim Tom as Humain 'Affectons-lui une variable de la classe fille Indien Tom= New Indian 'Cette affectation est correcte, car la classe Indien est fille de la  classe Humain. 'Puis faisons appel à la méthode Parle comme ceci: Tom.Parle() End Sub End Class Sur le dernier appel (Tom.Parle()), quelle procédure va être exécutée? Celle de la classe Indien, oubien celle  de La classe Humain? Cette question est pertinente, car Tom a été déclaré entant qu'Humain, mais un objet de type Indien lui a été affecté. Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   8.  Le Polymorphisme d'héritage La réponse est : c'est la méthode  Parle() de la classe Indien  va être appelée. Ceci parce que, comme la plupart des langages orientés objet, Vb.NET peut automatiquement détecter le type de l'objet assigné à la variable appartenant à la classe de base: c'est ce que l'on appelle le Polymorphisme. Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   9. Constructeurs et Destructeurs Un  constructeur (Constructor)  est une procédure spéciale qui est  automatiquement exécutée quand un objet est créé . Une telle procédure se nomme  New (). Les constructeurs peuvent faire l'objet De surcharge mais contrairement aux autres méthodes, le mot clé  Overloads  n'est pas requis. Par opposition, un  destructeur (Destructor)  est une procédure qui est  automatiquement exécutée à la mort de l'objet . Une telle procédure se nomme  Finalize (). EnVB6, ces procédures étaient déjà disponibles, elles se Nommaient Class_Initialize() et Class_Terminate(). Démarrons l'étude d'un exemple, avec la classe Chien: Imports System ClassChien 'La variable age Private Age as integer Voici un constructeur: Public Sub New() Console.Writeline("Un chien est né") Age=0 End Sub Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   Et grâce à la surcharge, un 2° exemple de constructeur (avec paramètre cette fois-ci): 9. Constructeurs et Destructeurs Public Sub New (val as Integer) Console.Writeline("Nouveau chien dont l'âge est" +Convert.ToString(val)) Age=val End Sub Voici le code du destructeur, suivi de la procédure habituelle Main(): Overrides Protected Sub Finalize() Console.Writeline("Paf le chien...(désolé)") End Sub 'La fonction principale: Shared Sub Main() Dim Jimmy,Jacky as Chien 'Création des objets 'Ceci va appeler le contructeur n°1 Jimmy= New Chien 'Et ceci le contructeur n°2 Jacky = New Chien(10) End Sub End Class Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   La destruction intervient automatiquement enfin de portée ou de programme, grâce au  Garbage Collector . Il est Possible de faire le ménage vous-même en détruisant vos objets. 9. Constructeurs et Destructeurs Ex: Jimmy = Nothing Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   10. Les Propriétés Pour gérer les données de vos objets, vous avez le choix entre des champs ou des propriétés. Mais alors que les Champs sont de simples variables publiques, les propriétés utilisent des procédures pour encadrer la lecture et la Mise à jour des données (cf.la définition d'encapsulation). Ce sont les mots-clé Get (lecture) et Set (mise à jour) Qui sont utilisées pour la déclaration de ces procédures. Étudions l'exemple suivant: Imports System Public Class Chien 'Utilisons une variale privée pour l'âge: Private mAgeDuChien as Integer Et voici nos procédures Property : Public Property Age() AsInteger 'Lecture de l'âge: Get Console.Writeline("Getting Property") Return mAgeDuChien End Get 'MAJ de l'âge: Set (ByVal Value As Integer) Console.Writeline("SettingProperty") mAgeDuChien=Value End Set End Property End Class Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   Voyons comment utiliser ces procédures: 10. Les Propriétés Class MainClass 'Début du programme: Shared Sub Main() 'Créons un objet: Dim Jimmy as Chien Jimmy = New Chien 'Nous ne pouvons accéder directement à la variable  mAgeDuChien, 'nous devons utiliser la procédure Age(). 'Affectons-lui une valeur. La procédure Set Age sera mise à  contribution: Jimmy.Age=30 'Récupérons maintenant cette valeur: c'est autour de la  procédure GetAge de travailler: Dim curAge=Jimmy.Age() End Sub End Class Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   11. Une petite application Passons maintenant à l'étude d'un programme basique. Importons tout  d'abord les espaces de noms requis: Imports System Imports System.ComponentModel Imports System.Windows.Forms Imports System.Drawing 'Nous allons créer une classe dérivée de la classe System.Windows.Forms.Form 'En effet, Forms est un espace de noms inclus dans l'espace de noms Windows, 'lui-même inclus dans System, et Form est une classe de Forms. Public Class SimpleForm Inherits System.Windows.Forms.Form 'Notre constructeur: Public Sub New() 'On fait appel à la procédure de la classe mère: MyBase.New() Affectons la propriété Text de cette classe. Nous avons hérité cette propriété de la classe mère: Me.Text= "Bonjour,comment allez-vous?" End Sub End Class Public Class MainClass Shared Sub Main() 'Créons un objet à partir de cette classe SimpleForm: Dim sf as SimpleForm sf= New SimpleForm 'Et passons cet objet en argument à la procédure Run() pour démarrer: System.Windows.Forms.Application.Run(sf) End Sub End Class Dimitri LEMBOKOLO
PROGRAMMATION ORIENTEE OBJET   To be continued Dimitri LEMBOKOLO

Contenu connexe

En vedette

La Programmation Orienté Objet en VB.Net
La Programmation Orienté Objet en VB.NetLa Programmation Orienté Objet en VB.Net
La Programmation Orienté Objet en VB.Net
Ali Ben Amor
 
Table ronde AWEX sur l'Internationalisation - spécial jeunes sociétés du numé...
Table ronde AWEX sur l'Internationalisation - spécial jeunes sociétés du numé...Table ronde AWEX sur l'Internationalisation - spécial jeunes sociétés du numé...
Table ronde AWEX sur l'Internationalisation - spécial jeunes sociétés du numé...
ir. Carmelo Zaccone
 
ICT Guided Tour Asia Ed. 2015
ICT Guided Tour Asia Ed. 2015ICT Guided Tour Asia Ed. 2015
ICT Guided Tour Asia Ed. 2015
ir. Carmelo Zaccone
 
Smart home Cafe Numérique Mons
Smart home Cafe Numérique MonsSmart home Cafe Numérique Mons
Smart home Cafe Numérique Mons
ir. Carmelo Zaccone
 
Future Internet Week - IPv6 the way forward: IPv6 and security from a user’s ...
Future Internet Week - IPv6 the way forward: IPv6 and security from a user’s ...Future Internet Week - IPv6 the way forward: IPv6 and security from a user’s ...
Future Internet Week - IPv6 the way forward: IPv6 and security from a user’s ...
ir. Carmelo Zaccone
 
IPv6 within the wallon public sector, the AWT case V1
IPv6 within the wallon public sector, the AWT case V1IPv6 within the wallon public sector, the AWT case V1
IPv6 within the wallon public sector, the AWT case V1
ir. Carmelo Zaccone
 
mon PFA
mon PFAmon PFA
mon PFA
Ramzi Slimani
 
3-GSP presentation short
3-GSP presentation short3-GSP presentation short
3-GSP presentation short
ir. Carmelo Zaccone
 
Digital Wallonia - ICT in wallonia 2015 / Focus on Telecom
Digital Wallonia - ICT in wallonia 2015 / Focus on TelecomDigital Wallonia - ICT in wallonia 2015 / Focus on Telecom
Digital Wallonia - ICT in wallonia 2015 / Focus on Telecom
ir. Carmelo Zaccone
 
ICT Guided Tour Canadian Ed. '14
ICT Guided Tour Canadian Ed. '14ICT Guided Tour Canadian Ed. '14
ICT Guided Tour Canadian Ed. '14
ir. Carmelo Zaccone
 
Transition de l'AWT vers  IPv6
Transition de l'AWT vers  IPv6Transition de l'AWT vers  IPv6
Transition de l'AWT vers  IPv6
ir. Carmelo Zaccone
 
From IoT to wearable @ CETIC M2M/UNB
From IoT to wearable @ CETIC M2M/UNBFrom IoT to wearable @ CETIC M2M/UNB
From IoT to wearable @ CETIC M2M/UNB
ir. Carmelo Zaccone
 
Memoire final sfallou
Memoire final sfallouMemoire final sfallou
Memoire final sfallou
Serigne fallou ndiaye
 
Solution manager et non manager
Solution manager et non managerSolution manager et non manager
Solution manager et non manager
Simo El Azzouzi
 
La voix sur IP en Belgique et en Wallonie
La voix sur IP en Belgique et en WallonieLa voix sur IP en Belgique et en Wallonie
La voix sur IP en Belgique et en Wallonie
ir. Carmelo Zaccone
 
Toip slide
Toip slideToip slide
Toip slide
Dimitri LEMBOKOLO
 
Email des profs
Email des profsEmail des profs
Email des profs
Hicham Ben
 
memoire utilisation de Puppet et Nagios
memoire utilisation de Puppet et Nagiosmemoire utilisation de Puppet et Nagios
memoire utilisation de Puppet et Nagios
abouaalexis
 
Les Communications Unifiées
Les Communications UnifiéesLes Communications Unifiées
Les Communications Unifiées
ir. Carmelo Zaccone
 

En vedette (20)

La Programmation Orienté Objet en VB.Net
La Programmation Orienté Objet en VB.NetLa Programmation Orienté Objet en VB.Net
La Programmation Orienté Objet en VB.Net
 
Table ronde AWEX sur l'Internationalisation - spécial jeunes sociétés du numé...
Table ronde AWEX sur l'Internationalisation - spécial jeunes sociétés du numé...Table ronde AWEX sur l'Internationalisation - spécial jeunes sociétés du numé...
Table ronde AWEX sur l'Internationalisation - spécial jeunes sociétés du numé...
 
ICT Guided Tour Asia Ed. 2015
ICT Guided Tour Asia Ed. 2015ICT Guided Tour Asia Ed. 2015
ICT Guided Tour Asia Ed. 2015
 
Smart home Cafe Numérique Mons
Smart home Cafe Numérique MonsSmart home Cafe Numérique Mons
Smart home Cafe Numérique Mons
 
Poo
PooPoo
Poo
 
Future Internet Week - IPv6 the way forward: IPv6 and security from a user’s ...
Future Internet Week - IPv6 the way forward: IPv6 and security from a user’s ...Future Internet Week - IPv6 the way forward: IPv6 and security from a user’s ...
Future Internet Week - IPv6 the way forward: IPv6 and security from a user’s ...
 
IPv6 within the wallon public sector, the AWT case V1
IPv6 within the wallon public sector, the AWT case V1IPv6 within the wallon public sector, the AWT case V1
IPv6 within the wallon public sector, the AWT case V1
 
mon PFA
mon PFAmon PFA
mon PFA
 
3-GSP presentation short
3-GSP presentation short3-GSP presentation short
3-GSP presentation short
 
Digital Wallonia - ICT in wallonia 2015 / Focus on Telecom
Digital Wallonia - ICT in wallonia 2015 / Focus on TelecomDigital Wallonia - ICT in wallonia 2015 / Focus on Telecom
Digital Wallonia - ICT in wallonia 2015 / Focus on Telecom
 
ICT Guided Tour Canadian Ed. '14
ICT Guided Tour Canadian Ed. '14ICT Guided Tour Canadian Ed. '14
ICT Guided Tour Canadian Ed. '14
 
Transition de l'AWT vers  IPv6
Transition de l'AWT vers  IPv6Transition de l'AWT vers  IPv6
Transition de l'AWT vers  IPv6
 
From IoT to wearable @ CETIC M2M/UNB
From IoT to wearable @ CETIC M2M/UNBFrom IoT to wearable @ CETIC M2M/UNB
From IoT to wearable @ CETIC M2M/UNB
 
Memoire final sfallou
Memoire final sfallouMemoire final sfallou
Memoire final sfallou
 
Solution manager et non manager
Solution manager et non managerSolution manager et non manager
Solution manager et non manager
 
La voix sur IP en Belgique et en Wallonie
La voix sur IP en Belgique et en WallonieLa voix sur IP en Belgique et en Wallonie
La voix sur IP en Belgique et en Wallonie
 
Toip slide
Toip slideToip slide
Toip slide
 
Email des profs
Email des profsEmail des profs
Email des profs
 
memoire utilisation de Puppet et Nagios
memoire utilisation de Puppet et Nagiosmemoire utilisation de Puppet et Nagios
memoire utilisation de Puppet et Nagios
 
Les Communications Unifiées
Les Communications UnifiéesLes Communications Unifiées
Les Communications Unifiées
 

Similaire à Poo vb.net

09 visual basic .net - modules de classes-constructeurs, encapsulation, herit...
09 visual basic .net - modules de classes-constructeurs, encapsulation, herit...09 visual basic .net - modules de classes-constructeurs, encapsulation, herit...
09 visual basic .net - modules de classes-constructeurs, encapsulation, herit...
Hamza SAID
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
YasushiTsubakik
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
Duchess France
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
agnes_crepet
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
coursuniv
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
Mariem ZAOUALI
 
Alphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm.com Formation PowerShell : Niveau PerfectionnementAlphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
Amel Morchdi
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
kemenaran
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
cyrilgandon
 
Utilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérienceUtilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérience
louschwartz
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
Kalilou DIABY
 
Introduction au langage Ruby
Introduction au langage RubyIntroduction au langage Ruby
Introduction au langage Ruby
Julien Blin
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
julien pauli
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
Engineor
 
Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objet
kemenaran
 

Similaire à Poo vb.net (20)

09 visual basic .net - modules de classes-constructeurs, encapsulation, herit...
09 visual basic .net - modules de classes-constructeurs, encapsulation, herit...09 visual basic .net - modules de classes-constructeurs, encapsulation, herit...
09 visual basic .net - modules de classes-constructeurs, encapsulation, herit...
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Alphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm.com Formation PowerShell : Niveau PerfectionnementAlphorm.com Formation PowerShell : Niveau Perfectionnement
Alphorm.com Formation PowerShell : Niveau Perfectionnement
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Utilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérienceUtilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérience
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Introduction au langage Ruby
Introduction au langage RubyIntroduction au langage Ruby
Introduction au langage Ruby
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
PHP5 et Zend Framework
PHP5 et Zend FrameworkPHP5 et Zend Framework
PHP5 et Zend Framework
 
Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objet
 

Plus de Dimitri LEMBOKOLO

Openfire + Active Directory sur Windows 2008 R2
Openfire + Active Directory sur  Windows 2008 R2Openfire + Active Directory sur  Windows 2008 R2
Openfire + Active Directory sur Windows 2008 R2
Dimitri LEMBOKOLO
 
Comment enlever un mot de passe admin win 7 sans logiciel
Comment enlever un mot de passe admin win 7 sans logicielComment enlever un mot de passe admin win 7 sans logiciel
Comment enlever un mot de passe admin win 7 sans logiciel
Dimitri LEMBOKOLO
 
Installation cisco call manager 6.0
Installation cisco call manager 6.0Installation cisco call manager 6.0
Installation cisco call manager 6.0
Dimitri LEMBOKOLO
 
Installation de fedora 11
Installation de fedora 11Installation de fedora 11
Installation de fedora 11
Dimitri LEMBOKOLO
 
VPNIPSec site to site
VPNIPSec site to siteVPNIPSec site to site
VPNIPSec site to site
Dimitri LEMBOKOLO
 
Tuto Serveur Vocal Interactif (SVI ou IVR)
Tuto Serveur Vocal Interactif  (SVI ou IVR)Tuto Serveur Vocal Interactif  (SVI ou IVR)
Tuto Serveur Vocal Interactif (SVI ou IVR)
Dimitri LEMBOKOLO
 
Tuto VP IPSEC Site-to-site
Tuto VP IPSEC Site-to-siteTuto VP IPSEC Site-to-site
Tuto VP IPSEC Site-to-site
Dimitri LEMBOKOLO
 
Tutoriel nat pat
Tutoriel nat patTutoriel nat pat
Tutoriel nat pat
Dimitri LEMBOKOLO
 
Tuto ToIP (Trunk SIP, IAX, Trunk CME - Asterisk)
Tuto ToIP (Trunk SIP, IAX, Trunk CME - Asterisk) Tuto ToIP (Trunk SIP, IAX, Trunk CME - Asterisk)
Tuto ToIP (Trunk SIP, IAX, Trunk CME - Asterisk)
Dimitri LEMBOKOLO
 
Messagerie
MessagerieMessagerie
Messagerie
Dimitri LEMBOKOLO
 
Lightweight directory access protocol
Lightweight directory access protocolLightweight directory access protocol
Lightweight directory access protocol
Dimitri LEMBOKOLO
 
GNS3, VoIP, ToIP
GNS3, VoIP, ToIPGNS3, VoIP, ToIP
GNS3, VoIP, ToIP
Dimitri LEMBOKOLO
 
Rapport bluetooth
Rapport bluetooth Rapport bluetooth
Rapport bluetooth
Dimitri LEMBOKOLO
 
Implémentation d'openvpn
Implémentation d'openvpnImplémentation d'openvpn
Implémentation d'openvpn
Dimitri LEMBOKOLO
 
Dhcp sous fedora 11
Dhcp sous fedora 11Dhcp sous fedora 11
Dhcp sous fedora 11
Dimitri LEMBOKOLO
 
Configuration dns
Configuration dnsConfiguration dns
Configuration dns
Dimitri LEMBOKOLO
 
Installation et configuration d'ads 2003
Installation et configuration d'ads 2003Installation et configuration d'ads 2003
Installation et configuration d'ads 2003
Dimitri LEMBOKOLO
 
Installation de windows 2003serveur
Installation de windows 2003serveurInstallation de windows 2003serveur
Installation de windows 2003serveur
Dimitri LEMBOKOLO
 
Installation de wink sous fedora
Installation de wink sous fedoraInstallation de wink sous fedora
Installation de wink sous fedora
Dimitri LEMBOKOLO
 
Installation et configuration de openfire
Installation et configuration de openfireInstallation et configuration de openfire
Installation et configuration de openfire
Dimitri LEMBOKOLO
 

Plus de Dimitri LEMBOKOLO (20)

Openfire + Active Directory sur Windows 2008 R2
Openfire + Active Directory sur  Windows 2008 R2Openfire + Active Directory sur  Windows 2008 R2
Openfire + Active Directory sur Windows 2008 R2
 
Comment enlever un mot de passe admin win 7 sans logiciel
Comment enlever un mot de passe admin win 7 sans logicielComment enlever un mot de passe admin win 7 sans logiciel
Comment enlever un mot de passe admin win 7 sans logiciel
 
Installation cisco call manager 6.0
Installation cisco call manager 6.0Installation cisco call manager 6.0
Installation cisco call manager 6.0
 
Installation de fedora 11
Installation de fedora 11Installation de fedora 11
Installation de fedora 11
 
VPNIPSec site to site
VPNIPSec site to siteVPNIPSec site to site
VPNIPSec site to site
 
Tuto Serveur Vocal Interactif (SVI ou IVR)
Tuto Serveur Vocal Interactif  (SVI ou IVR)Tuto Serveur Vocal Interactif  (SVI ou IVR)
Tuto Serveur Vocal Interactif (SVI ou IVR)
 
Tuto VP IPSEC Site-to-site
Tuto VP IPSEC Site-to-siteTuto VP IPSEC Site-to-site
Tuto VP IPSEC Site-to-site
 
Tutoriel nat pat
Tutoriel nat patTutoriel nat pat
Tutoriel nat pat
 
Tuto ToIP (Trunk SIP, IAX, Trunk CME - Asterisk)
Tuto ToIP (Trunk SIP, IAX, Trunk CME - Asterisk) Tuto ToIP (Trunk SIP, IAX, Trunk CME - Asterisk)
Tuto ToIP (Trunk SIP, IAX, Trunk CME - Asterisk)
 
Messagerie
MessagerieMessagerie
Messagerie
 
Lightweight directory access protocol
Lightweight directory access protocolLightweight directory access protocol
Lightweight directory access protocol
 
GNS3, VoIP, ToIP
GNS3, VoIP, ToIPGNS3, VoIP, ToIP
GNS3, VoIP, ToIP
 
Rapport bluetooth
Rapport bluetooth Rapport bluetooth
Rapport bluetooth
 
Implémentation d'openvpn
Implémentation d'openvpnImplémentation d'openvpn
Implémentation d'openvpn
 
Dhcp sous fedora 11
Dhcp sous fedora 11Dhcp sous fedora 11
Dhcp sous fedora 11
 
Configuration dns
Configuration dnsConfiguration dns
Configuration dns
 
Installation et configuration d'ads 2003
Installation et configuration d'ads 2003Installation et configuration d'ads 2003
Installation et configuration d'ads 2003
 
Installation de windows 2003serveur
Installation de windows 2003serveurInstallation de windows 2003serveur
Installation de windows 2003serveur
 
Installation de wink sous fedora
Installation de wink sous fedoraInstallation de wink sous fedora
Installation de wink sous fedora
 
Installation et configuration de openfire
Installation et configuration de openfireInstallation et configuration de openfire
Installation et configuration de openfire
 

Dernier

Les Vidéoprojecteurs : Guide d'achat et Comparatif
Les Vidéoprojecteurs : Guide d'achat et ComparatifLes Vidéoprojecteurs : Guide d'achat et Comparatif
Les Vidéoprojecteurs : Guide d'achat et Comparatif
Top-plans
 
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
Faga1939
 
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Chadi Kammoun
 
La Gestion des risques selon ISO 27005.pdf
La Gestion des risques selon ISO 27005.pdfLa Gestion des risques selon ISO 27005.pdf
La Gestion des risques selon ISO 27005.pdf
SoniazghalKallel
 
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
Nicolas Georgeault
 
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
InnovaSter-Trade Ltd.
 

Dernier (6)

Les Vidéoprojecteurs : Guide d'achat et Comparatif
Les Vidéoprojecteurs : Guide d'achat et ComparatifLes Vidéoprojecteurs : Guide d'achat et Comparatif
Les Vidéoprojecteurs : Guide d'achat et Comparatif
 
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
INTELLIGENCE ARTIFICIELLE + INFORMATIQUE QUANTIQUE = LA PLUS GRANDE RÉVOLUTIO...
 
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 16 (PFE Licence)
 
La Gestion des risques selon ISO 27005.pdf
La Gestion des risques selon ISO 27005.pdfLa Gestion des risques selon ISO 27005.pdf
La Gestion des risques selon ISO 27005.pdf
 
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
M365 Community Days MTL 2024 - Découverte du Process Mining et du Task Mining...
 
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
Technologie hydrostatique, innovation pour la stérilisation des aliments : HI...
 

Poo vb.net

  • 1. PROGRAMMATION ORIENTEE OBJET Dimitri LEMBOKOLO
  • 2. PROGRAMMATION ORIENTEE OBJET 1. Introduction 2. Un peu de vocabulaire 3. Portées de vos déclarations 4. Fonctions Partagées 5. La Surcharge 6. L'Héritage 7. La Rédéfinition 8. Le Polymorphisme d'héritage 9. Constructeurs et Destructeurs 10. Les Propriétés 11. Une petite application Dimitri LEMBOKOLO
  • 3. PROGRAMMATION ORIENTEE OBJET Cet leçon traite des fonctionnalités basiques de la POO en VB.Net. En effet,une des évolutions notables de VB.Net est d'être totalement orienté objet,contrairement aux versions précédentes de VB. 1. Introduction 1. Aborder de manière exhaustive la POO en VB.NET, 2. Apprendre comment sont utilisées les techniques de la POO en VB.NET 3.Expliquer simplement les concepts suivants: Création et utilisation de classes et d'objets en VB.NET, Fonctions Partagées, Encapsulation,Abstraction,Héritage et Polymorphisme, Surcharge et Redéfinition, Constructeurs et Destructeurs. Les objectifs attendus sont : Dimitri LEMBOKOLO
  • 4. PROGRAMMATION ORIENTEE OBJET 2. Un peu de vocabulaire Espace de Noms En VB.NET,les classes et autres structures de données concernant un domaine bien défini sont incluses dans un Espace de noms(ou NameSpace ). Vous pouvez utiliser les classes appartenant à un espace de noms simplement En important cet espace: ceci se fait par le biais du mot-clé Imports . Le FrameWork.NET fournit un ensemble très fournis de classes pré-définies, groupées ensemble dans divers Espaces de noms. Dans cette leçon, nous utiliserons le namespace System . Importons le namespace System(déjà disponible dans .NET). Dimitri LEMBOKOLO
  • 5. PROGRAMMATION ORIENTEE OBJET 2. Un peu de vocabulaire Classes Vous avez déjà entendu parler des classes? Pour faire simple, une classe ( Class ) est la définition d'un objet de Tous les jours. Par exemple, il est possible de définir une classe Humain afin de modéliser tous les êtres humains, Et une nommée Chien pour représenter les chiens. Les classes peuvent également gérer des méthodes : ce sont (en général) des procédures concernant le fonctionnement de l'objet à modéliser. Voici l'instruction de déclaration d'un espace de noms nommé Animaux: Namespace Animaux Chien est une classe appartenant à l'espace de noms Animaux : Class Chien Dimitri LEMBOKOLO
  • 6. PROGRAMMATION ORIENTEE OBJET 2. Un peu de vocabulaire Classes (Suite) Et Aboie est une procédure de cette classe: Function Aboie() Console.Writeline("Le chien aboie !") End Function Namespace Animaux Class Chien Function Aboie() Console.Writeline("Lechien aboie !") End Function End Class End Namespace En résumé Dimitri LEMBOKOLO
  • 7. PROGRAMMATION ORIENTEE OBJET 2. Un peu de vocabulaire Objet Un objet est une instance de classe. Par exemple, Jimmy est un objet de type Chien. Pour illustrer ceci, nous Allons créer un objet dans la section suivante. Dimitri LEMBOKOLO
  • 8. PROGRAMMATION ORIENTEE OBJET 2. Un peu de vocabulaire Module Il est possible d'utiliser des modules pour écrire des fonctions ou procédures publiques : Un Module est donc un Groupe de fonctions. À la différence d'une fonction appartenant à une classe, une fonction publique d'un module Peut être appelée à tout endroit du code . VB implémente les fonctions (Function) et les procédures ( Sub ). La seule Différence entre une fonction et une procédure est que contrairement à une fonction, une procédure ne retourne Pas de valeur. Public Module modMain L'exécution va démarrer à partir de la procédure Main(): Sub Main() 'Appelle la fonction ci-dessous: MaFonction() End sub Dimitri LEMBOKOLO
  • 9. PROGRAMMATION ORIENTEE OBJET 2. Un peu de vocabulaire Module (Suite) MaFonction : une petite fonction afin d'utiliser la classe Chien: Function MaFonction() 'Voici comment déclarer une variable nommée Jimmy, de type chien Chien: 'Nous spécifions Animaux.Chien car la classe Chien fait partie de l'espace de Nom Animaux (cf.plus haut) Dim Jimmy as Animaux.Chien 'Crée l'objet. Contrairement à VB6, le mot clé Set n'est plus utilisé! Jimmy= New Animaux.Chien() 'Voici une autre manière de créer un objet: 'Dim Jimmy as New Chien 'Appel de la fonction principale de Jimmy Jimmy.Aboie() End Function End module Dimitri LEMBOKOLO
  • 10. PROGRAMMATION ORIENTEE OBJET 3. Portées de vos déclarations Les principales portées sont Public, Private, Friend et Protected . Une classe peut contenir des attributs ou des méthodes, qui peuvent être de chacuns des 4 types pré-cités: - Ceux qui sont Public sont accessibles suite à la création de l'objet. - Ceux qui sont Private ou Protected ne sont accessibles qu'à l'intérieur même du module de classe. - Les membres Protected sont similaires aux Private, mais ils ont une particularité en cas d'héritage. Ce point sera Abordé plus tard dans la leçon correspondante. - Les membres Friend ne sont accessibles qu'à l'intérieur du projet, et pas par des éléments extérieurs au projet en cours. Dimitri LEMBOKOLO
  • 11. PROGRAMMATION ORIENTEE OBJET 3. Portées de vos déclarations Continuons sur notre exemple et importons l'espace de noms System: Imports System L'instruction de début de notre espace de noms : Animaux (Tout le code qui suit en fera partie) Namespace Animaux Chien est une classe appartenant à l'espace de noms Animaux: Public Class Chien 'Voiciunevariablepublic Public AgeDuChien as Integer Aboie est une fonction publique (Public) de notre classe Chien: Public Function Aboie() Console.Writeline("Le chien aboie !") End Function Dimitri LEMBOKOLO
  • 12. PROGRAMMATION ORIENTEE OBJET 3. Portées de vos déclarations Et Marche en est une autre, déclarée en privée (Private): ------------------------------ Private Function Marche() Console.Writeline("Le chien marche") End Function End Class End Namespace Passons maintenant à notre module: Public Module modMain Dimitri LEMBOKOLO
  • 13. PROGRAMMATION ORIENTEE OBJET Sub Main() 'Appelle notre fonction (cf.ci-dessus) MaFonction() End sub 'MaFonction : Appelée à partir de la procédure Main() Function MaFonction() Dim Jimmy as Animaux.Chien Jimmy= New Animaux.Chien() 'Ce qui suit fonctionnera, car Aboie et AgeDuChien sont Public Jimmy.Aboie() jimmy.AgeDuChien=10 'Par contre, l'appel de la fonction Marche() échouera, car il se situe en dehors du module de classe Chien 'Donc le code qui suit est incorrect : décommentez-le 'et essayez de compiler, vous obtiendrez une erreur! 'Jimmy.Marche() End Function End Module Public Module modMain 3. Portées de vos déclarations Dimitri LEMBOKOLO
  • 14. PROGRAMMATION ORIENTEE OBJET Vocabulaire: 3. Portées de vos déclarations L'encapsulation La gestion de données et des procédures associées à une notion dans une classe s'appelle l'encapsulation. Data Hiding ou Abstraction Habituellement,dans une classe, les variables gérant les données, comme AgeDuChien, sont déclarée en tant Que Private. Ce sont les procédures Property qui sont utilisée pour accéder à ces données. La protection des Données d'un objet en dehors du module de classe est appelée Abstraction, oubien encore DataHiding. Ceci Sert à prévenir des modifications "accidentelles« des données d'un objet via des fonctions externes au module De classe. Dimitri LEMBOKOLO
  • 15. PROGRAMMATION ORIENTEE OBJET 4. Fonctions Partagées Dans une classe, les membres partagés (propriétés et méthodes) peuvent être appelés directement, sans passer Par l'instanciation d'un objet (comme précédement décrit). Le mot-clé Shared indique en effet que la propriété ou Méthode ne s'appuie pas sur un objet spécifique mais bien sur la classe elle-même, et qu'elle peut être appelée Directement à partir de cette classe, même si celle-ci n'a aucune instance en cours. Une propriété Shared contient quant à elle une valeur commune à tous les objets d'une classe. Imports System Namespace Animaux Class Chien ‘ Et Aboie est maintenant une fonction Public et Shared de cette classe Public Shared Function Aboie() Console.Writeline("Le chien aboie!") End Function ‘ Marche,quant à elle, est une fonction Public, mais non partagée. Public Function Marche() Console.Writeline("Le chien marche...") End Function End Class End Namespace Dimitri LEMBOKOLO
  • 16. PROGRAMMATION ORIENTEE OBJET 4. Fonctions Partagées Démarrons notre module, l'exécution se fera à partir de la procédure Main(): Public Module modMain Sub Main() 'Nous pouvons faire appel à la méthode Aboie() directement, 'Sans passer par la création d'un objet de type Chien, 'puisque qu'elle est partagée Animaux.Chien.Aboie() 'Par contre, nous ne pourrons utiliser la méthode Marche() 'que suite à la création d'un objet, puisque celle-ci 'n'est pas partagée. Dim Jimmy as Animaux.Chien Jimmy = New Animaux.Chien() Jimmy.Marche() End sub End Module Nous pouvons déclarer la procédure Main() elle-même comme une méthode partagée dans une classe: c'est-à-dire Shared SubMain(). Dimitri LEMBOKOLO
  • 17. PROGRAMMATION ORIENTEE OBJET Nous pouvons déclarer la procédure Main() elle-même comme une méthode partagée dans une classe: c'est-à-dire Shared Sub Main(). Essayez de déplacer cette procédure Main() du module dans la classe Chien ci-dessus et testez le résultat! Dimitri LEMBOKOLO
  • 18. PROGRAMMATION ORIENTEE OBJET 5. La Surcharge La surcharge est une technique simple à utiliser, qui permet d'utiliser le même nom de fonction avec des Paramètres de différents types . Voyons ce que ça donne sur la classe Addition dans l'exemple qui suit. Comme d'habitude, nous avons besoin de l'espace de noms System: Imports System Class Addition Ensuite,ajoutons 2 fonctions Add(). La première additionne 2 entiers...(Convert.ToString est l'équivalent de la Fonction CStr de VB6) Overloads Public Sub Add (A as Integer, B as Integer) Console.Writeline("Adding Integers :" +Convert.ToString(a+b)) End Sub ...et la deuxième concatène 2 chaînes de caractères: Overloads Public Sub Add (A as String, B as String) Console.Writeline("Adding Strings :" +a+b) End Sub Et les 2 ont le même noms? Ceci est possible uniquement car nous avons utilisé le mot-clé Overloads dans leur déclaration, pour justement spécifier la surcharge ! Dimitri LEMBOKOLO
  • 19. PROGRAMMATION ORIENTEE OBJET 5. La Surcharge Ici,voyons ce que ça donne avec la procédure Main() suivante, incluse dans le module de classe Addition(et donc Déclarée en tant que partagée, cf paragraphe précédent): Shared Sub Main() Dim monCalcul as Addition 'Créée l'objet monCalcul= New Addition 'Appel de la première fonction... monCalcul.Add(10,20) '...et appel de la seconde: monCalcul.Add ("Bonjour", "comment allez-vous?") End Sub End Class Compléments: Signature C'est ainsi que l'on appelle chaque séquence distincte de paramètres, c'est-à-dire chaque manière de faire Appel à la méthode surchargée. Dimitri LEMBOKOLO
  • 20. PROGRAMMATION ORIENTEE OBJET 6. L'Héritage L'héritage est un mécanisme par lequel une classe dérivée (ou classe fille) hérite de toutes les caractéristiques de Sa classe de base (ou classe mère ). En bref, il est possible de créer via héritage vos classes à partir d'une classe existante: Il suffit pour cela d'utiliser le mot-clé Inherits . Voici un exemple simple. Commençons par importer l'espace de noms habituel: Imports System Voici notre classe de base: Class Humain 'Quelque chose que la plupart des êtres humains font: Public Sub Marche() Console.Writeline("Je marche...") End Sub End Class Et maintenant, créons une classe fille nommée Developpeur : Dimitri LEMBOKOLO
  • 21. PROGRAMMATION ORIENTEE OBJET 6. L'Héritage Class Developpeur Inherits Humain 'Nous avons donc déjà accès à la méthode Marche() définie ci-dessus 'Et voici une autre qui illustre ce que certains programmeurs font parfois: Public Sub PiqueDuCode() Console.Writeline("Je pompe du code...") End Sub End Class Ce qui nous permet de coder la procédure MainClass() suivante: Class MainClass 'Notreprocédureprincipale: Shared Sub Main() Dim Tom as Developpeur Tom= New Developpeur 'Cet appel est valide puisque Developpeur a accès à cette fonction 'héritée de la classe Humain: Tom.Marche() 'Celui-ci également puisque Tom est une instance de la classe Developpeur Tom.PiqueDuCode() End Sub End Class Dimitri LEMBOKOLO
  • 22. PROGRAMMATION ORIENTEE OBJET 6. L'Héritage Compléments: MustInherit Ce mot clé indique qu'une classe ne peut être instanciée, et qu'elle ne peut donc être utilisée que comme Classe de base. Par exemple, si vous déclarez la classe Humain entant que "MustInherit Humain", alors vous Ne pourrez pas créer d'objets de type Humain à partir de cette classe, mais seulement à partir de classes dérivées. NotInheritable A l'inverse, ce mot-clé indique que cette classe ne peut pas être héritée, c'est-à-dire servir de classe de base. Par exemple, si vous déclarez la classe Humain entant que "NotInheritable Humain ", aucune classe dérivée Ne pourra lui être créée. Dimitri LEMBOKOLO
  • 23. PROGRAMMATION ORIENTEE OBJET 7. La Rédéfinition Par défaut, une classe dérivée hérite des méthodes de sa classe de base. Mais si une propriété ou une méthode Doit avoir un comportement différent dans la classe fille, elle doit y être redéfinie! En fait, il suffit de définir une nouvelle implémentation de la méthode dans la classe dérivée: Le mot-clé Overridable est utilisé pour préciser qu'une méthode peut être redéfinie, Et le mot-clé Overrides est quant à lui utilisé pour indiquer quelles méthodes sont redéfinies. Étudions ceci sur un exemple, à partir de notre classe Humain: Imports System Class Humain 'Parle() est redéfinissable: Overridable Public Sub Parle() Console.Writeline("Je parle") End Sub End Class Maintenant,créons une classe dérivée de Humain: Un Indien (Indien) est un humain (Humain) : Dimitri LEMBOKOLO
  • 24. PROGRAMMATION ORIENTEE OBJET 7. La Rédéfinition Class Indien Inherits Humain 'Notre Indien parle l'Hindi, la langue nationale en Inde 'la méthode Parle() qui suit redéfinit laméthode Parle() de la classe de base (Humain) Overrides Public Sub Parle() Console.Writeline("Je parle Hindou") End Sub End Class Important : Évidemment, un appel de Parle() à partir d'un objet d'une classe dérivée va faire appel à la méthode Parle() de cette même classe. Si vous souhaitez faire référence à la méthode Parle() de la classe de base, il vous suffit alors d'utiliser le mot-clé MyBase , comme ceci: Mybase.Parle() Voici une classe pour tester nos exemples: Class MainClass 'Notre procédure principale: Shared Sub Main() 'Tom est un humain Dim Tom as Humain Tom= New Humain Dimitri LEMBOKOLO
  • 25. PROGRAMMATION ORIENTEE OBJET 'Tony est humain, et plus précisement Indien Dim Tony as Indien Tony = New Indien 'Voici un appel à la méthode Parle() de la classe Humain: Tom.Parle() 'Et un appel de la méthode Parle() de la classe Indien Tony.Parle() End Sub End Class 7. La Rédéfinition Voici une classe pour tester nos exemples: Class MainClass 'Notre procédure principale: Shared Sub Main() 'Tom est un humain Dim Tom as Humain Tom= New Humain Dimitri LEMBOKOLO
  • 26. PROGRAMMATION ORIENTEE OBJET 7. La Rédéfinition Compléments: MustOverride Ce mot clé indique qu'une méthode doit être redéfinie pour chaque classe fille. Par exemple, si dans la classe Humain, vous déclarez la méthode Parle entant que "MustOverride Parle", chacune des classes filles devra Redéfinir cette méthode. NotOverridable A l'inverse, ce mot-clé indique que cette procédure ne peut être redéfinie dans une classe fille. Par exemple, si Dans la classe Humain, vous déclarez la méthode Parle entant que "NotOverridable Parle", aucune classe fille Ne pourra redéfinir cette méthode. Dimitri LEMBOKOLO
  • 27. PROGRAMMATION ORIENTEE OBJET 8. Le Polymorphisme d'héritage Le polymorphisme est un mécanisme via lequel un objet peut prendre plus d'une forme. Par exemple, si vous avez Une classe de base nommée Humain, un objet de type Humain peut être utilisé pour contenir un objet de n'importe Laquelle de ses classes dérivées. Quand vous appelez une méthode à partir de votre objet, le système déterminera Automatiquement le type de l'objet afin d'appeler la fonction appropriée. Imaginons par exemple une méthode nommée Parle() dans la classe de base Humain. Créons ensuite une classe Fille et redéfinissons-y la méthode Parle(). Puis créez un objet de la classe fille et affectez-lui la variable de la Classe mère: maintenant, si vous faites appel à la méthode Parle() à partir de cette variable, ce sera celle définie Dans votre classe fille qui sera appelée. Au contraire, si vous affectez à cette variable un objet de la classe mère, alors ce sera la méthode Parle() de la Classe mère qui sera appelée. Ceci est déterminé lors de la compilation, c'est ce qu'on appelle une liaison tardive. Reprenons l'exemple du paragraphe précédent: la différence se situe dans la procédure Shared Sub Main(), de la Classe MainClass. Étudions le code pour voir ce qui a changé: Dimitri LEMBOKOLO
  • 28. PROGRAMMATION ORIENTEE OBJET 8. Le Polymorphisme d'héritage Import Systems Class Humain 'Parle() peut être redéfinie: Overridable Public Sub Parle() Console.Writeline("Je parle") End Sub End Class Maintenant, créons une classe dérivée de Humain: Un Indien (Indien) est un humain (Humain): Class Indien Inherits Humain 'Notre Indien parle l'Hindi, la langue nationale en Inde 'la méthode Parle() qui suit redéfinit la méthode Parle() de la classe de base (Humain) Overrides Public Sub Parle() Console.Writeline("Je parle Hindou") End Sub End Class Dimitri LEMBOKOLO
  • 29. PROGRAMMATION ORIENTEE OBJET 8. Le Polymorphisme d'héritage Étudions soigneusement le code suivant: Class MainClass 'Notre fonction principale: Shared Sub Main() 'Tom est un humain (classe de base) Dim Tom as Humain 'Affectons-lui une variable de la classe fille Indien Tom= New Indian 'Cette affectation est correcte, car la classe Indien est fille de la classe Humain. 'Puis faisons appel à la méthode Parle comme ceci: Tom.Parle() End Sub End Class Sur le dernier appel (Tom.Parle()), quelle procédure va être exécutée? Celle de la classe Indien, oubien celle de La classe Humain? Cette question est pertinente, car Tom a été déclaré entant qu'Humain, mais un objet de type Indien lui a été affecté. Dimitri LEMBOKOLO
  • 30. PROGRAMMATION ORIENTEE OBJET 8. Le Polymorphisme d'héritage La réponse est : c'est la méthode Parle() de la classe Indien va être appelée. Ceci parce que, comme la plupart des langages orientés objet, Vb.NET peut automatiquement détecter le type de l'objet assigné à la variable appartenant à la classe de base: c'est ce que l'on appelle le Polymorphisme. Dimitri LEMBOKOLO
  • 31. PROGRAMMATION ORIENTEE OBJET 9. Constructeurs et Destructeurs Un constructeur (Constructor) est une procédure spéciale qui est automatiquement exécutée quand un objet est créé . Une telle procédure se nomme New (). Les constructeurs peuvent faire l'objet De surcharge mais contrairement aux autres méthodes, le mot clé Overloads n'est pas requis. Par opposition, un destructeur (Destructor) est une procédure qui est automatiquement exécutée à la mort de l'objet . Une telle procédure se nomme Finalize (). EnVB6, ces procédures étaient déjà disponibles, elles se Nommaient Class_Initialize() et Class_Terminate(). Démarrons l'étude d'un exemple, avec la classe Chien: Imports System ClassChien 'La variable age Private Age as integer Voici un constructeur: Public Sub New() Console.Writeline("Un chien est né") Age=0 End Sub Dimitri LEMBOKOLO
  • 32. PROGRAMMATION ORIENTEE OBJET Et grâce à la surcharge, un 2° exemple de constructeur (avec paramètre cette fois-ci): 9. Constructeurs et Destructeurs Public Sub New (val as Integer) Console.Writeline("Nouveau chien dont l'âge est" +Convert.ToString(val)) Age=val End Sub Voici le code du destructeur, suivi de la procédure habituelle Main(): Overrides Protected Sub Finalize() Console.Writeline("Paf le chien...(désolé)") End Sub 'La fonction principale: Shared Sub Main() Dim Jimmy,Jacky as Chien 'Création des objets 'Ceci va appeler le contructeur n°1 Jimmy= New Chien 'Et ceci le contructeur n°2 Jacky = New Chien(10) End Sub End Class Dimitri LEMBOKOLO
  • 33. PROGRAMMATION ORIENTEE OBJET La destruction intervient automatiquement enfin de portée ou de programme, grâce au Garbage Collector . Il est Possible de faire le ménage vous-même en détruisant vos objets. 9. Constructeurs et Destructeurs Ex: Jimmy = Nothing Dimitri LEMBOKOLO
  • 34. PROGRAMMATION ORIENTEE OBJET 10. Les Propriétés Pour gérer les données de vos objets, vous avez le choix entre des champs ou des propriétés. Mais alors que les Champs sont de simples variables publiques, les propriétés utilisent des procédures pour encadrer la lecture et la Mise à jour des données (cf.la définition d'encapsulation). Ce sont les mots-clé Get (lecture) et Set (mise à jour) Qui sont utilisées pour la déclaration de ces procédures. Étudions l'exemple suivant: Imports System Public Class Chien 'Utilisons une variale privée pour l'âge: Private mAgeDuChien as Integer Et voici nos procédures Property : Public Property Age() AsInteger 'Lecture de l'âge: Get Console.Writeline("Getting Property") Return mAgeDuChien End Get 'MAJ de l'âge: Set (ByVal Value As Integer) Console.Writeline("SettingProperty") mAgeDuChien=Value End Set End Property End Class Dimitri LEMBOKOLO
  • 35. PROGRAMMATION ORIENTEE OBJET Voyons comment utiliser ces procédures: 10. Les Propriétés Class MainClass 'Début du programme: Shared Sub Main() 'Créons un objet: Dim Jimmy as Chien Jimmy = New Chien 'Nous ne pouvons accéder directement à la variable mAgeDuChien, 'nous devons utiliser la procédure Age(). 'Affectons-lui une valeur. La procédure Set Age sera mise à contribution: Jimmy.Age=30 'Récupérons maintenant cette valeur: c'est autour de la procédure GetAge de travailler: Dim curAge=Jimmy.Age() End Sub End Class Dimitri LEMBOKOLO
  • 36. PROGRAMMATION ORIENTEE OBJET 11. Une petite application Passons maintenant à l'étude d'un programme basique. Importons tout d'abord les espaces de noms requis: Imports System Imports System.ComponentModel Imports System.Windows.Forms Imports System.Drawing 'Nous allons créer une classe dérivée de la classe System.Windows.Forms.Form 'En effet, Forms est un espace de noms inclus dans l'espace de noms Windows, 'lui-même inclus dans System, et Form est une classe de Forms. Public Class SimpleForm Inherits System.Windows.Forms.Form 'Notre constructeur: Public Sub New() 'On fait appel à la procédure de la classe mère: MyBase.New() Affectons la propriété Text de cette classe. Nous avons hérité cette propriété de la classe mère: Me.Text= "Bonjour,comment allez-vous?" End Sub End Class Public Class MainClass Shared Sub Main() 'Créons un objet à partir de cette classe SimpleForm: Dim sf as SimpleForm sf= New SimpleForm 'Et passons cet objet en argument à la procédure Run() pour démarrer: System.Windows.Forms.Application.Run(sf) End Sub End Class Dimitri LEMBOKOLO
  • 37. PROGRAMMATION ORIENTEE OBJET To be continued Dimitri LEMBOKOLO