Lexique

Messages postés
81
Date d'inscription
vendredi 19 septembre 2014
Statut
Membre
Dernière intervention
15 octobre 2014
- - Dernière réponse : CoDubai
Messages postés
81
Date d'inscription
vendredi 19 septembre 2014
Statut
Membre
Dernière intervention
15 octobre 2014
- 28 sept. 2014 à 18:53
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/source/100753-lexique

Afficher la suite 
jordane45
Messages postés
25817
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 juin 2019
312 > CoDubai
Messages postés
81
Date d'inscription
vendredi 19 septembre 2014
Statut
Membre
Dernière intervention
15 octobre 2014
-
Tu m'a conseillé ce site, et je t'en remercie, parce que c'est très instructif.
J'ai pas l'intention d'utiliser la sérialisation. Les flux me suffisent amplement.
Ce site avait pour principal but de te montrer comment est constitué une CLASS....
Avec ses Propriétés ( avec les SET et les GET ) Et ses Méthodes ( les SUB )

Une CLASS avec "que" des DIM ... tel que tu l'as écrit... n'est pas vraiment "conforme"....


Je ne comprend pas ta question. .. où ? Dans quoi ? ...
Les variables que tu as déclaré dans tes classes pourraient être assimilées à des Propriétés
http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-vb-net/concepts-avances-1
Lorsque vous voudrez utiliser cette propriété vous n'aurez plus besoin d'écrire MaClasse.Variable(0), mais seulement MaClasse(0).
Si je t'ai posé la question.. c'est que tu as balancé un bout de phrase ... sans queue ni tête... dans le sens où... même si je t'ai "conseillé" ce lien.. je n'en connait pas le contenu par coeur. !!
Et puis.... même si on est doué... nous ne sommes toujours pas DEVINS !
Donc lorsque tu écris quelque chose (ici ou sur le forum...) il faut que ça soit compréhensible par TOUS ....
Jusqu'à maintenant ... les trois quarts de tes interventions n'ont pas été comprises par la plus part des personnes qui les ont lues.. ( Il n'y a qu'à voir la réponse de Nhenry dans cette discussion : http://codes-sources.commentcamarche.net/forum/affich-10036156-audience-internationale#1

Pour revenir sur une précédente discussion .... oui il faut parler (écrire) FRANÇAIS .... sur ce forum ... vu que c'est un forum Francophone. (et puis c'est indiqué dans la charte du site !)
Le langage utilisé sur le site se doit d'être un français compréhensible par tous (pas de langues étrangères, pas de SMS, ni d'abréviations)

Et pour finir.... lorsque tu postes une source sur ce site... c'est que le programme est terminé... fonctionnel et a un intérêt POUR LA COMMUNAUTÉ.... on ne poste pas un programme "presque terminé" juste pour demander l'avis des membres.....

Si tu as besoin d'aide pour ton projet.. tu ouvres des discussions SUR LE FORUM et non dans les commentaires de sources....Et bien entendu... tu décris précisément et de façon la plus claire possible ton souci... sans quoi ... personne ne sera capable de te répondre ... et au risque de voir ta question supprimée si elle ne respecte pas la charte.

De plus... on ne postes QUE LE CODE SOURCE... pas les EXÉCUTABLES ! (déjà plusieurs remarques à ce sujet il me semble !).


Bref... bonne continuation.
Cdt,
Jordane.
Whismeril
Messages postés
13450
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 juin 2019
280 > jordane45
Messages postés
25817
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 juin 2019
-
Bonsoir, je n'ai pas lu le code car VB.Net je ne maitrise pas. Mais dans la majorité de tes message tu parles d'encapsulation, si j'en crois ce que je lis au dessus tu n'en fais pas. Surprenant non?

On va parler en C# , parce que je le maitrise mieux et que les mots clés sont "plus clairs" : private ou public.
La grosse différence dans ce code est que pour déclarer une variable on dit si elle est publique ou privée, on met son type et son nom.

Le fait d'encapsuler une donnée est l'action de la protéger en dehors de la Class.

