Toma de contacto. Clases.

Iniciado por kaotik90, 30 Octubre 2012, 17:52 PM

0 Miembros y 1 Visitante están viendo este tema.

kaotik90

Hola, soy nuevo aquí.

Estoy haciendo un trabajo para el curso que estoy estudiando y ha llegado un punto en que no se como continuar. Le he preguntado varias veces al profesor y cada vez me dice una cosa distinta como escurriendo el bulto, asi que acudo a la comunidad, que es sabia y curtida en programación.

He aqui los ejercicios:

1. Hacer en Java la definición de una classe llamada Vehiculo. Hace falta escoger correctamente el modificador de accesibilidad y visibilidad de todos los datos y operaciones.

Atributos:

- Marca y modelo (cadena de carácteres)
- Fecha de compra (fecha)
- Matrícula (cadena de carácteres)
- Consumo, en litros por quilómetre (real)
- nombreVehiculos (entero)

Operaciones:

- Firma del constructor de la clase:
Vehiculo ( fabricante:Cadena, mod:Cadena, cad_matr:Cadena, num_matr:entero, consumo:real, fechaCompra:Fecha)
- Para cada atributo nos hará falta un método para la obtención de su valor.
- Un método que permita calcular la autonomia del vehiculo, és decir, devuelve los kilometros que se pueden hacer con una cantidad de carburante.
- Un método que devuelve los dias que hace que se compró el vehiculo.
- Un método que nos devuelve el numero total de objetos de la clase Vehiculo creados.


2. Definir por herencia la clase Coche (un Vehiculo que lleva gente).

- Los nuevos atributos son:

- Número de plazas (entero)
- Extras de confort (cadena de carácteres)
- Numero total de coches creados

Los métodos seran:

- Constructor con la firma siguiente,
Coche ( fabricante:Cadena, mod:Cadena, año:entero, cad_matr:entero, num_matr:entero, consumo:real, plazas:entero, extras:Cadena)
- Por cada nuevo atributo nos haran falta los métodos accesores correspondientes
- Un método que permita añadir un extra, a los que ya tiene el coche
- Un método que nos dice el numero total de coches creados.



Pues bien, el caso es que no se que hacer con los atributos del ejercicio 2 en negrita, ya que no se como obtener un tipo de datos que no es el que le paso. No se si me explico. Me piden año:entero, cad_matr:entero, cuando en el ejercicio anterior era fechaCompra:Fecha , cad_matr:Cadena... No se muy bien que hacer.



Esta es la situación:

SuperClase Vehiculo:

public class Vehiculo {
    private String marca;
    private String modelo;
    private Date fecha;
    private String matricula;
    private double cons; // (L/km)
    private int nombreVehiculos;
   
    private static double autonomia;
    private static String diasDeCompra;
    private static int numeroDeVehiculos; // variable contadora de objeto vehiculo
   
   
    //Operaciones
    public Vehiculo(String fabricante, String mod, Date fechaCompra,
    String cad_matr, double consumo, int num_matr){
       
        marca = fabricante;
        modelo = mod;
        fecha = fechaCompra;
        matricula = cad_matr;
        cons = consumo;
        nombreVehiculos = num_matr;
       
        numeroDeVehiculos++; //incremento de la variable contadora de objeto vehiculo
    }



SubClase Coche:

public class Coche extends Vehiculo {

    private int numPlazas;
    private String extra_confort;
    private int numCoches;
    private static int numeroDeCoches;
    private static String extrasCoches;
    private static int anyo;
   
