Conceptos Avanzados de Programación

Usted está aquí

Créditos
6
Tipos
Complementaria de especialidad (Ingeniería del Software)
Requisitos
  • Prerrequisito: IES
  • Prerrequisito: PROP
Departamento
CS
Esta asignatura pretende explicar conceptos de programación que profundizan en el uso de determinadas construcciones y estructuras ligadas a paradigmas de programación que los estudiantes ya deberían conocer. Este año se explica el concepto de Reflexión, tanto en lenguajes dinámicos como estáticos, como extensión natural de lo que han aprendido a GRAU-PROP sobre Orientación a Objetos. También como ampliación de la Orientación a Objetos veremos cómo trabajar con lenguajes de programación que no tienen el concepto de clase. Además, profundizamos en el concepto aparentemente sencillo de Estructura de Control, explorando las posibilidades de reificar y modificar la pila de ejecución de un programa mientras se ejecuta, definiendo y utilizando el concepto de Continuación.

Profesores

Responsable

  • Jordi Delgado Pin ( )

Horas semanales

Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0.4
Aprendizaje autónomo
5.6

Competencias

Competencias Transversales

Trabajo en equipo

  • G5 - Ser capaz de trabajar como miembro de un equipo, ya sea como un miembro más, o realizando tareas de dirección con la finalidad de contribuir a desarrollar proyectos con pragmatismo y sentido de la responsabilidad, asumiendo compromisos teniendo en cuenta los recursos disponibles.
    • G5.2 - Planificar y acordar los objetivos, las reglas de funcionamiento, las responsabilidades, la agenda y el procedimiento de revisión del trabajo. Identificar conflictos, negociarlos y resolverlos de forma efectiva. Adaptarse a diferentes tipos de grupo (grande-pequeño, técnico-mixto, presencial-a distancia). Interactuar con eficacia y promover la participación de todos los miembros del grupo.

Competencias Técnicas de cada especialidad

Especialidad ingeniería del software

  • CES1 - Desarrollar, mantener y evaluar servicios y sistemas software que satisfagan todos los requisitos del usuario, que se comporten de forma fiable y eficiente, que tengan un desarrollo y mantenimiento asequible y que cumplan normas de calidad, aplicando las teorías, los principios, los métodos y las prácticas de Ingeniería del Software.
    • CES1.1 - Desarrollar mantener y evaluar sistemas y servicios software complejos y/o críticos.
    • CES1.3 - Identificar, evaluar y gestionar los riesgos potenciales asociados a la construcción de software que pudiesen presentarse.
    • CES1.7 - Controlar la calidad y diseñar pruebas en la producción de software.

Objetivos

  1. Revisar los conceptos de programación orientada a objetos de cara a asegurar una base de conocimientos común suficiente a partir de la cual proceder con el temario específico de la asignatura y conocer un lenguaje de programación dinámico orientado a objetos como Smalltalk.
    Related competences: CES1.1, CES1.3, CES1.7,
  2. Conocer los conceptos básicos y generales de la reflexión computacional, de manera que el estudiante sea capaz de entender cómo están implementados estos conceptos en diferentes lenguajes de programación
    Related competences: CES1.1, CES1.3, CES1.7,
  3. Conocer cómo está implementada la reflexión computacional en Java y Smalltalk: acceso y modificación de los miembros de clases en tiempo de ejecución, creación de código en tiempo de ejecución, etc.
    Related competences: CES1.1, CES1.3, CES1.7,
  4. Ser capaz de desarrollar en equipo un programa de tamaño pequeño-medio que utilice técnicas de reflexión
    Related competences: CES1.1, G5.2, CES1.7,
  5. Conocer las los conceptos básicos y generales de la programación basada en prototipos, de manera que el estudiante sea capaz de entender cómo están implementados estos conceptos en diferentes lenguajes de programación
    Related competences: CES1.1, CES1.3, CES1.7,
  6. Conocer de manera suficiente un lenguaje basado en prototipos como para ser capaces de ilustrar los conceptos generales en una implementación concreta (Javascript)
    Related competences: CES1.1, CES1.3,
  7. Conocer qué es un cierre (closure) y algunas técnicas asociadas a su utilización. Entender el concepto de Continuación y usarlo para implementar diversas estructuras de control
    Related competences: CES1.1, CES1.3,