Par exemple une classe Personne avec Nom, Date de Naissance et GetMatricule():
    class Personne
    {

        public Personne()
        {

        }

        private string nom;//variable privée

        public string Nom//encapsulation par une propriété
        {
            get { return nom; }
            set { nom = value; }
        }
        

        private DateTime dateNais;//variable privée

        public DateTime DateNaissance//encapsulation par une propriété
        {
            get { return dateNais; }
            set { dateNais = value; }
        }
        

        /// <summary>
        /// Retourne un matricule constitué des 3 premieres lettres du nom en majuscule et du ticks de la date de naissance
        /// </summary>
        /// <returns></returns>
        public string GetMatricule()//encapsulation par une méthode
        {
            return nom.Substring(0, 3).ToUpper() + dateNais.Ticks.ToString();
        }
}


Dans cet exemple on voit bien que la classe peut faire ce qu'elle veut de nom et de dateNaiss, par contre "l'extérieur" doit passer par Nom, DateNaissance et GetMatricule(), les variables sont donc protégées. C'est ça l'encapsulation.

Je passe le code dans un traducteur automatique pour que tu le voies en VB (ps VB n'aime pas Nom et nom alors nom est devenu nom_Renamed)
 Friend Class Personne

		Public Sub New()

		End Sub

		Private nom_Renamed As String 'variable privée

		Public Property Nom() As String 'encapsulation par une propriété
			Get
				Return nom_Renamed
			End Get
			Set(ByVal value As String)
				nom_Renamed = value
			End Set
		End Property


		Private dateNais As Date 'variable privée

		Public Property DateNaissance() As Date 'encapsulation par une propriété
			Get
				Return dateNais
			End Get
			Set(ByVal value As Date)
				dateNais = value
			End Set
		End Property


		''' <summary>
		''' Retourne un matricule constitué des 3 premieres lettres du nom en majuscule et du ticks de la date de naissance
		''' </summary>
		''' <returns></returns>
		Public Function GetMatricule() As String 'encapsulation par une méthode
			Return nom_Renamed.Substring(0, 3).ToUpper() & dateNais.Ticks.ToString()
CoDubai
Messages postés
81
Date d'inscription
vendredi 19 septembre 2014
Statut
Membre
Dernière intervention
15 octobre 2014
> Whismeril
Messages postés
13450
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 juin 2019
-
Bonjour Whismeril,

"Le fait d'encapsuler une donnée est l'action de la protéger en dehors de la Class."

Je dirais que c'est une utilisation intéressante de l'encapsulation quand on parvient au stade ultime du développement d'une application.

Encapsuler une donnée permet de contrôler son utilisation. Protéger, par exemple.

J'utilise le verbe encapsuler au sens Ada.
http://en.wikipedia.org/wiki/Ada_(programming_language)

Je m'en sert pour limiter l'accès de mes Objets aux propriétés suffisantes et nécessaires, par souci de lisibilité, et cela facilite le développement de la couche suivante. Quand j'ai fixé la position relative des champs d'une fiche, leurs paramètres n'apparaissent plus dans l'objet qui encapsule la fiche, et cela n'empêche pas d'y accéder.
Si vous voulez un exemple, laissez moi poster PHOTO.
On pourrait multiplier les débats. et c'est une des raisons que je préfère BASIC.
le sujet n'y est débattu que dans le sens pragmatique immédiat.
Les Pascaliens l'ont appliqué en premiers avec Delphi. Ils ont certainement des tas de forums sur le sujet. (et des sujets dans le tas)
Si vous les contactez, profitez de leur demander pour Pimlico ; ma calculette n'a pas assez de chiffres significatifs.

J'ai assez de soucis avec notre Lexique.
Bonne encapsulation,
Merci, a bientôt,
CoDubai.
Whismeril
Messages postés
13450
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 juin 2019
280 > CoDubai
Messages postés
81
Date d'inscription
vendredi 19 septembre 2014
Statut
Membre
Dernière intervention
15 octobre 2014
-
Bonjour, je ne connais pas ADA alors j'ai lu wikipédia, l'article en français....
Il y est écrit qu'Eiffel découle de ce langage, or dans l'article que je t'ai mis en line plus haut il est écrit qu'Eiffel est très fermé du point de vue de l'extérieure.

Or dans ton code (que cette fois j'ai téléchargé, lu et essayé) depuis la form on a accès au bouton, et aux 2 combos, donc tu n'appliques pas l'encapsulation au sens d'Ada.
Encapsuler une donnée permet de contrôler son utilisation. Protéger, par exemple.
C'est exactement la définition et ce que tu ne faits pas.

Ce que j'essaye de te faire comprendre, c'est que tes messages sont souvent incompréhensibles car les termes n'ont pas de liens entre eux, ou le code présenté est l'opposé de ce qui est écrit.
Il faudra mieux pour tout le monde de parler simple et juste.

PS tu as toujours le bug avec VS2010 que je t'ai déjà signalé dans la méthode FontInit()
    Sub FontInit()
        Dim i As Short = 0
        Dim S As String
        For i = 0 To ComboFont.Items.Count - 1
            'IO.File.WriteAllBytes(apath & "\NewFont.ttf", My.Resources.)'copie depuis une ressource
            S = apath & "\Graphics" & ComboFont.Items(i) & ".ttf"
            Try
                PFC.AddFontFile(S)
                FontList.Add(CastFont(S))'déplacer cette ligne dans le Try évite des problèmes en mode création pour afficher une form avec le contrôle.
            Catch ex As Exception
                Dim toto As Short = 0
                'Ressources... Erreur de fichier, extension en majuscules, Mauvais dossier 
            End Try

        Next
    End Sub
CoDubai
Messages postés
81
Date d'inscription
vendredi 19 septembre 2014
Statut
Membre
Dernière intervention
15 octobre 2014
> Whismeril
Messages postés
13450
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 juin 2019
-
Bonjour Whismeril,

Merci pour tous ces conseils.

Je ne connais que la tour. J'ignorais qu'on encapsulait déjà en ce temps là, ...

Je peine avec le concepteur, et n'oublierais pas de vérifier la présence des fichiers des que je me familiarise avec leur gestion. (Il est la , le bug.)
Mes derniers essais sont prometteurs. le programme fonctionne parfaitement mais le concepteur fait une indigestion. (Probablement une erreur d'encapsulation) Il ne trouve pas un fichier de l'explorateur de solutions (semble dissous). Comment le compilateur fait pour rester si parfait dans ces conditions ? Je cherche plus. Je m'applique a trouver une solution qui convient a tous.
Je pourrais mettre une directive qui évite le try mais il faudrait être très rigoureux avec les fichiers d'essai. Les messages sont informatifs et le programme continue.
C'est pas beaucoup plus de travail de charger tous les fichiers ttf automatiquement.
La nouvelle version 2 permet d'affecter comme qu'on veut. Il y a tant de solutions a ce défaut .Rien que d'en choisir une mérite réflexion que je met a profit pour avancer la version 3.
Je me garde le DOS pour plus tard. Je suis encore dans la ... Calligraphie c'est pas mal pour le travail des fontes. J'en suis encore a chercher des bon mots. Et c'est pas gâteau sans l'argot.

Je protège plus rien. tout public. C'est mieux pour un travail a l'essai.
Si ca continue, j'abandonne le concepteur. Studio peut presque s'en passer.
Juste la Form de démarrage, et hop. oublie. Y a pas PHOTO.

Je voudrais pas avoir l'air d'insister, mais l'intérêt majeur de la POO c'est de placer les fonction dans la même structure que les données. Si ca permet de protéger les données, c'est tant mieux, Et si le fait de protéger les données améliore les performances par l'allègement des tables d'adressage virtuel, c'est encore mieux.
sans compter que ca permet d'encapsuler..
J'y penserai quand je commencerais a recevoir des avertissements OVERFLOW.
et si ca rame. Je connaitrais mieux les limites de ma machine. Sera temps de protéger les donnes et les fonctions contre les messages malveillants du gestionnaire de la mémoire.

N'hésitez pas si vous voyez des erreurs, ce n'est pas que je note pas, mais ...
je le ferais en son temps. Je n'en suis qu'au début, et ... User Ctrl est plus exigeant qu'il n'y parait.

La version 3 est inévitable. Le programme est parfaitement idiot sans RighToLeft.

Je plonge dans mon défi de satisfaire le concepteur.
J'en profite pour réviser ma conception. (J'aurai préféré pas réfléchir) en souplesse.

A bientôt.

Ps. Si je prends mon temps pour corriger ce détail, c'est qu'il est important. Que dira-t-on des paramètres inutilisées ?
Commenter la réponse de CoDubai