• No results found

5.8 THE QUANTITATIVE STAGE

5.8.2 Quantitative instrument and data-gathering procedure

Usted deber´a realizar un programa que permita manejar los modelos pertenecientes a distintas marcas de autom´oviles, as´ı como las caracter´ısticas de estos modelos. Para ello deber´a trabajar con un m´etodo main que ya viene implementado.

El programa lo dividiremos en 3 subconjuntos incrementales. Le recomendamos no comenzar con el siguiente subconjunto hasta terminar y probar el funcionamiento correcto del subconjunto actual.

Incremento 1

En este primer incremento deber´a definir lo b´asico de las clases Marca y Modelo, para poder crearlas. Un Modelo est´a caracterizado por el nombre del modelo, el a˜no en que sali´o al mercado, y el tipo de veh´ıculo que es, el cual se representa con un 0 si corresponde a un modelo sed´an, un 1 si se trata de un station wagon, y un 2 en caso que sea una camioneta. Adem´as cada modelo tiene sus propias caracter´ısticas, las cuales se representan con un string en el cual se van concatenando las caracter´ısticas que se van agregando al modelo. Su clase Modelo debe cumplir con los usos dados en el main provisto, el cual usted no puede modificar. Por su parte, una Marca est´a caracterizada por los modelos que componen su l´ınea de producci´on, pudiendo ser hasta cuatro como m´aximo. Al igual que Modelo, la clase Marca debe poder ser utilizada con el main predefinido, por lo que en su implementaci´on deben coincidir los nombres y par´ametros de los m´etodos que ah´ı se encuentran.

Incremento 2

Ahora que ya est´an creadas las marcas y sus modelos, debe agregar los m´etodos necesarios a sus clases para que sea posible mostrar en consola el cat´alogo de cada marca. Para una marca, este cat´alogo se muestra indicando su nombre y, para cada uno de sus modelos, la informaci´on correspondiente al nombre del modelo, su a˜no y su tipo. Por ejemplo, para una de las marcas el mensaje debe mostrarse como el siguiente: *************************************************** Marca: Hyundai Accent, 2008, Sedan Sonata, 2007, Sedan H-1, 2005, Station Wagon ***************************************************

Adem´as, cada marca debe ser capaz de retornar la cantidad de modelos del a˜no 2008 que posee en su cat´alogo, para que as´ı el main pueda mostrar los mensajes correspondientes.

Incremento 3

Por ´ultimo, debe complementar sus clases de modo que sea posible imprimir el cat´alogo de cada marca s´olo con los modelos correspondientes a un a˜no espec´ıfico, como tambi´en buscar el n´umero de modelos que presenten una cierta caracter´ıstica en cada marca, permitiendo adicionalmente realizar esta b´usqueda para un tipo de veh´ıculo en particular. Nuevamente debe cumplir con lo ya definido en el m´etodo main que se le entrega al comenzar su trabajo.

import i i c 1 1 0 3 P a c k a g e .*;

public class P r i n c i p a l {

public static void main (String[] args ) { /* * I n c r e m e n t o 1 */

// Creamos marcas y a g r e g a m o s modelos con d i s t i n t a s c a r a c t e r i s t i c a s Marca marca1 = new Marca (" Hyundai ");

Modelo modelo11 = new Modelo (" Accent ", 2008 , 0); modelo11 . a g r e g a r C a r a c t e r i s t i c a(" Llantas ");

modelo11 . a g r e g a r C a r a c t e r i s t i c a(" A l z a v i d r i o s E l e c t r i c o s"); modelo11 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD ");

modelo11 . a g r e g a r C a r a c t e r i s t i c a(" Mecanico ");

modelo11 . a g r e g a r C a r a c t e r i s t i c a(" Aire A c o n d i c i o n a d o"); Modelo modelo21 = new Modelo (" Sonata ", 2007 , 0); modelo21 . a g r e g a r C a r a c t e r i s t i c a(" Aire A c o n d i c i o n a d o"); modelo21 . a g r e g a r C a r a c t e r i s t i c a(" A u t o m a t i c o");

modelo21 . a g r e g a r C a r a c t e r i s t i c a(" N e b l i n e r o s");

modelo21 . a g r e g a r C a r a c t e r i s t i c a(" A l z a v i d r i o s E l e c t r i c o s"); modelo21 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD ");

modelo21 . a g r e g a r C a r a c t e r i s t i c a(" Alarma ");

modelo21 . a g r e g a r C a r a c t e r i s t i c a(" Tapiz de cuero "); modelo21 . a g r e g a r C a r a c t e r i s t i c a(" Air Bag ");

modelo21 . a g r e g a r C a r a c t e r i s t i c a(" D i r e c c i o n Asistida "); Modelo modelo31 = new Modelo ("H -1 ", 2005 , 1);

modelo31 . a g r e g a r C a r a c t e r i s t i c a(" Alarma "); modelo31 . a g r e g a r C a r a c t e r i s t i c a(" Mecanico "); modelo31 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD "); modelo31 . a g r e g a r C a r a c t e r i s t i c a(" D i r e c c i o n Asistida "); marca1 . a g r e g a r M o d e l o( modelo11 ); marca1 . a g r e g a r M o d e l o( modelo21 ); marca1 . a g r e g a r M o d e l o( modelo31 ); Marca marca2 = new Marca (" Toyota ");

Modelo modelo12 = new Modelo (" Hilux ", 2008 , 2); modelo12 . a g r e g a r C a r a c t e r i s t i c a(" 4 x4 "); modelo12 . a g r e g a r C a r a c t e r i s t i c a(" Llantas "); modelo12 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD "); modelo12 . a g r e g a r C a r a c t e r i s t i c a(" Mecanico "); modelo12 . a g r e g a r C a r a c t e r i s t i c a(" N e b l i n e r o s"); modelo12 . a g r e g a r C a r a c t e r i s t i c a(" D i r e c c i o n Asistida "); modelo12 . a g r e g a r C a r a c t e r i s t i c a(" Aire A c o n d i c i o n a d o"); modelo12 . a g r e g a r C a r a c t e r i s t i c a(" Air Bag ");

Modelo modelo22 = new Modelo (" Yaris ", 2007 , 0); modelo22 . a g r e g a r C a r a c t e r i s t i c a(" Alarma ");

modelo22 . a g r e g a r C a r a c t e r i s t i c a(" Aire A c o n d i c i o n a d o"); modelo22 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD ");

modelo22 . a g r e g a r C a r a c t e r i s t i c a(" Mecanico ");

modelo22 . a g r e g a r C a r a c t e r i s t i c a(" A l z a v i d r i o s E l e c t r i c o s"); modelo22 . a g r e g a r C a r a c t e r i s t i c a(" D i r e c c i o n Asistida "); Modelo modelo32 = new Modelo (" Auris ", 2008 , 1); modelo32 . a g r e g a r C a r a c t e r i s t i c a(" N e b l i n e r o s");

modelo32 . a g r e g a r C a r a c t e r i s t i c a(" A l z a v i d r i o s E l e c t r i c o s"); modelo32 . a g r e g a r C a r a c t e r i s t i c a(" Air Bag ");

modelo32 . a g r e g a r C a r a c t e r i s t i c a(" A u t o m a t i c o"); modelo32 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD "); Modelo modelo42 = new Modelo (" Corolla ", 2006 , 0); modelo42 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD "); modelo42 . a g r e g a r C a r a c t e r i s t i c a(" Alarma "); modelo42 . a g r e g a r C a r a c t e r i s t i c a(" A u t o m a t i c o"); modelo42 . a g r e g a r C a r a c t e r i s t i c a(" Tapiz de cuero ");

modelo42 . a g r e g a r C a r a c t e r i s t i c a(" A l z a v i d r i o s E l e c t r i c o s"); modelo42 . a g r e g a r C a r a c t e r i s t i c a(" Aire A c o n d i c i o n a d o"); modelo42 . a g r e g a r C a r a c t e r i s t i c a(" N e b l i n e r o s");

modelo42 . a g r e g a r C a r a c t e r i s t i c a(" Air Bag ");

modelo42 . a g r e g a r C a r a c t e r i s t i c a(" D i r e c c i o n Asistida "); Modelo modelo52 = new Modelo (" Yaris Sport ", 2008 , 1); modelo52 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD "); modelo52 . a g r e g a r C a r a c t e r i s t i c a(" A l z a v i d r i o s E l e c t r i c o s"); marca2 . a g r e g a r M o d e l o( modelo12 ); marca2 . a g r e g a r M o d e l o( modelo22 ); marca2 . a g r e g a r M o d e l o( modelo32 ); marca2 . a g r e g a r M o d e l o( modelo42 );

}

