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

Ada Discussion :

Débutant en poo et Ada.Finalization.


Sujet :

Ada

  1. #1
    Invité
    Invité(e)
    Par défaut Débutant en poo et Ada.Finalization.
    Bonjour, j'ai déjà posté ailleurs, mais j'ai peu d'espérance d'avoir une réponse dans des temps acceptable. Surtout que j'ai trouvé une solution.

    Ce que je voudrais faire : C'est initialisé une variable de type accès à une chaîne englobé dans un enregistrement abstrait contrôlé et limité.

    Voila ce que j'ai fait.

    le paquetage "np", racine de la bibliothèque.
    Spécification :
    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    package Np is
       pragma Pure (Np);
    end Np;

    Le paquetage "np-human", mon type abstrait T_Info(Hidden : Boolean).
    Spécification :
    Code ada : 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
     
    with Ada.Unchecked_Deallocation;
    with Ada.Finalization;
    package Np.human is
     
       type String_Access is access all String;
       type Info(Hidden : Boolean) is
         abstract new Ada.Finalization.Limited_Controlled with private;
     
     
       procedure Initialize(I : in out Info);
       procedure Finalize(I : in out Info);
    private
       type Info(Hidden : Boolean) is
         abstract new Ada.Finalization.Limited_Controlled with
          record
             Info : String_Access;
          end record;
       procedure Free is new Ada.Unchecked_Deallocation(String, String_access);
    end Np.Human;

    Coprs : dans lequel j'espérais saisir l'info.

    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    with Text_Io;
    package body Np.human is
     
       procedure Initialize(I : in out Info) is
       begin
          null; -- ici, j'expérais saisir l'info;
       end Initialize;
     
       procedure Finalize(I : in out Info) is
       begin
          Free(I.Info);
       end Finalize;
     
    end Np.Human;

    Le paquetage "np-human-status, mon type effectif de classe T_Info(False).
    Spécification :
    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    package Np.Human.Status is
     
       type T_Status is new info(False) with null record;
       procedure Initialize(I : in out T_Status);
       procedure Finalize(I : in out T_Status);
     
    end Np.Human.Status;
    Corps :
    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    with Text_Io;
    package body Np.Human.Status is
     
       procedure Initialize(I : in out T_Status) is
       begin
          Text_Io.Put("Status : ");
       end Initialize;
     
       procedure Finalize(I : in out T_Status) is
       begin
          null;
       end Finalize;
    end Np.Human.Status;

    Le main :
    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    with Np, Np.Human, Np.Human.Status;
    use Np;
    procedure Main is
     
       Status : Human.Status.T_Status;
    begin
     
       null;
    end Main;


    Donc, pour résoudre le problème, j'appelle Human.Initialize dans Human.Status.Initialize.
    Je ne sais pas si c'est convenable.

    De plus, à présent je souhaiterais pouvoir "contrôler" chaque initialisation.
    En effet, admettons que je veuille initialise un type "T_User" définit par :

    - le nom : (de type Info)
    - l'adresse : (de type Info)
    - le prénom : (de type Info)
    .../...
    etc.

    Je voudrais pourvoir afficher un message particulier pour chaque initialisation

    Comment devrais-je m'y prendre ?
    Merci bien pour votre aide.

  2. #2
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Bon, je réponds certainement un peu tard.
    Ceci dit, l'appel à initialize d'une "classe" parente dans l'initialize d'un des enfants est tout à fait convenable. Rien ne t'empêche de le faire et ça te permet de faire les initialisations propres à chaque niveau au bon endroit sans avoir à dupliquer du code ce qui est le principe même de l'objet.
    Ensuite, pour le message à l'initialisation, rien ne t'empêche de le mettre aussi dans ce fameux "constructeur" en redirigeant par exemple dans un procédure d'affichage abstraite que tu définis pour chaque sous-classe.

  3. #3
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Au passage, en relisant le passage lié à la POO sur Wikibooks, je te recommanderai aussi de placer les procédures liées aux Controlled en partie private, histoire de bien garder l'encapsulation "étanche" :-)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour ton aide Blackknight,
    C'est pas le sujet du jour, je te répond d'un merci simplement.

Discussions similaires

  1. [CDI] [IDF] Ingénieur d'Etudes Expérimenté (Débutant en POO)
    Par Invité dans le forum Demandes
    Réponses: 0
    Dernier message: 27/07/2010, 19h52
  2. débutant en poo
    Par junior68 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 01/03/2009, 11h51
  3. [POO] Utilité de 'final','interface' ?
    Par guillhomme_ dans le forum Langage
    Réponses: 4
    Dernier message: 17/10/2007, 17h05
  4. [débutant] java POO
    Par mwanjany dans le forum Langage
    Réponses: 4
    Dernier message: 12/06/2006, 15h32
  5. [débutant]portabilité de l'exe final
    Par vvidal80 dans le forum MFC
    Réponses: 8
    Dernier message: 07/01/2004, 09h21

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