COMMENT CRÉER UN MODULE DE CLASSE

mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005 - 28 janv. 2005 à 05:32
 Utilisateur anonyme - 20 févr. 2007 à 21:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29138-comment-creer-un-module-de-classe

Utilisateur anonyme
20 févr. 2007 à 21:48
Vraiment du beau travail. Merci pour nous.
Le concept de classe est vraiment un casse tête au départ. On est tous tentés de se demander ce que ça peut apporter de plus qu'un module de code.
Je plancher sur ton travail et je suis sûr de m'endormir moins ignare.

Chapeau bas!
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009
20 sept. 2006 à 20:21
Salut a tous,

Tout dabord merci pour ce tuto il m'a bien aidé à débuter dans la programmation objet.

Je crois comprendre pourquoi nous avons du mal à définir une propriété par défaut avec la première méthode que tu décri:

Il y a une faute de frappe. Ce n'est pas dans le menu Option que l'on trouve "Attributs de procédure" mais dans le menu outil.

Voila mais je pense que tout le monde s'en étaient aperçut.

Salut et encore merci.
Damien
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
11 mars 2006 à 12:04
Ca fait un moment que je n'ai rien ajouté à ce tutorial.. Est-ce que vous avez des questions ? des points à éclaircir ? des idées à approfondir ?
Participez à l'élaboration du tutorial ;)
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
17 mars 2005 à 03:01
Enfin Kk1 ki retourne qqchose dans ces fonctions _
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
3 mars 2005 à 23:03
Bonjour tout le monde :)
Désolé pour tout ce retard, mais j'étais un peut pris...
Bref, voici (encore) une mise à jour :p avec une F.A.Q. un peut enrichie par les commentaires que j'ai pu lire ici. Si vous avez d'autres questions, n'hésitez pas :)
Gery4u Messages postés 1 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 25 février 2005
25 févr. 2005 à 19:30
Je l'ai pas encore vu mais juste pour vous dire comment j'apprecie le site il est magique il fallait pareil truc a la famille salut a tous les codeurs les gars notre metier est simplement genial
cqui789 Messages postés 261 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 18 mai 2009 3
13 févr. 2005 à 13:17
3/10 paske ecrit trop petit... NON je plaisante 10/10 parce que c'est clair et facile a comprendre.

Pour ce qui est de la valeur par defaut, tu nous indique la propriete par defaut mais pas comment faire pour que quand on cree un nouvel objet, les proprietes prenent une valeur precise.

en decorticant une source, j'ai cru comprendre que les sub suivantes sont appelees quand on cree un nouvel objet, peux-tu en parler dans le tutorail si j'ai raison?

Set MonObjetCString = New CString
appelle?
Private Sub Class_Initialize()

et
Set MonObjetCString = Nothing
appelle?
Private Sub Class_Terminate()
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
13 févr. 2005 à 12:48
Je proposais une distinction sommaire, à demi fausse mais relativement simple à saisir pour un début (et facile à nuancer par la suite), à savoir : quand tu rédiges une méthode, elle renvoie quelque chose (comme ta méthode EnString par exemple, qui renvoie un numéro formaté), mais quand tu rédiges une propriété, celle-ci peut à la fois renvoyer et définir quelque chose (exemple déjà pris de Check.Value). Bien sûr, cette distinction est fausse. Mais elle garde l'essentiel pour un début. Comme on dit en musique, le rythme d'abord, l'art ensuite. Mais bon, si mon point de vue est aberrant, je te prie de m'en excuser par avance, car je croyais bien faire.

Cacophrène
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
12 févr. 2005 à 23:11
Cacophrène ?!

Je ne comprend pas ton explication.

Une méthode peut agir comme bon te semble. Tu peut y mettre le code que tu désire.

Une classe télephone peut contenir 3 propriété : Code regional, suffixe, prefixe.

Une methode "EnString" qui retourne le numero de telephone formatté a ta convenance.

Les propriétés peuvent être en lecture, ecriture ou lecture/ecriture.

