manejo de grupos de atributos giovanni hernández p. nivel 3
Post on 03-Feb-2016
246 Views
Preview:
TRANSCRIPT
Manejo de grupos de atributos
Giovanni Hernández P.Nivel 3
CASO DE ESTUDIOLas 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 fijoCurso
double nota1double nota2double nota3double nota4double nota5double nota6double nota7double nota8double nota9double nota10double nota11double nota12
Solución
Contenedoras de tamaño fijo …Atributo que es capaz de agrupar una secuencia
de valores se denomina contenedorCurso
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
// Construtorpublic 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 índiceSintaxis
<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. Verificar si la primera palabra es igual a “casa”.2. Si lo es no busque mas. Si no lo es busque en la segunda palabra.3. Verificar si la segunda palabra es igual a “casa”.4. Si lo es no busque mas. Si no lo es busque en la tercera palabra.5. 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 iterativapublic double promedio(){
double suma = 0.0int 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
Preparación del ciclo
La condición
es verdadera
?
Ejecuta las instrucciones del cuerpo del ciclo
Si
No
Terminael ciclo
<inicio>While ( <condicion >){
<cuerpo><avance>
}
inicio
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 R9-Calcular el numero de estudiantes que reprobaron el curso
Resumen 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 algoritmoPatró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 totalSolución1. 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 totalCódigo Javafor( int indice = 0 ; indice < arreglo.length; indice++){ // cuerpo}
Patrones de algoritmo para instrucciones repetitivas
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.
Primera variante del patrón
Patrones de algoritmo para instrucciones repetitivas
Patrón de recorrido total-variante No 1Public 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 varianteCalcular 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
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.
Segunda variante del patrón
Patrones de algoritmo para instrucciones repetitivas
Patrón de recorrido total-variante No 2Public int darAprobados(){
int vanAprobando = 0; for( int indice = 0 ; indice < notas.legth; indice++)
{ // cuerpo
if( notas[i] >= 3.0 ){
vanAprobando ++;}
}return vanAprobando;
}
(1) (2)
(3)
(4)
Actividad
Taller No 3Taller No 31
Patrones de algoritmo para instrucciones repetitivas
Patrón de recorrido parcialUna 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 parcialEsqueletoboolean 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
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.
Patrón de recorrido parcial
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){
reprobados ++;}If(reprobados >3){
termino=true;}
}return termino;
}
Cuerpo
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
Esqueletofor (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 recorridofor (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 recorridopublic 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 pasajeroCédula del pasajeroClase de la silla que deseaUbicació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
ConstantesArreglo 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 ejecutivasillasEjecutivas[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ómicasillasEconomicas[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
clase = 1numero = 6ubicacion = 3
: Pasajero
cedula = 1234nombre = “Samuel H.”
pasajero
: Silla
clase = 2numero = 10ubicacion = 2pasajero = null
: Avion
sillasEjecutivas =
0 1 2 3 4 5 6 7
: Silla
clase = 1numero = 1ubicacion = 1
: Silla
clase = 1numero = 3ubicacion = 1
: Pasajero
cedula = 1234nombre = “Samuel H.”
: Silla
clase = 1numero = 4ubicacion = 3pasajero = null
: Pasajero
cedula = 1234nombre = “Samuel H.”
: Silla
clase = 1numero = 2ubicacion = 3pasajero = 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
Por simplicidad se denominará vector a la implementación de una estrucutra contenedora de tamaño variable
Contenedoras de tamaño variable
Declaración de un vector: El vector es una claseEj.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
elementosVectorprivate ArrayList catalogo;
public CarroCompras(){ catalogo = new ArrayList();}
Arregloprivate String[] materias;
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 Vectorpublic 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 vectorSe pueden agregar al final o en una posición específicaMé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 vectorpublic 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 vectorCuando 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 vectorpublic 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 vectorCuando 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);}
top related