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

  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

  9. #9
    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
    Oui j'ai un projet utile a l'entreprise avec une connexion modbus . Mon tuteur a réalisé une application très similaire à ce que je dois faire en DELPHI procédurale, sauf que moi je dois le faire en DELPHI objet.

    Le DataSnap me parait une technologie intéressante mais le temps passe vite et je sais pas si je vais avoir le temps d'apprendre une telle technologie. Je dois présenter ce projet pour Mai donc ça risque d'être juste mais je le garde de coté pour mes futur développement en delphi.

  10. #10
    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
    Protocole Modbus, le monde est petit, je vais en faire fin Mars !

    D'accord, tu migres une application Procédurale en Objet, un projet classique lorsque l'on a un peu de temps devant soi !

    Je suppose que tu as un rapport à faire et une présentation ?
    Il te faut faire l'analyse de l'application, un Reverse Engineering pour retrouver le Modèle de Données, les Traitements ... ce qui te donnera les Classes à écrire !
    Effectivement tes couches semblent cohérentes, considérer le matos comme étant une source de données parallèle est une bonne vision des choses !
    Si tu fais un seul programme, utilise plutôt le terme de MVC !
    Si tu fais 3-4 programmes qui communiquent, là c'est de 3-Tiers, cela va juste tripler le temps de développement !

    Par contre, ne te pose pas de trop forte contrainte avec les interfaces ... ce n'est pas grave d'utiliser directement les objets en couplage fort !
    N'utilise ce type de construction, si il y a fort besoin d'évolution, que l'on prévoit de substituer facilement une partie de code par une autre, typiquement la gestion de différent protocole, comme un système de driver, où chaque bit de données aura des significations différentes selon le périphérique, un parfait exemple de polymorphisme !

    Pense à documenter toute cette démarche d'analyse, à décrire ta méthode, même a expliquer les problèmes que tu as rencontré, c'est une partie intéressante pour un rapport universitaire (plus que la réalisation même du projet parfois)

    Si l'objet n'est pas une pratique dans l'entreprise qui t'accueille, pense à bien documenter l'architecture, même les trucs les plus simples ou basiques comme les interfaces et la méthode d'utilisation de ces dernières !
    On peut faire de gros projet sans jamais faire d'objet juste du TForm et du procédural.
    J'ai fait des programmes de pilotage de robot sans objet, juste 5 TThread, seul héritage dans le projet, ce fut durant ma 3eme année d'apprentissage et 1ère de CDI ! Je me suis mis à l'objet qu'au bout de 4 ans !
    Pense à ton maître d'apprentissage qui devra plus tard maintenir ton programme, si il n'est pas habitué à la POO, il n'auras qu'a consulter commentaire et documentation pour gagner du temps et ne pas reposer les mêmes questions que toi !

    la POO si l'on y a pas été formé, c'est absolument pas naturel !
    Toi habitué du Java, c'est le procédural qui doit te sembler étrange !

    Bon Courage !
    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

  11. #11
    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 ShaiLeTroll Voir le message

    Je suppose que tu as un rapport à faire et une présentation ?
    Il te faut faire l'analyse de l'application, un Reverse Engineering pour retrouver le Modèle de Données, les Traitements ... ce qui te donnera les Classes à écrire !
    Oui c'est exactement ça, je dois présenter mon projet, une analyse UML, le codage, les problèmes rencontrés, des choses classiques et rendre un rapport de projet. Je vais voir pour éviter les interfaces parce que mon projet ne devrait pas évoluer énormément dans le futur

    Tu connais un logiciel qui permet de faire un reverse engineering en Delphi ?
    Je connais bouml pour java , c++ mais il reverse pas le langage Delphi


    Je vais essayer de me débrouiller concernant le codage, merci pour tes conseils, on voit que tu maitrises le sujet et ton expérience est assez intéressante surtout dans ce langage qui est peu utilisé contrairement au c/c++ et java.

  12. #12
    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 Matt27 Voir le message
    Je vais essayer de me débrouiller concernant le codage, merci pour tes conseils, on voit que tu maitrises le sujet et ton expérience est assez intéressante surtout dans ce langage qui est peu utilisé contrairement au c/c++ et java.
    tu cherches les ennuies toi
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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