33 votes

Comment enseigner la programmation orientée objet aux programmeurs procéduraux?

Il m'a été demandé de commencer à enseigner en C# et des concepts OO à un groupe de procédure programmeurs. J'ai cherché des idées sur où commencer, mais suis à la recherche d'un consensus général sur des sujets de mener avec en plus des rubriques d'abord d'éviter.

Modifier

J'ai l'intention de présenter de l'information dans les 30 minutes versements hebdomadaires jusqu'à ce qu'il n'a plus de sens à respecter. Ces présentations sont destinés à des collègues à une variété de niveaux, du débutant à l'expert.

24voto

exclsr Points 2076

La meilleure chose que vous pouvez faire est: Avoir une tonne de questions-réponses.

Wikipédia en programmation procédurale (PP) article vraiment hits où vous devriez commencer:

Considérant que la procédure de programmation utilise les procédures d'opérer sur des données structures orientées objet la programmation regroupe les deux ensemble ainsi un "objet" fonctionne sur son "propre" structure de données.

Une fois que c'est compris, je pense que beaucoup de choses vont se mettre en place.

En général

La programmation orientée objet est une de ces choses qui peut prendre du temps pour "obtenir" et chaque personne prend son propre chemin pour y arriver. Lorsque l'on écrit en C#, il n'est pas comme le code des cris, "je suis en utilisant OO principes!" dans chaque ligne. C'est plus d'une chose subtile, comme un foreach boucle, ou string de concaténation.

Centre de Design

Toujours utiliser quelque chose (à plusieurs reprises) avant de faire cela.

Tout d'abord, utiliser un objet, et de démontrer les différences de base de PP. Comme:

static void Main(string[] args)
{
    List<int> myList = new List<int>();

    myList.Add(1);
    myList.Add(7);
    myList.Add(5);

    myList.Sort();

    for (int i = 0; i < myList.Count; i++)
    {
        Console.WriteLine(myList[i]);
    }
}

En utilisant les objets (et les autres OO choses) d'abord, avant d'être contraint à créer leur propre, amène les gens à descendre le chemin de, "Ok, je suis en train de faire quelque chose comme ce que je viens d'employer," plutôt que de "WTF suis-je taper?"

L'héritage (c'est un piège!)

Je ne voudrais PAS passer beaucoup de temps sur l'héritage. Je pense que c'est un piège pour les leçons à en faire une grosse affaire à ce sujet (généralement de faire un cliché animal de la hiérarchie, comme d'autres l'ont souligné). Je pense qu'il est essentiel de savoir à propos de l'héritage, de comprendre comment utiliser le .NET Framework, mais ses nuances ne sont pas que les grandes d'un accord.

