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

Langage Delphi Discussion :

INTERFACE / implementation


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Par défaut INTERFACE / implementation
    Bonjour, dans mon projet je dois réaliser des interfaces et des implémentations mais je ne connais pas la syntaxe en delphi. En java c'est assez simple l'utilisation des mots clés "interface" et "implements" suffise

    Voici le code en java que j'aimerais obtenir en delphi :


    déclaration de l'interface :

    public interface MartingaleService {

    L'implémentation :

    public class MartingaleServiceImpl implements MartingaleService {

    A noter que ce sont dans deux fichiers différents.

    Pour l'instant j'ai réalisés ceux ci :

    déclaration de l'interface :
    IMartingaleService = interface
    function add(martingale: TMartingale): TMartingale;
    procedure remove(martingale:TMartingale);
    procedure update(martingale:TMartingale);
    function getAll(): r_Martingale ;
    function getByid(id:integer): TMartingale;
    function getByType(typeM: string): TMartingale;
    end;

    L'implémentation :
    TMartingaleServiceImpl = class(TInterfacedObject,IMartingaleService)

    Je voudrais savoir si mon implémentations est correct ? Si c'est le cas comment obtenir l’accès des méthodes de ma classe IMartingaleService(interface) a partir de ma classe TMartingaleServiceImpli(implémentation)

    Merci pour vos réponses.

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var
      Service: TMartingaleServiceImpl ;
      iService: IMartingaleService;
    begin
      Service: = TMartingaleServiceImpl.Create;
      iService := Service; // Delphi se charge du QueryInterface et du AddRef
    end;
    Attention, le Release (automatique sous Delphi quand la variable sort de la portée) de TInterfacedObject peut entraîner une libération de l'objet (c'est ça façon de gérer IUnknown), mais ton service n'est pas obligé de dériver de cette classe (dans ce cas il doit implémenter IUnknown également)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par défaut
    Un peu de lecture : Implémentation des interfaces
    Question sur les interfaces, Court circuiter le ref-count d'un TInterfacedObject! ou Les limites de l'implements ? ainsi que [C++\Delphi] Interface, Héritage et Supports !

    Pense que Interface en Delphi, c'est plus pour le modèle COM qu'autre chose !

    Sinon, comme le mentionne Paul TOTH, tu peux hériter du TObject et mettre un code vide au 3 méthodes de IInterface\IUnknown
    Cela ne pourra pas gérer les GUID et l'opérateur as, tout dépend, si tu veux utiliser les interface juste pour des "contrat" ou vraiment pour un polymorphisme en faible couplage !

    Je suppose que tes TMartingale seront en réalité des IMartingale pour conserver le couplage faible ?

    Certains utilisent aussi les interfaces Delphi pour simuler un Garbage-Collector
    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

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    [code]

    Attention, le Release (automatique sous Delphi quand la variable sort de la portée) de TInterfacedObject peut entraîner une libération de l'objet (c'est ça façon de gérer IUnknown), mais ton service n'est pas obligé de dériver de cette classe (dans ce cas il doit implémenter IUnknown également)
    D'accord donc je peux faire comment pour implémenter sans utiliser TInterfacedObject ? parce que pour moi c'est ce qui permet de faire la relation entre l'interface et l'implémentation ?

    TMartingaleServiceImpl = class(TInterfacedObject,IMartingaleService)

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par défaut
    Attention, l'utilisation de TInterfacedObject est vivement conseillé !
    Il faut juste bien gérer la durée de vie de ses interfaces !
    En général, cela ne pose aucun problème !

    Utilise déjà TInterfacedObject dans l'état, si tu as des problèmes d'interdépendances, on verra à ce moment là !

    Sinon, tu es obligé d'utiliser des interfaces ?
    En Delphi, ce n'est pas très utilisé, un bon vieux "virtual abstract" suffit largement, c'est similaire aux interface du C++ !
    C'est bien plus léger que ce bordel de compteur d'interface, par contre, faut aimer libérer ses objets dans les destructeurs, tâches que le TInterfacedObject fait à ta place, c'est sûr que si tu es habitué au Java, tu vas trouver cela pénible de faire les libération explicite, bienvenu dans le monde rigoureux du Delphi !
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Par défaut
    J'avais pas vu ta réponse Shail, merci à vous pour vos docs je vais voir ça.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Par défaut
    Non pas spécialement mais dans le code JAVA de mon prof , il utilise des interfaces donc je me suis dit que j'allais le suivre ...

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par défaut
    Ne cherche pas à transcrire du Java en Delphi !
    Quel est l'intérêt d'une telle traduction ?

    Essaye de faire ton propre code, d'imaginer tes classes par toi même !

    Comme toi, j'ai appris Java à l'école et Delphi durant l'apprentissage, je peux te dire qu'entre la théorie UML, les classes côté cours, et la pratique, bien bourrin côté entreprise, on était aux extrêmes opposés !
    Qu'as-tu prévu comme développement avec ton Maître d'Apprentissage ?
    Vous vous êtes mis d'accord sur un projet à réaliser utile pour l'entreprise ?
    Finalement, tu n'utiliseras pas DataSnap ?

    La méthode de programmation est différente, les pratiques sont différentes comme l'héritage d'implémentation, très courant en Delphi (90% de la VCL est codé comme ça) hors c'est justement l'inverse des Design Patterns et de l'utilisation massive des Interfaces comme cela devrait être théoriquement appliqués en JAVA !
    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

Discussions similaires

  1. template, "interface", implementation
    Par line86 dans le forum Langage
    Réponses: 8
    Dernier message: 03/04/2009, 20h52
  2. [interface] implementation de ICloneable
    Par ZaaN dans le forum C#
    Réponses: 12
    Dernier message: 20/12/2007, 16h25
  3. probleme interface implements
    Par inquire dans le forum Langage
    Réponses: 3
    Dernier message: 07/11/2007, 19h24
  4. C++ / Interfaces / Implementation
    Par _chafouin_ dans le forum Visual C++
    Réponses: 2
    Dernier message: 28/03/2007, 18h15
  5. Implementation et Interface
    Par Bleys dans le forum Débuter
    Réponses: 5
    Dernier message: 21/06/2004, 14h00

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