Contenidos

  1. Repaso de la programación orientada a objetos e Iniciación a Smalltalk
    Filosofía y orígenes. Encapsulación, miembros privado / (protected) / public, herencia, polimorfismo, early / late binding. Patrones. Smalltalk, aprendizaje y utilización de un entorno Smalltalk
  2. Reflexión: Conceptos generales
    ¿Qué es la reflexión?. Tipo de reflexión: Introspección, intercesión, reificación. Implicaciones de la reflexión para un lenguaje de programación. Reflexión en programación orientada a objetos.
  3. Implementación en Java y Smalltalk de la reflexión
    Utilización de java.lang.reflect y Smalltalk. Acceso a los miembros de clases en tiempo de ejecución. Patrones y Reflexión. Construir objetos de manera reflexiva. Generación de código en tiempo de ejecución.
  4. Programación basada en prototipos.
    Clases vs. prototipos. Herencia vs. delegación
  5. Estructuras de Control: Continuaciones
    Las continuaciones son el resultado de poder reificar y eventualmente modificar la pila de ejecución de un programa mientras éste se ejecuta, pero desde el mismo lenguaje. Exploraremos las posibilidades que esto ofrece y las técnicas asociadas.

Actividades

Actividad Acto evaluativo


Repaso de la programación orientada a objetos: Aspectos generales

El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
Objetivos: 1
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Introducción a Smalltalk

El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
Objetivos: 1
Contenidos:
Teoría
6h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Reflexión: Conceptos generales

El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
Objetivos: 2
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
2h
Aprendizaje autónomo
10h

Reflexión: Utilización en Java (java.lang.reflect) y Smalltalk

El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
Objetivos: 3 4
Contenidos:
Teoría
8h
Problemas
0h
Laboratorio
8h
Aprendizaje dirigido
0h
Aprendizaje autónomo
20h

Práctica

Fecha de entrega; A determinar una vez hayan acabado las clases.
Objetivos: 4
Semana: 15
Tipo: examen de laboratorio
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Control teoría


Objetivos: 2 3
Semana: 8
Tipo: examen de laboratorio
Teoría
0h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Programación basada en prototipos.

El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
Objetivos: 5 6 7
Contenidos:
Teoría
6h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
14h

Continuaciones

Es necesario que el estudiante esté atento en clase y realice los ejercicios propuestos.
Objetivos: 7
Contenidos:
Teoría
6h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
2h
Aprendizaje autónomo
14h

Control final


Objetivos: 5 6 7
Semana: 15 (Fuera de horario lectivo)
Tipo: examen final
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
2h
Aprendizaje autónomo
10h

Metodología docente

La docencia de la asignatura está estructurada en clases de teoría y clases de laboratorio.

En las clases de teoría los profesores presentan los contenidos esenciales de la asignatura. En las clases de laboratorio se practican los contenidos de la asignatura (los presentados en clase y los adquiridos autónomamente) mediante la realización de problemas prácticos. Las clases de laboratorio serán una continuación de las clases teóricas, donde los conceptos nuevos se implementarán a medida que vayan apareciendo.

Método de evaluación

El método de evaluación de la asignatura consistirá en dos pruebas de carácter teórico (T1 y T2), una a mediados de curso y otra al final y una práctica de tamaño pequeño-medio (Practica).

Entonces, el método de evaluación sería:
0.6 * Teoría + 0.4*Practica
donde:
Teoría: 0.5 * T1 + 0.5 * T2

Competencia transversal "Trabajo en equipo":

Se evalúa usando una rúbrica simple en que el tutor de cada grupo puntúa los
diferentes aspectos del trabajo en equipo de cada miembro de los grupos.

Bibliografía

Básica:

Complementaria:

Web links

Capacidades previas

Los alumnos deberían tener conocimientos suficientes de estructuras de datos y algoritmos y de diseño y programación orientada a objetos.