N3-Manejo de grupos de atributos

Download Report

Transcript N3-Manejo de grupos de atributos

Manejo de grupos de atributos
Giovanni Hernández P.
Nivel 3
CASO DE ESTUDIO
Las notas de un curso
Enunciado
Se necesita crear una aplicación para manejar las notas para un curso. El curso es visto por doce (12)
estudiantes. Para cada estudiante se debe poder registrar la nota definitiva que sacó en el curso.
Adicionalmente, la aplicación debe permitir calcular el promedio del curso, y el número de estudiantes
que tienen una nota por encima del promedio.
Requerimientos Funcionales
Contenedoras de tamaño fijo
Curso
double nota1
double nota2
double nota3
double nota4
double nota5
double nota6
double nota7
double nota8
double nota9
double nota10
double nota11
double nota12
Solución
Contenedoras de tamaño fijo …
Atributo que es capaz de agrupar una secuencia
de valores se denomina contenedor
Curso
double notas =
0
1
2
3
4
5
6
7
8
9
10
11
Declaración de un arreglo
En Java las estructuras contenedoras de tamaño
fijo se denominan arreglos (array)
public class Curso
{
public final static int TOTAL_EST = 12;
private double[] notas;
}
Inicialización de un arreglo
// Construtor
public Curso()
{
notas = new double[TOTAL_EST];
}
(length): en los arreglos permite consultar el
numero que estos contienen.
Ej.
nota.length
Acceso a los elementos del arreglo
• Indice: sirve para indicar la posición de un
elemento en un arreglo.
• Van desde 0 hasta el numero de elementos – 1
• Para tomar o modificar un elemento del
arreglo se da el índice
Sintaxis
<arreglo>[<índice>]
Instrucciones repetitivas
Puede repetirse un paso (instrucción) que va
transformando gradualmente el mundo del
problema.
Ej.
Cuando subimos unas escaleras
Instrucciones repetitivas…
Taller No 1.
Instrucciones repetitivas…
Ej.
En una hoja de papel con una lista de palabras,
buscar si la palabra “casa” esta en la lista.
1.
2.
3.
4.
5.
Verificar si la primera palabra es igual a “casa”.
Si lo es no busque mas. Si no lo es busque en la segunda palabra.
Verificar si la segunda palabra es igual a “casa”.
Si lo es no busque mas. Si no lo es busque en la tercera palabra.
Repita el procedimiento palabra por palabra, hasta que la encuentre o
hasta que no existan mas palabras por buscar.
Instrucciones repetitivas…
Calcular el promedio de las notas (R2 – Calcular
el promedio de las notas)
public double promedio()
{
double suma = nota[0] + nota[1] + nota[2] +
nota[3] + nota[4] + nota[5] + nota[6] + nota[7]
+ nota[8] + nota[9] + nota[10] + nota[11];
return suma / TOTAL_EST;
}
Instrucciones repetitivas…
Solución de manera iterativa
public double promedio()
{
double suma = 0.0
int indice = 0;
suma += nota[ indice ];
indice ++;
suma += nota[ indice ];
indice ++;
suma += nota[ indice ];
indice ++;
suma += nota[ indice ];
indice ++;
suma += nota[ indice ];
indice ++;
……
}
Instrucciones repetitivas…
Public double promedio()
{
double suma = 0.0;
int indice = 0;
while ( indice < TOTAL_EST)
{
suma += nota[ indice ];
indice ++;
}
}
Instrucciones repetitivas…
Componentes de una instrucción repetitiva
inicio
Preparación del
ciclo
<inicio>
While ( <condicion >)
{
<cuerpo>
<avance>
}
La
condición
es
verdadera
?
No
Termina
el ciclo
Si
Ejecuta las instrucciones del
cuerpo del ciclo
Instrucciones repetitivas…
Taller No 2
Ej.
Nombre
R7-Calcular el numero de notas por encima del promedio
Resumen
Calcula y retorna el numero de notas que están por encima del
promedio
Entradas
Promedio
Resultados
Calcula y retorna el numero de notas por encima del promedio.
Método de la clase Curso
Ej.
Nombre
R8-Calcular el numero de estudiantes que aprobaron el curso
Resumen
Calcula y retorna el numero de estudiantes que aprobaron el curso
por que su nota final es superior o igual a 3.0
Entradas
Ninguna
Resultados
Calcula y retorna el numero de estudiantes que aprobaron el curso.
Método de la clase Curso
Ej.
Nombre
Resumen
R9-Calcular el numero de estudiantes que reprobaron el curso
Calcula y retorna el numero de estudiantes que reprobaron el curso
por que su nota final es inferior a 3.0
Entradas
Ninguna
Resultados
Calcula y retorna el numero de estudiantes que reprobaron el curso.
Método de la clase Curso
Ej.
Nombre
R9-Calcular la nota mas alta del curso
Resumen
Calcula y retorna la nota mas alta del curso
Entradas
Ninguna
Resultados
Calcula y retorna la nota mas alta del curso
Método de la clase Curso
Ej.
Nombre
R9-Calcular la nota mas baja del curso
Resumen
Calcula y retorna la nota mas baja del curso
Entradas
Ninguna
Resultados
Calcula y retorna la nota mas bajo del curso
Método de la clase Curso
Patrones de algoritmo para
instrucciones repetitivas
Patrón de un algoritmo
Patrón de recorrido total: Recorrer todos los
elementos de la contenedora.
Ejemplos:
• Calcular la suma de todas las notas.
• Contar cuántos en el curso obtuvieron 3,5.
• Contar cuantos en el curso están por debajo
del promedio.
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido total
Solución
1. El índice para iniciar el ciclo debe estar en
cero (0).
2. La condición para continuar es que el índice
sea menor que la longitud del arreglo.
3. El avance consiste en sumarle uno (1) al
índice.
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido total
Código Java
for( int indice = 0 ; indice < arreglo.length; indice++)
{
// cuerpo
}
Patrones de algoritmo para
instrucciones repetitivas
Primera variante del patrón
Nombre
R9-Incrementar notas inferiores
Resumen
Se requiere incrementar en 10% todas las notas inferiores a 2,0.
Entradas
Ninguna
Resultados
Se ha incrementado en 10% todas las notas inferiores a 2,0.
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido total-variante No 1
Public void incrementarNotasInferior()
{
for( int indice = 0 ; indice < notas.length; indice++)
{
// cuerpo
if( notas[indice] < 2.0 )
{
notas[indice] += notas[indice] * 0.1;
}
}
}
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido total – Segunda variante
Calcular alguna propiedad sobre el conjunto de
elementos del arreglo.
1. ¿Cómo acumular la información que se va llevando
a medida que avanza el ciclo?
2. ¿Cómo inicializar dicha información?
3. ¿Cuál es la condición para modificar dicho
acumulado ?
4. ¿Cómo modificar el acumulado?
Patrones de algoritmo para
instrucciones repetitivas
Segunda variante del patrón
Nombre
R10-Dar estudiantes aprobados
Resumen
Se requiere calcular y retornar el número de estudiantes que
aprobaron el curso.
Entradas
Ninguna
Resultados
Se ha calculado y retornado el número de estudiantes que aprobaron el curso.
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido total-variante No 2
Public int darAprobados()
(1)
(2)
{
int vanAprobando = 0;
for( int indice = 0 ; indice < notas.legth; indice++)
{
// cuerpo
if( notas[i] >= 3.0 ) (3)
{
vanAprobando ++; (4)
}
}
return vanAprobando;
}
Actividad
Taller No 3
Taller No 31
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido parcial
Una condición para verificar cada recorrido si se
debe detener el ciclo o continuar
• Variable de tipo boolean.
• Usar en la condición del ciclo la variable.
• Verificar si ya se cumplió el objetivo del ciclo
se cambia la variable lógica de estado.
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido parcial
Esqueleto
boolean termino = false;
for(int indice=0; indice < arreglo.length && termino==false; indice ++)
{
<cuerpo>
if(<ya se cumplió el objetivo>)
termino=true;
}
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido parcial
Nombre
R11-Dar estudiantes que reprobaron
Resumen
Se requiere calcular y retornar si existen más de 3 estudiantes que no
aprobaron el curso
Entradas
Ninguna
Resultados
Se ha calculado y retornado si más de 3 estudiantes no aprueban el curso.
Patrones de algoritmo para
instrucciones repetitivas
Patrón de recorrido parcial
public boolean darEstudiantesReprobados()
{
boolean termino = false;
int reprobados = 0;
for(int indice=0; indice < notas.length && termino==false; indice ++)
{
if(notas[indice] < 3.0)
{
Cuerpo
reprobados ++;
}
If(reprobados >3)
{
termino=true;
}
}
return termino;
}
Actividad
Taller No 4
Patrones de doble recorrido
Nombre
R11-Dar la nota que más se repite
Resumen
Se requiere calcular y retornar cual es la nota que más se repite.
Entradas
Ninguna
Resultados
Se ha calculado y retornado la nota que más se repite.
Patrones de doble recorrido
Esqueleto
for (int indice1=0; indice1 < arreglo.length; indice1++)
{
for (int indice2=0; indice2 < arreglo.length; indice2++)
{
<cuerpo del cliclo interno>
}
<cuerpo del cliclo externo>
}
Patrones de doble recorrido
for (int indice1=0; indice < notas.length; indice1++)
{
double notaBuscada = notas[indice1];
int contador = 0;
for (int indice2=0; indice2 < notas.length; indice2++)
{
if( notas[indice2]==notabuscada)
{
contador ++;
}
}
return notaMasVecesAparce;
}
Patrones de doble recorrido
public doble darNotaMasVecesAparece()
{
double notaMasVecesAparece = 0.0;
int numeroVecesAparece = 0;
for (int indice1=0; indice < notas.length; indice1++)
{
double notaBuscada = notas[indice1];
int contador = 0;
for (int indice2=0; indice2 < notas.length; indice2++)
{
if( notas[indice2]==notabuscada)
{
contador ++;
}
}
if ( contador > numeroVecesAparece)
{
notaMasVecesAparece = notaBuscada;
numeroVecesAparece = contador;
}
}
return notaMasVecesAparce;
}
Taller No 5
Caso No 2
Comprensión de los
requerimientos
Nombre
R1-Asignar una silla a un pasajero
Resumen
Se requiere asignar una silla según las preferencias del pasajero.
Estas son la clase (ejecutiva o económica) y la ubicación (ventana,
centro o pasillo). En la asignación se deben registrar los datos del
pasajero.
Entradas
Nombre del pasajero
Cédula del pasajero
Clase de la silla que desea
Ubicación de la silla que desea.
Resultados
Si existe una silla con las características de la clase y ubicación solicitadas por el
pasajero, se asigna a dicho pasajero
Compresión del mundo del problema
Constantes
Arreglo con 42 sillas
Arreglo con 8 sillas
Constantes
Asociación opcional
Taller (HT)
• Taller No 6
• Taller No 7
public class Avion
{
// - - - - - - - - - - - - - - - - - // Constantes
// - - - - - - - - - - - - - - - - - public final static int SILLAS_EJECUTIVAS = 8;
public final static int SILLAS _ECONOMICAS = 42;
// - - - - - - - - - - - - - - - - - // Atributos
// - - - - - - - - - - - - - - - - - private Silla[] sillasEjecutivas;
private Silla[] sillasEconomicas;
}
public class Avion
{
…
// - - - - - - - - - - - - - - - - - // Constructor
// - - - - - - - - - - - - - - - - - public Avion()
{
sillasEjecutivas = new Silla[SILLAS_EJECUTIVAS];
sillasEconomicas = new Silla[SILLAS_ECONOMICAS];
// Creación de las sillas de clase ejecutiva
sillasEjecutivas[0] = new Silla(1,Silla.CLASE_EJECUTIVA, Silla.VENTANA);
sillasEjecutivas[1] = new Silla(2,Silla.CLASE_EJECUTIVA, Silla.PASILLO);
…
// Creación de las sillas de clase económica
sillasEconomicas[0] = new Silla(9,Silla.CLASE_ECONOMICA,Silla.VENTANA);
sillasEconomicas[1] = new Silla(10,Silla.CLASE_ECONOMICA,Silla.CENTRAL);
sillasEconomicas[2] = new Silla(11,Silla.CLASE_ECONOMICA,Silla.PASILLO);
…
}
}
Objetos
: Silla
pasajero
clase = 1
numero = 6
ubicacion = 3
: Silla
clase = 2
numero = 10
ubicacion = 2
pasajero = null
: Pasajero
cedula = 1234
nombre = “Samuel H.”
: Avion
0
1
2
3
4
5
6
7
sillasEjecutivas =
: Silla
clase = 1
numero = 1
ubicacion = 1
: Silla
: Silla
clase = 1
numero = 2
ubicacion = 3
pasajero = null
clase = 1
numero = 3
ubicacion = 1
: Pasajero
cedula = 1234
nombre = “Samuel H.”
: Pasajero
cedula = 1234
nombre = “Samuel H.”
: Silla
clase = 1
numero = 4
ubicacion = 3
pasajero = null
...
Preguntas
¿Cómo se llama un método de un objeto que
esta en un arreglo?
Por ejemplo, dentro de la clase Avión, para
averiguar si la silla que esta en la posición 0
del arreglo de sillas ejecutivas está ocupada se
utiliza la sintaxis:
sillasEjecutivas[0].sillaAsignada();
Preguntas
¿Los objetos que están en un arreglo se puede
guardar en una variable?
Silla sillaTemporal = sillasEjecutivas[0];
Requerimientos
Nombre
R1-Eliminar reservas
Resumen
Se requiere eliminar todas las reservas del avión.
Entradas
Resultados
Se han eliminado las reservas del avión.
public void eliminarReservas()
{
for(int i=0; i < SILLAS_EJECUTIVAS; i++)
{
sillasEjecutivas[ i ].desasignarSilla();
}
for(int i=1; i < SILLAS_ECONOMICAS;i++)
{
sillasEconomicas[ i ].desasignarSilla();
}
}
Taller No 8
Contenedoras de tamaño variable
• 1000 estudiantes con sus notas
• 200 puesto en un avión
Contenedoras de tamaño variable
• Utilizar el paquete java.util
• Clase ArrayList
Contenedoras de tamaño variable
Declaración de un vector:
El vector es una clase
Ej.
private ArrayList catalogo;
private ArrayList itemsCompra;
Contenedoras de tamaño variable
Inicialización y tamaño de un vector
• Se utiliza la misma sintaxis de creación de
cualquier objeto.
• No es necesario definir el numero de
elementos
Vector
private ArrayList catalogo;
Arreglo
private String[] materias;
public CarroCompras()
{
catalogo = new ArrayList();
}
public Notas()
{
materias = new String[TOTAL_EST];
}
Contenedoras de tamaño variable
Métodos de la clase ArrayList
• isEmpty() : retorna verdadero si el vector no
tiene elementos.
• size(): retorna el número de elementos que
tiene el vector.
Contenedoras de tamaño variable
Acceso a los elementos del Vector
• Empieza en la posición 0.
• El método get(pos) recibe como parámetro la
posición a recuperar y retorna el objeto.
• Al recuperar el elemento del vector se hace
necesario hacer explicita la clase a la cual
pertenece.
Contenedoras de tamaño variable
Acceso a los elementos del Vector
public int darInventario()
{
int sumaTotal=0;
for(int indice=0; indice < catalogo.size(); indice++)
{
Libro miLibro = (Libro) catalogo.get(indice);
sumaTotal += miLibro.darPrecio();
}
return sumaTotal;
}
Contenedoras de tamaño variable
Agregar elementos a un vector
Se pueden agregar al final o en una posición específica
Métodos
• add(objeto): Agrega al final del vector el objeto que
se pasa como parámetro.
• add(indice,objeto): Agrega al vector el objeto que se
pasa como parámetro en la posición (inidce)
indicada. El objeto que esta en la psosición desplaza
a todos los elementos hacia la posición siguiente.
Contenedoras de tamaño variable
Agregar elementos a un vector
public void agregarTresLibros()
{
Libro miLibro1 = new Libro(“Programación”,”McHill”,100);
Libro miLibro2 = new Libro(“Matemática”,”McHill”,100);
Libro miLibro3 = new Libro(“Física”,”McHill”,100);
catalogo.add(miLibro2);
catalogo.add(miLibro3);
catalogo.add(0,miLibro1);
}
Contenedoras de tamaño variable
Replazar un elemento del vector
Cuando se requiere remplazar se utiliza el método
set(indice,objeto) donde indice es la posición que se
desea replazar y objeto es el elemento que tomará
ahora la posición.
Contenedoras de tamaño variable
Replazar un elemento del vector
public void intercambiar(int pos1, int pos2)
{
Libro miLibro1 = (Libro) catalogo.get(pos1);
Libro miLibro2 = (Libro) catalogo.get(pos2);
catalogo.set(pos2, miLibro1);
catalogo.set(pos1, miLibro2);
}
Contenedoras de tamaño variable
Eliminar un elemento del vector
Cuando se requiere eliminar se utiliza el método
remove(indice) donde indice es la posición que se
desea eliminar.
public void elminiarLibro(int pos)
{
catalogo.remove(pos);
}