Search this site
Embedded Files
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
  • More
    • Accueil
    • BBC BASIC
    • BBC OS
    • BBC MODULES
    • RUBRIQUES
    • LIENS

⇨ MENU ⇨ BIBLIOTHEQUE ⇨ classlib.bbc

PROC_class()

DESCRIPTION.


La procédure PROC_class() initialise la création d'une nouvelle classe.



SYNTAXE.


PROC_class( DCT_Classe{} )




REMARQUES.


DCT_Classe{} doit être l'identifiant de la structure de données contenant les alias des attributs et des méthodes de la nouvelle classe.


Pour créer un nouvelle classe, il faut : 


1. Déclarer une structure de données classique, dont les éléments sont les arguments qui devront être transmis pour la création d'un nouvel objet issu de cette classe, suivi des noms de méthodes associées à cette classe. Par exemple, la déclaration suivante va permettre de créer une classe nommée CLS_Classe, qui disposera des méthodes MTD_A, MTD_B et MTD_C, et à la quelle il faudra passer des valeurs pour les paramètres a,  b,  c,  a$ et b$ lors de l'instanciation d'un nouvel objet.

                                                                                                                                                                                      

DIM MDL_Classe{ attributA , ... , attributN , @contructeur , @@destructeur , methodeA , ... , methodeN } 




2. Créer la classe avec la procédure PROC_class(), provenant de l'installation  du module classlib.bbc, en lui donnant la structure de données la définissant comme paramètre.


PROC_class( MDL_Classe{} )




3. Définir les méthodes associées, en utilisant l'instruction DEF sans PROC ni FN. Les définition de plus d'une ligne doivent être placées après l'instruction END. Bien que les définition de méthode tennat sur une seule ligne puisse être placées n'importe où dans le script, il est vivement conseillé, dans un souci de lisibilité et de maintenance future,  de placer toutes les définitions de méthode propre à une classe dans le même espace, les une à la suite des autres.



Si le nom d'une définition est précédé du symbole @, il s'agit du constructeur d'objet. Celle-ci sera appelée de façon automatique à chaque nouvelle création d'une instance. Elle pourra par exemple contenir une valeur valide par défaut pour chaque attributs, afin de prévenir toute erreur de compatibilité lors de calcul avec ces attributs. 

REM --- Definition du créateur des objets de la classe (optionnel) ---

DEF MDL_Classe.@constructeur 

MDL_Classe.attributA = valeur

MDL_Classe.attributN = valeur

PRINT "Votre objet a ete creer."

ENDPROC



Si le nom d'une définition est précédé de deux symbole @@, il s'agit du destructeur d'objet. Celle-ci sera appelée de façon automatique si un objet est détruit avec l'appel de la procédure PROC_discard(). provenant du module classlib.bbc.

REM --- Definition du créateur des objets de la classe (optionnel) ---

DEF MDL_Classe.@@destructeur 

PRINT "Votre objet a ete detruit."

ENDPROC



Les définitions des méthode ne devant pas retourner de valeur, comme les procédure classique de BBC BASIC, doivent se terminer par l'instruction ENDPROC

REM --- Definition d'une methode qui retourne pas de valeur (eq. PROC) attendant des parametres ---

DEF MDL_Classe.methode ( attributa , attributb , ... , attributn ) 

REM --- code ---

REM --- code ---

REM --- code ---

ENDPROC


REM --- Definition d'une methode qui retourne pas de valeur (eq. PROC) sans parametres ---

DEF MDL_Classe.methode 

REM --- code ---

REM --- code ---

REM --- code ---

ENDPROC



Les définitions des méthode devant pas une valeur, comme les fonction classique de BBC BASIC, doivent se terminer par un signe égal suivi de la valeur à retourner, l'instruction ENDPROC ne doit surtout pas être présente.

REM --- Definition d'une methode qui doit retourner une (eq. FN) attendant des parametres ---

DEF MDL_Classe.methode ( attributa , attributb , ... , attributn ) 

REM --- code ---

REM --- code ---

REM --- code ---

= valeur


REM --- Definition d'une methode qui retourne pas de valeur (eq. FN) sans parametres ---

DEF MDL_Classe.methode 

REM --- code ---

REM --- code ---

REM --- code ---

= valeur



Les méthodes de type procédure, c'est-à-dire qui ne doivent pas retourner de valeur, doivent être appelée avec le mot clé PROC. Par exemple : PROC( OBJ_Objet{}.methode ) ou PROC( OBJ_Objet.methode ), la paire d'accolade étant facultative. Si des paramètres sont attendus, ils doivent se trouver dans une paire de parenthèses différentes, et séparée d'un espace. Par exemple : PROC( OBJ_Objet{}.methode ) ( valeur1 , ... , valeurN ).


