Gambas France BETA


Pas de compte ? Incription

programmation orientée objet...

Ce sujet est résolu.

1
AuteurMessages
spheris#1 Posté le 21/5/2016 à 19:01:28
Je me pose certaines pour optimiser mes programmes, Pourriez vous y répondre par vrai ou faux et commenter par de breves explications.

1) au moins il y a d'echanges entre les fonctions/methodes, au mieux le programme est optimisé.
2) c'est mieux une variable dans une methode que dans le form, par exemple :

1
2
3
4
5
6
PRIVATE toto AS STRING

PUBLIC SUB mamethode()
DIM toto AS STRING
toto = "j'utilise toto pour ecrire"
END


3) Est-ce une bonne façon de programmer que de glaner des informations dans plusieurs form de ce style :

1
2
3
4
toto = module1.lavariable1
tata = module2.unetable[2,4]
titi = fmain.echange
toto = fdurdur.letablo[5]


merci pour votre aide.
;)
linuxos#2 Posté le 22/5/2016 à 03:32:22
Un peu de sel, de poivre et la crevette sera... Bonjour Spheris,
Pourquoi ne pas utiliser un module dans lequel il y aurait toutes tes variables principales.
Dans un module, les variables sont statique par défaut.
C'est exactement ce que je fais et cela fonctionne très bien.
Voici un exemple
1
2
3
4
5
6
7
8
9
10
' Gambas module file
PUBLIC VersionFileRef AS STRING = "V9"
PUBLIC VersionFileNewRef AS STRING = "V9"
PUBLIC VersionFile AS STRING

PUBLIC PathLogFile AS STRING = "/tmp/fichier.log"
PUBLIC LogOnFile AS BOOLEAN
PUBLIC LogOnConsole AS BOOLEAN
PUBLIC DisplayLogConsoleAtStartup AS BOOLEAN
' Etc...

Il est possible d'utiliser le composant gb.settings aussi pour cela.

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.
Patrick#3 Posté le 23/5/2016 à 08:14:05
Oui,et pour faire dialoguer les classes entre elles il y a :

- property => permet de lire et écrire dans une classe que l'on a instancié.

Property couleur As Integer 'dans la déclaration

puis
1
2
3
4
5
6
7
8
9
10
11
12
PRIVATE FUNCTION couleur_Read() AS INTEGER 'pour lire la valeur

RETURN $icouleur

END

PRIVATE SUB couleur_Write(Value AS INTEGER) 'pour écrire la valeur

$icouleur = value
dessincouleur

END

- event et raize créer une interruption et permet de remonter une valeur.

Event GotF(nm As Integer) 'dans la déclaration

puis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PUBLIC SUB num_KeyPress()

SELECT CASE Key.Code
CASE Key.Enter, Key.Return
valide
CASE Key.Esc
num.text = $sancvaleur
CASE Key.F2
num_Click
CASE Key.Up
RAISE up(ME.Tag)
CASE Key.Down
RAISE Down(ME.Tag)
CASE Key.Del
RAISE supprime(ME.Tag)
CASE Key.Tab
STOP EVENT
afficheart
caisse.SetFocus

END SELECT

END

et
Public Sub ligne_GotF(nm As Integer)
Dans le programme appelant
Tout ça aurait mérité un tuto, j'ai passé du temps avant de tout comprendre (si j'ai tout compris).
spheris#4 Posté le 23/5/2016 à 08:47:01
Merci pour vos réponses.
Si je comprends bien un code POO,
Tous les objets communiquent entre eux par messages.
Quelques questions simples :

A) doit t on systematiquement dialoguer dans les deux sens ou un simple appel peut se faire?
B) Comme dans le post de linuxos, est-ce correct d'aller chercher une donnée dans un module extérieur comme il l'a fait dans son exemple post2.
Non pas que je ne suis pas d'accord linuxos, je le fais tout le temps, dans le cas d'une programmation structurelle.
Dans le cas d'une poo, je me demande si cela est correct.
En regardant le code de gambix, je ne vois jamais un echange de donnée dans des modules.

C) pourquoi le click de bouton, ou évènements sur n'importe quel widget est PUBLIC?
Normalement, ces évènements ne doivent pas être PRIVATE et visible que par notre Form?

Comme tu l'as dit Patrick, le besoin de tuto se fait vraiment sentir.
;)
Flachy Joe#5 Posté le 23/5/2016 à 19:22:39
Iguane : Il Gambas Uniquement pour Activer ses NEuronesspheris : il faut adapter tes classes à tes besoins, pas l'inverse.
Commence par faire un schéma de dépendance de tes classes puis interroge toi pour chacune sur les données auxquelles elles doivent accéder.

donc A : le sens unique est courant, par exemple on attribue des valeurs à des propriétés puis on lance un calcul et on récupère un résultat : aucune raison de lire ce que contiennent les propriétés, c'est le résultat qui compte.

B : "Est-ce correct" n'est pas une bonne question : soit ça marche soit ça marche pas. Quant au degrés d'optimisation, il peut se situer à différents endroits (lisibilité du code, vitesse d’exécution, vitesse de codage, etc).

C : le clic de bouton est déclenché par un événement extérieur dont la classe n'est qu'un observateur, il faut que le gestionnaire d'évènements puisse lancer la procédure.
;) Flachy Joe ;)
spheris#6 Posté le 23/5/2016 à 21:22:24
merci Flachy Joe pour ces précieuses infos.
;)
Patrick#7 Posté le 24/5/2016 à 18:59:43
J'ai mis un petit bout de code dans exemples et tutos.
Bonne soirée.
1