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 :

Programation Orientée Objet POO


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Par défaut Programation Orientée Objet POO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TfmPrinc.Button2Click(Sender: TObject);
    var
     T : TObject;
    begin
      T := TList.Create;
      ShowMessage('Test est de classe ' +T.ClassName);
      T.Destroy;
     
    end;
    Comment on a pu créer la var "T" en tant que Liste(Tliste) alors qu'elle est déclarée comme Tobjet ?

  2. #2
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    TList descend de TObject: Polymorphisme

  3. #3
    Membre confirmé

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Par défaut
    merci

    Je voudrai savoir quelle sera l'utilité de ne pas déclarer Tlist Directement

    Pourquoi procéder avec Tobject ?

  4. #4
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Je voudrai savoir quelle sera l'utilité de ne pas déclarer Tlist Directement
    Dans ce cas mieux vaux declarer une variable TList directement.

    Dans le cas d'une fonction par exemple qui accepte comme parametre un TObject tu peux lui passer n'importe quel objet dérivant de TObject y compris une TList. c'est le cas des evenements par exemple avec le fameux Sender.

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut

    N'appelez pas directement Destroy depuis une application. Appelez plutôt Free. Free vérifie que la référence TCustomMemo n'a pas la valeur nil puis appelle Destroy.
    Sinon, etudie la TStrings, TStringList ainsi que les objets tel que TMemo ou TComboBox qui utilise une TStrings comme paramètre de leur propriété mais qui implémente leur propre liste ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par helmis Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TfmPrinc.Button2Click(Sender: TObject);
    var
     T : TObject;
    begin
      T := TList.Create;
      ShowMessage('Test est de classe ' +T.ClassName);
      T.Destroy;
     
    end;
    Comment on a pu créer la var "T" en tant que Liste(Tliste) alors qu'elle est déclarée comme Tobjet ?
    bon on va prendre l'exemple classique

    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
     
    type
     TFruit=class
     end;
     
     TPomme=class(TFruit)
     end;
     
     TBanane=class(TFruit)
     end;
     
     TPanier=class
      procedure Add(Fruit:TFruit);
     end;
     
    var
     panier:TPanier;
     fruit  :TFruit;
    begin
     panier:=TPanier.Create;
     fruit:=TPomme.Create;
     panier.Add(fruit);
     fruit:=TBanane.Create;
     panier.Add(fruit);
    end;
    NB: on aurait très bien pu déclarer des pommes et des bananes, mais de toute façon la fonction Add() travaille sur des Fruits

    et si je déclare ceci, on retombe sur ton exemple avec TObject
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type
     TPanier=TList; // une simple liste de fruits
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre confirmé

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Par défaut
    en ce qui concerne la visibilité

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    TBanane =Class
        private
        FLonguer:double;
       FLargeur:double;
      public
        CONSTRUCTOR Creer(value:double);
        procedure Vendre(value:double);
        procedure Acheter(value:double);
        property contenu:double read Fcontenu;
      end;
     
    var
      Banane :TBanane

    Si je mets Banane. dans La classe Form1 il me propose Banane.FLargeur je ne devrais pas y avoir accès !?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    procedure Form1.Button1Click(Sender: TObject);
    begin
    Banane.FLargeur :=15;
    end;

  8. #8
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    toutes les classes déclarées dans la même unité sont "amies", aucune règle de restriction ne s'applique (sauf peut-être le "strict private" que je n'ai pas sous Delphi 6)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre confirmé

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Par défaut
    Merci Paul

    D'apres http://www.phidels.com/php/index.php...3c9d7c98d7af14
    Ceci fait apparaitre qu'il est de votre responsabilité d'allouer et de libérer la mémoire de l'objet - si vous oubliez de libérer la mémoire vous créez une fuite de ressource
    La directive Ne libere pas automatiquement la Memoire ?

  10. #10
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par helmis Voir le message
    Merci Paul

    D'apres http://www.phidels.com/php/index.php...3c9d7c98d7af14


    La directive Ne libere pas automatiquement la Memoire ?
    non, la destruction de l'objet Application assure la destruction de tous les objets dont il est propriétaire (dont il est Owner) et des objets qu'ils possèdent eux même...

    EDIT: note aussi que le rôle du destructor n'est pas uniquement de libérer la mémoire, mais également de clore les BDD, flusher les buffers etc...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/04/2015, 13h59
  2. Réponses: 4
    Dernier message: 08/01/2009, 11h56
  3. [POO] PHP et l'Orienté Objet
    Par kagura dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2006, 18h01
  4. [VB6]programation orientée objet
    Par meriemeness dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/03/2006, 08h42
  5. [POO] apprendre la programmation orientée objet
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 10/12/2005, 11h33

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