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

Delphi Discussion :

Conseils pour l'écriture d'une Classe


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut Conseils pour l'écriture d'une Classe
    Voici la classe qui me pose soucis :

    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
     
    unit Uni1;
     
    interface
     
     
    type
      TCategorie = class;
     
      TPersonne = class(TObject)
      private
        FCategorie: TCategorie;
        FValeur : string;
      public
        constructor Create;
        destructor Destroy; override;
        property Valeur: string Read FValeur Write FValeur;
     
      end;
     
      //Catégories de personnes
      TCatPersonne = (catégorie1, catégorie2, catégorie3, catégorie4);
     
      TCategorie = class(TObject)
      private
        FCategorie: TCatPersonne;
      public
        constructor Create;
        property Categorie: TCatPersonne read FCategorie;
      end;
     
    implementation
     
    { Personne }
    constructor TPersonne.Create;
    begin
      inherited Create;
      {test bien placé??}
      if self.Valeur = 'AAA'
      then ...
      if self.Valeur = 'BBB'
      then ...
      if self.Valeur = 'CCC'
      then...
     
    end;
     
    destructor TPersonne.Destroy;
    begin
      inherited Destroy;
    end;
     
    { Categorie }
    constructor TCategorie.Create;
    begin
      inherited Create;
    end;
     
     
    end.
    Dans mon mon problème c'est le champ 'Valeur' qui détermine la catégorie.
    A ce titre, est-ce que la classe TCategorie est inutile?

    2e question
    Pensez vous qu'il serait plus propre de créer une table dans ma base de données du type Valeur (1,1)-(1,N) Categorie
    Cela pour chinter le test :*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      if self.Valeur = 'AAA'
      then ...
      if self.Valeur = 'BBB'
      then ...
      if self.Valeur = 'CCC'
      then...
    Merci d'avance.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Si tu crois que le nombre de categorie...ou même les strings
    qui les représentes peuvent changer... alors j'éviterais à tout prix
    de le coder à la dure....

    c'est mon avis....
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut
    Merci.
    Le problème c'est que je reprends un vieux code ou il y a pas mal de tests en dur !!
    Je cherche à faire évoluer l'appli en supprimant ce genre de tests.
    De plus les infos sont stockées dans des types record (et non des classes), à l'ancienne quoi...

    Si je reprend mon exemple :
    Valeur (1,1)-(1,N) Categorie
    Dans mon code, le choix de la catégorie conditionne un certain nombre de tests:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF categorie = catégorie1 THEN...
    Comment supprimes-tu ce genre de test?? Tu as un exemple?

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Il faudrait un constructeur avec un paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    constructor TPersonne.CreateAvecValeur(parValeur:string) ;
    begin
      inherited Create;
      Valeur:=parValeur ;
      if Valeur = 'AAA'
      then ...
      if Valeur = 'BBB'
      then ...
      if Valeur = 'CCC'
      then...
    L'objet Tcategorie me semble à priori inutile (si il est aussi simple).
    Autant mettre directement une property Categorie dans l'objet Tpersonne.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut
    Merci.

    Si je rajoute le paramètre parValeur dans le constructeur, ma property Valeur de la classe TCategorie n'est-elle pas obsolète??

    Est-il possible comme disais Eric de supprimer le code en dur??

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Si je rajoute le paramètre parValeur dans le constructeur, ma property Valeur de la classe TCategorie n'est-il pas obsolète??
    Si il y a une correspondance biunivoque entre valeur et catégorie, on gardera comme var de la classe Tpersonne soit la valeur, soit la catégorie et on déduira de cette variable les properties Categorie et Valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Est possible comme disais Eric de supprimer le code en dur??
    Il faudrait nous montrer un extrait du code à améliorer.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Par défaut
    Si tu crois que le nombre de categorie...ou même les strings
    qui les représentes peuvent changer... alors j'éviterais à tout prix
    de le coder à la dure....

    c'est mon avis....
    Pensez vous qu'il serait plus propre de créer une table dans ma base de données du type Valeur (1,1)-(1,N) Categorie
    Cela pour chinter le test :*
    Personnellement je n'hésiterais pas une seconde à mettre tout ça dans des tables avec éventuellement une interface de paramètrage(mais je ne connais pas le contexte de ton projet).

    Maintenant si tu tiens à ton code alors je te suggère quand même ceci :

    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
     
      //Catégories de personnes
      TCatPersonne = (catégorie1, catégorie2, catégorie3, catégorie4);
     
    Type
      TPersonne = class(TObject)
      private
        FCategorie: TCatPersonne ;
        FValeur : string;
      public
        constructor Create;
        destructor Destroy; override;
        property Valeur: string Read FValeur Write SetValeur;    
      end;
     
    (...)
     
    procedure TPersonne.SetValeur(AValue:string);
    begin
      FValeur:=AValue;
      if FValeur = 'AAA'
      then ...
      if FValeur = 'BBB'
      then ...
      if FValeur = 'CCC'
      then...
    end;
    Bonne chance

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut
    Salut!

    Maintenant si tu tiens à ton code alors je te suggère quand même ceci :
    C'est pas que je tienne à mon code, je veux bien casser des morceaux pourvu qu e ce soit plus propre!
    J'ai effectivement construit une application d'administration de ma base.
    Par contre si je lie les Tables Valeur et Categorie, le type enum TCategorie ne me sert plus à rien... non? J'en suis pas si sur.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/01/2007, 15h27
  2. Astuces pour tester propiétés d'une classe
    Par Masmeta dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/12/2006, 09h42
  3. Conseils pour l'écriture de questions/réponses pour les FAQ
    Par LittleWhite dans le forum Contribuez
    Réponses: 0
    Dernier message: 18/05/2006, 19h15
  4. [SYBASE] Aide pour l'écriture d'une requête
    Par karine77 dans le forum Sybase
    Réponses: 2
    Dernier message: 26/04/2005, 10h57
  5. Réponses: 4
    Dernier message: 22/09/2004, 09h17

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