Marca marca3 = new Marca (" Mercedes Benz "); Modelo modelo13 = new Modelo (" C 200 K ", 2008 , 1); modelo13 . a g r e g a r C a r a c t e r i s t i c a(" Llantas "); modelo13 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD "); modelo13 . a g r e g a r C a r a c t e r i s t i c a(" A l z a v i d r i o s E l e c t r i c o s"); modelo13 . a g r e g a r C a r a c t e r i s t i c a(" A u t o m a t i c o"); modelo13 . a g r e g a r C a r a c t e r i s t i c a(" N e b l i n e r o s"); modelo13 . a g r e g a r C a r a c t e r i s t i c a(" Alarma ");

modelo13 . a g r e g a r C a r a c t e r i s t i c a(" Tapiz de cuero "); modelo13 . a g r e g a r C a r a c t e r i s t i c a(" Air Bag ");

modelo13 . a g r e g a r C a r a c t e r i s t i c a(" D i r e c c i o n Asistida "); modelo13 . a g r e g a r C a r a c t e r i s t i c a(" Aire A c o n d i c i o n a d o"); Modelo modelo23 = new Modelo (" CLK 500 ", 2008 , 2); modelo23 . a g r e g a r C a r a c t e r i s t i c a(" Mecanico "); modelo23 . a g r e g a r C a r a c t e r i s t i c a(" Alarma "); modelo23 . a g r e g a r C a r a c t e r i s t i c a(" Air Bag ");

modelo23 . a g r e g a r C a r a c t e r i s t i c a(" A l z a v i d r i o s E l e t r i c o s"); modelo23 . a g r e g a r C a r a c t e r i s t i c a(" N e b l i n e r o s"); modelo23 . a g r e g a r C a r a c t e r i s t i c a(" Llantas "); modelo23 . a g r e g a r C a r a c t e r i s t i c a(" D i r e c c i o n Asistida "); modelo23 . a g r e g a r C a r a c t e r i s t i c a(" 4 x4 "); modelo23 . a g r e g a r C a r a c t e r i s t i c a(" Radio CD ");

modelo23 . a g r e g a r C a r a c t e r i s t i c a(" Aire A c o n d i c i o n a d o"); marca3 . a g r e g a r M o d e l o( modelo13 );

marca3 . a g r e g a r M o d e l o( modelo23 ); /* * I n c r e m e n t o 2 */

// M o s t r a m o s el catalogo completo de cada marca marca1 . i m p r i m i r C a t a l o g o (0);

marca2 . i m p r i m i r C a t a l o g o (0); marca3 . i m p r i m i r C a t a l o g o (0); Usuario . m e n s a j e C o n s o l a(" ");

// M o s t r a m o s la cantidad de modelos del anio 2008 que oferta cada marca Usuario . m e n s a j e C o n s o l a(" La marca " + marca1 . g e t N o m b r e() + " tiene "

+ marca1 . a u t o s D e l A n i o (2008)

+ " modelos anio 2008 en su catalogo . ");

Usuario . m e n s a j e C o n s o l a(" La marca " + marca2 . g e t N o m b r e() + " tiene "

+ marca2 . a u t o s D e l A n i o (2008)

+ " modelos anio 2008 en su catalogo . ");

Usuario . m e n s a j e C o n s o l a(" La marca " + marca3 . g e t N o m b r e() + " tiene "

+ marca3 . a u t o s D e l A n i o (2008)

+ " modelos anio 2008 en su catalogo . "); /* * I n c r e m e n t o 3 */

// M o s t r a m o s el catalogo de cada marca solo con los modelos del anio // p r e f e r i d o

int anio = Usuario . entero (" Ingrese el anio para el que desea revisar los modelos : "); marca1 . i m p r i m i r C a t a l o g o( anio );

marca2 . i m p r i m i r C a t a l o g o( anio ); marca3 . i m p r i m i r C a t a l o g o( anio ); Usuario . m e n s a j e C o n s o l a(" ");

// Ahora m o s t r a m o s la cantidad de autos que tienen aire a c o n d i c i o n a d o Usuario . m e n s a j e C o n s o l a(" La marca "

+ marca1 . g e t N o m b r e() + " tiene "

+ marca1 . m o d e l o s C o n C a r a c t e r i s t i c a(" Aire a c o n d i c i o n a d o")

+ " modelos de a u t o m o v i l e s con aire a c o n d i c i o n a d o en su catalogo . "); Usuario . m e n s a j e C o n s o l a(" La marca "

+ marca2 . g e t N o m b r e() + " tiene "

+ marca2 . m o d e l o s C o n C a r a c t e r i s t i c a(" Aire a c o n d i c i o n a d o")

+ " modelos de a u t o m o v i l e s con aire a c o n d i c i o n a d o en su catalogo . "); Usuario . m e n s a j e C o n s o l a(" La marca "

+ marca3 . g e t N o m b r e() + " tiene "

+ marca3 . m o d e l o s C o n C a r a c t e r i s t i c a(" Aire a c o n d i c i o n a d o")

+ " modelos de a u t o m o v i l e s con aire a c o n d i c i o n a d o en su catalogo .\ n "); // F i n a l m e n t e m o s t r a m o s la cantidad de autos tipo sedan que tienen aire // a c o n d i c i o n a d o

Usuario . m e n s a j e C o n s o l a(" La marca "

+ marca1 . g e t N o m b r e() + " tiene "

+ " modelos de a u t o m o v i l e s tipo sedan con aire a c o n d i c i o n a d o en su catalogo . "); Usuario . m e n s a j e C o n s o l a(" La marca " + marca2 . g e t N o m b r e() + " tiene " +

marca2 . m o d e l o s C o n C a r a c t e r i s t i c a P o r T i p o(" Aire a c o n d i c i o n a d o", 0)

+ " modelos de a u t o m o v i l e s tipo sedan con aire a c o n d i c i o n a d o en su catalogo . "); Usuario . m e n s a j e C o n s o l a(" La marca "+ marca3 . g e t N o m b r e() + " tiene "

+ marca3 . m o d e l o s C o n C a r a c t e r i s t i c a P o r T i p o(" Aire a c o n d i c i o n a d o", 0)

+ " modelos de a u t o m o v i l e s tipo sedan con aire a c o n d i c i o n a d o en su catalogo . "); }

}

Criterios de soluci´on

Clase Modelo

• Atributos: Declaramos los atributos necesarios seg´un nos indican en el enunciado: dos String, uno para el nombre y otro para las caracter´ısticas y dos enteros, uno para representar el a˜no y otro para representar el tipo (camioneta, sed´an, etc)

• Constructor: Lo declaramos seg´un el uso mostrado en la clase Principal. Recibe como par´ametros el nombre, el a˜no y el tipo y los asigna a los atributos correspondientes.

• M´etodo agragarCaracteristica: Lo declaramos seg´un el uso mostrado en la clase Principal. Recibe como par´ametro un String con la caracter´ıstica a agregar y tenemos que concatenarlo al String que almacena las caracter´ısticas.

• Getters: Seg´un el uso dado en la clase Principal necesitamos 3 m´etodos get para obtener el nombre del modelo, el a˜no y el tipo.

