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.
Material disponible
Avanzado
13 Clases 24 h
110€
95€
Precio en promoción
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.
Principios y smell codes de encapsulación y tamaño

En esta clase finalizamos el tema de diseño modular, abordando los principios que tienen que ver con la parte de encapsulación y tamaño de los elementos, así como los smell codes que nos encontramos publicados en los libros de los grandes autores. También hacemos una pequeña explicación de cómo se produce la división de código también en vistas.

Práctica Document / View

En esta clase vemos soluciones de los estudiantes de la práctica solicitada, abordando el juego del mastermind con un diseño "Document / View". Luego vemos una solución estructurada aportada por Luis.

Diseño Orientado a Objetos

En esta clase comenzamos con el último tema del curso, el diseño orientado a objetos. Este tema incorpora nuevas restricciones y leyes a la hora de diseñar el software que serán muy importantes de cara a la calidad de los proyectos. Entre otros puntos, se dedicará bastante tiempo al polimorfismo y al principio open/closed.

Composición frente a herencia y flexibilidad

En esta clase veremos herencia, sus particularidades, especialmente enfrentada a la composición, que en muchas ocasiones ofrece diversas ventajas. Luego entraremos de lleno en la parte de la flexibilidad del código, repasando algunos de los principios SOLID (de los que ya venimos hablando), centrándonos en esta ocasión en la Inversión de Dependencias.

Inyección de dependencias, Liskov, doble despacho y otras leyes y técnicas

Esta es la clase que finaliza el tema del diseño orientado a objetos en la que vemos muchas de las técnicas más importantes de la disciplina. Entre ellas destaca el principio de sustitución de Liskov, la técnica de doble despacho y otras prácticas de diseño.

Práctica final de diseño orientado a objetos

En esta clase comenzamos con una tanda de preguntas de clases anteriores del curso de diseño orientado a objetos y luego pasamos a ver una solución de la práctica final propuesta para este curso, en la que se presenta el código del Mastermind y dos distintas interfaces, de consola y gráficos.

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

jaimedocal@gmail.com

Genial como todos los cursos de Luis Fernández.

Samuel Taboas Rodriguez

iskren

Dego Alejo Rodriguez

Increible Profesor

Antonio José Sinoga

Nicolas

Muy buen curso, para continuar con los que ya viene haciendo Luis

Rubén

CARLOS LOPEZ MARTIN

Luis Javier Gutiérrez Llamazares

Joaquín Ramos Merchán

Eduardo Lizano Arrieta

el profesor tiene buen carisma para hacer las clases agradables y el contenido sencillo en la medida de lo posible

Marcos Antonio Valencia Ramírez

MARIBEL NARGANES

Gran curso

Manuel Soberano

excelente curso de lo mejor

Victor Carchenilla Gomez

Las clases son muy didácticas. Están muy bien preparadas. Se aprecia el esfuerzo de Luis para trnasmitir y preparar las classes.

Leonardo Hakim

Excelente curso.

Juan Caravaca

Jose Joaquin Meseguer Jimenez

Necesario repaso de los fundamentos aunque las actividades practicas deberian adaptarse a casos reales en nuestro negocio

Maikel Enrique Pernía Matos

Eduard Gallofré Asens

Romulo

observo que la teoría esta muy bien ampliada, falta aterrizarla con un proyecto completo de dominio en el ambito comercial si bien tres es raya ayuda, seria optimo hacerlo en algo mas comercial como gestión de recursos humanos, gestión logística, darnos unos "pincelazos" de como usar la metodologia

Jesús Cabeza Acero

Un tesoro de información, todo bien explicado, paso a paso: Diseño, Diseño Modular, Diseño Orientado a Objetos.

Alex Albuja

En este punto me parece inutil poner un comentario acerca de los cursos de Luis, ya todos los que lo conocemos sabemos la calidad de docencia y contenido.. Excelente!

Ramón de la Guía

Rafael Márquez

Este curso para mí son los cimientos de un buen desarrollador. Esencial

David Guerrero González

rafael torrado

ffgggg

Ilya Kabushko

Pedro Márquez Gomez

Muy interesante

David del Castillo Rodriguez

Muy bueno

Wilfredo José Valderrama Espinoza

excelente

Cristóbal Cobos Budia

Curso avanzado con ejemplos muy buenos para que cualquier persona pueda seguirlo. Clases muy amenas, entretenidas y divertidas.

Tempo Raposo

Diego Forero Torres

GUILLERMO

Daniel Terrones Lavado

Aclara conceptos de diseño que no se toman en cuenta generalmente. Permite entender mejor el concepto respecto a su aplicación en las diversas tecnologías.

Francisco Noguerol Díez

Jaume Baró Moreno

Luis,nos estructura,relaciona y transmite perfectamente el significado y uso de los conceptos.Esto nos facilita su comprensión y la consolidación de todo de ese conocimiento, dotándonos de poderosas herramientas.Lo consigue refactorizando nuestro conocimiento y aportandonos claridad ante el ruido generado por una amalgama de conceptos hasta ahora con baja cohesion y alto acoplamiento eferente.Su discurso es sencillo y simple a pesar de la complejidad arbitraria que incorporan nuestras preguntas.

Victor Moreno

Marco Antonio Fernández

Este curso no es el típico en el que los alumnos deben limitarse a ver, hay que razonar, interiorizar y entender todas las clases. Luis consigue insertar en tu cabeza esos conceptos con eficacia, ordenándolos con sentido y poniéndolos en el contexto adecuado con ejemplos que todo el mundo puede entender fácilmente.

Ana Santamaría Aparicio

Aritz

Ingrid Carolina Peláez

Raul Martin Garces

Alex Sánchez

isainz753

Eduardo Franco Gutierrez

Jose Delgado

Manuel Alejandro Cano Champa

Antonio Berbel Gonzalez

Las clase con Luis son magníficas. Explica todo de manera clara y contundente

Ginés

Como siempre, mucha calidad

Roberto Osco

jose maria español bellera

Pedro Zamora

Emiliano Nunez

Muy bueno!

Jymmy Dextre Alarcon

bastante explicado y detallado, en orden.

Albert Montagut Casero

jack belinson

EscuelaIt eres la mejor plataforma para aprender sobre informática.

RICARDO FERNANDEZ GARCIA

La claridad del profesor con ejemplos y analogías.

Carlos

Antonio

Excelente como todos los de Luis.

¿Conoces nuestra tarifa plana?

Toda la formación de EscuelaIT, con más de 170 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