Quand je suis en utilisant .NET, je suis de plus en plus probable "exécuter en héritage" quand je suis à l'aide de l' .NET Framework (c'est à dire "est-ce contrôle ont un Content de la propriété?" ou "je vais juste appeler sa ToString() méthode.") plutôt que lorsque je crée ma propre classe. Très (très (très) rarement, je ressens le besoin de faire quelque chose imitant la structure taxinomique du règne animal.

Interfaces

Le codage d'une interface est une clé de mi-niveau concept. Il est utilisé partout, et la programmation orientée objet la rend plus facile. Des exemples de ce sont illimitées. S'appuyant sur l'exemple que j'ai ci-dessus, on pourrait démontrer l' IComparer<int> interface:

public int Compare(int x, int y)
{
    return y.CompareTo(x); 
}

Puis, l'utiliser pour modifier l'ordre de tri de la liste, par myList.Sort(this). (Après avoir parlé this, bien sûr.)

Les meilleures pratiques

Depuis il y a quelques développeurs expérimentés dans le groupe, une stratégie dans le milieu des classes de niveau serait la preuve que les meilleures pratiques de travail en C#. Comme, se cacher de l'information, le modèle observateur, etc.

Avoir une tonne de Q&A

Encore une fois, tout le monde apprend de façon légèrement différente. Je pense que la meilleure chose que vous pouvez faire est d'avoir une tonne de Q&A et d'encourager les autres dans le groupe pour avoir une discussion. En général, les gens apprennent davantage lorsqu'ils sont impliqués, et vous avez une bonne situation où ce devrait être plus facile.

12voto

Hooked Points 1825

Le saut de procédure orientés objet (même à l'intérieur d'une langue - de quatre mois, j'ai programmé de procédure C++, et les classes ont été mal à l'aise pendant un certain temps après) peut être atténuée si vous mettez l'accent sur les concepts plus fondamentaux que les gens n'ont pas l'accent.

Par exemple, lorsque j'ai appris la programmation orientée objet, aucun des livres de souligner que chaque objet a son propre ensemble de données des membres. J'ai essayé d'écrire des classes pour la validation d'entrée et le genre, ne pas comprendre que les classes étaient à opérer sur les données des membres, pas d'entrée.

Commencer avec des structures de données immédiatement. Ils font le paradigme de la programmation orientée objet qui semblent utiles. Les gens qui vous enseignent comment faire un "Maison" de la classe, mais depuis le début de programmeurs veulent faire quelque chose d'utile tout de suite, ça semble être un détour inutile.

Éviter polymorphisme tout de suite. L'héritage est bien, mais enseigner quand il est approprié (au lieu de simplement ajouter à votre classe de base).

La surcharge d'opérateur n'est pas indispensable lorsque vous êtes le premier à l'apprentissage et à la ctors (par défaut, dtor, copie ctor, et l'opérateur d'affectation ont tous leurs épineux les aspects, et vous voudrez peut-être éviter que jusqu'à ce qu'elles sont ancrées dans la classe de base de la conception).

Ont leur de créer une Pile ou d'une Liste Liée. Ne pas faire n'importe quoi, où la traversée est difficile, comme un arbre binaire.

8voto

Jimmy Chandra Points 3562

Le faire en plusieurs étapes.

De haut niveau des concepts : Décrire ce qu'un objet et de le rapporter à la vie réelle.

Niveau moyen des concepts: Maintenant, qu'ils faisaient l'objet, essayez de les comparer et de contraste. Leur montrer pourquoi variable globale est mauvaise, comparativement à un encapsulé valeur dans une classe. Quels sont les avantages qu'ils pourraient obtenir à partir d'encapsulation. Commencer à introduire la tennets de la programmation orientée objet (encapsulation, héritage)

Faible Niveau des concepts: Aller plus loin dans le polymorphisme et l'abstraction. Leur montrer comment ils peuvent gagner encore meilleur design par le biais de polymorphisme et de l'abstraction.

L'avance des concepts: SOLIDE, Interface de programmation, OO modèles de conception.

5voto

HLGEM Points 54641

Peut-être vous devriez envisager un problème qui est lié au travail et de commencer avec une procédure de mise en œuvre de l', et ensuite grâce (session par session) comment faire de la programmation orientée objet la mise en oeuvre. - Je trouver des professionnels souvent saisir des concepts mieux si elle est directement liée à des exemples concrets à partir de leur propre lieu de travail. La jonque des exemples de la plupart des manuels d'utilisation sont souvent horribles pour comprendre parce qu'ils laissent à l'élève de se demander, pourquoi sur terre serait jamais je veux le faire. Leur donner une vraie vie, la raison pourquoi ils veulent le faire et il fait plus de sens.

3voto

Anders Lindahl Points 17380

Je voudrais éviter les "à vélo est une sorte de veichle" approche et d'essayer de les appliquer OO à un environnement qui est assez spécifique et qu'ils sont déjà utilisés. Essayez de trouver un domaine de problèmes qu'ils reconnaissent tous.

Excercise les bases dans ce domaine, mais essayez de déplacer vers un "wow!" ou "ah! ah!" expérience relativement tôt; j'ai eu une expérience comme ça lors de la lecture sur "Remplacer le Conditionnel avec le Polymorphisme" dans Fowlers Refactoring, que ou de livres semblables pourraient être une bonne source d'idées. Si je me souviens bien, Michael Plumes de Travailler de façon efficace avec le code existant contient un chapitre sur la façon de transformer une procédure de programme en OO.

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