88 votes

Que sont les Mixins (en tant que concept)

J'essaie de comprendre le concept de Mixin, mais je n'arrive pas à comprendre ce que c'est. D'après moi, il s'agit d'un moyen d'étendre les capacités d'une classe en utilisant l'héritage. J'ai lu que les gens les appellent des "sous-classes abstraites". Quelqu'un peut-il m'expliquer pourquoi ?

J'apprécierais que vous expliquiez votre réponse sur la base de l'exemple suivant (tiré d'un de mes diaporamas de cours) : A C++ Mixin Example

-1voto

Jimmyt1988 Points 2736

Cela fonctionne de la même manière qu'une interface et peut-être plus encore qu'une abstraction, mais les interfaces sont plus faciles à comprendre du premier coup.

Il aborde de nombreux problèmes, mais l'un d'entre eux qui revient souvent dans le développement est celui des apis externes. imaginez ceci.

Vous avez une base de données d'utilisateurs, cette base de données a une certaine manière d'accéder à ses données. Imaginez maintenant que vous avez facebook, qui a aussi une certaine manière d'accéder à ses données (api).

à n'importe quel moment, votre application peut avoir besoin d'utiliser des données provenant de facebook ou de votre base de données. donc ce que vous faites, c'est créer une interface qui dit "tout ce qui m'implémente va certainement avoir les méthodes suivantes" maintenant vous pouvez implémenter cette interface dans votre application...

Parce qu'une interface promet que les référentiels qui l'implémentent auront les méthodes qui y sont déclarées, vous savez que, quel que soit l'endroit ou le moment où vous utilisez cette interface dans votre application, si vous basculez les données, elles auront toujours les méthodes que vous définissez et donc des données sur lesquelles travailler.

Il y a beaucoup d'autres couches à ce modèle de travail, mais l'essentiel est qu'il est bon parce que les données ou d'autres éléments persistants de ce type deviennent une partie importante de votre application, et s'ils changent sans que vous le sachiez, votre application peut se casser :)

Voici un pseudo-code.

interface IUserRepository
{
    User GetUser();
}

class DatabaseUserRepository : IUserRepository
{
    public User GetUser()
    {
        // Implement code for database
    }
}

class FacebookUserRepository : IUserRepository
{
    public User GetUser()
    {
        // Implement code for facebook
    }
}

class MyApplication
{
    private User user;

    MyApplication( IUserRepository repo )
    {
        user = repo;
    }
}

// your application can now trust that user declared in private scope to your application, will have access to a GetUser method, because if it isn't the interface will flag an error.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X