• M´etodo tieneCaracteristica: Este m´etodo sirve para revisar si el modelo tiene una determinada caracter´ıstica (para cumplir con lo pedido en el incremento 3), puede hacerse tambi´en s´olo en la clase Marca. Lo que hacemos es buscar la caracter´ıstica generando todos los substrings desde la lista de caracter´ısticas que tengan el mismo largo que la caracter´ıstica recibida y comparar hasta encontrar alguna coincidencia.

• M´etodo mostrar: Revisamos el tipo y seg´un eso mostramos en Consola el nombre del modelo, su a˜no seguido de ’Sed´an’, ’Station Wagon’ o ’Camioneta’, seg´un corresponda.

Clase Marca:

• Atributos: Declaramos los atributos necesarios seg´un lo que se nos indica en el enunciado: un String para guardar el nombre y cuatro objetos de la clase Modelo que representen a los modelos de auto que tiene la Marca.

• Constructor: Lo declaramos seg´un el uso mostrado en la clase Principal. Recibe como par´ametro un String con el nombre de la marca y lo asigna al atributo correspondiente.

• M´etodo agregarModelo: Lo declaramos seg´un el uso mostrado en la clase Principal. Recibe como par´ametro un objeto de la clase Modelo. Tenemos que revisar a qu´e objeto, de los 4 que tenemos como atributos, debemos asignarlo, revisando cu´al de ellos es todav´ıa null. Retornamos true o false seg´un se pudo o no asignar el modelo.

• M´etodo getNombre: Retorna el nombre de la marca.

• M´etodo autosDelAnio: Recorremos todos los modelos y obtenemos su a˜no (cuidando que el objeto no sea null) y lo comparamos con el a˜no recibido como par´ametro. Retornamos el n´umero de veces que la comparaci´on fue exitosa.

• M´etodo imprimirCatalogo: Mostramos en la consola el nombre de la marca y el n´umero de autos del a˜no (seg´un el par´ametro recibido) llamando al m´etodo autosDelAnio. Luego, por cada Modelo llamamos al m´etodo que muestra su nombre y su tipo.

• M´etodo modelosConCaracteristicaPorTipo: Recorremos todos los modelos y en cada uno revi- samos que no sea nulo y que tenga la caracter´ıstica solicitada (llamando al m´etodo que implemen- tamos en la clase Modelo). Adem´as, en caso que el tipo sea v´alido, tambi´en revisamos que el tipo del modelo corresponda. Si se cumplen ambas condiciones aumentamos el contador de modelos, el cual retornamos al finalizar el m´etodo.

Posible soluci´on

import i i c 1 1 0 3 P a c k a g e .*;

