Curso de Diseño Orientado a Objetos

Curso de Ingeniería del software que aborda la disciplina de diseño, diseño modular y diseño orientado a objetos.
En marcha
Avanzado
11 Clases 17 h (aprox.)
110€
85€
Precio en promoción

Próxima clase

Lunes 07 de diciembre

h

Añadir a Google Calendar

El Curso de Análisis y diseño de software es un curso dirigido a usuarios con conocimientos de Programación Orientada a Objetos  que desean aumentar su desempeño y la calidad de su trabajo como programadores.

Qué aprenderé en el Curso de Diseño Orientado a Objetos

  • Los objetivos del diseño de software, diseño modular y diseño orientado a objetos
  • Diseñar relaciones entre clases para encontrar las mejores soluciones
  • Entender y aplicar los principios del código de calidad
  • Reconocer smell codes y antipatrones
  • Saber aplicar correctamente patrones para permitir un diseño modular
  • Entender el Principio Open / Closed
  • Maximizar la reusabilidad del código
  • Conocer y aplicar técnicas y principios para mejorar la flexibilidad del software

Objetivos del curso

El Curso de Diseño Orientado a Objetos tiene como objetivo abordar la calidad del software, y una de las disciplinas más importantes de la ingeniería del software como es el diseño. Establece los fundamentos mediante la relación de los conceptos clave en tres etapas diferenciadas: Diseño, Diseño Modular y Diseño Orientado a Objetos.

Durante el curso veremos diversos tipos de antipatrones y "smell codes" que nos ayudarán a detectar problemas en el desarrollo del software y encontrar mejores soluciones, aplicando principios de calidad que permitan un crecimiento controlado de los proyectos, maximizando características deseables como legibilidad, escalabilidad, mantenibilidad… alta cohesión, bajo acoplamiento y granularidad… evitando la rigidez y viscosidad que imposibilitan la evolución del software, la ineficaz fragilidad, y la ineficiente ausencia de reusabilidad.

Toda la teoría se aterrizará en la práctica con un enfoque iterativo incremental, realizando hasta 8 soluciones de diseño de complejidad creciente, en las que se van incorporando más necesidades que surgen con la evolución del proyecto. Comenzaremos con un diseño sencillo, de una quincena de clases, acabando en una solución extensible, con el triple de clases pero cumpliendo el Principio Abierto/Cerrado.

INDICE DE CONTENIDOS

Diseño del software

  • Modelo del Dominio

    • Estrategias de Clasificación
    • Antipatrón “Descomposición Funcional”
    • Relaciones entre Clases
  • Legibilidad

    • KISS
    • Formato
    • Comentarios
    • Nombrado
    • Estándares
    • Consistencia
    • Alertas
    • Código Muerto
    • YAGNI
    • DRY

Diseño Modular

  • Modularidad
    • Número de módulos
    • Distribución de responsabilidades
  • Jerarquización
  • Interfaz
    • Código Sucio por Clases Alternativas con Interfaces Diferentes
    • Principios del Menor Compromiso y la Menor Sorpresa
    • Interfaz Suficiente, Completa y Primitiva
    • Diseño por Contrato
  • Implemetación
    • Cohesión
    • Acoplamiento
    • Tamaño
  • Patrón de Indirección
    • Patrón de Invención Pura
    • Patrón Vista Separada
    • Patrón Controlador
    • Patrón Creador

Diseño Orientado a Objetos

  • Teoría de Lenguajes
    • Datos polimórficos
    • Operaciones polimórficas
  • Principio Open / Closed
  • Reusabilidad
    • Herencia vs Parametrización
    • Herencia vs Composición
    • Patrón Método Plantilla
  • Flexibilidad
    • Clases Abstractas e Interfaces
    • Principio Separación de Interfaces
    • Principio de Inversión de Dependencias
    • Inversión de Control
    • Inyección de Dependencias
    • Principio de Sustitución de Liskov
    • Herencia vs Delegación
    • Técnica de Doble Despacho
    • Jerarquización

Los ejercicios se intercalarán tras la exposición de cada tema y en ellos podremos ver distintas versiones del proyecto, con diseños que emergen a medida que los requisitos evolucionan.

Por qué debes aprender Diseño de software

Este curso es fundamental para cualquier desarrollador que pretenda desempeñarse correctamente en una disciplina tan compleja como la del diseño de software. Dado que todo software debe poder cambiar, para adaptarse a necesidades siempre crecientes, resulta extremadamente importante mantener una elevada calidad del código comenzando con un correcto diseño.

En este curso el estudiante podrá reconocer cuáles son las malas prácticas en el desarrollo y cómo aplicar las técnicas y patrones para conseguir buenos diseños que permitan maximizar su flexibilidad, extensibilidad y con ello la mantenibilidad.

Qué tengo que saber

El estudiante de este curso debe tener conocimientos de programación y de programación orientada a objetos. Debería tener experiencia previa en el desarrollo de software y de preferencia haber realizado previamente el Curso de Recurrencia del Desarrollo de Software y el Curso de Programación Orientada a Objetos.

