2010-11-07 7 views
9

Comment implémenter une interface en erlang? Quelle est la structure des modules ou comment est-elle configurée?Implémentation d'interfaces dans Erlang

J'ai une architecture en couches et je veux implémenter les interfaces dans chaque couche. Permettre à la couche qui nécessite la couche inférieure de gérer certaines tâches pour accéder ou appeler ces tâches.

À quoi ressemblerait ce module d'interface en termes de fonctionnalité?

+0

Quel est votre niveau Erlang? Avez-vous besoin d'une aide générale pour écrire un module (fonction exportée, etc.), de bonnes pratiques (un API de regroupement de modules pour certaines applications) ou les avantages et les inconvénients des comportements otp? – user425720

+0

Si les couches dont vous parlez sont des couches dans une pile de protocoles, vous pouvez consulter http://stackoverflow.com/questions/4059746/how-to-design-a-flexible-erlang-protocol-stack-creation- api MAIS sachez qu'il s'agit d'exigences très spécifiques qui semblent rendre l'approche plus compliquée que d'habitude. Malheureusement, il n'y a pas beaucoup de discussions là-bas ... plus ou moins parler avec moi-même ;-) –

+0

Pour donner une bonne réponse à votre question, plus d'informations pourraient être nécessaires. Que voulez-vous dire par interface? –

Répondre

3

Une interface dans le sens d'une interface Java ou d'une signature de module ML n'existe pas dans le monde Erlang dynamiquement typé. Vous devrez documenter le comportement dans un commentaire ou fournir un contrat -spec pour le dialyseur à regarder.

En général, la meilleure façon d'aborder une langue est de ne pas supposer que vous pouvez y intégrer trop de connaissances existantes, à moins que vous ne connaissiez un langage «proche» des concepts. Les langues proches d'Erlang sont Prolog et Scheme. Plus loin vient Python et Ruby, mais leur confiance dans un design OOP les met dans l'horizon. Tout ce qui est typé statiquement, Ocaml, Haskell, Java, C#, C++ et ainsi de suite sont définitivement au-delà de l'horizon.

-2

Le concept le plus proche d'Erlang est user-defined behaviour. Cependant, ils ont tendance à être utilisés assez rarement. Notez que la seule chose qui est vérifiée est l'existence et l'arité des fonctions. Vous ne pouvez pas tester que le module implémente réellement un certain comportement; vous appelez simplement les fonctions de rappel et si le module arrive à exporter "accidentellement" des fonctions avec les mêmes noms, vous n'avez pas de chance.

+7

Non! Les comportements ne sont PAS des interfaces. Ils sont conçus pour séparer le code générique et bien exécuté des modules spécifiques et risqués (votre code). Ils désignent un module qui prend le relais pour le traitement de certaines tâches, pas seulement le concept d'un rappel. –

+1

Ajout de ma voix plus acide à IGTA, s'il vous plaît arrêter d'essayer de cartographier les concepts de POO sur les constructions Erlang. C'est une mauvaise cartographie et cela rendra votre compréhension d'Erlang plus lente. Apprenez ce qu'Erlang ** est **, pas ce que vous aimeriez qu'il soit. –

+0

@ JE DONNER DES CONSEILS TERRIBLE. J'ai suivi tes cours d'Erlang quand j'ai commencé avec Erlang. Nice Work :) Les interfaces ne sont-elles pas nécessaires à Erlang ou que voulez-vous dire? Merci – jarryd