Le tout est une question d'ergonomie et de structure.
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
12 févr. 2005 à 20:53
Comme définition en première approche, on peut dire qu'une PROPRIETE est ce qui permet à la fois de définir (Property Let) et de renvoyer (Property Get), tandis qu'une METHODE ne peut que renvoyer. Comme exemple, on peut citer, pour un objet CheckBox, la propriété value qui autorise Check.Value = checked ou Check1.Value (définir ou renvoyer --> propriété), et la méthode Refresh, qui n'a de syntaxe que Check.Refresh. Voilà tout... Mais excellent quand même. 10/10 !

Cacophrène
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
3 févr. 2005 à 04:32
dommage kon puisse pas voter + d1 fois ... ;)
cs_salazar Messages postés 241 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 février 2006 1
1 févr. 2005 à 16:17
Salut Psykocrash,

Merci pour le code et le tutorial que tu as créé. Le tutorial est vraiment très intéressant et explique bien le role de la classe (meme si je ne comprends pas tout).
Cependant, il est dommage que dans ton code, tu n'aies pas repris mon projet d'échange de données entre DLL et appli, car, hors contexte je ne sais pas du tout comment utiliser ta classe.
http://www.vbfrance.com/code.aspx?id=29095

J'ai tout de meme trouvé une solution, qui est loin d'etre celle que tu as tenté de m'expliquer, c'est dommage...

Je te mets 10/10 pour ta rapidité à m'avoir répondu et pour ton tutorial très instructif. Continue comme ça!!!
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
31 janv. 2005 à 21:12
Nouvelle mise à jour, avec au menu une méthode beaucoup plus simple pour déclarer une propriété par défaut, une comparaison entre modules et modules de classe, et enfin le projet sous Visual Basic 6 de l'exemple pratique n°2.

Merci à vous tous pour vos commentaires, cela me permet d'améliorer mon tutorial :o)

Cordialement,
Psykocrash
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
31 janv. 2005 à 15:27
Petite erreur a la compil avec l'évènement. Les parametres ne correspondent pas avec la description dans la classe.

j'ai corrigé de cette facon Private Sub MonObjetCString_NouvelleChaine(ByVal Contenu As String, ByVal longue As Long)

pour la form et j'ai ajouté BYVAL a la declaration dans la classe.

Je ne trouve pas encore la valeur par defaut a une propriété.

Merci.
dthuler Messages postés 121 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 29 avril 2009
30 janv. 2005 à 23:40
Voilà un travail qui me semble très intéressant...
moi qui me demande à quoi pouvait bien servir ces sacro-saintes classes... je vais lire ça avec attention, merci...
arnohoho Messages postés 77 Date d'inscription mercredi 17 septembre 2003 Statut Membre Dernière intervention 24 août 2005
30 janv. 2005 à 02:08
je vais regarder le tutorial mais je te remercie d'avance pour ce boulot qui servira à d'autres

quand j'aurai lus le tuto je te dirai ce que j'en pense

a+
mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005
29 janv. 2005 à 05:23
:) Psyckokrash bien sûr que je n' ai pas noté... Je commente mais ne note la note finale! Je jette un oeil à la mise à jour dès que possible!

Si tu veux mon avis... Pour faire quelque chose de vraiment complet,

Il faudrait commencer par comparer le rôle du module avec celui du module de classe.

Puis faire une entrée en matière avec les types utilisateurs. Ceci dit, c'est également l' opportunité de présenter la programmation orientée objet! Le tutorial s' adresse à un niveau moyen, correct? Un rappel constitue souvent une bonne transition tout en posant les bases du discours à venir.

Enfin, terminer avec un exemple concret de classe, très simple et évident, comme par exemple créer une classe voiture, lui attribuer quelques propriétés comme la marque ou la couleur... avec des valeurs par défaut -très bonne question d' ailleurs- avant de tester le code directement dans un formulaire, qui pourrait être inclus aux fichiers du tutorial :)

