Gambas France BETA


Pas de compte ? Incription

créer une classe

Ce sujet est résolu.

1
AuteurMessages
stracoma#1 Posté le 21/9/2015 à 23:52:48
Apprentissage programmation pour le plaisirBonsoir
Je veux entamer la poo dans Gambas. Pour créer une classe Prof, j'ai fais un clic Droit sur MMain --> nouveau --> Classe (que je nomme Prof)
Dans cette page, j'ai écris:
1
2
3
4
5
6
7
8
9
10
' Gambas class file

PUBLIC nom AS STRING
PUBLIC age AS INTEGER
PUBLIC SUB New(nnom AS STRING, aage AS INTEGER)

nom = nnom
aage = age

END

Puis j'ai écris dans FMain
1
2
3
4
' Gambas module file

DIM Prof1 AS NEW Prof("Bernard", 35)
PRINT Prof1.age

J'ai un message d'erreur: Dim inattendu dans MMain.module:3
Merci
SVP patience avec moi car neurones > 50 ans
vuott#2 Posté le 22/9/2015 à 00:24:49
Ne cedere ineluctabili possimus

J'ai un message d'erreur: Dim inattendu dans MMain.module:3


Bonsoir stracoma,
...ehmmm... avez-vous défini (début et fin) la routine contenant ces lignes ?
« Vita non suavis esse potest, nec Mors amara. »
Reivillo#3 Posté le 22/9/2015 à 09:49:02
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Flachy Joe#4 Posté le 22/9/2015 à 09:54:20
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
+1 pour vuott
Dim n'est pas autorisé en dehors d'une procédure, il faut utiliser Public ou Private à cette place. Et pas d'instruction en dehors d'une procédure non plus : le print causera une erreur...

En bref créer une Sub Main() pour contenir ces 2 lignes et définir le module comme module de démarrage.
;) Flachy Joe ;)
stracoma#5 Posté le 22/9/2015 à 15:22:56
Apprentissage programmation pour le plaisirBonjour
Y a-il quelqu’un pour me guider car je suis perdu.
Dans Prof.class j'ai écris:
1
2
3
4
5
6
7
8
9
10
PUBLIC Class Prof

PUBLIC nom AS STRING
PUBLIC age AS INTEGER
PUBLIC SUB New(nnom AS STRING, aage AS INTEGER)
nom = nnom
aage = age
END

END

Puis j'ai écris dans MMain.module:
1
2
3
4
SUB Main()
DIM Prof1 AS NEW Prof("Bernard", 35)
PRINT Prof1.age
END

ça me donne le message d'erreur: AS manquant dans Prof.class:3.
J'aimerais bien qu'on m'écrive le MMain.module et Prof.class, pour comprendre une fois pour toute
Merci
SVP patience avec moi car neurones > 50 ans
vuott#6 Posté le 22/9/2015 à 15:49:30
Ne cedere ineluctabili possimus

... message d'erreur: AS manquant dans Prof.class:3.

Merci


1
PUBLIC Class Prof
.....AS manquant
« Vita non suavis esse potest, nec Mors amara. »
linuxos#7 Posté le 22/9/2015 à 22:42:53
Un peu de sel, de poivre et la crevette sera... Bonjour,

En fait l'erreur vient de cette ligne qui ne sert a rien:

PUBLIC Class Prof

Si c'est un commentaire que tu voulais mettre, il aurait fallu mettre ceci:

' Class Prof

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
stracoma#8 Posté le 22/9/2015 à 23:38:14
Apprentissage programmation pour le plaisirJ'ai viré cette ligne " PUBLIC Class Prof " et ça ne marche toujours pas
Voir vidéo
SVP patience avec moi car neurones > 50 ans
vuott#9 Posté le 23/9/2015 à 00:45:56
Ne cedere ineluctabili possimus
1
2
3
4
5
6
7
8
9
10
11
12
PUBLIC SUB Main()

DIM Prof1 AS NEW Prof

WITH Prof1
.age = 35
.nom = "Bernard"
END WITH

PRINT Prof1.age

END




