Grado en Ingeniería Telemática (Redes y Tecnologías de Internet)

Grado en Ingeniería Telemática (Redes y Tecnologías de Internet)

Fórmate para ser un ingeniero experto en Redes y Tecnologías de Internet y adquiere a la vez las certificaciones oficiales de CCNA y CCNP

Diseño y programación orientados a objetos

Descripción: 
El paradigma de programación orientado a objetos es, actualmente, uno de los paradigmas más importantes en el mundo de la programación. Partiendo de esta idea, la asignatura tiene como objetivo que los alumnos aprendan a diseñar y programar en este paradigma, utilizando un lenguaje actual empleado en entornos reales. La asignatura hará énfasis en la fase de diseño de software, y da por supuesto que los alumnos presentan unos conocimientos y dominio suficiente del paradigma imperativo y procedimental, para entender el funcionamiento imperativo de un nuevo lenguaje de programación. Dado que la mayoría de los proyectos de software se desarrollan por equipos de programadores, la asignatura también quiere dotar a los alumnos de las competencias necesarias para afrontar estos entornos de trabajo.
Tipo asignatura
Tercer - Obligatoria
Semestre
Anual
Curso
2
Créditos
6.00

Profesores Titulares

Conocimientos previos: 
Metodología y tecnología de la programación (recomendación)
Objetivos: 
Los Resultados de Aprendizaje de esta asignatura son: RA.01 - Diseño de soluciones informáticas a problemas concretos. RA.02 - Estructuración y modularización del código. RA.03 - Conocimientos de un lenguaje imperativo real. RA.04 - Conocimientos de un lenguaje orientado a objetos real. RA.05 - Uso de un entorno real de programación. RA.06 - Utilización de patrones de diseño y diagramas de clases. RA.07 - Trabajo en equipo en el análisis, diseño e implementación de software. RA.08 - Dominar metodologías de diseño, implementación y validación del software. RA.09 - Conocimiento de las técnicas y lenguajes de programación en tiempo real, basada en eventos, y cooperativa. La asignatura, a partir de estos resultados de aprendizaje, se plantea como objetivos asegurar que el alumno, al acabar la asignatura: Objetivo.1 ? Demuestra conocer el paradigma orientado a objetos y todas sus características. Objetivo.2 ? Demuestra conocer un lenguaje orientado a objetos real y actual. Objetivo.3 ? Demuestra saber emplear un entorno a desarrollo real. Objetivo.4 ? Demuestra tener la capacidad de diseñar software a partir de unas especificaciones concretas. Objetivo.5 ? Demuestra saber usar patrones de diseño software. Objetivo.6 ? Demuestra saber trabajar en equipo.
Contenidos: 
Los contenidos detallados de la asignatura son (este contenido no se da necesariamente de manera cronológica): Conocimiento del paradigma orientado a objetos. Concepto de Clase o Prototipo Concepto de Objeto o Instancia Variables Variables de Clase Variables de Instancia Concepto de Mensaje o Método Métodos de Clase Métodos de Instancia Concepto de Encapsulación y Abstracción Concepto de Herencia Concepto de Polimorfismo Concepto de Interfaz Conocimiento de un lenguaje orientado a objetos real. Introducción en Java ¿Qué es Java? Características principales de Java Introducción al lenguaje Variables Variables de instancia / clase / locales / parámetros Tipos de datos primitivos y referencias Arrays Operadores Asignación / Aritméticos / Comparaciones Instanceof Sentencias, Expresiones y Bloques Sentencias de control de flujo If / Switch / While & do-While / For Break / Continue / Return Gestión de Excepciones Introducción al mecanismo Como lanzar excepciones (throw /throws) Try-catch-finally Introducción a la OO Declaración de una clase Visibilidad (private / protected / package / public) Declaración de métodos Constructores Paso de parámetros La referencia ?this? Instanciación y uso de objetos Static y Final Enumerations Herencia en Java Interfaces Jerarquía de clases en Java La clase Object Herencia múltiple Override de métodos Polimorfismo La referencia ?super? Constructores de subclases Métodos y clases abstractas Números, Caracteres y Strings Introducción a Genéricos Packages Basic I/O Collections AWT / Swing Concurrencia Uso de uno en torno a desarrollo real. Herramientas de modelado de diagramas IntelliJ IDEA como en torno a desarrollo Git como Sistema de Control de Versiones Jira como gestor de proyectos Capacitado de diseñar software a partir de unas especificaciones. UML Clase / Objeto / Mensaje Encapsulamiento y Abstracción Encapsulamiento vs Visibilidad Relaciones entre clases Herencia Polimorfismo Uso de patrones de diseño software. GRASP guidelines Layered Architecture Patrón Model-View-Controller Responsibility-driven design Object-Orientation and Databases DAO design pattern Trabajo en equipo en un proyecto de desarrollo de software. Herramientas de comunicación Sistemas de Control de versiones Herramientas de gestión de proyectos Los contenidos de la asignatura se ven distribuidos durante todo el curso, la orden de impartición no se corresponde exactamente con la orden del temario anterior. Durante el curso se van presentando los conceptos y se van reforzando a medida que se avanza. Los temas de análisis, diseño e implementación y patrones se verán de forma iterativa durante todo el curso, introduciendo las diferentes estructuras de datos.
Metodología: 
La asignatura se orienta para que el alumno tome parte activa en su propio aprendizaje. La metodología docente está pensada para que la asignatura sea dinámica y participativa. Las clases magistrales se combinan con clases de ejercicios y actividades en clase, así como prácticas guiadas por el profesorado de la asignatura. La metodología docente de la asignatura está claramente diferenciada en dos semestres. En el primero, se alcanzan los fundamentos del paradigma de la orientación a objetos y de la programación en Java. La orientación docente de este semestre es con clases magistrales, ejercicios de evaluación continua y prácticas. En el segundo semestre, la asignatura se enfoca con la metodología de aprendizaje basada en proyectos. Los conocimientos adquiridos durante el primer semestre se consolidan mediante la realización de un proyecto casi real de desarrollo de software. Los contenidos de la asignatura están planificados para ser impartidos en tres niveles. En primer lugar, se realizará una introducción teórica del concepto. Seguidamente, se introducirán los conceptos de diseño de software relacionados con este concepto. Finalmente, se explicará la implementación de estos conceptos en un lenguaje de programación.
Evaluación: 
Para aprobar la asignatura, es necesario aprobar ambos semestres por separado. Nota_final = Nota_S1 * 0.5 + Nota_S2 * 0.5 Primer semestre El primer semestre se evaluará mediante la realización de un conjunto de ejercicios individuales (moderadamente significativos) y un proyecto (altamente significativo). Los ejercicios tienen un objetivo formativo para que el estudiante practique de forma individual los conocimientos, antes de ponerlos en práctica en el proyecto. La nota de los ejercicios solo se tendrá en cuenta si el proyecto está aprobado y favorece al estudiante. El proyecto del primer semestre evaluará los conocimientos de diseño y programación de los estudiantes. Este está dividido en 2 fases de diseño y 2 fases de implementación. Los conceptos evaluados durante cada una de las cuatro fases serán independientes entre sí, de modo que será necesario aprobar cada fase por separado para poder aprobar el proyecto. Si alguna de las fases del proyecto no está aprobada, la nota máxima a la que podrá optar el estudiante será un cuatro (4). Ejercicios = Media (Ejercicio_1, Ejercicio_2, Ejercicio_3) Proyecto = Media (Fase_1, Fase_2, Fase_3, Fase_4) * 0.8 + Memoria * 0.2 Nota_S1 = Proyecto * 0.6 + Ejercicios * 0.4 (si Ejercicios > Proyecto) Nota_S1 = Proyecto (si Ejercicios <= Proyecto) El estudiante debe formar parte de un grupo, tanto si presenta el proyecto individualmente como en pareja. Todas las fases y la memoria deben estar aceptadas para poder aprobar el proyecto. En la rúbrica de evaluación se indicarán los criterios de aceptación. El estudiante dispondrá de 3 convocatorias para la entrega del proyecto. Segundo semestre El segundo semestre se evaluará mediante la realización de un conjunto de ejercicios individuales (moderadamente significativos) y un proyecto grupal (altamente significativo) en grupos de 5 estudiantes. Los ejercicios tienen un objetivo formativo para que el estudiante practique de forma individual los conocimientos, antes de ponerlos en práctica en el proyecto. La nota de los ejercicios solo se tendrá en cuenta si el proyecto está aprobado y favorece al estudiante. El proyecto del segundo semestre se evaluará teniendo en cuenta 3 bloques: (1) la nota del proyecto realizado, (2) la nota de mentoría, y (3) la nota de los compañeros de proyecto (P2P). La nota del proyecto se calculará a partir de 3 apartados: 40% ejecución, 40% calidad de software y 20% documentación. Estos tres apartados deben estar aceptados para poder aprobar el proyecto. En la rúbrica de evaluación se indicarán los criterios de aceptación. La nota de mentoría será un factor multiplicador entre 0,5 y 1,5. Esta la asignará el profesor mentor del proyecto individualmente a cada estudiante. Esta nota se obtendrá a través de la percepción del mentor, durante las reuniones semanales de seguimiento, sobre el conocimiento demostrado por cada estudiante. La nota P2P será un factor multiplicador entre 0 y 1,5. Esta la asignarán los estudiantes a todos los miembros de su grupo. Se utilizarán 4 cuestionarios que todos los estudiantes deberán responder. En caso de que un estudiante no responda dos o más de los cuestionarios, su nota individual del proyecto será un NP. Ejercicios = Media (Ejercicio_4, Ejercicio_5, Ejercicio_6) Proyecto = (Ejecución * 0.4 + Calidad_software * 0.4 + Documentación * 0.2) * Mentoría * P2P Nota_S2 = Proyecto * 0.6 + Ejercicios * 0.4 (si Ejercicios > Proyecto) Nota_S2 = Proyecto (si Ejercicios <= Proyecto) Los estudiantes solo podrán entregar el proyecto durante la convocatoria ordinaria.
Criterios evaluación: 
Bibliografía básica: 
[1] C.S.Horstman and G.Cornell, Core Java 2, Vol I. Fundamentos, Septima edición, Prentice Hall, 2006. [2] K.Arnold, JGosling and D.Holmes, The Java programming language, Boston : Addison-Wesley, 2000 [3] M.Fowler, UML Distilled Third Edition. A brief guide to the standard object modeling language, Addison-Wesley, 2003. [4] R.Miles and K.Hamilton, Learning UML 2.0, O'Reilly Media Inc, 2006. [5] C.Larman, Applying UML and patterns : an introduction to object-oriented analysis and design, Prentice Hall PTR, 1998 [6] E.Gamma, R.Helm, R.Johnson and J.Vlissides, Design patterns: elements of reusable object-oriented software, Addison-Wesley Longman Publishing Co., 1995 [7] J.Cooper, Java Design Patterns, Addison Wesley, 2000 [8] D.Lea, Concurrent programming in Java: design principles and patterns, Addison-Wesley, 2000
Material complementario: 
[9] M.Fowler, Refactoring: Improving the Design of Existing Code, Addison-Wesley Professional, 2018 [10] R.Martin, Clean Code: A Handbook of Agile Software Craftsmanship, Pearson, 2008 [11] K.Sierra and B.Bates, Head First Java, O'Reilly Media, 2005 [12] E.Freeman, B.Bates, K.Sierra and E.Robson, Head First Design Patterns: A Brain-Friendly Guide, O'Reilly Media, 2004