IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Matrice dynamique d'objets


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Points : 70
    Points
    70
    Par défaut Matrice dynamique d'objets
    Bonjour,
    Après quelques essais infructueux, j'ai réussi à faire tourner un petit programme qui instancie un objet de la classe à la fois (chaque objet est unique), le but étant d'implémenter la technique sur un très grand tableau dynamique de données.
    Le programme implémente une classe de "nombres" et déclare une matrice dynamique d'objets de cette classe.
    Est ce que la méthode utilisée ci-dessous est la bonne ou y a t-il plus simple, plus élégant, plus performant ?
    Merci d'avance,
    Bruno

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Public Class Form1
        Dim ArrayOfNumbers() As Numbers
        Dim n As Integer
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            TextBox1.Text = 1
            TextBox2.Text = 2
            TextBox3.Text = 3
            n = 0
        End Sub
     
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            n += 1
            ReDim Preserve ArrayOfNumbers(n)
            ArrayOfNumbers(n) = New Numbers(n)
            ArrayOfNumbers(n).sItem1(n * CDbl(TextBox1.Text))
            ArrayOfNumbers(n).sItem2(n * CDbl(TextBox2.Text))
            ArrayOfNumbers(n).sItem3(n * CDbl(TextBox3.Text))
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            MessageBox.Show(ArrayOfNumbers(n).gItem1.ToString)
        End Sub
    End Class
     
    Class Numbers
        Private Id As Integer
        Private Item1 As Double
        Private Item2 As Double
        Private Item3 As Double
        Public Sub New(i As Integer)
            Id = i
            Item1 = 0
            Item2 = 0
            Item3 = 0
        End Sub
     
        Sub sItem1(d As Double)
            Item1 = d
        End Sub
        Sub sItem2(d As Double)
            Item2 = d
        End Sub
        Sub sItem3(d As Double)
            Item3 = d
        End Sub
     
        Function gItem1() As Double
            gItem1 = Item1
        End Function
    End Class

  2. #2
    Membre averti Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Points : 372
    Points
    372
    Par défaut
    Citation Envoyé par __bv__ Voir le message
    Bonjour,

    Est ce que la méthode utilisée ci-dessous est la bonne ou y a t-il plus simple, plus élégant, plus performant ?
    Merci d'avance,
    Bruno
    bonjour,

    Pourquoi ne pas utiliser une Collection ou une List plutôt qu'une matrice 1D ?

    et puis dans l'objet, au lieu de faire 3 sub, tu n'en fais qu'une et tu appelles la propriété à changer comme paramètre.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Citation Envoyé par Elthorn Voir le message
    bonjour,

    Pourquoi ne pas utiliser une Collection ou une List plutôt qu'une matrice 1D ?

    et puis dans l'objet, au lieu de faire 3 sub, tu n'en fais qu'une et tu appelles la propriété à changer comme paramètre.
    Je suis d'accord pour la Collection (List) en revanche, moins pour les 3 sub. __bv__ a implémenté un getter/setter pour les champs de sa classe. J'aurais plutôt tendance à lui conseiller d'utiliser des Property.

  4. #4
    Membre averti Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Points : 372
    Points
    372
    Par défaut
    Citation Envoyé par ebastien Voir le message
    Bonjour,

    Je suis d'accord pour la Collection (List) en revanche, moins pour les 3 sub. __bv__ a implémenté un getter/setter pour les champs de sa classe. J'aurais plutôt tendance à lui conseiller d'utiliser des Property.
    En effet, j'avais pas percuté que c'était des private et non des property...

  5. #5
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Au risque de sembler un peu idiot ...
    Pourquoi donc se donner tant de mal pour gérer un tableau dynamique de Double ?

    Pourquoi pas :

    Déclaration prélable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim MonTableauDynamique(0) As Double   ' L'indice 0 du tableau est exploitable
    Là il faut ajouter un élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            MonTableauDynamique(MonTableauDynamique.Count - 1) = 1  ' Affectation au dernier indice disponible
            ReDim Preserve MonTableauDynamique(MonTableauDynamique.Count) ' Prépare un dernier indice pour la prochiane fois
    Et remarquez qu'un tel tableau dispose de méthodes et propriétés utiles à la plupart des traitements ...Nom : TabDyn.jpg
