¿Viste objetos en la facultad, sabes programar en Java, C# u otro lenguaje pero sentís que te falta aprender algo más?
¿Alguna vez te preguntaste cómo surgió el paradigma de objetos, qué bases teóricas lo sustentan, cómo se compara con el paradigma funcional y cuáles son sus ventajas y desventajas?
¿Te cuesta ponerle buenos nombres a las clases, y te preguntás por qué el paradigma se llama orientado a objetos cuando lo único que parece que escribís son clases?
¿Te cuestionaste por qué te cuesta tanto mantener los sistemas que desarrollas? ¿Por qué dicen que desarrollar con Ruby es más fácil que con Java pero con Java es más 'seguro' que con Ruby?
¿Tenés dudas sobre qué decisión de diseño es mejor, sabes que tenés que buscar mínimo acoplamiento y máxima cohesión pero no estás seguro qué significa en términos de objetos?
¿Te preguntaste cómo afectan tus diseños los lenguajes estáticamente tipados y dinámicamente tipados? o ¿por qué JavaScript no utiliza clases o qué es un closure? Si alguna vez te hiciste alguna de estas preguntas, ¡entonces este curso es para vos!
El objetivo de este curso es brindar a los asistentes en primera instancia, los conceptos fundamentales del Paradigma de Objetos, con un enfoque tal que ayude a producir un cambio paradigmático en la manera de pensar al momento de construir software. Para esto se utiliza un enfoque pedagógico constructivista que permite desarrollar, a lo largo del curso, el Paradigma de Objetos en forma 'pura' — expresando todo el paradigma sólo en términos de objetos— y 'minimal' —introduciendo sólo los elementos esenciales que conforman el paradigma y que permiten la construcción de elementos más complejos y sofisticados—. En segunda instancia, se verán elementos avanzados de diseño que permitan construir software robusto, mantenible, extensible y reusable, independientemente de la plataforma de desarrollo que se utilice. Mejorar la calidad de los sistemas desarrollados a partir de entender el concepto de contrato entre objetos, su especificación (precondiciones, invariantes, etc.) y manejo en caso de violaciones (errores y excepciones). Proverá también, un mecanismo de comunicación de diseños sencillo, fluido y efectivo. Una vez terminado el curso, conocerás mucho mejor las ventajas y desventajas de los lenguajes de objetos, podrás tomar decisiones de diseño basadas en reglas confiables y estarás preparado para realizar saltos cualitativos conceptuales que te permitirán crear soluciones de las que te sentirás orgulloso.
¿Alguna vez te preguntaste cómo surgió el paradigma de objetos, qué bases teóricas lo sustentan, cómo se compara con el paradigma funcional y cuáles son sus ventajas y desventajas?
¿Te cuesta ponerle buenos nombres a las clases, y te preguntás por qué el paradigma se llama orientado a objetos cuando lo único que parece que escribís son clases?
¿Te cuestionaste por qué te cuesta tanto mantener los sistemas que desarrollas? ¿Por qué dicen que desarrollar con Ruby es más fácil que con Java pero con Java es más 'seguro' que con Ruby?
¿Tenés dudas sobre qué decisión de diseño es mejor, sabes que tenés que buscar mínimo acoplamiento y máxima cohesión pero no estás seguro qué significa en términos de objetos?
¿Te preguntaste cómo afectan tus diseños los lenguajes estáticamente tipados y dinámicamente tipados? o ¿por qué JavaScript no utiliza clases o qué es un closure? Si alguna vez te hiciste alguna de estas preguntas, ¡entonces este curso es para vos!
El objetivo de este curso es brindar a los asistentes en primera instancia, los conceptos fundamentales del Paradigma de Objetos, con un enfoque tal que ayude a producir un cambio paradigmático en la manera de pensar al momento de construir software. Para esto se utiliza un enfoque pedagógico constructivista que permite desarrollar, a lo largo del curso, el Paradigma de Objetos en forma 'pura' — expresando todo el paradigma sólo en términos de objetos— y 'minimal' —introduciendo sólo los elementos esenciales que conforman el paradigma y que permiten la construcción de elementos más complejos y sofisticados—. En segunda instancia, se verán elementos avanzados de diseño que permitan construir software robusto, mantenible, extensible y reusable, independientemente de la plataforma de desarrollo que se utilice. Mejorar la calidad de los sistemas desarrollados a partir de entender el concepto de contrato entre objetos, su especificación (precondiciones, invariantes, etc.) y manejo en caso de violaciones (errores y excepciones). Proverá también, un mecanismo de comunicación de diseños sencillo, fluido y efectivo. Una vez terminado el curso, conocerás mucho mejor las ventajas y desventajas de los lenguajes de objetos, podrás tomar decisiones de diseño basadas en reglas confiables y estarás preparado para realizar saltos cualitativos conceptuales que te permitirán crear soluciones de las que te sentirás orgulloso.
Temario
- Revisión del concepto de “paradigma”, “Software” y “programa orientado a objetos”
- Redefinición de los conceptos de:
- Objeto
- Mensaje, método, polimorfismo
- Identidad
- Colaboraciones, colaboradores
- Redefinición de Conceptos y construcciones derivados del paradigma:
- Closure
- Creación de objetos, destrucción de objetos
- Clases abstractas y concretas
- Clasificación y subclasificación
- Polimorfismo y Dynamic Binding
- Concepto de “tipo” en el paradigma de objetos:
- Comparación detallada entre lenguajes estática y dinámicamente tipados
- Elementos y Reglas de diseño avanzado:
- Jerarquías polimórficas
- Inmutabilidad – Encapsulamiento
- Objetos Completos y Válidos
- Evitar uso de null/nil
- Precondiciones
- SOLID Principles: SRC, OCP, LSP, ISP, DIP
- Idioms y Patrones
- Object Recursion
- Double Dispatch
- Null Object
Resultado esperado
El asistente estará altamente motivado para generar buenas soluciones de diseño debido a las herramientas conceptuales presentadas en el curso.
Las soluciones generadas por los asistentes no estarán sesgadas por una tecnología particular.
Podrá implementarlas en distintos lenguajes sin inconvenientes.
Que no cubre
No es un curso de Sintaxis de lenguajes de programación.
Notación de UML – Se asume como pre-requisito.
Pre-requisitos
Conocimientos Básicos de Programación.
Audiencia
Programadores, Diseñadores, Arquitectos, Analistas funcionales, Líderes Técnicos.
Cursos relacionados
- Diseño Avanzado de Software con objetos II
- Mantenimiento de Aplicacions Legacy
- Meta Programación con Lenguaje de Objetos
- Refactoring
- Tecnologia de Maquinas Virtuales
- Contrucción de Software Robusto con TDD
- Test Driven Development Avanzado