62 votes

Expliquer les interfaces aux étudiants

Pendant quelques années, j'ai été assistante d'enseignement pour une introduction à la programmation du module Java pour la première année les étudiants de premier cycle.

Surtout, il s'est bien passé et nous avons réussi à obtenir la programmation orientée objet à travers pour les étudiants assez bien, mais une chose que les élèves voyaient rarement le point de était interfaces.

À peu près toute explication nous a donné soit venu à travers comme trop artificiel pour être utile pour l'apprentissage, ou trop loin de leur position en tant que débutants. La réaction nous avons tendance à obtenir était "je vois", traduit par "je ne comprends pas, et ils ne sonnent pas utile".

Ce que quelqu'un a un moyen de réussir à l'enseignement des étudiants sur les interfaces? Je ne suis pas un assistant à l'enseignement, pas plus, mais c'est toujours harcelé à moi.

31voto

tkeE2036 Points 3778

Si vous essayez de l'expliquer aux débutants, je m'en tiendrais à l'idée que les interfaces peuvent favoriser la réutilisation de code et de la modularité dans le code:

Par exemple, disons que nous allons peindre quelques objets:

public class Painter {
    private List<Paintable> paintableObjects;

    public Painter(){
       paintableObjects = new ArrayList<Paintable>();
    }

    public void paintAllObjects(){
        for(Paintable paintable : paintableObjects){
            paintable.paint();
        }
    }
}

public interface Paintable {
     public void paint();
}

Maintenant, on peut expliquer aux élèves que, sans interface peut être Peint le Peintre objet serait nécessaire de disposer de méthodes pour peindre certains types d'objets, comme une méthode appelée paintFences() et paintRocks() et nous aurions besoin d'avoir un nouveau Collection pour chaque type d'objets que nous voulons le peintre pour pouvoir peindre.

Mais heureusement, nous avons des interfaces qui font de peinture des objets un jeu d'enfant et la manière dont les objets sont peints est laissé à des classes qui implémentent l'interface peut être Peint.

MODIFIER

Un autre avantage que j'ai oublié de mentionner, c'est que si jamais vous avez besoin d'ajouter un nouvel objet à peindre à votre base de code, tout ce que vous devez faire est de créer une nouvelle classe qui implémente peut être Peint et le Peintre de la classe n'a jamais changer. Dans ce sens, le Peintre de la classe n'est jamais dépendante sur les objets qu'il se passe à la peinture, il ne doit être en mesure de les peindre.

EDIT 2

James Raybould m'a rappelé une clé de l'utilisation d'interfaces j'ai oublié de mentionner: le fait d'Avoir une interface entre vos composants, comme les Poncer, les objets et Peintre des objets, permet de plus facilement se développer avec d'autres personnes. Un développeur peut travailler sur le Peintre des objets et un autre peut travailler sur le Poncer les objets et tout ce qu'ils ont à faire fonctionner correctement l'ensemble est de définir une interface commune à l'avance qu'ils seront à la fois de l'utiliser. Je sais que quand j'ai travaillé sur des projets avec d'autres personnes dans le collège des projets au niveau de son très utile lorsque vous essayez d'avoir chacun de travailler sur les différentes parties du projet et ont encore tous les composants viennent ensemble gentiment à la fin.

29voto

aepryus Points 1410

Dans l'explication des interfaces et des concepts orientés objet, en général, pour les non-programmeurs, j'ai toujours utiliser le système de divertissement à domicile analogie.

Le lecteur de DVD, TV, décodeur Câble, Télécommande sont tous les objets qui encapsulent compliqué et des fonctionnalités sophistiquées. Cependant, ils ont des interfaces les uns des autres et pour les Humains qui les exploitent, en grande partie à masquer la part du lion de cette complexité.

La prise d'entrée vidéo d'un TÉLÉVISEUR est une interface qui est mis en œuvre par le lecteur DVD et le câble de la boîte et un certain nombre d'autres types de dispositifs.

Je soupçonne il serait possible et peut-être un exercice éducatif pour un élève de décrire leur propre système de divertissement à domicile entièrement à l'aide d'un code Java.

16voto

corsiKa Points 39442

"Où les classes SONT quelque chose, généralement des interfaces de FAIRE quelque chose. J'ai une voiture, mais je n'irais jamais "porter", mais je pourrais aller en voiture... donc ma Voiture pourrait mettre en œuvre "pilotables" interface".

EDIT:

Marque apporte un bon point. Les Interfaces de ne rien faire du tout, mais au lieu de définir quels sont les comportements qui se produisent. Et, il apporte également un bon point de ne pas vouloir confondre le public. Pas que c'est correct de se confondre aux développeurs chevronnés, mais c'est définitivement pas une bonne idée de confondre une nouvelle marque de l'étudiant. À la lumière de ça, je vais réviser mon one-liner dans une multitude de chemise.

"Où les classes de définir l'existence, d'interfaces, de définir les comportements. Les Classes de définir ce qu'est une chose, tandis que les interfaces de définir ce que quelque chose ne. J'ai une voiture, et il y a des choses comme un Moteur, la quantité de gaz qu'il a, ce que c'est historique MPG est, et l'aime, mais je n'irais jamais "porter". Je pourrais, d'autre part, aller en voiture... peut-être mon lecteur de Voiture? Il peut, si je donne une méthode d'Entraînement. Je peux également avoir "Driveable" interface avec une méthode d'entraînement, et le laisser jusqu'à la voiture afin de déterminer quelle conduite signifie vraiment. Maintenant, si je n'ai que les voitures c'est pas un gros problème pour avoir une interface. Mais ce que sur les camions? S'ils sont en état de Rouler, il me suffit d'avoir un List<Drivable pour les deux d'entre eux. Bien sûr, l'observateur étudiant dit: "Pourquoi ne peut-Voiture et Camion à la fois tout simplement étendre Véhicule, avec un résumé, la méthode d'Entraînement?" Qui, en fait est très valable notion. Mais, que dire de la Navette Spatiale? Très peu de composants entre la Voiture et le Camion s'appliquent à la Navette Spatiale, de sorte qu'il ne semble pas bien adapté à étendre la catégorie de Véhicule. Ou que dire des voitures de l'avenir? Nous n'avons aucune idée de ce qu'ils pourraient ressembler, ils pourraient ne pas avoir chassises, ils pourraient simplement être des bulles d'énergie qui se déplacent autour de nous, mais on pourrait encore appeler leur comportement drive()."

respire

Maintenant que l'alinéa/de l'article est un peu verbeux, mais j'ai pu voir, avec des diapositives ou d'un tableau noir, d'être efficace pour les étudiants de première année pour obtenir leur tête autour (en supposant qu'ils comprennent les classes abstraites d'abord de toute façon).

11voto

Harima555 Points 321

Eh bien, je viens de l'expliquer interfaces pour un travail de partenaire, elle a été l'apprentissage de java à partir de progrès et elle n'a vraiment tous de la programmation orientée objet trucs au début donc je viens de vous expliquer le tout à partir d'un non logiciel point de vue technique, mon explication pour les interfaces où quelque chose comme ceci:

"Supose que vous souhaitez embaucher un plombier pour réparer certaines choses sur votre maison, vous ne savez pas (et vous n'avez pas beaucoup de soins) qui vous pouvez vous retrouver de l'embauche, mais vous savez ce qu'il/elle doit être en mesure de le faire, si vous définissez un ensemble de tâches que toute personne qui prétend être un plombier doit savoir comment le faire, bien sûr, tout le monde migth avoir son propre mode de réalisation de chaque tâche, mais à la fin teh personne que vous êtes l'embauche d'un plombier, car il sait comment faire de chaque tâche, de sorte que si l'endroit où vous pouvez écrire ce en java, la première chose à faire serait de définir une interface plombier comme ceci:

public interface Plumber
{ //silly code here }

ok, alors disons que je sais comment le faire chaque tâche que vous demandez pour et donc im entièrement plainte avec vos exigences et donc, selon vous, im un plombier, alors aujourd'hui, j'ai décidé d'être votre plombier et que vous décidez de m'embaucher (yay!!!), basé sur le dernier exemple, vous pouvez dire que je suis une personne qui sait comment développer sowftware et de la plomberie d'une certaine façon, si je devais écrire du code pour moi en tant que classe, je pourrais écrire quelque chose comme ceci:

public class Rick extends Person implements SoftwareDeveloper, Plumber

et après, on pouvait arranger les choses dans votre maison à l'aide de moi comme votre plombier:

Plumber thePlumber = rick;
thePlumber.fixLeak(myHouse.bathroom.leak) // =(

"

à partir de ce point, le reste des concepts de programmation orientée objet où il est facile d'expliquer.

8voto

PaiS Points 427

Eh bien, récemment, il m'est arrivé d'expliquer cela à quelqu'un de proche. La façon dont je l'ai expliqué à la question "pourquoi les Interfaces?", est en prenant exemple de de le Port USB et les lecteurs USB.

Le port USB peut être considéré comme une spécification et une clé USB peut entrer en compte, à condition de mettre en œuvre le cahier des charges. Donc, dans ce cas, le port devient l'Interface et les nombreux types de clés USB disponibles, devenir la classe. La réalisation de cet exemple à l'avance, si je ont été de fournir à quelqu'un lecteur USB (classe), je n'aurais pas besoin de leur dire (l'appel de la méthode) que suis-je en passant à travers. A l'appel de la méthode de prise d'un lecteur USB (type de classe) comme une référence, je n'aurais pas été en mesure de passer à tout, mais seulement la clé USB le port est destiné.

Pour résumer, Intefaces, aider la cliente à être comptabile avec la méthode d'appel (dans un cas d'utilisation lors de l'appel de la méthode s'attend à une instance d'un type particulier), n'importe quel exemple vous passer à travers, l'appelant ainsi que le destinataire de l'appel est bien sûr que c' (exemple) se situerait dans la référence de l'Interface (le port USB pour l'analogie).

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