Affichages : 130
Taille : 13,6 Ko

    ...

  6. #6
    Membre régulier
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Points : 70
    Points
    70
    Par défaut
    Merci pour ces indications.
    Je vais regarder ça de plus près. Je ne connaissais pas "Property" ! :-)
    Ce petit bout de code est juste un essai.
    Le tableau utilisé est en fait constitué de pas mal de membres, la plupart sont numériques.

  7. #7
    Membre régulier
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Points : 70
    Points
    70
    Par défaut
    Y a t-il une quelconque différence en performance entre utiliser Property et coder les getters/setters individuellement ?
    Il me semble qu'avec Property VB crée les accessors au moment de la compilation, non ?

  8. #8
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    A mon avis, une fois compilé, il n'y a pas de différence entre les Property et les autres moyens de programmer des accesseurs.
    Simplement, pour le programmeur Property offre des facilités pour définir l'accessibilité READONLY, WRITEONLY, READ_WRITE.
    Sans Property, il faut écrire une fonction (pour le Read only), une procédure (pour le Write Only) et une fonction avec un argument approprié pour faire le Read-Write.
    Sauf erreur de ma part ...

  9. #9
    Membre régulier
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Points : 70
    Points
    70
    Par défaut
    Oui, j'imagine que c'est plus élégant avec Property.
    En tant qu'ancien développeur C++ (autrement dit stakhanoviste maso) , je ne connais pas toutes ces nouveautés.

    Je me demande aussi si il n'est pas possible d'énumérer les champs et en fin de compte pouvoir traiter la matrice comme une matrice 2D et accéder facilement à n'importe quelle donnée ?

  10. #10
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    C'est drôle de communiquer ainsi sur 2 discussions distinctes mais visant finalement le même objectif : Excel <==> VB, non ?

    Pour ce qui de ta dernière question :
    Je me demande aussi si il n'est pas possible d'énumérer les champs et en fin de compte pouvoir traiter la matrice comme une matrice 2D et accéder facilement à n'importe quelle donnée ?
    Que les accesseurs soient des Property ou des Function et Sub, il y a toujours des données à passer et/ou recevoir par paramètres et/ou valeurs de retour. Ces données peuvent être véhiculées sous forme de valeurs de types de base (Integer, Double, Char, Byte, ...), ou sous forme d'assemblage de ces valeurs de types de base (tableaux, structures), ou encore intégrées dans des instances de classe (Dim UnNombre As New MaClasseDeNombres).
    Vu ainsi, je pense que tu peux aisément passer des lots de données dans les accesseurs.
    J'espère que ceci répond bien à ta question ...

  11. #11
    Membre régulier
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Points : 70
    Points
    70
    Par défaut
    Oui ! Il est vrai que je mélange un peu les deux sujets.
    Ma question aurait une réponse plus simple avec Access ou autre base de données SQL où on peut accéder au Field No et donc traiter les données avec un numéro d'enregistrement et un numéro de champ. Il est probable que j'en viendrai là prochainement pour pouvoir traiter mon tableau de type classe de nombres comme un tableau 2D, si toutefois c'est vraiment nécessaire au niveau performance.

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/12/2005, 22h20
  2. Réponses: 5
    Dernier message: 13/11/2005, 19h10
  3. Création dynamique d'objets ?
    Par Arthur A. dans le forum C++
    Réponses: 6
    Dernier message: 15/06/2005, 23h55
  4. création dynamique d'objet, projet win32
    Par noinneh dans le forum MFC
    Réponses: 5
    Dernier message: 03/02/2005, 16h07
  5. [Reflexivite]création dynamique d'objet et Héritage
    Par norkius dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 26/10/2004, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo