Mis à jour le mardi 23 mai 2017
  • 20 heures
  • Facile

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Les concepts de la POO

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Eh bien mes chers amis Zéros, nous allons passer à une partie qui va changer votre vie changer votre conception de la programmation.

Vous pensiez avoir déjà vu pas mal de choses en programmation, mais c'est loin d'être fini.

Vous vous souvenez que nous utilisons des objets, classes et autres méchantes choses qui ont hanté vos nuits.

Nous allons approfondir encore plus le concept d'objet, et nous allons apprendre à concevoir nos propres objets, ça vous dirait de construire votre propre voiture ?

Bref, je rigole, mais attaquons tout de suite.

Pourquoi changer ?

Je suppose qu'arrivés à cette partie vous vous demandez pourquoi vous changeriez de méthode de programmation. C'est vrai après tout, celle que nous utilisions fonctionnait très bien jusqu'à maintenant, alors pourquoi ne pas continuer ?

La méthodologie de programmation que nous avons vue jusqu'à présent est très bonne, nous avons même vu quels genres de programmes nous étions capables de réaliser en suivant ce concept. Mais d'un autre côté… il y a plein de choses qui sont impossibles ou très difficilement réalisables en programmant de cette façon.

Vous imaginez créer un jeu comme ça ? Même le plus basique des jeux de rôles vous prendrait des heures de travail pour un résultat que la POO vous apporterait sur un plateau.

Bref, je m'égare, je vais essayer de vous expliquer plus en détail ce qu'est le fabuleux monde de l'orienté objet.

Mesdames, Messieurs, Sa Majesté POO

Je rappelle pour ceux qui ont tendance à sauter des chapitres entiers : POO = programmation orientée objet.

Jusqu'à maintenant nous avons fait de la programmation procédurale. Pour faire simple, ce principe se base sur les procédures et fonctions. Vous avez remarqué que pendant tous nos TPs chaque « action » à effectuer était souvent décomposée en un sous-ensemble de fonctions et procédures (Sub). C'est cela la programmation procédurale.

Comme vous le voyez sur le schéma présent à la figure suivante, ces fonction s'imbriquent les unes aux autres. Pour le moment, aucun problème. Mais lorsque nous attaquerons de gros projets, cette structure va devenir un véritable capharnaüm .

Schéma de la programmation procédurale
Schéma de la programmation procédurale

C'est pourquoi Alan Kay se décida à révolutionner la façon de programmer en élaborant la programmation orientée objet. Comme son nom l'indique, nous allons créer des objets. Mais tout d'abord qu'est-ce qu'un objet programmatiquement parlant ?

Nos nouveaux amis : les objets

Dans la vie de tous les jours, vous voyez ce qu'est un objet ? Eh bien en programmation, le concept reste le même. Je m'explique.

Nous allons créer des objets qui vont nous permettre de rassembler des groupes de procédures ou fonctions appartenant à la même famille. En gros, si nous voulons contrôler une voiture, nous pouvons, avec nos connaissances actuelles, créer des dizaines de fonctions pour faire avancer, reculer, tourner, freiner notre voiture. Mais si nous en voulons une seconde nous allons être obligés de recommencer.

Avec le concept d'objet, nous programmons des fonctions qui seront liées à l'objet Voiture ; après peu importe que l'on décide d'en faire 1 ou 100, il n'y aura pas à recommencer. Imaginez un gâteau. Nous allons coder le « moule » du gâteau. Une fois créé, il sera capable de nous fabriquer des dizaines de gâteaux.

Vous avez utilisé pas mal d'objets jusqu'à maintenant, comme la classe File par exemple. Le moule de File nous a permis de créer des dizaines de File et de les manipuler séparément.

Retournons à notre voiture. Notre moule, en Visual Basic, se nomme la classe. La classe contient un constructeur (ce qui se produit lorsque l'on crée notre objet, en l'occurence notre voiture) et il y a la possibilité de mettre un destructeur (je pense que vous avez compris son utilité).

Ces méthodes seront présentes dans le fichier de la classe. On peut également ajouter beaucoup d'autres fonctions ou Sub à notre classe. Une fonction pour faire avancer notre voiture, une autre pour la faire reculer, nous pouvons également déclarer des variables qui seront utilisables seulement par cette classe.

