Autor
|
Tema: Atributo de tipo "clase" : no entiendo nada (Leído 6,588 veces)
|
men100
Desconectado
Mensajes: 4
|
Buenas tardes. Estoy haciendo DAW y empieza a complicarse el asunto y estoy algo perdido. Os pego la parte del enunciado y que no entiendo resaltado en negrita: En esta tarea se van a realizar un conjunto de clases que permitan modelar las distintos tipos de cuentas que una persona puede tener en un banco, haciendo uso del mecanismo de herencia. Los puntos que se deben tratar para resolver la tarea son:
Crear un proyecto en NetBeans denominado, "CuentasBancarias".
Dentro de dicho proyecto, crear un paquete denominado "modeloBancario".
Dentro del paquete "modeloBancario", crear una clase denominada Cliente, que modele los distintos clientes del banco que tienen una cuenta asociada para almacenar su dinero. Las características de la clase Cliente son: Atributos (Todos los atributos de la clase Cliente deben tener visibilidad privada):
idCliente: número entero que representa el identificador único del cliente dentro del banco. nombre: cadena de caracteres que representa el nombre del cliente del banco. direccion: cadena de caracteres que representa la dirección donde vive el cliente del banco. teléfono: cadena de caracteres que representa el teléfono que permite contactar con el cliente.
Métodos (Todos los métodos de la clase Cliente deben tener visibilidad pública): constructor sin parámetros: constructor que inicializa todos los atributos de tipo cadenas de caracteres al valor null y los números enteros a 0. constructor con parámetros: constructor que tienen tantos parámetros como atributos tiene la clase, y que inicializa cada uno de los atributos con el valor de los parámetros correspondientes.
Dentro del paquete "modeloBancario", crear una clase abstracta denominada "Cuenta", que modele las distintas cuentas bancarias que mantiene la entidad financiera donde los clientes depositan su dinero. Atributos (Todos los atributos de la clase Cuenta deben tener visibilidad protegida)
numeroDeCuenta: número entero que representa el identificador único asociado a cada una de las cuentas del banco. saldo: número real que representa la cantidad de dinero almacenado en dicha cuenta. titular: atributo de tipo Cliente que representa la persona que está asociada a dicha cuenta.
Métodos (Todos los métodos de la clase Cuenta deben tener visibilidad pública) constructor sin parámetros: constructor que inicializa el cliente titular de la cuenta a null, y el saldo y el número de cuenta a cero. constructor con parámetros: constructor que tienen tantos parámetros como atributos tiene la clase, y que inicializa cada uno de los atributos con el valor de los parámetros correspondientes. getNumeroDeCuenta: método que permite obtener el número de cuenta. getSaldo: método que permite obtener el saldo de la cuenta. getTitular: método que permite obtener el titular de la cuenta setNumeroDeCuenta: método que recibe un parámetro entero que representa el nuevo número de cuenta que se desea asignar y asigna parámetro el valor de dicho al atributo numeroDeCuenta. setSaldo: método que recibe un parámetro entero que representa el nuevo saldo que se desea asignar y asigna parámetro el valor de dicho al atributo saldo. setTitular: método que recibe un parámetro Cliente que representa el nuevo titular que se desea asignar y asigna parámetro el valor de dicho al atributo titular. ingresar: recibe un parámetro real que representa la cantidad que se desea ingresar en la cuenta. El método incrementará el saldo en la cantidad recibida como parámetro. retirar: método abstracto que permitirá sacar una cantidad de la cuenta (si hay saldo disponible para ello), no se implementará ya que dependerá del tipo de cuenta, por tanto su implementación recaerá en las clases hijas. actualizarSaldo: método abstracto que actualizará el saldo de la cuenta, dependiendo del tipo de interés de cada una de las cuenta, por tanto su implementación recaerá en las clases hijas. Ahí me pierdo, no entiendo que quiere decir "tipo Cliente". Osea, debe de ser que ese atributo sea la clase entera llamada "Cliente". Os pongo lo que he hecho hasta ahora: Clase "Cliente": package modeloBancario; public class Cliente { private int idCliente; public Cliente (){ } this.idCliente = idCliente; this.nombre = nombre; this.direccion = direccion; this.telefono = telefono; } public int getIdCliente(){ return idCliente; } public void setIdCliente(int idCliente){ this.idCliente = idCliente; } return nombre; } public void setNombre (String nombre ){ this.nombre = nombre; } return direccion; } public void setDireccion (String direccion ){ this.direccion = direccion; } return telefono; } public void setTelefono (String telefono ){ this.telefono = telefono; } }
y la clase "Cuenta": package modeloBancario; public abstract class Cuenta { protected int numeroDeCuenta; protected double saldo; protected Cliente titular; public Cuenta(){ numeroDeCuenta = 0; saldo = 0; titular (); } }
Agradeceria una pista, llevo dias atascado!
|
|
« Última modificación: 18 Enero 2018, 18:12 pm por men100 »
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
Básicamente, lo que te pide es que crees un nuevo campo de tipo tal y con nombre cual: Dentro de la clase Cuenta public class Cuenta { //.... public Client titular = new Client(); public Cuenta getTitutar() { titular.idClient = <valor_tipo_int>; titular.nombre = <valor_tipo_string>; titular.direccion = <valor_tipo_string>; titular.telefono = <valor_tipo_string>; return titular; } }
public <Tipo> <nombre_de_campo> public <Tipo> <nombre_de_metodo>(); Supongo que te pedirá algo así.
|
|
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
men100
Desconectado
Mensajes: 4
|
Al final lo deje asi, no se si estara bien: package modeloBancario; public abstract class Cuenta { protected int numeroDeCuenta; protected double saldo; protected Cliente titular; public Cuenta(){ numeroDeCuenta = 0; saldo = 0; titular = null; } public Cuenta (int numeroDeCuent, double saldo, Cliente titular){ this.numeroDeCuenta = numeroDeCuenta; this.saldo = saldo; this.titular = titular; } public int getNumeroDeCuenta(){ return numeroDeCuenta; } public void setNumeroDeCuenta(int numeroDeCuenta){ this.numeroDeCuenta = numeroDeCuenta; } public double getSaldo(){ return saldo; } public void setSaldo (int saldo){ this.saldo = saldo; } public Cliente getTitular(){ return titular; } public void setTitular(Cliente titular){ this.titular = titular; }
Imagino que luego podre crear objetos del tipo "Cliente". Lo que no entiendo es que valores pueden tener. Esta claro que int tendra un entero, un String letras...pero que valores puede tener la clase "Cliente"?
|
|
|
En línea
|
|
|
|
HardC0d3
Desconectado
Mensajes: 49
|
men100: Imagino que luego podre crear objetos del tipo "Cliente".Lo que no entiendo es que valores pueden tener. Esta claro que int tendra un entero, un String letras...pero que valores puede tener la clase "Cliente"? Pues tendrá los atributos//variables que tenga tu clase Cliente, en tu caso la clase Cliente tiene los atributos: idCliente, nombre, direccion y telefono: public class Cliente{ private int idCliente; ...
Esos valores los podrás modificar u obtener con los setters y los getters de un objeto de la clase Cliente: public void setIdCliente(int idCliente){ this.idCliente = idCliente; } return nombre; } ...
|
|
« Última modificación: 18 Enero 2018, 23:57 pm por HardC0d3 »
|
En línea
|
|
|
|
men100
Desconectado
Mensajes: 4
|
Pues tendrá los atributos//variables que tenga tu clase Cliente, en tu caso la clase Cliente tiene los atributos: idCliente, nombre, direccion y telefono: public class Cliente{ private int idCliente; ...
Esos valores los podrás modificar u obtener con los setters y los getters de un objeto de la clase Cliente: public void setIdCliente(int idCliente){ this.idCliente = idCliente; } return nombre; } ...
Gracias por la respuesta. Pero lo que dices, puede hacerse aun si no existiera la clase "Cuenta" (que es donde esta el atributo del tipo de clase "Cliente". Yo lo que digo es que trabajando con la clase "Cuenta": package modeloBancario; public abstract class Cuenta { protected int numeroDeCuenta; protected double saldo; protected Cliente titular; public Cuenta(){ numeroDeCuenta = 0; saldo = 0; titular = null; } public Cuenta (int numeroDeCuent, double saldo, Cliente titular){ this.numeroDeCuenta = numeroDeCuenta; this.saldo = saldo; this.titular = titular;
hago su constructor con parámetros: public Cuenta (int numeroDeCuent, double saldo, Cliente titular){ this.numeroDeCuenta = numeroDeCuenta; this.saldo = saldo; this.titular = titular; }
y...¿como se supone que creo un objeto del tipo titular? ¿Que parametos le doy?: public static void main (String[] args ) { Cuenta libreta1 = new Cuenta(1,3000,¿¿¿???);
¿que pongo en las interrogaciones? se supone que titular, al ser de tipo de clase "Cliente", tiene 4 atributos. ¿Hay que poner los 4? ¿Alguno? ¿Que va ahi? Ya se que en los int van numeros, en los string letras...pero ahi,¿ que va?
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
ya va, un momento creo que te confundes cuando en realidad vas bien homie, bueno te creas una instancia de Tipo Cliente tal cual y debes iniciarlizar sus atributos o variables de instancia, como te lo mencionaron ya Estas variables de instancia, instance field, campos, atributos, todo sinonimos , son un ejemplo de lo que puede tener este tipo de Cliente. aqui tiene 4, puede tener menos o mas eso depende de ti. public class Cliente{ private int idCliente;
Pero esto ? lo viste bien estas intentando instanciar una clase abstracta, de una tu compilador deberia de quejarse ya que es ilegal, una clase abstracta nunca se instancia, eso le corresponde a las clases que las extiendan, desarrollar la logica de esa clase Cuenta libreta1 = new Cuenta(1,3000,¿¿¿???);
actualizarSaldo, retirar estos metodos abstractos deben estar en la clase Cuenta y no los veo, también el metodo ingresar Ejemplo public abstract void actualizarSaldo(); public abstract void retirar();
Tengo que formatear una pc con windows , vengo dentro de un rato. Salida estandar por consola para atajos
package modeloBancario; public interface ShowData { static <T> void println(final T s) { } }
Clase cuentapackage modeloBancario; /* Esta clase representa el concepte general de una Cuenta Bancaria basica */ public abstract class Cuenta { protected int numeroDeCuenta; protected double saldo; protected Cliente titular; public Cuenta() { this.numeroDeCuenta = 0; this.saldo = 0.0d; this.titular = null; } public Cuenta(int numeroDeCuenta, double saldo, Cliente titular) { this.numeroDeCuenta = numeroDeCuenta; this.saldo = saldo; this.titular = titular; } public int getNumeroDeCuenta() { return numeroDeCuenta; } public void setNumeroDeCuenta(int numeroDeCuenta) { this.numeroDeCuenta = numeroDeCuenta; } public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; } public Cliente getTitular() { return titular; } public void setTitular(Cliente titular) { this.titular = titular; } //ejemplo metodo ingresar XD public void ingresar(int ingreso) { this.saldo += ingreso; } /* Metodo abstracto que sera sobreescrito por las subClases concretas */ public abstract void actualizarSaldo(); public abstract void retirar(); @Override return "Numero de Cuenta=" + numeroDeCuenta+"\n" + "Saldo= " + saldo+"\n" + titular.toString();//usando metodo toString de la clase Cliente, reusar codigo } }
Clase clientepackage modeloBancario; public class Cliente { private int idCliente; public Cliente (){ this.idCliente = 0; this.nombre = ""; this.direccion = ""; this.telefono = ""; } this.idCliente = idCliente; this.nombre = nombre; this.direccion = direccion; this.telefono = telefono; } public int getIdCliente(){ return idCliente; } public void setIdCliente(int idCliente){ this.idCliente = idCliente; } return nombre; } public void setNombre (String nombre ){ this.nombre = nombre; } return direccion; } public void setDireccion (String direccion ){ this.direccion = direccion; } return telefono; } public void setTelefono (String telefono ){ this.telefono = telefono; } @Override return "idCliente= " + idCliente +"\n"+ "Nombre= " + nombre +"\n"+ "Direccion= " + direccion +"\n"+ "Telefono= " + telefono ; } }
Clase TestExec es de ejemplo para que veas como se puede hacer, una de las tantas maneras de pasar ese parametro Cliente, aqui a través del metodo set linea 43package modeloBancario; import javax.swing.*; public class TestExec extends Cuenta { public TestExec() { } @Override public void actualizarSaldo() { setSaldo(1000); //heredamos el metodo setSaldo y lo usamos para setear el saldo del cliente //de igual manera sobrescribimos el metodo Actualizar Saldo // haciendo que esta clase TestExec sea una clase concreta } @Override //invocamos al metodo toString de la superClase abstracta Cuenta con super //para la reutilizacion de codigo return super.toString(); } //dando el look por defecto del S0 //Instanciando al cliente Cliente clienteTitular = new Cliente(1, "men100", "barrio la Muerte", "+58000SinCorriente"); //Instancia de clase TestExec constructor sin parametros //tambien se pude invocar el constructor de la super clase y pasar parametros TestExec test = new TestExec(); test.setNumeroDeCuenta(1241345145); //invocando metodo sobreEscrito test.actualizarSaldo(); test.setTitular(clienteTitular); // seteamos la instancia clienteTitular por el setter, mas abajo otra manera. //Salida estandar de la instancia TestExec ShowData.println(test.toString()); //Seteamos la instancia TestExec al JTextArea data.setText(test.toString()); data.setEditable(false); //Imprimiendo la data con una notificacion al usuario JOptionPane. showMessageDialog(null,data, "Informacion cuenta Cliente", 1); } }
Output /opt/jdk1.8.0_92/bin/j... Numero de Cuenta=1241345145 Saldo= 1000.0 idCliente= 1 Nombre= men100 Direccion= barrio la Muerte Telefono= +58000SinCorriente
Aqui te muestro otra version de la clase TestExec la instancia de tipo Cliente la seteamos a través del constructor - Usando el constructor de la superClase invocandolo con super para reusar mas el source ver linea 10 a 13.
- Incluido metodo retirar
package testing.foro.modeloBancario; import util.ShowData; import javax.swing.*; public class TestExec extends Cuenta { private static Double saldoRetirado ; private static Double saldoIngresado ; public TestExec (int numeroDeCuenta, double saldo, Cliente titular, Double saldoRetirado ) { super(numeroDeCuenta, saldo, titular);//invocando el constructor de la superClase this.saldoRetirado = saldoRetirado; } @Override public void actualizarSaldo() { //de igual manera sobrescribimos el metodo Actualizar Saldo // haciendo que esta clase TestExec sea una clase concreta ShowData.println("Saldo actual : "+super.getSaldo()); } @Override public void retirar() { if(super.getSaldo() > 0) { final double egreso = (double) getSaldo() - saldoRetirado; super.setSaldo(egreso); ShowData.println("Saldo retirado: "+saldoRetirado); }else { ShowData.println("Saldo retirado: "+saldoRetirado); JOptionPane. showMessageDialog(null, "No hay saldo disponible"); } } @Override //invocamos al metodo toString de la superClase abstracta Cuenta con super //para la reutilizacion de codigo return super.toString(); } //dando el look por defecto del S0 //Instanciando al cliente Cliente clienteTitular = new Cliente(1, "men100", "barrio la Muerte", "+58000SinCorriente"); //ingresamos el saldo y validamos el input saldoIngresado = Double. valueOf(in ); //retiramos saldo y validamos el input saldoRetirado = Double. valueOf(out ); //Instanciando el constructor con parametros e ivocando al de la super clase ver linea 12 TestExec test = new TestExec(1241345145, 0.0, clienteTitular, saldoRetirado); test.setSaldo(saldoIngresado); ShowData.println("Saldo ingresado "+saldoIngresado); test.retirar(); test.actualizarSaldo(); //Salida estandar del instancia TestExec //mostrar salida estandar Mostrar.println(test.toString()); final StringBuilder sb = new StringBuilder(); sb.append("Saldo ingresado: "+saldoIngresado+"\n"); sb.append("Saldo retirado: "+ saldoRetirado +"\n"); //Setemos el instancia TestExec al JTextArea data.setText(sb.toString()+test.toString()); data.setEditable(false); //Imprimiendo la data con una notificacion al usuario JOptionPane. showMessageDialog(null,data, "Informacion cuenta Cliente", 1); } }
y te pasas por aqui https://foro.elhacker.net/java/manuales_de_java-t162966.30.html
|
|
« Última modificación: 21 Enero 2018, 22:51 pm por rub'n »
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
HardC0d3
Desconectado
Mensajes: 49
|
men100 : ¿que pongo en las interrogaciones? se supone que titular, al ser de tipo de clase "Cliente", tiene 4 atributos. ¿Hay que poner los 4? ¿Alguno? ¿Que va ahi? Ya se que en los int van numeros, en los string letras...pero ahi,¿ que va?
Al crear un objeto de tipo Cuenta tienes que ponerle los parámetros que el constructor de la clase Cuenta espera que le pases. Tu clase Cuenta espera un entero, un double y un OBJETO de tipo Cliente, así pues: public static void main (String[] args ) { Cuenta libreta1 = new Cuenta(1, 3000, ????);
El parámetro "????" debe ser un objeto Cliente. ¿Como creas un objeto Cliente? Pues lo puedes crear así: // Creas un objeto Cliente Cliente titular = new Cliente(22, "Pepe", "Calle Falsa", "963232323"); // int, String, String, String. // Creas un objeto Cuenta al que le pasas por parametro un entero, un double y el objeto Cliente ya creado. Cuenta libreta1 = new Cuenta(1, 3000, titular); // int, double, Cliente.
O puedes meterle el objeto Cliente directamente (queda mas guarro): Cuenta libreta1 = new Cuenta(1, 3000, new Cliente(22, "Pepe", "Calle Falsa", "963232323"));
PD1: Lo que te comenta el compañero rub'n, si usas una clase Abstracta deberás implementar, por lo menos, un método abstracto. Esa clase Abstracta no podrá ser instanciada ( = new Blablabla...) PD2: Lo que no entiendo es por qué la clase Cuenta tiene que ser abstracta, no me cuadra, porque para ello Cliente debe heredar de Cuenta, y no es lógico (un Cliente no es Cuenta ) Saludos.
|
|
« Última modificación: 19 Enero 2018, 22:31 pm por HardC0d3 »
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
PD2: Lo que no entiendo es por qué la clase Cuenta tiene que ser abstracta, no me cuadra, porque para ello Cliente debe heredar de Cuenta, y no es lógico (un Cliente no es Cuenta ) Saludos. Pero eso es de ejemplo homie, seguro el enunciado a penas esta completo, y seguro que en ese enunciado deberan mostrar cuales seran las clases hijas o concretas tanto para la clase Cuenta como para la clase Cliente para heredar sus atributos.
|
|
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
men100
Desconectado
Mensajes: 4
|
Gracias por las respuestas chicos, ya me queda más claro. Estoy empezando y hay cosas que aun no he dado, pero revisare este hilo cuando avance en la materia. Efectivamente, el enunciado esta imcompleto y por eso faltan las clases hijas jeje. La duda que tenia era lo del atributo tipo objeto. Intenté hacerlo así: Cuenta libreta1 = new Cuenta(1, 3000, new Cliente(22, "Pepe", "Calle Falsa", "963232323"));
pero daba error, seguramente no habia puesto lo de "new Cliente" antes de los parámetros. pero ahora casi todo claro!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
(solucionado) Que es el atributo "A"? (Atributo de archivo de almacenamiento.)
Windows
|
Eleкtro
|
2
|
25,818
|
31 Enero 2012, 01:00 am
por Eleкtro
|
|
|
No entiendo nada ! de arboles "AVL"
Programación C/C++
|
ivanel93
|
3
|
2,254
|
26 Mayo 2013, 17:57 pm
por ivanel93
|
|
|
Cambiar atributo "TYPE" de tag <object> en HTML con JS
Desarrollo Web
|
Wari
|
7
|
4,681
|
24 Octubre 2014, 16:28 pm
por MinusFour
|
|
|
Array atributo de una clase de tamaño igual a otro atributo
Programación C/C++
|
cNoob
|
3
|
3,240
|
1 Enero 2018, 21:02 pm
por cNoob
|
|
|
[Pregunta]: atributo "required" en javascript
Desarrollo Web
|
Leguim
|
1
|
2,084
|
29 Agosto 2019, 01:03 am
por @XSStringManolo
|
|