Cómo mejorar mis habilidades de programación orientada a objetos

Desde mi experiencia personal , diría solo una palabra: práctica.

Practique todo lo que pueda con ideas y objetos que lo motivarán, inspirarán, motivarán y estarán dispuestos a escribir su código.

Permíteme darte algunos ejemplos que pueden llevarte por buen camino:

  1. Crea objetos de combate y un objeto de lucha , y luego crea peleas en las que dos luchadores pueden luchar y un algoritmo aleatorio puede asignar aleatoriamente un ganador.
  2. Cree un objeto BankAccount . Cree funciones básicas como depositar, retirar, intereses diarios y mensuales, etc.
  3. Cree un programa similar a Tinder creando objetos Persona. ¡Cuanto más tienen en común estos objetos, más probabilidades hay de que sean una pareja futura!
  4. Cree un objeto simple de SocialNetwork . Puede publicar, agregar amigos (que pueden ser otros objetos Persona), eliminar amigos, etc. ¿Qué hay de crear incluso un objeto Publicar para que usted y otras personas puedan dar me gusta y comentar?
  5. Un programa de cuestionarios ! Cree diferentes tipos de objetos de “Pregunta” y practique sus conocimientos de polimorfismo y herencia heredando preguntas más avanzadas de una clase base.
  6. Crea objetos de coche y un objeto de carrera . Otorgue atributos para cada automóvil que cree y luego cree parámetros que harán que su programa considere más valioso y útil para ganar una carrera.

¡Maldición! Me motivé Vamos a escribir un código? Pero espere: estoy considerando que ya tiene el conocimiento de los tres pilares principales del paradigma de programación orientado a objetos: encapsulación, herencia, polimorfismo; Y otros conceptos importantes como sobrecarga, sobrescritura, público, privado, miembros de datos protegidos, y la lista continúa.

Lo más importante, ¡diviértete, amigo! Si tiene más preguntas, por favor, ¡pregúnteme!

Maui

Practique resolviendo problemas y representando sistemas usando un enfoque orientado a objetos.

Sin embargo, antes de eso, creo que debería comprender un enfoque orientado a objetos, el problema que intenta resolver y las alternativas.

Para resolver problemas y representar sistemas utilizando un enfoque orientado a objetos, debe ser capaz de representar los conceptos de un problema o sistema, como objetos independientes que saben cómo hacer las cosas por sí mismos y que trabajan juntos para resolver un problema mediante la comunicación entre ellos. No existe un procedimiento central que los orquesta.

Comprenda que el propósito de hacerlo de esta manera es apoyar la creación de soluciones o sistemas de escala y complejidad ilimitadas. Una forma de representar requisitos funcionales complejos en código.

Tenga en cuenta que conceptos como encapsulación, ocultamiento de información / implementación, objetos, retención de estado, identidad de objeto, clases, polimorfismo, etc. son características del lenguaje que se pueden usar para admitir diferentes enfoques de un problema, incluido uno orientado a objetos.

Por ejemplo, el modelado de información (modelado de datos) tiene el concepto de que una entidad se basa comúnmente en objetos reales o abstractos. ¿No se puede usar también un objeto en Java, C # o Python para representar esa entidad ? Otro ejemplo es que puede implementar un tipo de datos abstractos (ADT) que representa, por ejemplo, una pila o una cola utilizando un objeto en Java o C #. ¿Está orientado a objetos ADT solo porque se implementa utilizando un objeto que tiene métodos en un “lenguaje OO”? La respuesta es no.