Continues, tu as mon support le plus complet!
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
29 janv. 2005 à 01:38
D'accord. Mais je trouve quand même que l'intérêt de créer ce genre de choses ("les class") n'est pas frappant dans ton tutorial. Quand j'ai commencé, j'ai mis un sacré paquet de temps avant de comprendre d'un, l'intéret véritable de se "prendre la tête" avec ces trucs, et de deux, à quel point ce n'était pas si compliqué qu'il le paraissait.
Je crois que le concept d'encapsulation mérite tout de même une attention plus grande pour que les newbies comprennent bien.
Mais bon, c'est personnel comme remarque.
@++
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
28 janv. 2005 à 23:40
ScSami :
Je ne suis pas de ton avis en ce qui conserne les modules qui sont là pour rassembler diverses fonctions qui n'ont pas de lien apparent ensembles. Par contre, les modules de classes sont là justement pour regrouper des fonctions liées (l'encapsulation).
Supposons que nous ayons un ensemble de fonctions qui traitent une base de données, pourquoi les mettre dans un module alors qu'un module de classe serait plus efficace ? un module de classe permet d'avoir des propriétés, ce que ne permet pas les modules, et de même pour les évènements. Il permet aussi de contrôler l'accès aux données, de créer un "traitement interne" non visible pour l'utilisateur, etc.

Pour ce qui est de l'encapsulation, je ne pense pas que ce soit adapté à ce tutorial étant donné que j'explique comment créer un module de classe, je ne fais pas un cour sur la programmation orientée objet. Cela dis je peux mettre quelques lignes là dessus dans le tutorial si vous voulez.

-> Un tutorial sur les contrôles ActiveX ? Pourquoi pas :o)
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
28 janv. 2005 à 21:20
C'est utile, continue comme ça, c'est utile...

Ceci dit, je ne suis pas entièrement d'accord avec toi lorsque tu dis :
"Le fait de réécrire des fonctions que l'on a l'habitude d'utiliser pour chaque nouveau programme est une tâche longue et inutile.
Les objets sont là justement pour remédier à ce problème."

Non, les modules sont là pour ça. En effet, tout l'intéret des objets sont leur emcapsulement et justement, tu n'en parles pas !!!
Je trouves que tu devrais un peu plus détailler ce qu'est un objet en utilisant, par exemple, la si connue comparaison avec les plats à tarte réutilisables.

On attend maintenant le tuto pour les Contrôles ActiveX ;-)
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
28 janv. 2005 à 19:11
JoePatent :
Bien sûr qu'il est possible de donner des valeurs par défaut. J'ajouterais un commentaire là dessus dans la mise à jour (qui sera prête d'ici quelques minutes).

PS : Merci pour le 9/10 sa fait plaisir :p
cs_LeVoleur Messages postés 15 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 11 juillet 2005
28 janv. 2005 à 15:31
Super bien expliqué et commenté
merci
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
28 janv. 2005 à 14:30
Est-il possible de mettre une propriété par défaut dans une classe ?

Le wizard de classe permet de le faire, mais le code généré par la suite ne réflète pas ce changement.
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
28 janv. 2005 à 12:22
Pas de problème, je vais mettre à jour le tutorial en ajoutant une deuxième classe qui utilise des API et en expliquant le rôle de l'instruction "Set". Si je n'ai pas utilisé d'API dans l'exemple, c'est pour avoir un code simple, sans code superflu qui pourais porter à confusion pour la compréhension du code.

Sinon, merci pour le 8/10, dommage que tu n'ai pas mis la note dans l'espace réservé à cet effet plus haut :p

Si tu as d'autre suggestions pour améliorer le tutorial, n'hésite pas :o)
mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005
28 janv. 2005 à 05:32
C'est pas mal, mais tu aurais pu insister plus sur l' instruction Set, qui crée une nouvelle instance de classe.
Aussi tu aurais pu employer un exemple utilisant au moins une API pour montrer la puissance de la classe...
Bon sinon c'est correct 8/10!
Rejoignez-nous