· Entender la calidad del software como un compromiso entre distintos factores externos y reconocer un método de construcción de software modular como la técnica para mejorar los factores de calidad de extensibilidad, reutilización y fiabilidad (corrección y robustez)
· Justificar por qué se utilizan los datos como clave para descomponer los sistemas en módulos en lugar de las funciones (descomposición funcional)
· Definir el concepto central de la tecnología de objetos, la clase, y describir los elementos que la componen (atributos y rutinas), contrastando cómo se especifica en diferentes LPOO Explicar los principios de diseño de clases y aplicarlos en la resolución de problemas
· Explicar las relaciones entre clases (estructura estática) y objetos (estructura dinámica)
· Contrastar el modelo de ejecución OO frente al modelo de ejecución tradicional, destacando el papel primordial que juegan las referencias
· Entender la genericidad como un mecanismo necesario en los LPOO tipados para reconciliar la fiabilidad y la reutilización.
· Describir la técnica del Diseño por Contrato y aplicarla en la implementación de rutinas.
· Describir y saber aplicar las técnicas para abordar los casos excepcionales: esquema a priori, esquema a posteriori, mecanismo de excepciones
· Explicar los conceptos de herencia, polimorfismo y ligadura dinámica y cómo contribuyen a alcanzar los criterios de reutilización de módulos Aplicar los principios de diseño para especificar jerarquías de herencia
· Explicar los criterios para escoger entre una relación de herencia o de clientela entre clases y aplicarlo en la resolución de problemas concretos
· Describir y ejemplificar el papel fundamental de las clases abstractas para escribir código genérico
· Explicar la diferencia entre iteradores internos y externos y el modo de implementar cada uno de ellos
· Describir cómo se relaciona el mecanismo de herencia con: el sistema de tipos, la ocultación de información, genericidad, aserciones y excepciones
· Justificar la necesidad de incluir la herencia múltiple en los lenguajes de programación
· Manejar un entorno de programación y un LPOO concreto: editor, compilador y diseñador de interfaces gráficas de usuario Utilizar dicho lenguaje y entorno para desarrollar un mini-proyecto de programación en el que se apliquen los principios de diseño OO