apprentisssage, gambas 3, poo - cours 2eme partie -

cours 2eme partie

( Temps de lecture estimé à 12 min 57 sec )




COURS NUMERO 2

DECOUVERTE DE LA POO

 Commencer par ouvrir gambas et créer un nouveau projet Application en ligne de commande :

 nom du projet -> ConfBase



INTRODUCTION

 Donc, Gambas est comme vous le savez, un langage très orienté objet.
Dans la vie courante des objets sont facilement repérables, et il en devient facile de les modéliser.

 La programmation Orienté Objet est un concept qui s 'apparent à tout (presque du moins) type de projet. lorsqu 'on concoit un projet et qu 'on utilise un modèle objet, il est impératif (pas nécessairement obligatoire mais vraiment recommandé) de fonder la base, un plan de l 'ensemble du projet a savoir :

 - Les taches principale que doit réaliser l 'applications
- la structure des données qui seront manipulés

 et (mais ca, ca restera pour les programmeurs expérité de la crevette bleue  ) un ensemble permettant d 'étendre le programme pour de futur améliorations sans devoir quasiment retoucher au 3/4 du code !

donc la POO (=Programmation Orienté Objet) est un concept à part du langage de programmation.

Un monde assez nouveau pour les débutants où c 'est une notion à savoir exploiter.
Penser objet, c 'est important pour tirer parti de Gambas.

Lorsque votre esprits commencera a concevoir des objets dans votre projet, alors vous serez moins étonné de trouver la solution vous même pour effecter tel tache sur tel contrôle (Bouton, [Autre...] )

Maintenant qu 'on a exploité et découvert le terrain du monde de la POO, un projet Gambas est un ensemble de classe. A savoir, des briques, des objets qui vont s 'assembler pour former votre programme
La manipulation d 'objets doit être plus que courant. Voici maintenant un exemple de modélisation à partir d 'un objet quelconque :

on va choisir simplement un être humain qui (bon certes, on est pas des objets mais passons cette remarque temporairement  ) possède pas mal d 'informations en lui même et établit plusieurs taches toutes aussi importante et utile .les taches sont facilement repérable, ce sont les Actions qui sait effectuer tels que :

- marcher
- parler
- manger
- dormir