in Prof.class:
1
2
PUBLIC nom AS STRING
PUBLIC age AS INTEGER
« Vita non suavis esse potest, nec Mors amara. »
linuxos#10 Posté le 23/9/2015 à 01:48:09
Un peu de sel, de poivre et la crevette sera... stracoma,

Désolé j'ai lu rapidement et je suis passé a coté.
En effet ce que t'as indiqué Vuott est la plus simple façon de faire.

A partir de ta Classe Prof.cass tu peux meme en faire un tableau comme suit:

DIM tabProf AS NEW Prof[]

Exemple d'utilisation:

DIM tabProf AS NEW Prof[]
DIM newProf AS Prof

' 1er Objet Prof
newProf = New Prof
newProf.age = 35
newProf.nom = "Bernard"
TabProf.Add(Prof)

' 2eme Objet Prof
newProf = New Prof
newProf.age = 30
newProf.nom = "Jean"
TabProf.Add(Prof)

Et ainsi de suite....

Bien sur les déclaration de variables DIM sont a faire dans une SUB ou FONCTION

PUBLIC SUB toto() ou PUBLIC FUNCTION toto() AS "string ou integer, etc..."

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
stracoma#11 Posté le 23/9/2015 à 15:37:14
Apprentissage programmation pour le plaisirAvec la méthode indiquée par vuott ça marche. Mais je me demande si je peux, en même temps créer et initialiser un objet:
Dim prof1 as new Prof("Bernard",35)
SVP patience avec moi car neurones > 50 ans
linuxos#12 Posté le 23/9/2015 à 23:10:57
Un peu de sel, de poivre et la crevette sera... A priori cela est possible mais je ne vois pas l’intérêt a part t'économiser des lignes de code, mais tu y perds en lisibilité pour relire ton code par la suite a mon avis.

De plus, l'empreinte mémoire sera plus grosse car chaque fois que tu instanciera une classe Prof tu dupliquera les variables de Prof.class mais aussi la fonction _NEW() qui est dedans.
Si tu créer 3 objets basés sur Prof.class, cela ne changera pas grand chose, mais si tu en créer 10000, alors cela peut être différent.
Il faut juste s'en souvenir lors de l'utilisation de la POO.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
stracoma#13 Posté le 24/9/2015 à 00:09:40
Apprentissage programmation pour le plaisirOk. merci
SVP patience avec moi car neurones > 50 ans
gambix#14 Posté le 3/10/2015 à 17:16:06
Faire simple !Au passage le constructeur s'écrit :

PUBLIC Age as INTEGER
PUBLIC Nom as String

PUBLIC SUB _New(sNom AS STRING, iAge AS INTEGER)

Nom = sNom
Age = iAge

End

C'est une procedure speciale qui a donc un underscore. Sinon cette procedure ne sera pas appelée par la fonction NEW.
Moins de texte dans une signature c'est agrandir son espace.
gambix#15 Posté le 3/10/2015 à 17:31:31
Faire simple !Tien aussi au passage.

Pourquoi tu utilises un formulaire pour tester de la POO.


Utilise plutot un module avec une fonction PUBLIC SUB MAIN() que tu rend fichier de démarrage.


Ainsi pour ton test le Module MMain.module contiendrait :


1
2
3
4
5
6
7
8
9
10
11
PRIVATE hProf AS NEW CProf


PUBLIC SUB Main

hProf = NEW CProf("Toto", 30)

PRINT hProf.Nom


END


1
2
3
4
5
6
7
8
9
10
11
'Class Cprof

PUBLIC Age AS INTEGER
PUBLIC Nom AS STRING

PUBLIC SUB _New(sNom AS STRING, iAge AS INTEGER)

Nom = sNom
Age = iAge

END



Je ne le répèterais jamais assez mais penser a bien nommer vos classes et variables pour facilement identfier le type.

http://gambaswiki.org/wiki/doc/naming?l=fr
http://gambaswiki.org/wiki/doc/namingconvention?l=fr

Et bien sur toues les sources de l'ide
Moins de texte dans une signature c'est agrandir son espace.
1