    public Coche(String fabricante, String mod, Date fechaCompra, String cad_matr, double consumo, int num_matr, int plazas, String extras) {
        super(fabricante, mod, fechaCompra, cad_matr, consumo, num_matr);
       
        numPlazas = plazas;
        extra_confort = extras;

        numeroDeCoches++;
    }




EL PROBLEMA LO TENGO QUE AL USAR super NO PUEDO TOCAR EL ATRIBUTO cad_matr PARA QUE PASE A integer... O al menos no se como.

ESPERO QUE CON EL CODIGO SEA COMPRENSIBLE Y ALGUIEN SEPA AYUDARME.

Gracias de antemano!

kasiko

prueba a que esos atributos sean protected, y no ¿prodrias desglosar fecha(dd/mm/aaaa(? asi creo que es mas facil
Nos vemos...


sapito169

#2
tu problema es o que el profesor es un imbécil (todo el tiempo)
o que solo fue un imbécil mientras hizo la pregunta (solo un momento).
o copiaste mal la pregunta
debido a que es difícil cometer tantos errores sutiles en tan poco tiempo me parece que es un imbécil todo el tiempo, o copiaste mal la pregunta
(no estoy molesto contigo)

bueno de todas manera te explico como se puede hacer siguiendo al pie de la letra el enunciado(tengo nausea)


Código (java) [Seleccionar]

import java.util.Date;

public class Vehiculo {
private String marca;
private String modelo;
private Date fecha;
private String matricula;
private double cons; // (L/km)
private int nombreVehiculos;

private static double autonomia;
private static String diasDeCompra;
private static int numeroDeVehiculos; // variable contadora de objeto
// vehiculo

// Operaciones
public Vehiculo(String fabricante, String mod, Date fechaCompra,
String cad_matr, double consumo, int num_matr) {

marca = fabricante;
modelo = mod;
fecha = fechaCompra;
matricula = cad_matr;
cons = consumo;
nombreVehiculos = num_matr;

numeroDeVehiculos++; // incremento de la variable contadora de objeto
// vehiculo
}
}


Código (java) [Seleccionar]

import java.util.Calendar;
import java.util.Date;

public class Coche extends Vehiculo {

private int numPlazas;
private String extra_confort;
private int numCoches;
private static int numeroDeCoches;
private static String extrasCoches;
private static int anyo;

public Coche(String fabricante, String mod, int año, int cad_matr,
double consumo, int num_matr, int plazas, String extras) {

super(fabricante, mod, createCalendar(año), "" + cad_matr, consumo,
num_matr);

numPlazas = plazas;
extra_confort = extras;

numeroDeCoches++;
}

private static Date createCalendar(int año) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, año);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, 1);
return calendar.getTime();
}
}

kaotik90

Cita de: sapito169 en  1 Noviembre 2012, 20:40 PM
tu problema es o que el profesor es un imbécil (todo el tiempo)
o que solo fue un imbécil mientras hizo la pregunta (solo un momento).
o copiaste mal la pregunta
debido a que es difícil cometer tantos errores sutiles en tan poco tiempo me parece que es un imbécil todo el tiempo, o copiaste mal la pregunta
(no estoy molesto contigo)

bueno de todas manera te explico como se puede hacer siguiendo al pie de la letra el enunciado(tengo nausea)


Código (java) [Seleccionar]

import java.util.Date;

public class Vehiculo {
private String marca;
private String modelo;
private Date fecha;
private String matricula;
private double cons; // (L/km)
private int nombreVehiculos;

private static double autonomia;
private static String diasDeCompra;
private static int numeroDeVehiculos; // variable contadora de objeto
// vehiculo

// Operaciones
public Vehiculo(String fabricante, String mod, Date fechaCompra,
String cad_matr, double consumo, int num_matr) {

marca = fabricante;
modelo = mod;
fecha = fechaCompra;
matricula = cad_matr;
cons = consumo;
nombreVehiculos = num_matr;

numeroDeVehiculos++; // incremento de la variable contadora de objeto
// vehiculo
}
}


Código (java) [Seleccionar]

import java.util.Calendar;
import java.util.Date;

public class Coche extends Vehiculo {

private int numPlazas;
private String extra_confort;
private int numCoches;
private static int numeroDeCoches;
private static String extrasCoches;
private static int anyo;

public Coche(String fabricante, String mod, int año, int cad_matr,
double consumo, int num_matr, int plazas, String extras) {

super(fabricante, mod, createCalendar(año), "" + cad_matr, consumo,
num_matr);

numPlazas = plazas;
extra_confort = extras;

numeroDeCoches++;
}

private static Date createCalendar(int año) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, año);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, 1);
return calendar.getTime();
}
}


Gracias por contestar. Creo que me has metido en la senda correcta y te lo agradezco de veras, pero ahora me surge un pequeño problema:

Tenía el siguiente objeto definido:

Coche c1 = new Coche("Seat", "Ibiza", new Date(), "7390JDT", 66.30, 250, 5, "");

Entonces, se me queja en el campo de la fecha, porque es de tipo Date, y el que hemos establecido en el constructor de la clase Coche era tipo Int. Alguna sugerencia? La idea seria que utilizara solo el año de la fecha y lo pasara a entero supongo.. pero que yo sepa no existe conversiones de tipo Fecha a otro tipo.

Lo siento, mi nivel teórico no da para mucho más, y el práctico aún menos.. Este sistema educativo es un desastre, pretende enseñar Java en tiempo récord.

sapito169

la forma "correcta"

Coche c1 = new Coche("Seat", "Ibiza",1988, "7390JDT", 66.30, 250, 5, "");

mira el constructor de coche
Código (java) [Seleccionar]
public Coche(String fabricante, String mod, int año, int cad_matr,
double consumo, int num_matr, int plazas, String extras)

el tercer parametro es un int para representar el año

yo lo hice de esa manera para cumplir con el enunciado pero no estoy de-acuerdo con eso, es mas no me gusta para nada






kaotik90

Vale, pues ya esta, asunto resuelto. Muchas gracias por todo crack!