Les accessibilités

Ce qu'il va bien falloir comprendre et essayer d'appréhender, c'est ce qui se passe en interne, dans la classe, et ce qui va se passer à l'extérieur.

Dans une classe, il y a une partie considérée comme privée, qui ne sera accessible que par elle-même. Cette partie contient des fonctions ou des variables, pour faire avancer la voiture. Il va falloir un énorme travail en interne pour qu'au final on ait juste à « appuyer sur une touche » pour que la voiture bouge.

Vient ensuite la partie publique, ce qui sera visible par le reste du programme. Sur notre voiture, la fonction Avancer sera publique, on pourra l'appeler de l'extérieur sous la forme MaVoiture.Avancer (où MaVoiture est la voiture créée avec le moule auparavant).

Mais pourquoi on ne met pas tout en public ?

Eh bien, en faisant ça, c'est le principe fondamental de l'orienté objet auquel vous vous attaquez : l'encapsulation. L'encapsulation est le terme employé pour dire : « ce que la classe fait en interne, c'est du domaine du privé ».

Pour la voiture, le moteur, la boîte de vitesses, etc., bref tout ce qui la fait fonctionner en « interne », ne doit pas être accessible à l'utilisateur, sinon il n'y a plus aucun intérêt. L'utilisateur doit seulement avoir accès aux pédales et au levier de vitesses.

Les fonctions se passant en interne sont les attributs, celles visibles depuis l'extérieur sont les méthodes.

Il existe d'autre mots « préfixes » que nous pourrons employer avant nos déclarations. Il y a Shared, Protected… Mais pour le moment intéressons-nous uniquement à Private et Public.

Les fichiers de classe

Je comprends tout à fait que cette notion d'objet soit très dure à appréhender, je ne vais donc pas vous brusquer pour le moment. Je vais juste vous expliquer comment nous allons créer nos objets. Personnellement je crée un nouveau fichier par objet, mais si vos objets sont petits, vous pouvez les rassembler en un seul.

Une déclaration de classe (notre moule) s'effectue avec :

Public Class MaClasse

End Class

Vous voyez que même sur la déclaration de la classe on peut spécifier « publique » ou « privée ». Notre classe doit créer des objets qui seront accessibles depuis tout le programme, laissons-la en publique.

Je vous expliquerai plus tard dans quels cas de figure le Private sera de mise pour déclarer une classe.

Notre classe va contenir des variables et des fonctions qu'elle poura utiliser. Des membres et des attributs en langage technique. Pour les créer ce sera comme ce que nous avons vu jusqu'à présent. Un préfixe d'accessibilité (public, private…), un Dim pour les variables, Sub pour les fonctions ne renvoyant rien et Function pour les fonctions.

Le constructeur

Le constructeur est la méthode qui va être appelée à l'instanciation de l'objet ; au moment où nous ferons = New MaClasse, ce seront des arguments que l'on pourra spécifier de cette manière :

= New MaClasse(ArgumentConstructeur1, ArgumentConstructeur2)

Comme une fonction qui demande des arguments, le constructeur réagira de la même manière. Il récupèrera les informations passées en arguments et en fera ce qu'il veut, les attribuer à des membres privés par exemple. Je vous expliquerai bientôt comment le coder et l'utiliser.

Le destructeur

Le destructeur est particulier, il est surtout utilisé pour libérer les ressources mémoire allouées à l'objet juste avant sa destruction. Lorsque nous utiliserons les bases de données par exemple, il faudra se servir du destructeur pour fermer et libérer la connexion si elle a été établie pour cette classe.

Bref, voici ce qui explique son utilité : les variables qui sont créées pour la classe sont automatiquement libérées de la mémoire quand elles « meurent ».

L'objet sera détruit si la valeur Nothing lui est affectée ou s'il arrive à la fin de sa portée (fin d'une fonction dans laquelle il a été créé) par exemple, comme pour les variables normales.

  • La programmation orientée objet est basée sur le concept de classes.

  • Les accessibilités permettent au programmeur de ne pas accéder aux membres d'une classe qu'il ne doit pas modifier.

Exemple de certificat de réussite
Exemple de certificat de réussite