Cátedra: Fontela
Fecha: Primer Oportunidad - Invierno 2013
Día: 19/07/2013
Esta página está incompleta; podés ayudar completando el material.
Ejercicio conceptual. Una universidad pública argentina define el siguiente circuito para la aprobación de los planes de estudio.
El Consejo Directivo (CD) de la Facultad pide a la Comisión Curricular (CC) de la carrera respectiva (hay una Cc por cada carrera de grado, con representantes docentes, alumnos y graduados) que elaboran un plan, dándole un plazo. Detro de este plazo, la CC elabora el plan y lo pasa al CD.
SI al cabo del plazo fijado por el CD, la CC no hubiese elaborado un plan, o no hubiese llegado a un acuerdo sobre el mismo, debe pasarle todos los antecedentes al CD. El CD perirá a la Comisión de Enseñanza (CE) de la Facultad, la adaptación de otro plan preexistente en un plazo menor.
El plan recibido por el CD, proveniente de la CC o de la CE, pasará a consideración del CD, que podrá incorporarle cambios. De haberlos, devolverá el plan a la CC para que opine en un plazo breve.
Una vez que la CC haya opinado, o se le haya vencido el plazo para hacerlo, el CD volverá a analizar el plan, pudiendo aceptar las propuestas de la CC o mantener el plan como estaba.
El plan aprobado por el CD se girará al Consejo Superior (CS) de la Universidad para su aprobación o rechazo. El CD procederá a aprobarlo o devolverlo al CD para que le introduzca cambios. De volver al CD, repite todo desde el paso III.
Se pide
Haga un diagrama de estados de UML, con todos los eventos que provocan transiciones de estados. Use su criterio para elegir los estados relevantes y los nombres de los mismos.
Modelar en UML (diagrama de secuencias, con objetos y mensajes) la determinación del estado de los planes de estudio de todas las carreras de la Universidad. Mantenga el nivel de abstracción adecuado sin indicar cuestiones de implementación y métodos de clases ajenas a este escenario.
Escriba 3 de las pruebas automatizadas necesarias para poder probar el comportamiento modelado en el diagrama de secuencias, usando SUnit, e incluyendo al menos una prueba positiva y una negativa.
Escriba el código Smalltalk que haga funcionar las pruebas del punto anterior, pero sin escribir nada de los métodos de otras clases (dicho de otra manera, los métodos de otras clases deben suponerse implementados).
¿En qué consiste la práctica de intregración continua? ¿Qué ventajas ofrece? (una carilla).
La cohesión es un atributo de calidad del diseño de módulos (paquetes, clases y métodos), a los cuales se les suele exigir una cohesión alta. Asimismo, definimos que un módulo tiene alta cohesión cuando sus responsabilidades están bien establecidas y focalizadas. A juicio de quien redactó este parcial, las interfaces de iteradores de Java y C# tienen algún problema de cohesión. ¿Puede usted identificar alguno? ¿Qué cambio les propondría a los responsables de la plataforma Java/.NET para mejorar la cohesión en el caso detectado? ¿Cómo cambiaría el uso de iteradores? ¿En que sentido resulta mejor o más cómodo el enfoque provisto actualmente? (máximo 1 carilla, usando Java o c#, no necesariamente ambos casos).
En Java se utiliza la interfaz Iterator<T>, en la cual hay 2 métodos:
next() : T
avanza al siguiente elemento de la colección y devuelve una referencia al mismo
hasNext() : boolean
indica si hay más elementos en la colección
Ejemplo de uso
Iterator<String> i = listaNombres iterator();
while (i.hasNext() ){
String x = i.next();
//trabajo con x
}
En C# se utiliza la interfaz IEnumerator<T>, en la cual hay un método y una propiedad:
MoveNext() : bool
avanza al siguiente elemento, devolviendo true si tuvo éxito o false si no hay más elementos
Current : T
propiedad que devuelve una referencia al elemento actual en la colección
Ejemplo de uso
IEnumerator<String> i = listaNombres.GetEnumerator();
while ( i.MoveNext() ){
String x = i.Current;
//trabajo con x
}
Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.