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 :

Programmation objet VB.Net


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Par défaut Programmation objet VB.Net
    Bonjour à tous,

    J'ai développé, dans le cadre de mon examen, une application permettant la gestion de réservations de séance de cinéma.

    Si le thème importe peu, l'obligation ici et que l'application doit être programmée en objet.

    Ma question porte sur la méthode, car pour le moment, l'application fonctionne parfaitement mais je ne suis pas sûr d'avoir correctement utilisé l'objet, je m'explique :

    Actuellement, mon application utilise trois classes métiers (client, film, projection) et une classe technique (Connexion) qui me permet donc d'exécuter diverse requête sur ma base de données.

    Par exemple, pour remplir mon objet FILM, je procède ainsi :
    Appel depuis le programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    strRequete = "SELECT titreFilm FROM FILM WHERE idFilm=" & X
    objFilm = New Film(strRequete)
    FilmsListBox.Items.Add(objFilm.GetTitreFilm())
    Constructeur de la classe FILM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Sub New(ByVal UneRequete As String)
            Dim objConnexionBDD As Connexion
            objConnexionBDD = New Connexion(UneRequete)
            strTitreFilm = objConnexionBDD.ExecuteSelect("titreFilm")
            strDescriptionFilm = objConnexionBDD.ExecuteSelect("DescriptionFilm")
            . . .
    End Sub
    Constructeur de la classe CONNEXION :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Sub New(ByVal UneRequete As String)
     
      objConnexion = New SqlConnection(My.Settings.ChaineConnexion)
      objCommande = New SqlCommand(UneRequete, objConnexion)
     
    End Sub
    Fonction ExecuteSelect de la classe Connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Function ExecuteSelect(ByVal Propriete As String) As String
            Dim ValeurRetour As String = ""
            objLecteur = objCommande.ExecuteReader()
            objLecteur.Read()
            ValeurRetour = CStr(objLecteur(Propriete))
            objLecteur.Close()
            objConnexion.Close()
     
            Return ValeurRetour
        End Function
    Ma question est : Est-ce la bonne manière d'utiliser l'objet FILM ? La requête principale ne doit-elle pas se trouver plutôt dans le constructeur et non pas dans le programme principal ?

    je pensais avoir bien programmé le tout mais on m'a affirmé le contraire c'est pourquoi je me tourne vers vous avant de tout chambouler.

    Merci à vous !

  2. #2
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bonjour,

    La comme ça, j'ai du mal a tout cerné.
    Il n'y a pas tout et ça fait un moment que je n'ai pas fait de connexion à une BDD.

    Mais non je trouve que l'utilisation est correcte.
    Si ce n'est les fonction "Public Sub New", elles n'ont pas de nom?

    dans ta classe FILM j'aurais mis plus de paramètres,
    plutôt que de rentrer en dur le "titreFilm" et "DescriptionFilm"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strTitreFilm = objConnexionBDD.ExecuteSelect("titreFilm")
    strDescriptionFilm = objConnexionBDD.ExecuteSelect("DescriptionFilm")
    je ne vois pas ou est le soucis,
    peux tu nous mettre l'intégralité de ton code *dans des blocs séparés bien sur
    *ex: 1 bloc -> 1 class*

    PS: c'est beaucoup mieux avec les balises

  3. #3
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Je ne suis pas un expert mais pour moi, tes objets Film, Client , etc. ne devraient contenir que des données et aucune méthode de remplissage/sauvegarde. Après il a été dit et redit qu'il n'y a pas qu'une méthode..

    Je laisserais le soin aux personnes plus expérimenté de réagir si nécessaire mais le problème de l'architecture multi-couches a déjà beaucoup été abordé, notamment ici. Je pense que tu y trouveras les infos que tu souhaites.

    ++

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    on ne fait pas une requete par colonne à rapatrier !
    après faire de l'objet, c'est pas seulement au niveau de la connexion aux données, mais c'est surtout l'utilisation au niveau de l'ihm
    si par exemple tu as un listbox, si tu mets des string dedans c'est pas OO, si tu mets des instances de film par exemple, là ca l'est
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Par défaut
    D'abord merci pour ces réponses rapides !

    Voici mon code :

    Ma Classe FILM :
    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
    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
     
    Imports ConnexionClass
    Imports ProjectionClass
    Public Class Film
        Private strTitreFilm As String
        Private strDescriptionFilm As String
        Private strImageFilm As String
        Private strDureeFilm As String
        Private decNoteMoyenneFilm As Decimal
        Private intIdFilm As Integer
        Private nbFilms As Integer
     
        Public Sub New(ByVal UneRequete As String)
            Dim objConnexionBDD As Connexion
            objConnexionBDD = New Connexion(UneRequete)
            strTitreFilm = objConnexionBDD.ExecuteSelect("titreFilm")
            strDescriptionFilm = objConnexionBDD.ExecuteSelect("DescriptionFilm")
            strImageFilm = objConnexionBDD.ExecuteSelect("ImageFilm")
            strDureeFilm = objConnexionBDD.ExecuteSelect("DureeFilm")
            decNoteMoyenneFilm = CDec(objConnexionBDD.ExecuteSelect("NoteMoyenneFilm"))
            intIdFilm = CInt(objConnexionBDD.ExecuteSelect("idFilm"))
            nbFilms = CInt(objConnexionBDD.ExecuteSelect("NbFilms"))
        End Sub
     
     
        Public Function GetImageFilm() As String ' // Retourne le chemin de l'image du film
            Dim CheminImage As String
     
            CheminImage = strImageFilm
     
            Return CheminImage
        End Function
     
        Public Function GetNoteFilm() As Decimal '//  Retourne la note moyenne du film
            Dim NoteFilm As Decimal
     
            NoteFilm = decNoteMoyenneFilm
     
            Return NoteFilm
        End Function
     
        Public Function GetDureeFilm() As String '// Retourne la durée du film
            Dim DureeFilm As String
     
            DureeFilm = strDureeFilm
     
            Return DureeFilm
        End Function
     
        Public Function GetDescriptionFilm() As String '// Retourne la description du film
            Dim DescriptionFilm As String
     
            DescriptionFilm = strDescriptionFilm
     
            Return DescriptionFilm
        End Function
     
     
        Public Function GetTitreFilm() As String '// Retourne le Titre du Film en fonction de l'Identifiant
            Dim TitreFilm As String
     
            TitreFilm = strTitreFilm
     
            Return TitreFilm
        End Function
     
        Public Function GetIdFilm() As Integer '// Retourne l'id du  Film en fonction de l'Identifiant
            Dim IdFilm As Integer
     
            IdFilm = intIdFilm
     
            Return IdFilm
        End Function
     
        Public Function GetNbFilms() As String ' // Retourne le nombre de films
            Dim NombreDeFilms As Integer
     
            NombreDeFilms = nbFilms
     
            Return NombreDeFilms
        End Function
     
    End Class
    Ma classe CONNEXION :
    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
    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
    96
     
    Public Class Connexion
        Private objLecteur As SqlDataReader
        Private strRequete As String
        Private objCommande As SqlCommand
        Private objConnexion As SqlConnection
        Private objAdaptateurDeDonnees As SqlDataAdapter
     
        Private Function OuvertureConnexion() As Boolean
            Dim Test As Boolean
            Try
                objConnexion.Open()
                Test = True
            Catch ex As Exception
                Test = False
            End Try
     
            Return Test
        End Function
     
        Public Sub New(ByVal UneRequete As String)
     
            objConnexion = New SqlConnection(My.Settings.ChaineConnexion)
            objCommande = New SqlCommand(UneRequete, objConnexion)
     
        End Sub
     
        Public Function ExecuteSelectMultiple(ByVal Propriete As String) As Collection
            Dim CollectionRetour As New Collection
     
            If OuvertureConnexion() = True Then
                objLecteur = objCommande.ExecuteReader
     
     
                Do While objLecteur.Read
                    Try
                        CollectionRetour.Add(objLecteur(Propriete))
                    Catch ex As Exception
     
                    End Try
                Loop
     
                objLecteur.Close()
                objConnexion.Close()
            End If
     
            Return CollectionRetour
        End Function
     
        Public Function ExecuteSelect(ByVal Propriete As String) As String
            Dim ValeurRetour As String
     
            If OuvertureConnexion() = True Then
     
                objLecteur = objCommande.ExecuteReader()
     
                Try
                    objLecteur.Read()
                    ValeurRetour = CStr(objLecteur(Propriete))
     
                Catch ex As Exception
                    ValeurRetour = Nothing
                End Try
     
                objLecteur.Close()
                objConnexion.Close()
     
            End If
     
            Return ValeurRetour
        End Function
     
        Public Sub ExecuteUID(ByVal uneRequete As String)
            If OuvertureConnexion() = True Then
     
                objCommande.Connection = objConnexion
                objCommande.CommandType = CommandType.Text
                objCommande.CommandText = uneRequete
     
                objAdaptateurDeDonnees = New SqlDataAdapter(objCommande)
                objAdaptateurDeDonnees.SelectCommand = objCommande
     
                objCommande.ExecuteNonQuery()
                objConnexion.Close()
            End If
     
        End Sub
     
     
        Public Function GetObjCommande()
            Dim objetCommande As SqlCommand
            objetCommande = objCommande
     
            Return objetCommande
        End Function
    End Class
    Exemple d'appel de la classe FILM dans le programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Imports FilmClass
    Public Class AlafficheForm
        Private objFilm As Film
        Private idFilm As Integer
        Private Sub AffichageFilm()
            objFilm = New Film("SELECT * FROM FILM WHERE idFilm=" & idFilm)
            ApercuPictureBox.BackgroundImage = Image.FromFile(objFilm.GetImageFilm)
            DescriptionLabel.Text = objFilm.GetDescriptionFilm
            DetailsLabel.Text = "Titre : " & objFilm.GetTitreFilm & vbNewLine
            DetailsLabel.Text &= "Durée : " & objFilm.GetDureeFilm & vbNewLine
            DetailsLabel.Text &= "Note moyenne : " & objFilm.GetNoteFilm
            AffichageTimer.Start()
        End Sub
    Mais non je trouve que l'utilisation est correcte.
    Si ce n'est les fonction "Public Sub New", elles n'ont pas de nom?
    Ce sont les constructeurs, ce n'est pas la bonne synthaxe ?

    Merci encore.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    si les constructeurs c'est comme ca

    par contre la classe film c'est tout moche ^^

    déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function GetNbFilms() As String ' // Retourne le nombre de films
            Dim NombreDeFilms As Integer
     
            NombreDeFilms = nbFilms
     
            Return NombreDeFilms
        End Function
    ca se résume à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Public Function GetNbFilms() As String ' // Retourne le nombre de films
            Return nbFilms
        End Function
    après si vous êtes notés au nombre de ligne de code je veux bien croire

    après il faut des property (readonly si nécessaire) plutot que des fonctions

    le new qui demande une requete c'est moyen aussi, un id éventuellement

    et tu peux surement charger toute la liste de film en une seule fois dans une collection, même si tu as des milliers de films ca prendra moins d'1Mo de ram
    comment l'utilisateur choisit le film dont il veut voir le détail ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Par défaut
    le new qui demande une requete c'est moyen aussi, un id éventuellement
    Voila exactement ce que je me demandais !

    Donc si j'ai un nom de film et que je souhaite instancier un objet FILM, je vais d'abord chercher l'id gràce à la classe Connexion (depuis le programme principal) puis j'instancie l'objet avec cet id ? (C'est un exemple)
    C'est exactement sur ce fonctionnement que j'avais des doutes.

    Merci pour les trois autres remarques, je vais changer ça au plus vite

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    si tu as une liste de noms de films affichés sur l'interface, il faut charger les id au même moment que tu charges les noms, et même tout le reste je pense

    si l'utilisateur entre un nom pour voir si tu l'as dans ta base de données dans ce cas il te faut un factory avec en paramètre le nom à chercher (ca se complique par contre )
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    je suis entièrement d'accord avec -N4w4k-
    pas de données dans les constructeurs

    l'idée c'est qu'il soit générique,
    par exemple tu fait un constructeur qui récupère une colonne excel * j’appellerais ça un méthode ou fonction mais bon*
    et ce constructeur tu lui met des paramétrés (Nom de la colonne, etc.)

    mais rien n'est écrit en dur.
    Dit toi que la fonction doit être "fléxible" et utilisable dans plusieurs cas

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 42
    Par défaut
    D'accord, j'ai donc toutes les réponses à mes questions, il ne me reste plus qu'a modifier tout ça

    Merci à tous pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] programmation objet et asp.net
    Par nath-0-0 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/11/2011, 16h45
  2. [Débutant(e)][Conception] prob de programmation objet
    Par gregorian dans le forum Général Java
    Réponses: 3
    Dernier message: 07/07/2005, 11h20
  3. Questions sur la programmation objet en Delphi
    Par Manopower dans le forum Débuter
    Réponses: 20
    Dernier message: 15/06/2005, 15h39
  4. [ASP] Programmation objet ?
    Par Hell dans le forum ASP
    Réponses: 6
    Dernier message: 07/04/2005, 15h28
  5. Problème programmation objet
    Par Contrec dans le forum MFC
    Réponses: 54
    Dernier message: 30/03/2005, 11h30

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