Autor
|
Tema: Duda sobre cómo estructurar un programa con el paradigma POO en java? (Solución) (Leído 6,003 veces)
|
ralymontes
Desconectado
Mensajes: 47
|
Hola! Comencé)a hacer un programa, sencillo, para comrpender POO con Java, ya me quedaron claras algunas cosas. pero tengo una duda: Mi programa requiere que haga un arreglo de objetos y luego sobre el arreglo hacer operaciones (son pasajeros de un vuelo con 3 datos destino, origen y nombre), en donde tengo mi clase pasajero tengo los metodos get/set y el constructor. Hice otra clase (el main), donde según yo desde ahi invoco a los metodos que trabajaran sobre los objetos. Pero mi duda es donde vy creando los objetos que agrego al arreglo? En el main o en la clase pasajero? Aqui el programa: import java.io.*; import java.util.*; public class Control { public static void main(String[] args)
{ pasajero array[] =new pasajero [10]; int it='1'; Scanner entradaEstandar= new Scanner(System.in); int op=0; String nombre, destino, origen,hora_llegada; System.out.println("Programa de de control de Vuelo"); do { //pasajero aux=new pasajero(); System.out.println("Seleccione una opcion o presione '0' para salir"); System.out.println("\n\n (1) Agregar Pasajero"); System.out.println("\n (2) Eliminar Pasajero"); System.out.println("\n (3) Ver lista de los pasajeros"); op=entradaEstandar.nextInt(); switch(op) { case 1: agregar(); break; case 2: // eliminar.(nombre); break; case 3: //mostrar_todo(); break; } }while(it=='0'); }
public static void agregar(){ String nom, des, or, hora; Scanner entradaEstandar= new Scanner(System.in); System.out.println("Escriba el nombre del pasajero:\n"); nom=entradaEstandar.nextLine(); System.out.println("Escriba el origen:\n"); or=entradaEstandar.nextLine(); System.out.println("Escriba el destino:\n"); des=entradaEstandar.nextLine(); System.out.println("Ingresa la hora de arribo:\n"); hora=entradaEstandar.nextLine(); pasajero aux=new pasajero(); aux = new pasajero(); } }
Clase pasajero: import java.io.*; import java.util.*; public class pasajero { // instance variables - replace the example below with your own private String nombre; private String hora_llegada; private String destino; private String origen;
/** * Constructor for objects of class pasajero */ public pasajero() { // initialise instance variables nombre=""; hora_llegada=""; destino=""; origen=""; }
public String getNombre() { return nombre; } public void setNombre(String nom) { nombre=nom; } public String getHora_llegada() { return hora_llegada; } public void setHora_llegada(String hora) { hora_llegada=hora; } public String getDestino() { return destino; } public void setDestino(String dest) { destino=dest; } public String getOrigen() { return origen; } public void setOrigen(String or) { origen=or; } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\nNombre: "); sb.append(nombre); sb.append("\nHora Llegada: "); sb.append(hora_llegada); sb.append("\nDestino: "); sb.append(destino); sb.append("\nOrigen: "); sb.append(origen); return sb.toString(); } }
|
|
« Última modificación: 29 Agosto 2013, 17:18 pm por ralymontes »
|
En línea
|
|
|
|
Zoik
Desconectado
Mensajes: 91
|
Bueno no se si te e entendido correctamente pero intentare contestarte. Bién, cuando tu declaras lo siguiente: pasajero array[] =new pasajero [10];
Has declarado que tendras una array de 10 posiciones, pero aún así, queda todavía inicializar cada una de esas posiciones, por tanto en tu caso a continuación de la declaración deberías hacer lo siguiente: array[0] = new pasajero();
Y así sucesivamente hasta llenar cada una de las posiciones, en las que cada una de esas posiciones, representa un objeto tipo pasajero distinto, cada uno con sus propias variables. Para acceder a los métodos y variables sería en tu caso por ejemplo: array[0].metodo(); //En el caso de un método array[0].variable; //En el caso de una variable
Eso si, para acceder a estos métodos y variables deberán estar en public o creo recordar que en protected o static, corregidme si me equivoco. Un saludo.
|
|
« Última modificación: 29 Agosto 2013, 00:20 am por Zoik »
|
En línea
|
|
|
|
ralymontes
Desconectado
Mensajes: 47
|
Gracias por la observación del arreglo.
Pero me gustaria que resolvieran la otra duda de como (static, public, etc) y donde debo (en el pricipal o en la clase del objeto) poner los metodos.
Saludos, Raly.
|
|
|
En línea
|
|
|
|
Zoik
Desconectado
Mensajes: 91
|
A ver que creo que no me has entendido lo que te quería decir, el arreglo, lo creas en la main y para trabajar con el, lo haces desde la main, esto no quiere decir que en main no tengas un método agregar, un método eliminar, y un método mostrar, de echo esta correctísimo. Lo que te quiero hacer ver es que, si quiero agregar un pasajero, trabajaré desde la main, pero accediendo a los métodos de la class pasajero, es decir: public static void agregar(){ Scanner entradaEstandar = new Scanner (System. in); System. out. println("Escriba el nombre del pasajero:\n"); pasajero[0].setNombre(entradaEstandar.nextLine()); System. out. println("Escriba el origen:\n"); pasajero[0].setOrigen(entradaEstandar.nextLine()); System. out. println("Escriba el destino:\n"); pasajero[0].setDestino(entradaEstandar.nextLine()); System. out. println("Ingresa la hora de arribo:\n"); pasajero[0].setHora_llegada(entradaEstandar.nextLine()); pasajero aux=new pasajero(); //Estas dos variables no se para que están estaría bien que lo explicases aux = new pasajero(); }
Si quieres saber la diferéncia entre los modificadores de las variables y los métodos te recomiendo san google patrón de programadores: http://mundogeek.net/archivos/2009/03/30/modificadores-en-java/
|
|
« Última modificación: 29 Agosto 2013, 00:51 am por Zoik »
|
En línea
|
|
|
|
ralymontes
Desconectado
Mensajes: 47
|
Hola:
Muchas gracias, de hecho eso lo vi en un sitio de internet (los metodos en el main) pero vi otro codigo en donde están en la clase del objeto. A mi parecer esta última opcion es la mas correcta, no? (para separar metodos y variables del resto del programa). A lo que voy con esto es que es lo mas natural hablando del POO.... o una buena costumbre, si no mal entiendo el paradigma.
¿cómo podría hacer esto?
Gracias por la ayuda, los comentarios son acertadísimos.
Saludos, Raly.
|
|
|
En línea
|
|
|
|
Zoik
Desconectado
Mensajes: 91
|
Bueno pues deberías hacer lo siguiente: En la class pasajero, en cada uno de los métodos que son set, no le pasarías nada por parámetro y a la variable nombre, por ejemplo le asignarías un valor recogido por teclado, un ejemplo con tu metodo de la class pasajero: public void setNombre() { Scanner entradaEstandar = new Scanner (System. in);System. out. println("Escriba el nombre del pasajero:\n"); nombre=entradaEstandar.nextLine(); }
Entonces teniendo esto así configurado, en tu class Control, para poder asignar un nombre unicamente tendrias que llamar a este metodo así: array[0].setNombre(); array[1].setNombre(); array[2].setNombre(); array[3].setNombre();
Espero lo hayas entendido, un saludo.
|
|
« Última modificación: 29 Agosto 2013, 10:26 am por Zoik »
|
En línea
|
|
|
|
Fakedo0r
Desconectado
Mensajes: 21
Fuera de compás, en una de las 12 dimensiones...
|
Yo encuentro mas correcto, a que crees otra clase llamada "GestionPasajero" y desde ahi manejes tus arreglos y todo lo que te haga falta referente al objeto "Pasajero". Así te saldría un código bastante elegante. Imagínate si tienes 2, 3 o 10 clases diferentes, que harás ? Si metes todo en el "Main" tal como tienes ahora, seria un lío, un código muy sucio y ahí la POO perdería toda su gracia.
Saludos.
|
|
|
En línea
|
|
|
|
Zoik
Desconectado
Mensajes: 91
|
Si lo haces como dice Fakedoor no tendras que crear métodos static, y si ciertamente te quedara bastante mas limpio.
en la main solo tendrías que poner la instancia de la class "GestiónPasajero".
Un saludo.
|
|
|
En línea
|
|
|
|
Zoik
Desconectado
Mensajes: 91
|
Hay lo llevas, no se si estará totalmente bien, pero espero que almenos te ayude: public class Main { public static void main (String[] args ) { } }
import java.util.Scanner; int arraySize = 10; pasajero array[] = new pasajero[arraySize]; Scanner entradaEstandar = new Scanner (System. in); menu(); } public void menu(){ int op=0; System. out. println("Programa de de control de Vuelo"); do { System. out. println("Seleccione una opcion o presione '0' para salir"); System. out. println("\n\n (1) Agregar Pasajero"); System. out. println("\n (2) Eliminar Pasajero"); System. out. println("\n (3) Ver lista de los pasajeros"); op=entradaEstandar.nextInt(); switch(op) { case 1: agregar(); break; case 2: eliminar(); break; case 3: mostrarTodo(); break; } }while(op!=0); } public void agregar(){ int index = checkPassenger(); boolean dniDoubled; array[index] = new pasajero(); do { dniDoubled = false; array[index].setDni(); for(int i = 0; i < arraySize; i++){ if(array[i] != null) if(array[index].getDni().equals(array[i].getDni()) && i!=index){ System. out. println("El DNI introducido ya existe, vuelva a intentarlo"); dniDoubled = true; } } } while(dniDoubled != false); array[index].setNombre(); array[index].setOrigen(); array[index].setDestino(); array[index].setHora_llegada(); System. out. println("Pasajero agregado"); } public int checkPassenger(){ int i = 0; for(i = 0; i < arraySize; i++){ if(array[i]==null) return i; } if(i == arraySize){ System. out. println("Array llena, no se pueden dar de alta mas pasajeros"); menu(); } return i; } public void eliminar(){ boolean noResultsFound = true; System. out. println("Escriba el DNI del pasajero:\n"); dni = entradaEstandar.next(); for(int i = 0; i < arraySize-1; i++){ if(array[i] != null) if(array[i].getDni().equals(dni)){ array[i] = null; noResultsFound = false; } } if(noResultsFound){ System. out. println("No se encontraron coincidencias"); } else if(!noResultsFound){ System. out. println("Pasajero borrado"); } } public void mostrarTodo(){ boolean noResultsFound = true; for(int i = 0; i < arraySize; i++){ if(array[i]!=null){ System. out. println("----------------------"); System. out. println("-- Pasajero "+i +1+" --"); System. out. println(array [i ]. getDni()); System. out. println(array [i ]. getNombre()); System. out. println(array [i ]. getOrigen()); System. out. println(array [i ]. getDestino()); System. out. println(array [i ]. getHora_llegada()); noResultsFound = false; } } if(noResultsFound == true){ System. out. println("No se han encontrado pasajeros"); } } }
import java.io.*; import java.util.*; public class pasajero { // instance variables - replace the example below with your own private Scanner entradaEstandar = new Scanner (System. in); /** * Constructor for objects of class pasajero */ public pasajero() { // initialise instance variables dni=""; nombre=""; hora_llegada=""; destino=""; origen=""; } { return dni; } public void setDni() { System. out. println("Escriba el DNI del pasajero:\n"); dni = entradaEstandar.nextLine(); } { return nombre; } public void setNombre() { System. out. println("Escriba el nombre del pasajero:\n"); nombre = entradaEstandar.nextLine(); } public String getHora_llegada () { return hora_llegada; } public void setHora_llegada() { System. out. println("Ingresa la hora de arribo:\n"); hora_llegada = entradaEstandar.nextLine(); } { return destino; } public void setDestino() { System. out. println("Escriba el destino:\n"); destino = entradaEstandar.nextLine(); } { return origen; } public void setOrigen() { System. out. println("Escriba el origen:\n"); origen = entradaEstandar.nextLine(); } StringBuilder sb = new StringBuilder(); sb.append("\nNombre: "); sb.append(nombre); sb.append("\nHora Llegada: "); sb.append(hora_llegada); sb.append("\nDestino: "); sb.append(destino); sb.append("\nOrigen: "); sb.append(origen); return sb.toString(); } }
Te recomiendo que siempre que trabajes con registros asignes una variable que sepas que siempre será única para cada registro como por ejemplo el DNI o un código númerico, a la hora de hacer algoritmos de busqueda sobretodo te resultara más fácil.
|
|
|
En línea
|
|
|
|
ralymontes
Desconectado
Mensajes: 47
|
Hola, Gracias por echarme una mano con esto, ha sido de graaan ayuda.
Con respecto al DNI eso lo sé, pero en este caso por ser un ejemplo sencillo de 10 pasajeros (es una aereolinea con una avioneta XD) no hay problema, sólo queria aclarar mis dudas con respecto a la POO.
Gracias a Todos!
Saludos, Raly.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda sobre java
« 1 2 »
Java
|
HadesDark
|
13
|
10,863
|
22 Octubre 2006, 17:12 pm
por Un usuario
|
|
|
Duda de programa en java :( condicional simple.
Java
|
rub'n
|
9
|
7,979
|
1 Octubre 2010, 01:29 am
por 1mpuls0
|
|
|
¿Cómo puedo estructurar mi librería de clases en sublibrerías? [SOLUCIONADO]
.NET (C#, VB.NET, ASP)
|
<ИΘZIЭ(ŦB>
|
4
|
5,236
|
17 Marzo 2011, 03:43 am
por <ИΘZIЭ(ŦB>
|
|
|
Duda con programa java
Java
|
Gm3z
|
1
|
3,210
|
4 Diciembre 2012, 14:00 pm
por Gm3z
|
|
|
Duda programa JAVA al leer archivo binario
Java
|
LoLo2207
|
3
|
3,677
|
15 Diciembre 2012, 20:23 pm
por LoLo2207
|
|