Los requerimientos de cada ejercicio del seminario serán expuestos desde el punto de vista práctico y teórico; es decir, para su exposición, cada equipo se basará en el caso práctico en cuestión para introducir y explicar el elemento teórico requerido. La exposición no es una mera enunciación de código. Preguntas como: ¿Por qué?, ¿Basándose en qué?, ¿Cómo se logra esto en el lenguaje X? entre otras, deben hacerse.
Todos los miembros del equipo deben participar en la solución del ejercicio y estar preparados para exponer todo el trabajo. La persona a exponer. se decide el día de la exposición. Quién no esté presente en la exposición de su equipo tiene 0
en la evaluación. (Note que estas notas se promedian y hay distinción entre 0
y 2
).
En la Universidad, una persona (que se identifica por su Nombre) es plantilla si recibe algún tipo de pago y puede representar diferentes roles:
- Estudiante (Acción:
RecibirClase()
yCobrarSalario()
) - Profesor (Acción:
ImpartirClase()
) - Alumno Ayudante (Estudiante que no es profesor pero actúa como tal en un momento dado, es decir, puede realizar
ImpartirClase()
, además puede cobrar un salario como trabajador separado del salario como estudiante) - Trabajador (no todo trabajador es profesor, pero sí todos los profesores son trabajadores. Acción:
CobrarSalario()
) - Profesor Adiestrado (Profesor que aún recibe cursos de adiestramiento, Acción:
RecibirClase()
)
Los valores de salario y horas clase (tiempo en que se recibe o imparte clases) debe poder ser configurable en cualquier entidad.
Ilustre cómo podría ser implementado este diseño de clases en lenguajes C#
, C++
y Python
.
-
Diseñe una jerarquía en
C#
que represente/modele los roles anteriores y sus relaciones. Utilice alguna herramienta para ilustrar dicho modelo (Ejemplo: diseñador de clases de Visual Studio) -
¿En qué casos la herencia múltiple puede causar ambigüedad? Ejemplifique.
-
¿Cómo podemos solucionar estos casos? Analice y compare las distintas soluciones. ¿Cuál es la solución propuesta en
C#
? -
Explique cómo se representan los objetos en memoria. Ponga un ejemplo de:
- Un objeto perteneciente a una clase que no herede de ninguna otra
- Un objeto perteneciente a una clase que muestre una herencia simple
- Un objeto perteneciente a una clase que utilice herencia múltiple
Analizar: Herencia Múltiple en C++ y Python. Colisión de interfaces e implementación implicita/explícita en C#. Visibilidad, Redefinición de miembros, Ocultamiento, Representación en Memoria, Polimorfismo, Casteo.