Les méthodes de type fonction, c'est-à-dire qui doivent retourner une valeur, doivent être appelée avec le mot clé FN. précédée de la variable, ou de l'instruction, qui recevra la valeur. Par exemple : kvaleur = FN( OBJ_Objet{}.methode ) ou kvaleur = FN( OBJ_Objet.methode ), la paire d'accolade étant facultative. Si des paramètres sont attendus, ils doivent se trouver dans une paire de parenthèses différentes, et séparée d'un espace. Par exemple : kvaleur = FN( OBJ_Objet{}.methode ) ( valeur1 , ... , valeurN ).



La procédure PROC_class() est importée depuis le module classlib.bbc. 




EXEMPLE.


REM --- Importation des modules ---

REM --- Module de la bibliothèque BBC BASIC ---

INSTALL @lib$ + "classlib.bbc"


REM --- Declaration de la structure de données associee à la classe ---

DIM MDL_Rectangle{ longeur , largeur , @constructeur , MTD_Cotes , MTD_Perimetre , MTD_Aire , MTD_Diagonale }


REM --- Creation de la classe ---

PROC_class( MDL_Rectangle{} )


REM --- Creation d'un nouvel objet (instance) de la classe MDL_Rectangle ---

PROC_new( OBJ_RectA{} , MDL_Rectangle{} )


REM --- Appel de la methode MTD_Cotes, avec des parametres, qui modifie les attributs de OBJ_RectA ---

PROC( OBJ_RectA.MTD_Cotes ) ( 10 , 4 ) : REM - ou PROC( OBJ_RectA{}.MTD_Cotes ) ( 10 , 4 )

PRINT OBJ_RectA.longeur : REM - PRINT OBJ_RectA{}.longeur

PRINT OBJ_RectA.largeur : REM - PRINT OBJ_RectA{}.largeur


REM --- Appel des methodes MTD_Perimetre et MTD_Aire, sans parametre ---

PROC( OBJ_RectA.MTD_Perimetre )

PROC( OBJ_RectA.MTD_Aire )


REM --- Appel des methodes MTD_Diagonale qui retourne une valeur ---

PRINT "Les diagonales font : " ; FN( OBJ_RectA.MTD_Diagonale ) : REM - OBJ_RectA{}.MTD_Diagonale


REM --- Fin et sortie du programme ---

END




REM --- DEFINITIONS DES PROCEDURES ET FONCTIONS PERSONNALISEES ---



REM --- Definitions des methodes de la classe MDL_Rectangle  ---


REM --- Constructeur de la classe  MDL_Rectangle  ---

DEF MDL_Rectangle.@constructeur

MDL_Rectangle.longeur = 10

MDL_Rectangle.largeur = 5

PRINT "Nouveau rectangle de 10 x 5 creer."

ENDPROC


REM --- Methode de type procedure modifiant les attributs de l'objet grace au passage de parametres  ---

DEF MDL_Rectangle.MTD_Cotes ( Qlongeur , Qlargeur )

MDL_Rectangle.longeur = Qlongeur

MDL_Rectangle.largeur = Qlargeur

ENDPROC


REM --- Methode de type procedure sans parametre calculant et affichant le perimetre du rectangle ---

DEF MDL_Rectangle.MTD_Perimetre

kperimetre = 2 * ( MDL_Rectangle.longeur + MDL_Rectangle.largeur )

PRINT "Le perimetre de ce rectangle est : " ;  kperimetre

ENDPROC


REM --- Methode de type procedure sans parametre calculant et affichant la superficie du rectangle ---

DEF MDL_Rectangle.MTD_Aire

kaire = MDL_Rectangle.longeur * MDL_Rectangle.largeur

PRINT "La superficie de ce rectangle est : " ;  kaire

ENDPROC


REM --- Methode de type fonction sans parametre retournant la la longeur des diagonales du rectangle --

DEF MDL_Rectangle.MTD_Diagonale

kcotes = ( MDL_Rectangle.longeur ^ 2 ) + ( MDL_Rectangle.largeur ^ 2 )

kdiagonale =  SQR( kcotes )

= kdiagonale


Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de

vos remarques, vos commentaires et de vos suggestions.

Dans la RETROGICIEL vous trouvez des suggestions simples et classiques pour

TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER

avec un exemple de résolution à télécharger pour vous inspirer.

Google Sites
Report abuse
Page details
Page updated
Google Sites
Report abuse