Curso 2014-15
Programación Orientada a Objetos
Titulación: | Código: | Tipo: |
Grado en Ingeniería Informática | 21414 | Obligatoria 2º curso |
Grado en Ingeniería Telemática | 21721 | Obligatoria 2º curso |
Grado en Ingeniería en Sistemas Audiovisuales | 21603 | Obligatoria 2º curso |
Créditos ECTS: | 4 | Dedicación: | 100 horas | Trimestre: | 1º |
Departamento: | Dpto. de Tecnologías de la Información y las Comunicaciones |
Coordinador: | Anders Jonsson |
Profesorado: | Anders Jonsson, Martí Sànchez, Damir Lotinac, Filippos Kominis, Javier Segovia |
Idioma: | Anders Jonsson, Javier Segovia: Castellano Martí Sànchez: Catalán Damir Lotinac, Filippos Kominis: Inglés (Castellano) |
Horario: | |
Campus: | Campus de la Comunicación - Poblenou |
Programación Orientada a Objetos es una asignatura dentro del area de Lenguajes de Programación, fuertemente relacionada con Fundamentos de Programación y Estructuras de Datos y Algoritmos (este último sólo pertenece al grado de Ingeniería de Informática). El punto de partida es la programación estructurada y la algorítmica básica (conocimientos adquiridos en la asignatura de Fundamentos de Programación), y tiene como objetivo introducir al alumno en el diseño y desarrollo de programas de alto nivel mediante el concepto de objetos.
Esta asignatura precisa necesariamente de un conocimiento básico de los conceptos de programación, y el paradigma de la programación orientada a objetos está principalmente enfocado a mejorar el diseño de los propios programas. De esta manera, se introduce al alumno en la creación de programas desde un punto de vista más abstracto que la simple algorítmica básica, promoviendo un buen diseño enfocado a resolver los aspectos más relevantes del problema, mientras lo específico queda oculto. De este modo, a diferencia de las asignaturas orientadas a la programación procedural, donde la sintaxis y la semántica del lenguaje son primordiales, esta asignatura se orienta hacia el diseño y estructura de los programas en su conjunto. Sin embargo, también se introduce y se enseña el lenguaje Java para implementar los programas diseñados.
El objetivo principal de la asignatura es estudiar los principios necesarios para modelar un programa utilizando diferentes components, los cuales se tienen que combinar para conseguir resolver un problema concreto. Adicionalmente, eso implica ser capaz de reutilizar componentes ya existentes para la construcción de nuevos programas. Igualmente se estudian diferentes técnicas para la definición y construcción de estos componentes.
La organización de la asignatura sigue la siguiente estructura: Al principio de la asignatura se estudian los conceptos y principios fundamentales de la programación orientada a objetos, como la abstracción, la encapsulación y la reutilización. Se define el concepto de objeto como herramienta que modela y describe una entidad capaz de realizar una serie de tareas concretas. También se muestra como se aplica el concepto de la delegación de tareas para coordinar el funcionamiento de los diferentes objetos dentro de un programa. En una segunda parte de la asignatura, utilizando los conocimientos básicos anteriores, se introducen conceptos más avanzados como la herencia, el polimorfismo, la sobrecarga y las interfaces; estudiando especialmente como aplicarlos y utilizarlos en la construcción de programas orientados a objetos. En la última parte de la asignatura se aprende como aplicar todos los conceptos en su conjunto para resolver problemas complejos. Eso se desarrolla mediante el estudio del modelado de objetos y sus relaciones, así como la reutilización de código, y también el estudio de problemas concretos resueltos utilizando objetos.
Las diferentes actividades realizadas durante la asignatura se dividen en:
- Sesiones de teoría: donde se introducen y se explican los diferentes conceptos y principios de la programación orientada a objetos.
- Sesiones de práctica: donde los alumnos, organizados en grupos, tienen que trabajar pera implementar programas escritos en el lenguaje Java que resuelvan diferentes problemas, aplicando las técnicas expuestas en las clases de teoría.
- Sesiones de seminarios: donde los alumnos, organizados en grupos, tienen que diseñar y modelar, utilizando objetos, una solución a los problemas particulares presentados, las cuales más tarde tendrán que implementar en las sesiones de prácticas.
- Ejercicios individuales: donde los alumnos tendrán la oportunidad de resolver ejercicios de programación, fomentando los conceptos de la programación orientada a objetos.
Al final de la asignatura los alumnos estarán capacitados para:
- Implementar programas utilizando un lenguaje de programación de alto nivel orientado a objetos (particularmente Java).
- Entender la estructura de un programa existente organizado con objetos.
- Modelar una solución basada en objetos que resuelva un problema particular.
- Reutilizar objetos existentes y utilizar y/o implementar interfaces.
Objetivos de aprendizaje
El objetivo principal de la asignatura es la adquisición de las competencias necesarias para poder trabajar en el desarrollo de software (diseño e implementación) utilizando el paradigma de la programación orientada a objetos. Eso incluye otros objetivos parciales como adquirir la capacidad de abstracción necesaria para encapsular soluciones parciales dentro de un objeto, relacionar correctamente diferentes objetos dentro de un programa para dar una solución bien estructurada a un problema concreto, y reutilizar elementos existentes dentro de los propios programas. De forma paralela, también se incluye el objetivo del dominio elemental de un lenguaje de programación de alto nivel orientado a objetos como Java. Finalmente también se define el objetivo de entender y escribir diagramas que reflejan la estructura de un programa orientado a objetos.
De forma concreta, al final de la asignatura se espera que el alumne pueda:
Esta asignatura presupone que los alumnos conocen los fundamentos de la algorítmica básica y la programación estructurada, y que por tanto sean capaces de escribir programas y resolver problemas utilizando lenguajes imperativos de alto nivel (competencias adquiridas en la asignatura de Fundamentos de Programación).
Competencias transversales | Competencias específicas |
---|---|
Instrumentales 1. Capacidad de análisis del problema 2. Capacidad de abstracción Interpersonales 3. Comprensión de soluciones ya existentes o hechas por otros Sistémicas 4. Creación de soluciones fuertemente estructuradas 5. Utilización de documentación en el desarrollo 6. Reutilización de soluciones Otros 7. Trabajo colaborativo en el desarrollo del software |
1. Comprensión del rol del objeto en la organización de un programa 2. Capacidad de diseñar soluciones utilizando objetos 3. Dominio de las técnicas básicas de la programación orientada a objetos (herencia, abstracción, polimorfismo) 4. Reutilización de código utilizando clases existentes 5. Utilización del concepto de interfaz para relacionar objetos 6. Poder entender y escribir código en Java |
La evaluación de la asignatura se basa en medir el aprendizaje del alumno respecto al contenido presentado. Las herramientas utilizadas para la realización de esta medida serán las siguientes:
Cada tarea será evaluada con una nota numérica entre 0 y 10. La siguiente tabla presenta una visión completa de la evaluación a realizar:
Provisión | Agente responsable de la evaluación | Agrupación | % | |||||
---|---|---|---|---|---|---|---|---|
Tipo de evaluación |
Recuperable |
No recuperable |
Docente |
Autoevaluación | Coevaluación |
Individual |
Grupos |
|
Continuada |
|
Ejercicios seminarios |
Profesor seminarios |
|
X |
20% |
||
Formativa |
|
Prácticas |
Profesor prácticas |
X |
40% |
|||
Final |
Examen Final |
|
Profesor teoría |
X |
40% |
Para aprobar la asignatura será necesario superar en un 50% la evaluación final, siendo condición necesaria sacar una nota igual o superior a 5,0 (sobre 10) del bloque de seminarios, del bloque de prácticas y del examen final.
Tanto los ejercicios de seminarios como las prácticas son no recuperables, y por tanto se tendrán que entregar durante el trimestre de la asignatura.
El examen consiste en una evaluación teórica y práctica de todo el contenido de la asignatura, incluyendo el impartido en las sesiones de seminarios y prácticas, además de las de teoría. En caso de no sacar una nota mínima de 5,0 (sobre 10) en el examen, el alumno podrá presentarse a un segundo examen con los mismos criterios de evaluación. Un alumno no se puede presentar a este segundo examen si no tiene superada la evaluación de los seminarios y de las prácticas.
Conceptos | Procedimientos |
---|---|
Bloque de contenido 1. Introducción: el concepto de objeto | |
1. Definición intuitiva de un objeto 2. Resolución de problemas con objetos 3. Delegación de tareas 4. Como relacionar objetos entre sí 5. El uso de objetos en la programación |
|
Bloque de contenido 2. El paradigma de la programación orientada a objetos | |
1. Clase 2. Instancia 3. Jerarquía de clases 4. Abstracción 5. Encapsulación |
Definición de las clases, sus atributos y métodos |
Bloque de contenido 3. Modelado de objetos y relaciones entre objetos | |
1. Diseño de clases 2. Técnicas de modelado de objetos 3. Relaciones entre objetos 4. Combinación de objetos para resolver problemas concretos |
Diseño de soluciones a problemas utilizando diferentes clases Implementación de programas utilizando una solución modelada con objetos |
Bloque de contenido 4. Técnicas fundamentales: herencia y polimorfismo | |
1. Herencia 2. Polimorfismo 3. Sobrecarga 4. Reescritura |
Heredar miembros de una superclase Modificación del comportamiento y la estructura de una clase |
Bloque de contenido 5. Conceptos avanzados: interfaces y clases abstractas | |
1. Métodos abstractos 2. Clases abstractas 3. Interfaces 4. Conexión de objetos mediante interfaces |
Diseño de clases con métodos abstractos e implementación en sus subclases Desarrollo de interfaces para la organización de los programas Implementación de interfaces |
Bloque de contenido 6. Reutilización y estudio de problemas resueltos con objetos | |
1. El concepto de reutilización 2. Implementación de interfaces 3. Estudio de casos particulares de problemas |
Utilización de componentes existentes en los propios programas Reutilización de componentes para definir nuevos Utilización e implementación de interfaces definido un API concreto |
Enfoque metodológico de la asignatura
En esta sección se presenta de forma resumida la metodología de aprendizaje que se utilizará en la asignatura. Esta guía es especialmente útil para el alumno ya que se podrá conocer las actividades que están planificadas para el aprendizaje, y organizar de esta forma los esfuerzos que habrá que dedicarle. Todas las actividades están englobadas dentro de los siguientes ámbitos:
Sesiones de teoría
En las sesiones de teoría el alumne participará de forma presencial recibiendo los conocimientos teóricos explicados por el profesor. Estas clases se complementan con los apuntes de teoría que el alumno podrá revisar en actividades autónomas.
En las sesiones de teoría serán presentes todos los alumnos de un determinado grupo.
Sesiones de prácticas
Las sesiones de prácticas se organizan en dos tipos de actividades:
En la primera actividad, de tipo presencial, los alumnos reciben las explicaciones del profesor respecto a los objetivos específicos que se trataran en la sesión a realizar, así como los conocimientos técnicos necesarios para poder llevar a cabo la tarea propuesta.
En la segunda actividad, de aprendizaje en equipo, los alumnos ponen en práctica todos los conocimientos adquiridos para realizar los objetivos propuestos. Esta actividad continuará fuera del aula hasta conseguir el objetivo necesario.
En las sesiones de prácticas los alumnos se organizan en grupos de dos personas para la realización de las diferentes actividades.
Sesiones de seminarios
En las sesiones de seminarios se plantean diferentes ejercicios encaminados a dirigir al alumno de forma didáctica en la resolución correcta de diferentes ejercicios. Esta actividad será siempre de tipo presencial, y el objetivo es ayudar al alumno a razonar con un cierto grado de abstracción para diseñar una determinada solución.
En cada seminario participará sólo un grupo reduído de alumnos (subgrupo) según el calendario establecido de la asignatura. Al final de cada sesión los alumnos habrán de entregar los ejercicios realizados para evaluar su progreso y poder recibir comentarios del profesor en la siguiente sesión.
Actividades de aprendizaje autónomo
Para la realización de ciertas actividades, como la implementación de un determinado programa o la preparación de una sesión de seminarios, se espera que el alumno sea responsable en la adquisición de los conocimientos y habilidades complementarias necesarios para poder completar la actividad. Especialmente se incluyen en este conjunto las consultas de documentacióntécnica, bibliografía y otras guías para la codificación de los programas. Igualmente se incluye la revisión previa de material complementario recomendado por el profesor para la realización de determinados seminarios.
Además, se propondrán ejercicios individuales de programación que los alumnos podrán resolver por su cuenta.
Actividades de aprendizaje en grupo
Las actividades de aprendizaje en grupo son principalmente las relaciones con las sesiones de seminarios y prácticas. Sin embargo, las actividades en grupo serán sólo presenciales durante estas sesiones, y no dirigidas durante el resto del tiempo necesario para completar su realización.
Bibliografía básica (soporte papel y electrónico)
Teoría:
Meyer: Object Oriented Software Construction (disponible en castellano: "Construcción de Software Orientado a Objectos")
Horstmann: Object Oriented Design and Patterns
Prácticas:
Eckel: Thinking in Java (disponible en castellano: "Piensa en Java" y en versión online)
Arnold, Gosling, Holmes: Java Programming Language (disponible en castellano: "El lenguaje de programación Java")
Bibliografía complementaria (soporte papel y electrónico)
Netbeans: https://netbeans.org/kb/
Recursos didácticos. Material docente de la asignatura
En el Aula Global (Moodle) de la asignatura se publicará el siguiente material docente: