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 Pascal Discussion :

Les interfaces en général, et les interfaces CORBA en particulier


Sujet :

Langage Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 140
    Billets dans le blog
    9
    Par défaut Les interfaces en général, et les interfaces CORBA en particulier
    Bonjour tout le monde !

    Je fais une nouvelle tentative pour comprendre le code de MSEgui, et je bute sur les interfaces. Qu'est-ce que c'est ? À quoi ça sert ?

    J'ai trouvé cette discussion, à laquelle je ne comprends pas grand chose. Ça veut dire quoi reference counting ?

    Si quelqu'un pouvait expliquer, en commençant par le début...

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 016
    Billets dans le blog
    2
    Par défaut
    Bonjour Roland,

    Un début de réponse. Une interface est une sorte de squelette de classe, un canevas qui impose que toutes les classes qui en héritent implémentent ses méthodes.

    Les principes (dont le compteur de références) sont exposés dans ces deux tutoriels :


    Les interfaces avaient par exemple été utilisées dans ce tutoriel sur les bases de données, dans le but d'assurer/d'imposer que, quel que soit le SGBD utilisé, une série de méthodes identiques soient implémentées (afin de ne pas devoir apporter de modifications dans le reste de l'application).

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 140
    Billets dans le blog
    9
    Par défaut
    Merci Alcatîz ! Je vais prendre le temps de regarder tout ça.

  4. #4
    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 : 55
    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
    Salut Roland,

    désolé je viens juste de voir ton MP

    les interfaces c'est quelque chose de très simple en réalité quand tu prends ça du point de vue technique.

    une Interface est un pointeur vers un pointeur vers une table de fonctions.

    c'est tout !

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    type
      IMonInterface = interface
        function Hello(i: Integer): string; stdcall;
      end;
     
    var
      Intf: IMonInterface;
    on peut écrire la même chose comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type
      TMonInterface = record
        Hello: function(Self: Pointer; i: Integer): string; stdcall;
      end;
      PMonInterface = ^TInterface;
      IMonInterface = ^PInterface;
    ou presque ! car en fait sous Delphi (et FreePascal aussi j'imagine) les Interfaces héritent toutes de IInterface qui défini 3 méthodes standard des interfaces COM de Microsoft.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    type
      TInterface= record
        QueryInterface: function (Self: Pointer; const IID: TGUID; out Obj): HResult; stdcall;
        _AddRef: function(Self: Pointer): Integer; stdcall;
        _Release: function(Self: Pointer) : Integer; stdcall;
      end;
      PInterface= ^TInterface;
      IInterface= ^PInterface;
    donc TMonInterface pourrait s'écrire (vu que les Record ne supportent pas l'héritage)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    type
      IMonInterface = interface
        IUnknown: TUnknown;
        function Hello(i: Integer): string; stdcall;
      end;
     
    var
      Intf: IMonInterface;
    ah punaise ! je savais bien que j'avais écris cela quelque part c'est ici

    et ce qui est sympa avec le mot clé interface c'est que quand tu déclares un Interface et que tu dis que ta classe "implémente" cette interface, le compilateur va produire automatiquement une structure qui contient la liste des méthodes de l'interface.

    Et du coup si tu as deux objets qui n'ont strictement rien à voir l'un avec l'autre (pas d'héritage) mais qu'ils proposent tous les deux une série de méthodes identiques, tu peux en leur collant une interface les utiliser indifféremment comme s'ils avaient un ancêtre commun.

    je donne un exemple d'utilisation ici pour éviter le pb de référence circulaire.

    j'utilise d'ailleurs cette approche bas niveau dans un code C de libPDFium pour interface PDFium et Delphi
    https://github.com/tothpaul/PDFiumRe...um/libpdfium.h

    et je colle les fonctions à la main car je ne sais pas le faire en C++
    https://github.com/tothpaul/PDFiumRe...pdfium.cc#L710

    sous Delphi, il suffit de déclarer une Interface
    https://github.com/tothpaul/PDFiumRe...DFium.pas#L105
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 140
    Billets dans le blog
    9
    Par défaut
    Merci beaucoup Paul pour cette réponse détaillée. Je n'ai pas encore trouvé le temps de revenir à ce sujet mais je compte le faire dès que possible.

    À très bientôt !

Discussions similaires

  1. Attribuer les opérations sur les produits à un magasin particulier
    Par Maxwashere dans le forum Développement
    Réponses: 4
    Dernier message: 19/12/2015, 12h46
  2. retourner une interface CORBA
    Par asari29 dans le forum CORBA
    Réponses: 3
    Dernier message: 15/12/2011, 17h18
  3. [Débutant] Dumper les trames Corba
    Par Rupella dans le forum CORBA
    Réponses: 1
    Dernier message: 01/02/2011, 11h05
  4. Réponses: 7
    Dernier message: 09/10/2007, 16h47

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