Clases y contenidos

Para qué necesitamos el Diseño Orientado a Objetos

En esta clase vamos a abordar el diseño orientado a objetos de una manera introductoria. Es una de las disciplinas más importantes en el desarrollo de proyectos, que resultará esencial para el éxito de los desarrollos.

Primero vamos a ver dónde encaja esta disciplina dentro de toda la línea de aprendizaje que un desarrollador profesional debe hacer, o tener muy clara. Veremos qué incluye este tema de estudio, qué temas debemos haber realizado con anterioridad y qué puertas nos abrirá para seguir estudiando ingeniería del software. Lo veremos en el marco del Máster de Desarrollo de EscuelaIT.

Luego comenzamos ya la clase de Diseño propiamente dicha, abordando qué es el diseño, qué es el análisis y cuáles son las motivaciones para estudiarlo. Por qué es importante realizar un buen diseño y cómo lo vamos a realizar.

También hacemos un análisis de todo el contenido que veremos a lo largo del Curso de Diseño de Software.

Dependencias entre clases (Relaciones entre clases)

En esta clase se continua con la parte de diseño, explicando cuáles son las distintas dependencias entre clases. Se explica de manera detallada cuales son los supuestos que nos harán decidir entre uno u otro tipo de dependencia, atendiendo a factores como el modelo del dominio y las necesidades del software. Como dependencia entendemos lo que antes se llamaba "relaciones entre clases". Es lo mismo, simplemente que le han cambiado el nombre.

Legibilidad del código. Smell codes

En esta clase se realiza un repaso de las relaciones entre clases y se aborda la relación de herencia, que nos faltaba por ver.

Posteriormente comenzamos el tema de legibilidad del código, abordando los primeros smell codes, como son: KISS, Formato, Comentarios y Nombrado.

Final tema de Diseño Orientado a Objetos

En esta clase terminamos el tema primero de este curso, dedicado al Diseño Orientado a Objetos. Se responderán las preguntas planteadas desde la clase anterior y luego se realizará un repaso general al tema de diseño, para acabar con los últimos puntos que nos quedaban por ver, centrados en los smell codes que, por supuesto, tenemos que evitar.

Diseño modular

Inicio del segundo tema del curso, dedicado al Diseño Modular. En este vídeo veremos qué problemas tenemos actualmente con el desarrollo de software, por qué es insuficiente escribir un código legible para desarrollar un software de calidad.

Luego veremos qué tres factores son fundamentales para conseguir mejores resultados:

  • Cohesión
  • Acoplamiento
  • Tamaño

Son conceptos que ya hemos conocido en temas anteriores, pero que se van a ampliar en este curso.

Cómo realizar diseño modular

En este vídeo entramos en el "¿Cómo?" del tema de Diseño Modular. Veremos cómo se debe de realizar el diseño modular, abordando en la mayoría del tiempo una práctica de cómo desarrollar el Tic Tac Toe con diseño modular, aplicando una técnica Top-down y explicando la posibilidad de hacer también "bottom-up" o una mezcla de ambas.

Interfaz, diseño por contrato e implantación
  • Interfaz

    • En este apartado veremos un montón de “smell codes” que están en las listas de los mejores libros.
  • Diseño por contrato

    • Veremos la definición y las maneras en las que debemos de trabajar. En este punto abordaremos el tratamiento de errores, los asserts, el protocolo con sus precondiciones y postcondiciones (que derivaron en las pruebas).
  • Implantación

    • Dentro de implementación de las clases tenemos que asegurarnos de la calidad del código por medio de la aplicación de diversos principios. Estos principios básicamente ahondan en el tema de la cohesión, pero han sido presentados como ejemplos de diversos modos específicos: cohesión de métodos, principio de única responsabilidad, junto con otro conjunto de smell codes.
Clase 7

Ver índice de contenidos

Clase 8

Ver índice de contenidos

Añadir a Google Calendar
Clase 9

Ver índice de contenidos

Añadir a Google Calendar
Clase 10

Ver índice de contenidos

Añadir a Google Calendar

Avisos

Para ver los avisos del curso necesitas acceder con tu cuenta de usuario.

Valoraciones

Javier Jara Fuentes

Agustin

Santiago Rivera Loaiza

Muy buena dinámica... muy buen maestro.

Rubén Galán Jiménez

Julián Cortés

MARTIN ALONSO CASTILLO

xavier gomez canals

Alicia Lizárraga

Rafa Bernal

Gonzalo

Miguel Valiente

Excelente curso, como todo lo que he visto de Luis. Conceptos indispensables para desarrollar buen código que todo programador debería de manejar, explicados además de una forma amena y escandalosamente pragmática. Curso totalmente necesario.

Jose

¿Conoces nuestra tarifa plana?

Toda la formación de EscuelaIT, con más de 130 cursos completos para aprender las más variadas tecnologías de programación, diseño y marketing online. Todo! con tu suscripción.

Suscríbete