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

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

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

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

Manejo de grupos de atributos

Giovanni Hernández P.Nivel 3

Page 2: 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.

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

Requerimientos Funcionales

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

Contenedoras de tamaño fijoCurso

double nota1double nota2double nota3double nota4double nota5double nota6double nota7double nota8double nota9double nota10double nota11double nota12

Solución

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

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

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

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;

}

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

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

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

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>]

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

Instrucciones repetitivas

Puede repetirse un paso (instrucción) que va transformando gradualmente el mundo del problema.

Ej.Cuando subimos unas escaleras

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

Instrucciones repetitivas…

Taller No 1.

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

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.

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

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;

}

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

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 ++;……

}

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

Instrucciones repetitivas…

Public double promedio(){

double suma = 0.0;int indice = 0;while ( indice < TOTAL_EST){

suma += nota[ indice ];indice ++;

}}

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

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

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

Instrucciones repetitivas…

Taller No 2

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

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

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

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

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

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

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

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

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

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

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

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.

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

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.

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

Patrones de algoritmo para instrucciones repetitivas

Patrón de recorrido totalCódigo Javafor( int indice = 0 ; indice < arreglo.length; indice++){ // cuerpo}

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

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

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

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

}}

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

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?

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

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

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

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)

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

Actividad

Taller No 3Taller No 31

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

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.

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

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

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

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

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

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

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

Actividad

Taller No 4

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

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.

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

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>

}

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

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;

}

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

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;

}

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

Taller No 5

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

Caso No 2

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

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

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

Compresión del mundo del problema

ConstantesArreglo con 42 sillas

Arreglo con 8 sillas

Constantes

Asociación opcional

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

Taller (HT)

• Taller No 6• Taller No 7

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

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;

}

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

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

}

}

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

Objetos

: Silla

clase = 1numero = 6ubicacion = 3

: Pasajero

cedula = 1234nombre = “Samuel H.”

pasajero

: Silla

clase = 2numero = 10ubicacion = 2pasajero = null

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

: 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

. . .

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

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

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

Preguntas

¿Los objetos que están en un arreglo se puede guardar en una variable?

Silla sillaTemporal = sillasEjecutivas[0];

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

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.

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

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

}

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

Taller No 8

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

Contenedoras de tamaño variable

• 1000 estudiantes con sus notas• 200 puesto en un avión

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

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

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

Contenedoras de tamaño variable

Declaración de un vector: El vector es una claseEj.private ArrayList catalogo;private ArrayList itemsCompra;

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

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

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

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.

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

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.

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

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;

}

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

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.

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

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

}

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

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.

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

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

}

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

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