Un par de preguntas de la entrevista para pensar. Envíame un mensaje para una pista o para discutirlos: –

  1. Considere el rompecabezas o juego, Torres de Hanoi.
  1. ¿Cómo representaría esto usando un enfoque orientado a objetos?
  2. ¿Cómo representaría esto usando un enfoque no orientado a objetos?
  3. Describa los méritos y desventajas relativas de sus dos enfoques.
  • Describa cómo escribiría una aplicación que tiene dos murciélagos y una pelota que se golpea entre ellos, en un estilo orientado a objetos.
    1. ¿Qué hace que su solución esté orientada a objetos?
    2. ¿Por qué lo escribirías en este estilo?
  • Un avión consta de muchos cientos de miles de partes y componentes que se combinan e interactúan entre sí para representar la enorme funcionalidad de un avión.
    1. ¿Cómo modelarías ese avión en código?
  • Explique cuál es su comprensión de un “enfoque procesal” frente a un enfoque orientado a objetos.
  • ¿Representar a un cliente reserva un coche de alquiler en la sucursal de la ciudad en código orientado a objetos?
    1. ¿Cómo cambiaría su respuesta si también quisiera registrar cada reserva?
  • Considere una arquitectura comúnmente implementada para sistemas comerciales. En él, uno representa y modela requisitos funcionales utilizando conceptos de datos, luego representa esos conceptos de datos como objetos, como una tabla de datos o una fila de datos. Una acción o caso de uso impulsa procedimientos que contienen lógica y restricciones dentro de una transacción para orquestar esos objetos de datos.
    1. Esto usa objetos , pero ¿es este un enfoque orientado a objetos? Explica tu razonamiento.
    2. Describa cómo cambiaría esto para representar requisitos funcionales utilizando un enfoque orientado a objetos, en lugar de un enfoque de modelado de datos.
    1. ¿Cuales son las ventajas y desventajas de cada uno?

    Vea que la importancia principal de la programación orientada a objetos es durante proyectos grandes y una gran base de código, por lo tanto, mientras practica con las fuerzas de código y principalmente durante la programación competitiva, no encontrará el uso de OOPS y eso ni siquiera es necesario allí. Entonces, si realmente desea trabajar en OOPS y desea codificar utilizando OOPS, intente buscar en algunos proyectos de código abierto como Plone Foundation es una organización que trabaja en Python y su código base es un gran ejemplo de OOPS, aquí está el enlace: – Gestión de contenido de código abierto. También hay muchos otros proyectos de código abierto que usan OOPS como Bika y muchos más. Intente explorarlos y encontrará muchos ejemplos de código base usando OOPS en código abierto.

    También hay muchos ejemplos de los conceptos de OOPS como interfaces, herencias, etc., por lo que le sugeriré que primero tome el concepto y trabaje en crear clases pequeñas e implemente estos conceptos en esas clases e intente encontrar el resultado y eso realmente te ayudará a comprender los conceptos de OOPS.

    Como crear una pequeña clase A y crear 2 funciones dentro de esa clase A y luego crear la clase B y heredar la clase A en la clase B y luego crear el objeto de la clase B e intentar llamar a la función de la clase A y ver la salida.

    Hay realmente pequeños y básicos con los que deberías comenzar y toparte con un código enorme como Plone y otros de código abierto.

    Entonces, comience con cosas pequeñas y conceptos pequeños y luego juegue con código grande, esto lo ayudará mucho.

    También intente crear listas vinculadas, árboles de búsqueda binaria usando diferentes clases para nodo, principal, lista / árbol, etc., e intente crear objetos de una clase en otra y usarlos, hay algunas de las formas fáciles de implementar OOPS también.

    Salud,

    Simpatizo con usted porque mis “habilidades” de OOP también son mediocres porque, creo, OOP es una metodología “invertida”. OOP no es como funcionan los cerebros de la mayoría de las personas. Tengo que pensar en una “mentalidad” completamente diferente cuando uso cualquier lenguaje OOP. Es casi como si tuviera que tener dos cabezas, una para “vida normal” y otra para intercambiar, antes de trabajar con OOP.

    Naturalmente, no pensamos “Apple debo obtener”, naturalmente pensamos “debo obtener una Apple”. El objeto (cosa) ocupa el segundo lugar de la acción (verbo).

    ¡No soy el único en criticar a OOP y si miras en Wikipedia – sección de críticas encontrarás a muchos que están de acuerdo conmigo y tienen algunas opiniones muy fuertes al respecto!

    El problema es que los colegios y ciertas instituciones presionaron mucho para que la OOP fuera estandarizada y tuviera éxito. Nadie ha demostrado que la POO es superior a otras metodologías, por lo que persiste el “mito” de que es un avance positivo en otros paradigmas.

    Personalmente, utilizo una técnica de tabla de control que desarrollé yo mismo alrededor de 1972 en mis primeros años de programación y he tenido un éxito considerable a lo largo de los años en reducir considerablemente la cantidad de código real requerido para producir algoritmos estables, portátiles y confiables, al estructurar elementos de datos de una manera lógica

    Una de las cosas que me disgusta particularmente de la POO es la gran cantidad de terminología (dudosa) asociada con ella, en comparación con la programación “normal”. Esto hace que la curva de aprendizaje sea mucho más pronunciada que para los paradigmas convencionales.

    Creo responder a tu pregunta. Tengo que ir al inicio de la programación orientada a objetos.

    Antes de que se desarrollara la Programación Orientada a Objetos porque era muy complejo desarrollar los sistemas para propósitos humanos utilizables. Pero OOP lo hizo mucho más fácil.
    Por lo tanto, para desarrollar sus habilidades en OOP, no necesita practicar los problemas desde algún sitio, solo haga su hábito ver cosas del mundo real en términos de OOP. Asigne los conceptos de OOP a la vida real, su día a día. Es algo que se mejoraría con la práctica. Para practicar OOP usando problemas de la vida real.

    Entonces, el enfoque que sugeriría es:

    1. Tome un buen curso de OOP en cualquiera de los sitios en línea. Todos los cursos son casi iguales. Sugeriría cualquiera de los sitios https://www.udacity.com/ , https://coursera.org . El curso debe tener conjuntos de problemas y tareas con él. Sugeriría cualquiera de este sitio porque proporcionarán un foro de discusión para aclarar el concepto. Por lo tanto, puede tomar consejos de otros estudiantes para aclarar conceptos.
    2. Lea un buen libro junto con un curso en línea que debe ser muy completo en términos de conceptos de OOP. Sugeriría http://www.amazon.com/Head-First … o http://www.amazon.in/Head-First- … (Me encantan los primeros libros. :))
    3. Una vez que haya terminado con esto, intente mapear esos conceptos en la vida real. Trata de visualizar las cosas de manera OOP.

    Al seguir este patrón, no necesitará ningún otro recurso para practicar. Intente utilizar los foros de discusión del sitio (como coursera, udacity, todos los tiempos http://stackoverflow.com/ ). Para aclarar tus conceptos.
    Siempre que se encuentre con algún concepto o mapeo de conceptos que se aplicarán en la vida real, trate de pensar en un problema similar que haya visto antes.

    Todo lo mejor para OOP.

    En primer lugar, creo que deberías tratar de aprender cómo distribuir las responsabilidades a través de las clases, esa es la clave. En segundo lugar, debe intentar establecer las relaciones entre las clases de acuerdo con las colaboraciones.

    Practicar en un proyecto real utilizando escenarios de casos de uso (escenarios primarios y secundarios) sería un buen comienzo para usted. Más adelante puede detallarlo mediante diagramas de actividad y diagramas de secuencia que contribuirán a sus diagramas de clase.

    Después de varias iteraciones, puede decidir si el modelo de dominio es lo suficientemente maduro como para usarlo en implementación y transformarlo en Java o C ++ (o cualquier lenguaje OO que decida)

    En primer lugar, internalice SOLID (diseño orientado a objetos).

    También primero (soy un tramposo): comienza a practicar TDD . Convierta cada clase en un recuadro negro, comience escribiendo pruebas, y de repente verá que su código mejora a pasos agigantados.

    Recomiendo cualquiera de los enfoques a continuación. Lo ideal es una mezcla de todos:
    1. Trate de contribuir en un proyecto de código abierto cuyo OOP es ampliamente utilizado
    2. Lea los libros oop.
    3. Participe en foros que discutan sobre oo
    4. Revise los códigos que se consideran mejores prácticas