ventajas una que propiedades programacion orientado orientada objetos lenguaje ejemplos definicion clases clase c++ oop

c++ - propiedades - que es una clase en programacion



¿Cómo enseñar programación orientada a objetos? ¿Alguna idea de por dónde empezar? (9)

Estoy enseñando C ++ durante aproximadamente 2 años en escuelas secundarias, institutos de capacitación en informática, etc. Después de enseñar conceptos básicos sobre variables, matrices, estructuras, funciones, siempre comienzo partes orientadas a objetos con ejemplos tradicionales, como este:

class Person { public: Person(); ~Person(); char* getFirstName(); //we can use std::string instead of char* in optimization part char* getLastName(); char* getFullName(); int getAge(); bool getGender(); void printFullProfile(); void setFirstName(char*); void setLastName(char*); void setAge(unsigned int); void setGender(bool); void setGender(char);//f for female, m for male. private: char* first_name; //or std::string but i prefer to use pointers in the beginning. char* last_name; unsigned int age; bool gender; //ladies 1(st) , male 0 }

y luego complete esta clase de Persona y enseñe cosas nuevas como por qué los métodos de obtención y establecimiento son malos y evitan los accesores, la herencia, el polimorfismo mediante la creación de otras clases (como Estudiante, Empleado, Moderador, etc.), las habilidades y conceptos OOP necesarios.

[EDITAR]: Y hacer estas clases útiles para resolver problemas de programación. (Al igual que al calcular el salario para cada objeto del empleado, los estudiantes marcan el promedio y muchos otros)

Otros ejemplos básicos son la clase de vehículo, la clase de forma, etc.

Quiero saber sus ideas sobre cómo ( JUSTO ) comenzar un aula OOP.

Esperando grandes ideas.


¿Qué hay de mostrar cómo algo de esto es relevante para la programación ? ¿Qué gana alguien si se le dice "puede usar clases para modelar objetos físicos, por ejemplo, decir una persona"?

¿Cómo se relaciona esto con lo que están tratando de aprender ? Es decir, ¿programación?

Esta forma de "enseñar" la OOP es un completo disparate y es completamente inútil para cualquiera que no esté familiarizado con los conceptos de OOP.

Si quieres enseñar OOP, muéstrales algo que sea útil en la programación . ¿Cómo ayudan los conceptos de OOP, como las clases, a resolver problemas de programación reales? ¿Y ofrecen una solución más limpia que la que tendrían que usar de otra manera?

Es fácil aceptar el hecho abstracto de que "podríamos tener una clase Persona". También es bastante fácil aceptar que "podemos derivar de esta clase de Persona para crear una clase de personas más especializadas, como Porteros o Niños o Mujeres". Lo que falta es cualquier tipo de pista sobre cómo esto es útil en la programación. ¿Cómo es útil la herencia para resolver problemas de programación? ¿Cómo es útil el polimorfismo? ¿Por qué nos importa la ocultación de datos?

Para el caso, ¿qué nos compra su ejemplo específico? Es sólo una lista de captadores y definidores. Prácticamente no hay datos ocultos. No hay abstracción. Es solo un código adicional sobre lo que podríamos haber hecho todo el tiempo. Si no puedes escribir una buena clase, ¿estás calificado para enseñar?

Y por el amor de Dios, usa std::string lugar de char* . Sí, significa que tiene que decirles a sus alumnos que " std::string es una cadena", pero al menos no tiene que tener todo el desorden y el ruido de la gestión del puntero de caracteres. Mantenga su código limpio y libre de ruidos no deseados.


Como otros han sugerido, use ejemplos del mundo real para explicar las cosas; como una clase de vehículo y una clase de camión para la herencia. Pero aquí está la parte importante. Una vez que entienden los ejemplos del mundo real, necesitan ver ejemplos relacionados con el programa a continuación antes de comprender realmente por qué es importante para la programación.

He visto muchos códigos terribles de C ++ y no solo de personas que no entienden los conceptos. He visto a muchos programadores que saben exactamente qué es un objeto y pueden explicar perfectamente el polimorfismo y todos esos términos técnicos de OOP. Pero si no saben cuándo usarlo, nunca podrán aprovecharlo por completo. Lo sé porque yo también era así. Había leído un libro sobre OOP en la escuela secundaria que explicaba todos los conceptos, pero fui años antes de que realmente los usara porque no veía cuándo se beneficiarían realmente de mi código. Trate de asignar tareas de programación donde hacerlo sin OOP sea mucho más difícil. Los estudiantes naturalmente tomarán la ruta más fácil y comenzarán a entender. Hacer es la mejor manera de aprender.

Puede tener una clase de lista vinculada y pedirles que hereden de ella para hacer una pila o cola escribiendo sus propios métodos push / pop, enqueue / dequeue. O cree una clase de árbol binario y pídales que se conviertan en un árbol de búsqueda binario anulando el método de inserción. Haga que trabajen con memoria dinámica para que puedan ver por qué son importantes los constructores / destructores [copia]. Pídales que escriban una clase de temporizador que almacene el tiempo en segundos, pero que utilicen captadores / configuradores para convertir automáticamente a / desde minutos u horas.

No sé si sus estudiantes han trabajado con arrays de caracteres o cadenas std :: desde el principio. Haz que utilicen ambos. Cuando entiendan cuán difíciles pueden ser las matrices de caracteres, apreciarán más la clase de cadena y entenderán que el punto de una clase es la abstracción, no solo la organización de código. Si sus estudiantes alguna vez preguntan acerca de la organización del código y no están seguros de dónde debe ir un dato o método en particular, recuerde esta cita:

"De hecho, afirmaré que la diferencia entre un mal programador y uno bueno es si considera que su código o sus estructuras de datos son más importantes. Los malos programadores se preocupan por el código. Los buenos programadores se preocupan por las estructuras de datos y sus relaciones". - Linus Torvalds


Como sabemos, los conceptos orientados a objetos están muy cerca del ser humano, así que cuando comienzo con oo concept, siempre doy los ejemplos en tiempo real y hace mucha diferencia ... EX ... - Polimorfismo: el ejemplo en tiempo real de Polimorfismo es " YO "veo que solo hay una persona, pero tengo ROLES DIFERENTES, como cuando estoy en casa 1. Soy hijo de mi padre y mi madre. 2. Cuando estoy en la escuela esa vez soy profesor. 3.Cuando estoy en el suelo, entonces soy un jugador ........ solo veo una persona, es decir, yo, pero tengo diferentes roles ... es decir, POLIMORFISMO

- Abstracción: soy profesor y ustedes (estudiantes) están interesados ​​en mi enseñanza, no en lo que hice para recopilar estos datos y en lo que hice anoche. es decir, abstracción EVITE DAR AL USUARIO COSA NO DESEADA.


Con el aumento de la importancia en las interfaces en el mundo de la programación de hoy, me concentraría en lo que hace su clase (comportamiento) en lugar de sus campos y propiedades. Esto ayuda a reforzar el concepto de pensamiento "Is-A" (también conocido como Principio de Sustitución de Liskov ).


Cuando enseño programación orientada a objetos, trato de no comenzar con el código, sino con conceptos e ideas y por qué. Aquí hay una traducción horrible de Google de una página web originalmente sueca , donde escribí la introducción de OO que uso para dar.


Empezaría sin código, con tarjetas CRC. Deje que la clase desempeñe los roles de las tarjetas y realice una sesión de diseño de OO real. Allí puede introducir el principio de responsabilidad única, hablar de has-a vs is-a y herencia, encapsulación. Me encuentro con muchos programadores que no tienen ni idea de OO y aún están programando en c ++, c #, java o delphi.

[editar] Más adelante, es posible que desee comparar OO basado en clase con javascript (o auto) y basado en prototipos para hablar sobre diferentes formas de clasificación.


Empieza evitando clases con captadores y setters. Una de las principales promesas de la POO es "los datos y el programa van juntos". tiene la intención de resolver un problema de larga data en los programas de procedimientos: un cambio a una estructura de datos en un punto de ondulaciones en todo el programa a medida que los datos fluyen. La POO resuelve esto asegurándose de que los datos se mantengan . los captadores y los configuradores son simplemente un mecanismo para sortear la POO (los datos viajan en a->setX(y->getX()) ), y terminas con montones de repeticiones.

Además, no enseñes OOP usando C ++. Utilice un lenguaje que fue diseñado para la programación orientada a objetos. algo que tiene una encapsulación real (los cambios en los miembros privados no requieren la compilación del código del cliente) y tratan a todos los tipos de manera uniforme (por ejemplo, los literales de cadena son objetos de primera clase).


No usaría C ++ para enseñar OOP, porque C ++ no es exactamente un lenguaje elegante y OOP es algo extraño en C ++. Prefiero Java o Scala o quizás Python, que es un buen lenguaje para la enseñanza. Mi primera elección sería Scala, debido a sus fuertes conceptos. No hay miembros estáticos rompiendo oop, por ejemplo. No olvide que la enseñanza es más efectiva si la programación es divertida (C ++ no es tan divertido).

Yo cubriría:

  • ¿Cuál es el objetivo de la POO?
  • Polimorfismo con herencia e interfaces.
  • responsabilidad de un objeto
  • encapsulamiento
  • mensajes entre objetos

Si el tiempo lo permite y los estudiantes están ansiosos y son capaces de aprender. También puede enseñarles a escribir programas de GUI sencillos y crear GUIs es también donde OOP es bueno.

Qt, bien diseñado en C ++, es ideal para esta tarea. Los estudiantes no pueden apreciar la herencia, las funciones virtuales, hasta que hayan visto ejemplos del mundo real.