Manejo de grupos de atributos Giovanni Hernández P. Nivel 3.

Post on 03-Feb-2016

242 views 0 download

Transcript of Manejo de grupos de atributos Giovanni Hernández P. Nivel 3.

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);}