spheris | #1 Posté le 31/10/2021 à 08:09:07 |
---|
| Bonjour, J'essaye tant bien que mal de realiser un programme en pur orienté objet.
Dans une classe, pouvez-vous m'expliquer la différence entre :
1
| PROPERTY lechat AS INTEGER
|
et
1
| PRIVATE lechat AS INTEGER
|
? Pourquoi utiliser l'un ou l'autre pour déclarer une variable interne à la classe, je ne saisi pas bien. Merci pour votre aide.
|
valaquarus | #2 Posté le 31/10/2021 à 12:37:11 |
---|
-- Unus Ex Altera -- | Bonjour spheris, je suis très loin de ça mais une recherche sur google m'a donnée un lien intéressant (in english) :
https://stackoverflow.com/questions/3310186/are-there-any-reasons-to-use-private-properties-in-c
c'est sur c++ mais l'idée reste la même. PhilippeSystème d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5 |
spheris | #3 Posté le 31/10/2021 à 12:56:43 |
---|
| Merci pour ta réponse, mais je ne comprends pas bien l'idée. Je vais faire évoluer le site gambaslinux avec de nombreux tutoriels pour migrer vers de la POO avec gambas. Ce logiciel étant extrêmement puissant, la façon dont je l'utilise au quotidien me semble limité. Je vais mettre une requete sur la mailing list pour essayer de questionner les plus costauds d'entre nous pour progresser. |
Patrick | #4 Posté le 4/11/2021 à 17:44:00 |
---|
| Bonsoir, Un exemple valant mieux qu'un long discours : Dans Fmain :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| ' Gambas class file
PRIVATE $chevalier AS Chevalier
PUBLIC SUB Form_Open()
$chevalier = NEW Chevalier("Lancelot") $chevalier.armures = Chevalier.cotedemaille $chevalier.bras = 2 $chevalier.cheval = TRUE $chevalier.cheveux = Chevalier.blond $chevalier.jambe = 2 $chevalier.sexe = Chevalier.male END
|
Dans Humain.class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| ' Gambas class file
PUBLIC nom AS STRING
PRIVATE $bras AS INTEGER PRIVATE $jambe AS INTEGER PRIVATE $cheveux AS INTEGER PRIVATE $sexe AS INTEGER
PROPERTY READ tete AS INTEGER PROPERTY bras AS INTEGER PROPERTY jambe AS INTEGER PROPERTY READ torse AS INTEGER PROPERTY cheveux AS INTEGER PROPERTY sexe AS INTEGER
PUBLIC ENUM brun, chatain, blond, blanc PUBLIC ENUM male, femmele
PUBLIC SUB _new(nom AS STRING)
ME.nom = nom Message.Info("L'humain " & nom & " est créé"
END
PRIVATE FUNCTION tete_Read() AS INTEGER
RETURN 1
END
PRIVATE FUNCTION bras_Read() AS INTEGER
RETURN $bras
END
PRIVATE SUB bras_Write(Value AS INTEGER)
IF value > 2 THEN Message.Error("Impossible", "Ok") $bras = -1 ELSE $bras = value ENDIF
END
PRIVATE FUNCTION jambe_Read() AS INTEGER
RETURN $jambe
END
PRIVATE SUB jambe_Write(Value AS INTEGER)
IF value > 2 THEN Message.Error("Impossible", "Ok") $jambe = -1 ELSE $jambe = value ENDIF
END
PRIVATE FUNCTION torse_Read() AS INTEGER
RETURN 1
END
PRIVATE FUNCTION cheveux_Read() AS INTEGER
RETURN $cheveux
END
PRIVATE SUB cheveux_Write(Value AS INTEGER)
$cheveux = value
END
PRIVATE FUNCTION sexe_Read() AS INTEGER
RETURN $sexe
END
PRIVATE SUB sexe_Write(Value AS INTEGER)
$sexe = value
END
|
Dans Chavalier.class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| INHERITS Humain
PRIVATE $armure AS INTEGER PRIVATE $cheval AS BOOLEAN
PROPERTY armures AS INTEGER PROPERTY cheval AS BOOLEAN
PUBLIC ENUM fer, acier, cotedemaille
PUBLIC SUB _new()
Message.Info("Le chevalier " & ME.nom & " est créé" END
PRIVATE FUNCTION armures_Read() AS INTEGER
RETURN $armure
END
PRIVATE SUB armures_Write(Value AS INTEGER)
$armure = Value
END
PRIVATE FUNCTION cheval_Read() AS BOOLEAN
RETURN $cheval
END
PRIVATE SUB cheval_Write(Value AS BOOLEAN)
$cheval = Value
END
|
Ce qui est intéressant c'est que la class Chevalier hérite de toutes les propriétés de la class Humain, on pourrait imaginer la class noble qui hérite de chevalier et la class roi qui hérite de noble avec chacune ses propriétés spécifiques ... Voir même ré écrites. Patrick
|
spheris | #5 Posté le 5/11/2021 à 09:00:20 |
---|
| Patrick, un grand merci. Pour ma compréhension, permets moi de détailler ce code pour voir si j'ai bien tout compris :
Pour le Fmain :
1
2
3
4
5
6
7
8
9
10
11
| ' Gambas class file PRIVATE $chevalier AS Chevalier 'cette instance sera visible que dans le Form là PUBLIC SUB Form_Open() $chevalier = NEW Chevalier("Lancelot") 'fait référence à la variable 'nom' $chevalier.armures = Chevalier.cotedemaille 'Fait reference a la variable enumérée cotedemaille $chevalier.bras = 2 $chevalier.cheval = TRUE $chevalier.cheveux = Chevalier.blond $chevalier.jambe = 2 $chevalier.sexe = Chevalier.male END
|
Pour la classe humain:
1
2
3
4
5
| PUBLIC nom AS STRING 'Cette variable est une simple variable accessible depuis n'importe quelle instance crée. PRIVATE $bras AS INTEGER 'cette variable n'est utilisée que par la classe elle meme PRIVATE $jambe AS INTEGER 'idem PRIVATE $cheveux AS INTEGER'idem PRIVATE $sexe AS INTEGER'idem
|
PROPERTY READ tete AS INTEGER :C'est une propriété de la classe en lecture seule qui est liée à sa fonction:
1
2
3
| PRIVATE FUNCTION tete_Read() AS INTEGER RETURN 1 END
|
PROPERTY bras AS INTEGER : 'propriété de classe en lecture ecriture qui peut recevoir une valeur value et qui peut renvoyer une valeur dans sa fonction propre:
1
2
3
4
5
6
7
| PRIVATE FUNCTION bras_Read() AS INTEGER RETURN $bras END
PRIVATE SUB bras_Write(Value AS INTEGER) $bras = Value END
|
Ce qui est intéressant avec l'IDE de gambas, c'est qu'il nous mache le travail en créant les deux fonctions liées quand tu saisis PROPERTY.
PUBLIC ENUM brun, chatain, blond, blanc: Je comprends que cela doit être des variables, mais je ne sais, ni comment les utiliser, ni quel types doivents elle avoir, peux-tu m'éclairer là desssus?
;-)
|
Patrick | #6 Posté le 5/11/2021 à 17:32:18 |
---|
| Ce sont des constantes de type Integer, brun = 0 jusqu’à blanc = 3, ENUM peut être PRIVATE. Je l'utilise aussi beaucoup pour les GridView et les tableaux. C'est plus facile de lire et de maintenir un programme qui utilise des noms plutôt que des numéros : MonTableau[brun] est plus parlant que MonTableau[0]. Si on se rend compte que l'on a oublié une colonne (roux par ex) on peut l'intercaler sans avoir à renuméroter tous son programme. Dans le petit exemple pour être complet il manque Event/Raise qui permet de communiquer avec la class appelante. Voici ce qui changerait : Dans Fmain
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| ' Gambas class file
PRIVATE $chevalier AS Chevalier
PUBLIC SUB Form_Open()
$chevalier = NEW Chevalier("Lancelot", ME) AS "chevaliers" $chevalier.armures = Chevalier.cotedemaille $chevalier.bras = 2 $chevalier.cheval = TRUE $chevalier.cheveux = Chevalier.blond $chevalier.jambe = 2 $chevalier.sexe = Chevalier.male END
PUBLIC SUB chevaliers_click(Value AS INTEGER)
Message.Info("Chevalier a cliqué : " Str(value))
END
|
Dans Humain
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| ' Gambas class file
PUBLIC nom AS STRING
PRIVATE $bras AS INTEGER PRIVATE $jambe AS INTEGER PRIVATE $cheveux AS INTEGER PRIVATE $sexe AS INTEGER PRIVATE $but AS Button PRIVATE $clic AS INTEGER
PROPERTY READ tete AS INTEGER PROPERTY bras AS INTEGER PROPERTY jambe AS INTEGER PROPERTY READ torse AS INTEGER PROPERTY cheveux AS INTEGER PROPERTY sexe AS INTEGER
EVENT click(Value AS INTEGER)
PUBLIC ENUM brun, chatain, blond, blanc PUBLIC ENUM male, femmele
PUBLIC SUB _new(nom AS STRING, win AS Window)
ME.nom = nom Message.Info("L'humain " & nom & " est créé" $but = NEW Button(win) AS "but" $but.Text = nom $but.Height = 25 $but.Width = 150
END
PUBLIC SUB but_click()
$clic += 1 RAISE click($clic)
END
|
|
spheris | #7 Posté le 7/11/2021 à 19:33:18 |
---|
| Patrick merci j'ai tout compris maintenant. J'avais commencé un logiciel , un clone de TCI un créateur de typon pour électronique mais je me suis vite perdu dans le code manquant de connaissances en POO. Je vais essayer de le réécrire en Objet pour me faire la main :
http://gambaslinux.fr/articles.php?lng=fr&pg=2169
Merci pour tes précieux conseils. Un tuto verra probablement le jour très bientôt sur gambaslinux.fr
|
spheris | #8 Posté le 12/11/2021 à 20:45:11 |
---|
| sujet fermé. |