Grado en Engineering in Technology Management

Fórmate en un Grado Universitario único en España y con un 100% de empleabilidad

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á hincapié en la fase de diseño del software, y da por supuesto que los alumnos presentan unos conocimientos y dominio suficientes 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: 

Conocimientos de programación imperativa y algorítmica básica.

Se recomienda haber cursado: Metodología y tecnología de la programación.

Objetivos: 

  1. L'estudiant coneix el paradigma orientat a objectes i totes les seves característiques.
  2. L'estudiant coneix un llenguatge orientat a objectes real i actual.
  3. L'estudiant desenvolupa projectes de programació mitjançant els instruments i pràctiques pròpies d'un entorn de desenvolupament real.
  4. L'estudiant dissenya software a partir d'unes especificacions concretes.
  5. L'estudiant utilitza correctament patrons GRASP de disseny software.
  6. L'estudiant treballa en equip.

Contenidos: 

Los contenidos detallados de la asignatura son (*):

  • Conocimiento del paradigma orientado a objetos.
    • Clase o Prototipo
    • Objeto o Instancia
    • Mensaje, Método u Operación
    • Encapsulación y Abstracción
    • Herencia
    • Polimorfismo
    • Interfaz
  • Conocimiento de un lenguaje orientado a objetos real.
    • Introducción a Java.
    • Características principales de Java
    • Introducción al lenguaje
      • Variables de instancia / clase / locales / parámetros
      • Tipos de datos primitivos vs referencias
      • Arrays
      • Operadores
      • Gestión de Excepciones
    • Introducción a la OO
    • Declaración de una clase
    • Visibilidad (private / protected / package / public)
    • Declaración de métodos, Constructores y Paso de parámetros
    • La referencia "this"
    • Instanciación y uso de objetos
    • Static y Final
    • Enumeraciones
    • Herencia en Java
      • Interfaces
      • Jerarquía de clases en Java
      • La clase Object
      • Herencia múltiple
      • Sobrescritura 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 un entorno de desarrollo real.
    • Herramienta de modelado de diagramas
    • IntelliJ IDEA como entorno de desarrollo
    • Git como Sistema de Control de Versiones
    • Jira como gestor de proyectos
  • Capacidad 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 de software.
    • GRASP guidelines
    • Layered Architecture
    • Patrón Modelo-Vista-Controlador
    • 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 distribuyen a lo largo de todo el curso; el orden de impartición no se corresponde con el 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 abordarán de forma iterativa durante todo el curso, introduciendo las diferentes estructuras de datos.

Metodología: 

La asignatura se orienta para que el alumno tenga un papel activo 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 el aula, así como prácticas guiadas por el profesorado de la asignatura.

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 dicho concepto. Finalmente, se explicará la implementación de estos conceptos en un lenguaje de programación.

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 consiste en clases magistrales donde el profesorado introduce los conceptos, trabaja ejercicios de ejemplo y guía al alumnado en el análisis y diseño de soluciones para los problemas propuestos. El aprendizaje del alumnado se complementa con evaluación formativa a través de ejercicios de evaluación continua.

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.

Evaluación: 

La asignatura se organiza en dos semestres independientes, ambos obligatorios para aprobar la asignatura. La evaluación combina ejercicios individuales con un proyecto de gran peso en cada semestre. El primer semestre incluye ejercicios formativos y un proyecto dividido en fases que deben superarse individualmente para que el proyecto sea considerado apto, con la posibilidad de que la nota de los ejercicios solo cuente si es favorable al estudiante. El segundo semestre incorpora también ejercicios individuales y un proyecto en grupo que se califica a partir del trabajo realizado, la valoración del mentor y la evaluación entre iguales.

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