pour ne citer qu 'eux à titre d 'exemple, les informations (les données) qu 'il a, c 'est son état :
- Son age
- son nom
- ses mots (lorsqu 'il parle)
- sa taille

 ... ect

dans un modèle OBJET, on peut modéliser celà :

on **encapsule** ces données et ces actions, le tout sous le jolie nom Humain

Donc maintenant, garder votre Gambas à porter de main, nous allons effectuer une premiere classe 

commencer dans votre éditeur par :

- faire un clic droit sur le dossier Classes puis -> Nouveau -> 'Classes...
Nom de la classe : Humain

Dans l 'arborescence de l 'IDE, vous voyez désormais que vous obtenez un fichier .class  , plus précisement de nom Humain.class 

Pour certains d 'entre vous, c 'est la première fois que vous voyez une classe dans votre projet  .
On va commencer par modéliser ce dont on a parlé juste avant a partir d 'une langue naturelle, d 'informations relevé sur une feuille et réfléchi auparavant, on va pouvoir transmettre celà dans un langage informatique qui nous permet d 'établir cette objet et ainsi de profiter pleinement de la POO !

une classe en informatique c 'est tout simplement une structure, un ensemble d 'informations
 { données, Actions } 

 Dans d 'autre classe il existe des mots clés pour définir une classe.
Exemple en ruby :
  '   class Humain           ...       end   '

en Gambas, la définition de la classe est le fichier en lui même donc aucun mot clés comme class n 'est nécessaire

Un contrôle est aussi une classe ?

INFORMATION : EN REALITE, IL EXISTE UN MOT CLE 'CLASS ' EN GAMBAS MAIS IL NE SERT QU 'A UNE UTILISATION PARTICULIERE QUE NOUS VERRONS PLUS TARD, LORSQUE NOUS MAITRISERONS LA POO.

tout ce qui touche à l 'interface graphique, on met ca de coté car l 'interface graphique et un autre monde qui regorge la POO avec d 'autre notion tels que la programmation événementielles
et il existe plusieurs état d 'un objet en GUI si je peux dire ça de facon simple.
GUI ???
Graphical User Interface = Inteface utilisateur Graphique

Double cliquez sur la classe Humain que nous avons créé à l 'instant
vous possédez déjà un commentaire :

' Gambas class file

en début de fichier. Pour les anti-english celà signifie -> fichier de classe Gambas

Ce qui est intéressant et les questions qui vont vite venir vous encombrer l 'esprit c 'est :
- Comment en langage informatique on modélise une Action ?
- et comment les données sont modélisés  ?

Les réponses sont à la base de ce dont vous avez appris jusqu 'à maintenant, à savoir
- Les données   --->  Les variables
- Les Actions     --->  Les fonctions/procédures.
Il est a noté qu 'en programmation orienté objet, le nom d 'une fonction et procédure se dit ---> METHODE !!!

 C 'est très important, le terme fonction et procédure sont réservés à la programmation impérative. Chose qui nous intéresse pas vraiment vu que Gambas est orienté-objet.

 Donc Si on reprends nos informations, voilà ce qu 'on obtiens :
- Son age
- son nom
- ses mots (lorsqu 'il parle)
- sa taille

son age -> est un entier
son nom -> une chaine de caractère
ses mots (qu 'on dira 'parole ' juste aprés)   ->  une chaine de caractère également
et sa taille -> un floattant (nombre décimal)

Si vous savez déclarer une variable, ce qui suit sera un véritable jeux d 'enfants

Il y a une regle FONDAMENTALE en POO :
(retenez la bien car la POO regorge 3 principes de base à ne pas négliger)

 - Les données doivent toujours être encapsuler

qu 'est-ce que ca veut dire ? Ca signifie que les données ne doivent pas être visible de l 'extérieur !
*** Hola mais attend ca commence a devenir flou !  Sur notre etre humain dans la vie reelle ca donne quoi ?

 Effectivement ca donne quoi ?

ca veut dire quoi que les membres (données) ne doivent pas être accesible de l 'extérieur
 pour faire plus simple encore, changeons notre être humain en voiture. Votre voiture est un objet, les données qu 'elle possède sont quoi à votre avis ?

- Le moteur,
- le niveau d 'huille,
- les cylindres,
...ect

 et les actions ?
- les 3 pédales par exemple
 et bien sur, vous avez un capots qui cache toute la mécanique
 et si vous voulez accélérer ? vous ne lever pas le capot en touchant les fils à l 'intérieur pour augmenter la vitesse !
les données de la voiture sont encapsulé !

 *** Mais alors, dit nous comment on fait pour modifier ces données dans ce cas ***
 Pour jouer avec vos 'données ' de votre voiture, vous utiliser une interface, qui sont on le rapelle
 les 3 pédales (3 Actions)

 ces actions vont travailler sur les données, c 'est EUX qui changent l 'état de vos variables !
pour définir l 'accessibilité d 'une variable, on possède 2 mots clés qui sont :
- PRIVATE
- PUBLIC
qui, s 'en va s 'en dire, se relève relativement simple à comprendre  .

PRIVATE -> privé       ->   réservé qu 'a la classe
PUBLIC -> publique    ->  disponible de l 'extérieur de la classe

pour éviter de vous perdre, référez-vous toujours à votre voiture dans les débuts
donc étant donnée qu 'on sait qu 'on ne doit pas voir les données et encore moins pouvoir les modifier de l 'extérieur on les met en PRIVATE
 ce qui donne :
' Gambas class file

PRIVATE age AS Integer
PRIVATE taille AS Integer
PRIVATE parole AS String
PRIVATE nom AS String


allez y taper moi ça dans votre éditeur
je continue, maintenant, les actions non plus à notre voiture mais à notre bon vieux être humain Gorge (Oui pourquoi pas ?  ) , on sait que c 'est des 'fonctions/procédures ' donc des SUB ou FUNCTION.

par contre, si vous avez bien suivit jusque là
quelle sera la nature d 'accessibilité de nos méthodes ?
si les données ne doivent pas être directement accessible à l 'utilisateur, les actions quant a elle doit être PUBLIC de manière qu 'on puisse modifier ses variables
static c 'est pas du ressort de ce court  . Je n 'en ai pas parlé donc pas possible que ce soit la réponse  .

Je vais prendre un autre exemple relativement classique mais utile
VOTRE TELE !
sur votre télé vous avez des boutons pour changer de chaine, monter le son ou le baisser, éteindre ou allumer la télé et à l 'intérieur de la télé vous avez tout plein de chose électroniques qui communique entre eux pour vous donner une image, pour changer la chaine, pour augmenter le son ect

Trés bien, quelle accessibilité donneriez-vous à ces boutons disponible sur votre télévision ?
PRIVATE ou PUBLIC ?
PUBLIC
Pourquoi ?
Tout le monde peut les actionner


En fait, en POO le programmeur est à la fois CREATEUR et CLIENT
c 'est à dire qu 'il fait les plan, il construit la classe, la bases. Et client à la fois lorsqu 'il créera des objets à partir de cette classe.


imaginez un moule à gateaux
vous crée d 'abord la classe de ce moule
et a partir de ce moule
vous pouvez créé autant de gateau que vous voulez
autant d 'objets que vous voulez
 on va revenir a nos actions de notre être humain


de manière assez simple, une méthode est presque toujours PUBLIC
elle peut aussi être privé
c 'est à dire dans ce cas qu 'on donne pas accés de l 'extérieur. Généralement une méthode privé sert juste au fonctionnement interne de l 'objet
on va commencer par coder une action simple


la méthode Parler avec un paramètre ... ce que l 'utilisateur veut que l 'humain dise
voici la méthode a insérer en dessous des  variables membres :

PUBLIC SUB parler(mot AS String)
PRINT mot
END


tout le monde connait bien les procédures et les fonctions ?
une fonction n 'est rien d 'autre qu 'une procédure à part qu 'elle renvoie une valeur
maintenant, on plonge dans le MMain
c 'est à dire le module


INFORMATION : UN MODULE EN GAMBAS N 'EST RIEN D 'AUTRE QU 'UNE CLASSE MAIS ___ STATIQUE


vous dans tous dans le PUBLIC SUB Main()   ?
Main() est une procédure principale, c 'est par là que va donc commencer notre programme
on va dire commencer par savoir afficher du texte à l 'écran tout simple
taper

 PRINT "Vive Gambas !"
 

et appuyez sur F5
résultat est affiché dans la console de l 'IDE en bas
maintenant expérimentons un peu le PRINT

taper celà :

 PRINT "Vive Gambas !" & "n"



Ca renvoie les mots à la ligne
le  n      <- est un caractère d 'échapement

c 'est à dire qu 'il est interprété d 'une certaine manière lorsque GB lit ceux-ci
il y a plusieurs caractère d 'échapement tels que la tabulation ect
mais c 'était à titre d 'information.


maintenant on va s 'intéresser à l 'autre coté de la POO
le coté CLIENT de toute à l 'heure. Donc on va mouler un humain a partir du four géant !

bien maintenant supprimez la ligne PRINT dans le Main()

Pour créer un objet à partir de notre classe, en GB (comme dans tout autre language Objet) ca se fait comme si vous déclarer une variable
donc étant donnée qu 'on est dans notre Main() et pas à l 'extérieur, on va utiliser le mot clé DIM
si on serai à l 'extérieur de Main()

on utiliserait PUBLIC ou PRIVATE
le principe et le même mais on verra celà plus tard également
on va s 'intéresse proprement dite à la création d 'objets
explications sur le DIM
DIM gorge AS NEW Humain


sur une variable normal on a par exemple : DIM age AS Integer
soit DIM leNomDeLaVariable AS SonType


Ici c 'est presque pareil à l 'exception qu 'il y a le NEW en plus ce qui indique Nouvelle objet
Humain -> étant la classe qu 'on a fait juste avant, et donc le type d 'objet qu 'on crée.
alors maintenant, c 'est là (grace à l 'IDE) que vous allez capter le PRIVATE et PUBLIC
notre ami george étant un objet de notre classe Humain
on peut créer si on veut un autre humain si ca nous chante !


DIM bernadette AS NEW Humain

pour utiliser ses actions, ca se présente comme ça syntaxiquement :   objet.methode()
les parenthèse sont facultatif, et sont obligatoire si des paramètres de la méthode sont présente
dans notre cas, on va faire parler notre ami gorge, on sent qu 'il a envie de parler celui là !!

george.parler( coucou toi l 'ami )

entrez ca à la MAIN !! dans votre éditeur

à partir du . (POINT) , Gambas est assez intelligent (bien qu 'une crevette vous voyez qu 'il y a un neurone qui se trabale dans les environs  ) pour déterminer ce que l 'objet peut faire !
ici dans notre cas, notre ami george sait parler
on peut utiliser la touche TAB pour compléter la méthode
(très pratique vous verrez  )
on ouvre ensuite une parenthèse car comme on la fait dans la classe
on a besoin de savoir ce que notre ami george veut dire !
et on met notre chaine de caractères entre guillemet.

george.parler( coucou toi l 'ami )

 et appuyer sur F5 pour admirer le résultat
maintenant tiens, on va retourner dans notre classe Humain et on va changer l 'age en PUBLIC
PUBLIC age AS Integer

maintenant si vous retournez dans l 'éditeur, et que vous entrer george.    <- ici la liste arrive et vous verrez certainement 'age 'en rose
bon et bien maintenant elle est accesible de l 'extérieur !

vous captez maintenant le PRIVATE et le PUBLIC ?
alors maintenant une question pourrait vous venir en tete
on vois pas les autres car elles sont private
*** d 'accord je vois maintenant comment rendre la visibilité d 'un membre mais.. pourquoi d 'ailleurs le principe est qu 'on ne doit pas modifier de l 'extérieur les variables ? ***

réponse :
tout simplement imaginez que quelqu 'un vient qui touche directement a votre voiture et met niveau carburant à 90 litres alors que le réservoir n 'en contient que 40 ou 50 .. aie aie aie
ca déborde de partout !

d 'ou le pourquoi on doit passer par une méthode pour modifier les variables interne à l 'objets. De cette manière on peut établir des vérification tels que par exemple :

PUBLIC SUB mettreEssence(litre as Integer)
IF litre > 50 THEN
    PRINT Le réservoir est déjà plein !
ELSE
    niveauEssence = litre
ENDIF


sachant que niveauEssence étant une variable PRIVATE pour la classe
ainsi si on a un objet voiture exemple maVoiture, alors si on veut mettre de l 'essence :

maVoiture.mettreEssence(80)
ca va me retourner --->  Le réservoir est déjà plein !
et on ne fait pas n 'importe quoi avec l 'objet

Il faut donc TOUJOURS utiliser le PRIVATE 

c 'est l 'encapsulation, un des principes de la programmation orienté objet !!
doit apparaitre du coté client, quasiment que des méthodes, Actions
pensez au bouton de la télé !
 dans l 'IDE qd vous avez eu la liste george.     <-     ce sont les boutons de l 'objet, ce qui est disponible

CONCLUSION :
[le vocabulaire a retenir : lorsqu 'on crée un objet d 'une classe, on dis qu 'on instancie un objet
une **instance** de classe n 'est qu 'un objet crée de la classe
donc si a partir de la classe Voiture
on a crée 3 objets  -> voitureMaison, voitureBoulot ... ect
on a 3 instances de la classe **Voiture**
- Découverte de la programmation orienté objet
- Créé une classe
- Crée des objets à partir de nos classe
en vocabulaire retenez :
- Classe
- Objet
- Instance
- principe de l 'encapsulation
- méthodes
- variables membres
en mot clés les découvertes sont :
- PUBLIC
- PRIVATE
- NEW

et surtout oubliez la GUI pour l 'instant la console permet d 'extraire le contenu le plus important
la GUI est un cadeau dangereux Gambas offre une facilité incroyable pour gérer la GUI
mais vous voyez derrière tous ça que la complicité est au rendez vous si on ne connais pas tout ces rudiments indispensable la GUI vous plonge dans plusieurs notions à connaitre

A bientôt




Date de creation :
Redacteur : Rédigé par spheris
Classé dans : apprentisssage, gambas 3, poo