28 votos

Cómo enseñar programación orientada a objetos procesales a los programadores?

Me han pedido para comenzar a enseñar a C# y conceptos OO a un grupo de procedimientos de los programadores. He buscado ideas sobre por dónde empezar, pero estoy buscando un consenso general sobre los temas a plomo con además de los temas inicialmente para evitar.

Editar

Tengo la intención de presentar la información en el minuto 30 cuotas a la semana hasta que ya no tiene sentido para cumplir. Estas presentaciones están dirigidas a los compañeros de trabajo en una variedad de niveles de habilidad, desde principiantes a expertos.

18voto

exclsr Puntos 2076

La mejor cosa que puedes hacer es: Tener un montón de preguntas Y respuestas.

De Wikipedia, la programación procedural (PP) artículo realmente golpea donde usted debe comenzar:

Mientras que la programación procedimental utiliza los procedimientos para operar sobre los datos estructuras, orientado a objetos programación de paquetes a los dos juntos así que un "objeto" que opera en su "propia" estructura de datos.

Una vez que se entiende esto, creo que mucho va a caer en su lugar.

En general

Programación orientada a objetos es una de esas cosas que puede tomar tiempo para "obtener", y cada persona tiene su propio camino para llegar allí. Cuando escrito en C#, que no es como el código de gritos, "yo estoy usando OO principios!" en cada línea. Es más de una cosa sutil, como un foreach de bucle, o string de concatenación.

El centro de diseño de

Siempre uso algo (en repetidas ocasiones) antes de hacer esto.

En primer lugar, el uso de un objeto, y demostrar las diferencias básicas de los PP. Como:

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]);
    }
}

El uso de los objetos (y otros OO cosas) en primer lugar, antes de ser forzado a crear su propio -- lleva a la gente por el camino de la, "Ok, estoy haciendo algo parecido a lo que acabo de utilizar," en lugar de "WTF estoy escribiendo?"

Herencia (es una trampa!)

Yo NO iba a pasar mucho tiempo en la herencia. Creo que es un error común de las lecciones para hacer una gran cosa acerca de este (por lo general, un cliché de los animales de la jerarquía, como otros señalado). Creo que es muy importante saber acerca de la herencia, para entender cómo utilizar el .NET Framework, pero sus matices, no es tan grande de un acuerdo.

Cuando estoy usando .NET, estoy más propensos a correr "en herencia" cuando estoy usando el .NET Framework (es decir, "¿este control tiene un Content de la propiedad?" o "yo voy a llamar a su ToString() método.") en lugar de cuando estoy creando mi propia clase. Muy (muy (muy)) rara vez siento la necesidad de hacer algo que imitan la estructura taxonómica del reino animal.

Interfaces

Codificación a una interfaz es una de las claves de nivel medio de concepto. Se utiliza en todas partes, y la programación orientada a objetos hace que sea más fácil. Ejemplos de esto son ilimitadas. Aprovechando el ejemplo que tengo más arriba, puede demostrar la IComparer<int> interfaz de:

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

A continuación, se utiliza para cambiar el orden de la lista, a través de la myList.Sort(this). (Después de hablar acerca de la this, por supuesto).

Las mejores prácticas

Ya que hay algunos desarrolladores experimentados en el grupo, una de las estrategias en el nivel medio de las clases serían para mostrar cómo varias de las mejores prácticas de trabajo en C#. Como, ocultar información, el patrón observer, etc.

Tiene una tonelada de Q&A

De nuevo, todo el mundo aprende de forma ligeramente diferente. Creo que la mejor cosa que puedes hacer es tener un montón de Q&A y animar a los demás en el grupo de discusión. Generalmente, la gente aprende más cuando están involucrados, y usted tiene una buena situación en la que debería ser más fácil.

12voto

Hooked Puntos 1825

El salto de procedimiento para el orientado a objetos (incluso dentro de un mismo idioma - durante cuatro meses he programado procesal C++, y las clases eran incómodos para un tiempo después) puede ser aliviado si insistes en el más básico de los conceptos que la gente no destacar.

Por ejemplo, cuando me enteré de programación orientada a objetos, ninguno de los libros de relieve que cada objeto tiene su propio conjunto de datos de miembros. Yo estaba tratando de escribir clases para la validación de la entrada y el como, no el entendimiento de que las clases eran para operar sobre los datos de los miembros, no de entrada.

Empezar con las estructuras de datos de inmediato. Ellos hacen que el paradigma de la programación orientada a objetos parecen útiles. La gente enseña cómo hacer una "Casa" de la clase, pero ya que la mayoría de principio programadores quieren hacer algo útil de inmediato, que parece un inútil rodeo.

Evitar el polimorfismo de inmediato. La herencia está bien, pero enseñar cuándo es apropiado (en lugar de simplemente añadir a su base de clase).

Sobrecarga de operadores no es esencial cuando usted está aprendiendo, y el especial ctors (por defecto, dtor, copia cto r, y el operador de asignación, todos tienen su difícil aspectos, y es posible que desee evitar que hasta que no se basan en la clase básica de diseño).

Tienen en la construcción de una Pila o de una Lista Enlazada. No hacer nada donde recorrido es difícil, como un árbol binario.

5voto

Jimmy Chandra Puntos 3562

Hacerlo en etapas.

Alto nivel de conceptos : Describir lo que es un objeto y se refieren a la vida real.

Nivel medio de conceptos: Ahora que llegaron a qué objeto es, tratar de comparar y contrastar. Mostrarles por qué variable global es mala, en comparación con un encapsulado de valor en una clase. ¿Cuál es la ventaja que puede obtener de la encapsulación. Empezar a introducir el tennets de la programación orientada a objetos (encapsulación, herencia)

Bajo los conceptos de Nivel: Ir más allá en el polimorfismo y la abstracción. Mostrarles cómo pueden ganar aún mejor diseño a través de polimorfismo y la abstracción.

Avance conceptos: SÓLIDO, Interfaz de programación, OO patrones de diseño.

5voto

HLGEM Puntos 54641

Tal vez usted debería considerar la posibilidad de un problema que está relacionado con el trabajo y comenzar con un procedimiento de ejecución de la misma y, a continuación, trabajar a través de la sesión por sesión) cómo hacer una aplicación de la programación orientada a objetos. Encuentro de profesionales de la frecuencia de comprender los conceptos mejor si está directamente relacionada con ejemplos reales de su propio lugar de trabajo. La basura ejemplos de la mayoría de los libros de texto de uso están a menudo horrible para la comprensión, porque dejar que el estudiante se preguntaba, ¿por qué en la tierra para que querría yo hacer eso. Darles una vida real razón por la que ellos quieren hacer y que tiene más sentido.

3voto

Anders Lindahl Puntos 17380

Me gustaría evitar el "la bicicleta es un tipo de veichle" enfoque y tratar de aplicar OO a un entorno que es bastante específica y que ya están acostumbrados. Trate de encontrar un dominio de problemas en los que todos reconocen.

El ejercicio de los fundamentos de ese dominio, pero tratar de avanzar hacia algunos "wow!" o "¡ajá!" experiencia relativamente temprana; he tenido una experiencia como la de que al leer acerca de "Reemplazar Condicional con el Polimorfismo" en Fowlers de Refactorización, que o similar de libros puede ser una buena fuente de ideas. Si recuerdo correctamente, Michael Plumas de Trabajar eficazmente con un legado de código contiene un capítulo acerca de cómo transformar un procedimiento programa en OO.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: