Está en la página 1de 4

Escuela Superior Polit ecnica del Litoral. Deber de Programaci on Orientada a Objetos.

Primer Parcial - 2013 - 1T


Facultad de Ingenier a El ectrica y Computaci on Julio 11, 2013

Descripci on

En una empresa, existe la necesidad de crear un reporteador, que ayude a hacer reportes con un cierto formato, el logo de la empresa, colores bonitos, y todas esas cosas que tienen los reportes. Un desarrollador en dicha empresa recibe el encargo de dise nar e implementar este reporteador. Para esto, inicialmente el desarrollador crea una clase Report, que contiene varios objectos de tipo ArrayList<String>, como se muestra en la gura: Report + addRow(r : ArrayList<String>) rows ArrayList<String> *

Los reportes creados usando la clase Report tienen un formato acorde a la empresa, logo, una cabecera con la informaci on del reporte, y un pie de p agina con datos de contacto de la empresa. Entre la cabecera y el pie de p agina se crea una serie de las, una a continuaci on de otra, y cada la tiene un cierto n umero de columnas; todas las las tienen el mismo n umero de columnas. Como usted se imaginar a, cada objeto de tipo ArrayList<String> representa una la en el reporte, y cada objeto de tipo String representa una columna en el reporte. Una la es a nadida usando el m etodo addRow de la clase Report. La empresa, al inicio, no ve el dise no (diagrama de clases, DIO, etc) que hizo el desarrollador, s olo ve que funciona el reporteador y se pone contenta. Por ende el desarrollador hace el primer release (entrega) del reporteador y la empresa empieza a usarlo.

Elaborado por Jorge Crespo Cede no, ESPOL

Luego, la empresa decide que deber an existir l neas de espacio entre ciertas las en el reporte. Osea, que pueda haber l neas de espacio cada cierto n umero de las, a criterio del que use la clase Report. Para habilitar esta posibilidad, el desarrollador decide que los que usen el reporteador, deben a nadir una la sin columnas, y hace cambios en el reporteador para que cuando el usuario a nada un objecto de tipo ArrayList<String> con longitud igual a cero, i.e., que no tiene elementos, el reporteador imprima una l nea en blanco. El desarrollador hace un demo, la empresa queda contenta, el desarrollador hace el segundo release del reporteador, y la empresa empieza a usarlo. Pero los usuarios del reporteador empiezan a sospechar que el dise no est a trucho, i.e., malo, ya la clase Report debe proveer una interface que tenga sentido para que una l nea en blanco sea a nadida. La empresa decide revisar el dise no y se da cuenta que s olo funciona, pero no cumple con expectativas obvias no-funcionales (que sea extensible, f acil de mantener, amigable, entre otras). Revisan las notas que obtuvo el desarrollador en el curso de POO de la ESPOL, y se dan cuenta que pas o con las justas. Entonces la empresa decide despedirlo y contratar a alguien que haya pasado con buenas notas. El nuevo desarrollador, decide hacer el siguiente cambio para a nadir una l nea en blanco:

Report + addRow(r : Row) + addSpace()

footer 1 header 1 content 1

Footer

Header

Content add(r : Row) rows * <<interface>> Row

ArrayList<String>

SpaceLine

RowImpl

Como usted puede apreciar, este diagrama se explica por si mismo. Pero por si acaso, la explicaci on es que el desarrollador a nade una clase Header para la cabecera, una clase Footer para el pie de p agina, y una clase Content para el contenido que va entre la cabecera y el pie de p agina, que son las las. Crea una interface Row que puede ser una la o una l nea de espacio (SpaceLine). Y a nade una funci on en la clase Report (addSpace) que autom aticamente crea un objecto de tipo SpaceLine y lo a nade al reporte. F jese que la clase Report s olo admite objetos de tipo Row como las, los cuales son a nadidos al Content por medio de su m etodo add(r : Row). La raz on de RowImpl es proveer objetos que sean Row y al mismo tiempo ArrayList<String>, que puedan ser a nadidos como las a objetos de tipo Content. Como RowImpl es de tipo Row y como Content s olo admite objetos de tipo Row, no habr a problema en a nadir objetos de tipo RowImpl a Content. La empresa ahora si revisa el dise no (no solo que funcione) y queda satisfecha. Se hace el tercer release del reporteador.

2
2.1

Su misi on
10 ptos

Despu es de un tiempo, la empresa decide que el reporteador debe ser capaz de mostrar im agenes en cualquiera de sus columnas, no s olo texto como est a actualmente el dise no. Qu e cambios tendr a que hacer el buen desarrollador, en el diagrama de clases, para que esto sea posible? Asuma que hay una clase Image que muestra una imagen. Haga cambios s olo en el diagrama de clases. Puede (NO necesariamente) cambiar de d onde extienden las clases actuales. No escriba c odigo. Ni siquiera una funci on. Ni a nada una funci on. No escriba explicaci on ni justicaci on. S olo cambie el diagrama de clases. Como lo que hizo el buen desarrollador cuando a nadi o SpaceLine, si est a bien hecho, el diagrama se explicar a por si mismo. HINT : Tome como gu a lo que hizo el buen desarrollador cuando a nadi o la clase SpaceLine.

2.2

5 ptos adicionales

Finalmente, la empresa decide que el reporteador debe ser capaz de agrupar las. Es decir, que una la cualquiera del reporte pueda desplegarse, y mostrar varias las que pertenecen a ella. Por ejemplo, en un reporte de ventas, actualmente el reporteador pone una la por cada venta que se hizo en el a no; lo que desea la empresa es que haya una la que diga enero y que al dar click en esa la se desplieguen todas las ventas de enero. Lo mismo para los otros meses. Pero esto no quiere decir que no habr an las sin agrupaci on: suponiendo que la empresa s olo desee que se agrupen las ventas de enero a octubre, las ventas hechas en los meses de noviembre y diciembre no pertenecer an a ninguna agrupaci on, pero deben igual mostrarse como se hace actualmente. Haga cambios s olo en el diagrama de clases. Puede (NO necesariamente) cambiar de d onde extienden las clases actuales. No escriba c odigo. Ni siquiera una funci on. Ni a nada una funci on. No escriba explicaci on ni justicaci on. S olo cambie el diagrama de clases. Como lo que hizo el buen desarrollador cuando a nadi o SpaceLine, si est a bien hecho, el diagrama se explicar a por si mismo.

También podría gustarte