public class Marca {

// D e f i n i m o s los a t r i b u t o s n e c e s a r i o s

private String nombre ;

// D e f i n i m o s los modelos de auto que tiene la Marca

private Modelo modelo0 ;

private Modelo modelo1 ;

private Modelo modelo2 ;

private Modelo modelo3 ;

public Marca (String nombre ) {

this. nombre = nombre ; }

public Modelo o b t e n e r M o d e l o(int indice ) { // O b t e n e m o s el modelo segun su indice

if ( indice == 0) { return modelo0 ; } else if ( indice == 1) { return modelo1 ; } else if ( indice == 2) { return modelo2 ; } else { return modelo3 ; } }

public boolean a g r e g a r M o d e l o( Modelo modelo ) {

// Para agregar una nueva marca , buscamos el primero de los a t r i b u t o s // que aun sea nulo

if ( modelo0 == null) { modelo0 = modelo ;

} else if ( modelo1 == null) { modelo1 = modelo ;

} else if ( modelo2 == null) { modelo2 = modelo ;

} else if ( modelo3 == null) { modelo3 = modelo ;

} else {

// Si no hay ninguno vacio entonces r e t o r n a m o s false

return false; }

return true; }

public int a u t o s D e l A n i o(int anio ) {

// D e c l a r a m o s una variable para contar , y r e c o r r e m o s los modelos // buscando aquellos que c o i n c i d a n con el anio

int contador = 0;

for (int i = 0; i < 4; i ++) { Modelo modelo = o b t e n e r M o d e l o( i );

if ( modelo != null && modelo . getAnio () == anio ) { contador ++;

} }

return contador ; }

public int m o d e l o s C o n C a r a c t e r i s t i c a(String c a r a c t e r i s t i c a) {

// Llamamos al metodo que busca tambien por tipo de auto , d e f i n i e n d o un // valor invalido para dicho p a r a m e t r o

return m o d e l o s C o n C a r a c t e r i s t i c a P o r T i p o( caracteristica , -1); }

public int m o d e l o s C o n C a r a c t e r i s t i c a P o r T i p o(String caracteristica , int tipo ) { // R e c o r r e m o s todos los modelos de la marca , r e v i s a n d o que no sean nulos // y que tengan la c a r a c t e r i s t i c a solicitada ,

// r e s t r i n g i e n d o ademas por el tipo de auto en caso de que el p a r a m e t r o // c o r r e s p o n d i e n t e sea valido , y los contamos

int contador = 0;

for (int i = 0; i < 4; i ++) { Modelo modelo = o b t e n e r M o d e l o( i );

if ( modelo != null && modelo . t i e n e C a r a c t e r i s t i c a( c a r a c t e r i s t i c a) && ( tipo == -1 || modelo . getTipo () == tipo )) {

contador ++; }

}

return contador ; }

public void i m p r i m i r C a t a l o g o(int anio ) {

Usuario . m e n s a j e C o n s o l a(" \ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "); Usuario . m e n s a j e C o n s o l a(" Marca : " + nombre );

if ( anio != 0) {

Usuario . m e n s a j e C o n s o l a(" El catalogo presenta " + a u t o s D e l A n i o( anio ) + " modelos del anio " + anio + " : ");

}

for (int i = 0; i < 4; i ++) { Modelo modelo = o b t e n e r M o d e l o( i );

if ( modelo != null && ( anio == 0 || modelo . getAnio () == anio )) { modelo . mostrar ();

} }

Usuario . m e n s a j e C o n s o l a(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "); }

public String g e t N o m b r e() {

return nombre ; }

}

import i i c 1 1 0 3 P a c k a g e .*;

public class Modelo {

// D e f i n i m o s los a t r i b u t o s minimos n e c e s a r i o s

private String nombre ;

private int anio ;

private int tipo ;

private String c a r a c t e r i s t i c a s;

public Modelo (String modelo , int anio , int tipo ) { // I n i c i a l i z a m o s los valores para el auto

this. nombre = modelo ;

this. anio = anio ;

this. tipo = tipo ;

this. c a r a c t e r i s t i c a s = " "; }

public void a g r e g a r C a r a c t e r i s t i c a(String c a r a c t e r i s t i c a) {

// A g r e g a m o s la c a r a c t e r i s t i c a al atributo ( String ) c o r r e s p o n d i e n t e c a r a c t e r i s t i c a s += " - " + c a r a c t e r i s t i c a;

}

public boolean t i e n e C a r a c t e r i s t i c a(String c a r a c t e r i s t i c a) {

// Buscamos c a r a c t e r i s t i c a g e n e r a n d o todos los s u b s t r i n g s desde el // atributo c o r r e s p o n d i e n t e

// que tengan el mismo largo que la c a r a c t e r i s t i c a en el p a r a m e t r o

for (int i = 0; i <= c a r a c t e r i s t i c a s. length () - c a r a c t e r i s t i c a. length (); i ++) {

String aux = c a r a c t e r i s t i c a s. s u b s t r i n g(i , i + c a r a c t e r i s t i c a. le ngth ());

if ( aux . e q u a l s I g n o r e C a s e( c a r a c t e r i s t i c a)) { return true; } } return false; }

Usuario . m e n s a j e C o n s o l a(" \ t " + nombre + " , " + anio + " , Station Wagon "); } else {

Usuario . m e n s a j e C o n s o l a(" \ t " + nombre + " , " + anio + " , C a m i o n e t a"); }

}

public String g e t M o d e l o() {

return nombre ; }

public int getAnio () {

return anio ; }

public int getTipo () {

return tipo ; }

Problema 19: Platos de un Men´u