Teoria_ClasesJAVA

  • Upload
    rayhino

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

  • 8/16/2019 Teoria_ClasesJAVA

    1/30

    1

    CAPÍTULO 5:POO

    EN JAVA 

    PROGRAMACIÓN

    ORIENTADA A OBJETOSCON JAVA

  • 8/16/2019 Teoria_ClasesJAVA

    2/30

  • 8/16/2019 Teoria_ClasesJAVA

    3/30

    3

    DISEÑO DE CLASES1. Descripción del problema. Nos describe el sistema que debemos modelar.

    Es imposible ofrecer una solución satisfactoria sin un total conocimiento del

     problema.2. Encontrar los  objetos principales. Buscar los elementos más importantes

    del modelo.  Recomendación: hacer una lista de todos los nombres queaparecen en la descripción del problema y elegir aquellos que nos parezcan

    más importantes.

    3. Determinar el comportamiento deseado  para cada uno de los objetos principales. Este paso producirá el conjunto de métodos necesarios en lasclases a las que esos objetos pertenecen. Si necesitamos varias clases, lastrataremos una a una.

    4. Determinar la interfaz. Estableceremos el prototipo de cada método: sus

    argumentos y tipo de retorno. Recomendación: escribir un código de ejemploque utilice el objeto y que muestre cómo deberían ocurrir las invocaciones de

    una forma natural.

    5. Definir los atributos e implementar los métodos. A menudo concluiremoscon una justificación de la solución propuesta.

    6. Determinar las relaciones con otras clases. 

  • 8/16/2019 Teoria_ClasesJAVA

    4/30

    4

    DISEÑO DE CLASES

    Identificación declases y objetos

    Identificación delas semánticas declases y objetos

    Identificación delas relaciones declases y objetos

    Especificación deinterfaces e

    implementación declases y objetos

  • 8/16/2019 Teoria_ClasesJAVA

    5/30

    5

    EJEMPLO POO PEAJE

    • Definición del problema:

     –  El organismo encargado de las autopistas de undeterminado país está instalando un sistema decobro de peajes en una de sus carreteras más

    importantes. –  Los camiones que llegan a una cabina de peaje

    deben pagar 5 € por eje y 2 € por cada tonelada de peso.

     –  Una pantalla en la cabina de peaje muestra lacantidad del total de recibos cobrados y la cantidadde camiones que han pagado desde la últimarecaudación.

  • 8/16/2019 Teoria_ClasesJAVA

    6/30

    6

    • Un escenario de ejemplo:

    Para ayudar a diseñar el sistema, imaginemos como funcionaría un sistema decobro de peaje de esta naturaleza:

    Un agente de peajes espera en la cabina con una pantalla y un lector decódigos de barras. Cuando llega un camión, el agente lee el código de barrasdel camión con sus datos.

    La información del camión y el importe del peaje se muestra en la pantalladel ordenador, por ejemplo:

    Camión – Ejes: 3 Peso total: 10000 – Peaje: 35€ 

    Al pulsar el botón junto a la pantalla, se muestra los totales para esa cabina de peaje:

    Totales desde la última recogida – Peaje: 79€ Camiones: 2

    Cuando se realiza la recaudación se muestra el siguiente mensaje y se ponentodas las cantidades a cero:

    **** Ejecutando recaudación ****

    Totales desde la última recogida – Peaje: 550€ Camiones: 5

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    7/30

    7

    • Encontrar los objetos principales:

    Podemos encontrar los objetos del problema buscando los nombressignificativos dentro de las frases que forman la definición del problema.

    En nuestro caso son camiones, cabina, eje, peso y recibo.

    De ellos, las cabinas y los camiones parecen ser los más importantes. Los ejes

    y el peso son propiedades de un camión y los recibos son un elemento de lascabinas.

    De esta forma tomamos los camiones y las cabinas como objetos principalesy diseñamos las clases relacionadas:

    class Camion {

    //definición de la clase}

    class CabinaPeaje {

    //definición de la clase

    }

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    8/30

    8

    • Clase Camion:

    1. Determinar el comportamiento deseado: 

    • El peaje depende del número de ejes y el peso del camión. Lascabinas necesitan estos datos de cada camión.

    •  Nuestra clase camión debería ofrecer métodos que nos dieranesta información.

    • También tendrá un constructor que nos permitirá crearcamiones.

    Métodos:• Camion (constructor)

    • getEjes

    • getPesoTotal

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    9/30

    9

    • Clase Camion:

    2. Definición de la interfaz: • La interfaz de la clase camión la componen las signaturas de su conjunto de métodos.

    Determina cómo otras clases se comunican con un objeto Camion.• Una buena forma de definir una interfaz es realizar un trozo de código que use un

    objeto de la clase que se está diseñando. Por ejemplo:Camion camion1 = new Camion(3, 10000)

    • Representaría un camión con 3 ejes y 10000 Kg. de peso.• Preguntar cuantos ejes y peso tiene un camión es fácil:

    camion1.getEjes() camion1.getPesoTotal()

    Por lo tanto podremos definir el interfaz de la clase como sigue:class Camion{

    //Métodos

    public Camion(int ejes, int pesoTotal) {...}

    public int getEjes() {...}

    public int getPesoTotal() {...}

    //Atributos...

    }

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    10/30

    10

    • Clase Camion:

    3. Definir los atributos: • Los valores de los ejes y el peso deben ir asociado a cada

    camión por lo tanto:class Camion

    {

    //Métodos

    public Camion(int ejes, int pesoTotal) {...}

    public int getEjes() {...}

    public int getPesoTotal() {...}

    //Atributos

    private int ejes;

    private int pesoTotal;

    }

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    11/30

    11

    • Clase Camion:

    4. Implementar los métodos:• Los métodos getEjes y getPesoTotal deben devolver los valores

    de los atributos y el constructor asignárselos, por lo tanto:class Camion

    {

    //Atributos (privados)private int ejes;

    private int pesoTotal;

    //Métodos (públicos)

    public Camion(int ejes, int pesoTotal) {

    this.ejes=ejes;

    this.pesoTotal=pesoTotal;

    }

    public int getEjes() {

    return ejes;

    }

    public int getPesoTotal(){

    return pesoTotal;

    }}

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    12/30

    12

    • Clase CabinaPeaje:

    1. Determinar el comportamiento deseado: 

    • El principal comportamiento deseado para la clase CabinaPeajees el cálculo del importe del peaje.

    • También debe contar el total de recibos y de camiones que ha procesado. Y poner estos datos a cero cuando se haga larecaudación. Métodos:

     –  CabinaPeaje (constructor) –  calculaPeaje

     –  muestraDatos

     –  recaudar

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    13/30

    13

    • Clase CabinaPeaje:

    2. Definición de la interfaz:

    • Para crear una nueva cabina deberemos utilizar el siguiente trozo de código:CabinaPeaje cab = new CabinaPeaje()

    • Cada vez que se calcule un peaje:cab.calculaPeaje(camion1)

    • Para mostrar los datos del total recaudado hasta el momento:cab.muestraDatos()

    • Para realizar la recaudación:cab.recaudar()

    •  Ninguno de estos métodos retorna ningún valor, simplemente hacen cosas. Por lo tanto lainterfaz de la clase sería la siguiente:

    class CabinaPeaje

    { //Métodos

    public CabinaPeaje() {...}

    public void calculaPeaje(Camion camion) {...}

    public void recaudar() {...}

    public void muestraDatos() {...}

    //Atributos

    ...

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    14/30

    14

    • Clase CabinaPeaje:

    3. Definir los atributos: 

    • La cabina debe mantener el importe total de todos los recibos de peajecobrados y el número de camiones desde la última recaudación.class CabinaPeaje

    {//Métodos

    public CabinaPeaje() {...}

    public void calculaPeaje(Camion camion) {...}

    public void recaudar() {...}

    public void muestraDatos() {...}

    //Atributos

    private int total;

    private int camiones;

    }

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    15/30

    15

    • Clase CabinaPeaje:

    class CabinaPeaje {//Atributos

    private int total;

    private int camiones;

    //Métodos

    public CabinaPeaje() {

    total=0;

    camiones=0;

    }

    public void muestraDatos() {

    System.out.println("Totales desde la última recogida - Peaje: "+total

    +"€ Camiones: "+camiones);

    }

    public void recaudar() {

    System.out.println("**** Ejecutando recaudación ****");

    muestraDatos();

    total=0;

    camiones=0;

    }

    public void calculaPeaje(Camion camion) {int ejes=camion.getEjes();

    int pesoTotal=camion.getPesoTotal();

    int peaje=5*ejes + 2*(pesoTotal/1000);

    System.out.println("Camión - Ejes: "+ejes+" Peso total: "+pesoTotal

    +" - Peaje: "+peaje+"€" );

    camiones++;

    total += peaje;

    }

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    16/30

    16

    • La prueba de las clases:

    public class PruebaCabinaPeaje

    {

    public static void main(String args[])

    {

    //Crea la cabina

    CabinaPeaje cabina = new CabinaPeaje();//Crea camiones

    Camion camion1 = new Camion(3, 10000);

    Camion camion2 = new Camion(4, 12500);

    //Cobra peajes

    cabina.calculaPeaje(camion1);

    cabina.muestraDatos();

    cabina.calculaPeaje(camion2);

    //Recauda

    cabina.recaudar();

    cabina.muestraDatos();

    }

    }

    >java PruebaCabinaPeajeCamión - Ejes: 3 Peso total: 10000 - Peaje: 35 € Totales desde la última recogida - Peaje: 35 € Camiones: 1Camión - Ejes: 4 Peso total: 12500 - Peaje: 44 € **** Ejecutando recaudación ****Totales desde la última recogida - Peaje: 79 € Camiones: 2Totales desde la última recogida - Peaje: 0 € Camiones: 0

    EJEMPLO POO PEAJE

  • 8/16/2019 Teoria_ClasesJAVA

    17/30

    17

    CLASES CON HERENCIA

    • Definición del problema:

     –  El organismo encargado de las autopistas de un determinado país estáinstalando un sistema de cobro de peajes en una de sus carreteras másimportantes.

     –  Se debe cobrar peaje a dos tipos distintos de vehículos, los camiones y losautobuses de la siguiente forma:•  Los camiones que llegan a una cabina de peaje deben pagar 5€  por eje y 2€   por

    cada tonelada de peso y los autobuses deben pagar 1€  por pasajero y 5€  por cadatonelada de peso.

     –  Una pantalla en la cabina de peaje muestra la cantidad del total de reciboscobrados y la cantidad de vehículos que han pagado desde la últimarecaudación.

     –  Cada vez que se realice un peaje debe mostrar su importe así como la matrículadel vehículo y su peso para cualquier tipo de vehículo. Si se trata de un camióndebe mostrar además de esa información el número de ejes y si se trata de unautobús el número de pasajeros.

     –  También se quiere saber cuantos vehículos han pagado peaje en el total decabinas.

  • 8/16/2019 Teoria_ClasesJAVA

    18/30

    18

    CLASES CON HERENCIA

    • Encontrar los objetos principales:

    •  Nombres significativos: vehículos, camiones,autobuses, cabina, matrícula, peso, eje, pasajeros yrecibo.

    • De ellos, las cabinas, los vehículos, los camiones y losautobuses parecen ser los más importantes. Lo demásson propiedades de los objetos que definamos.

    • De las clases principales nos damos cuenta que hay unarelación muy estrecha entre vehículos, camiones yautobuses, ya que comparten propiedades y métodoscomunes → mecanismo de la herencia.

  • 8/16/2019 Teoria_ClasesJAVA

    19/30

    19

    CLASES CON HERENCIA

    • Encontrar los objetos principales:

    • De esta forma tomamos los vehículos, los camiones, losautobuses y las cabinas como objetos principales y diseñamoslas clases relacionadas:

  • 8/16/2019 Teoria_ClasesJAVA

    20/30

    20

    CLASES CON HERENCIApublic class VehiculoH

    {

     //Atr ibutosprivate String matri cula;

    private int pesoTotal;

     //Cantidad de vehículos que han pasado por elpeaje

    private static int cantidad=0;

     //Métodos

    public VehiculoH(Stri ng matricula,int pesoTotal) {

    this.matricula=matricula;

    this.pesoTotal=pesoTotal;

    incrementaCantidad();

     }

    private static void incrementaCanti dad() {

    cantidad++;

     }

    publi c String getMatricula() {

    return this.matricula;

     }

    public in t getPesoTotal() {

    retur n this.pesoTotal;

     }

    public static int getCantidad() {return VehiculoH .cantidad;

     }

    public static void borraCantidad() {

    VehiculoH .cantidad = 0;

     }

    public Stri ng toStr ing() {return " Vehícul o con matrícula: “  

    +matri cula+" Peso total: " +pesoTotal;

     }

     }  

  • 8/16/2019 Teoria_ClasesJAVA

    21/30

    21

    CLASES CON HERENCIAclass CamionH extends VehiculoH

    {

     //Atr ibutos

    private int ejes;

     //Métodos

    public CamionH(String matri cula, in t pesoTotal, int ejes) {

    super(matricula, pesoTotal);

    this.ejes=ejes; }

    publi c int getEjes() {

    return ejes;

     }

    public Str ing toStr ing() {

    Str ing s = super.toStr ing();

    return s+" # Camión - Ejes: " +ejes;

     } }

  • 8/16/2019 Teoria_ClasesJAVA

    22/30

    22

    CLASES CON HERENCIAclass AutobusH extends VehiculoH

    {

     //Atr ibutos

    private int pasajeros;

     //Métodos

    publi c AutobusH(Str ing matri cula, int pesoTotal, int pasajeros) {

    super(matr icula, pesoTotal);

    this.pasajeros=pasajeros; }

    publ ic int getPasajeros() {

    return pasajeros;

     }

    public Str ing toStr ing() {

    Str ing s = super.toStr ing();

    return s+" # Autobús - Pasajeros: " +pasajeros;

     } }  

  • 8/16/2019 Teoria_ClasesJAVA

    23/30

    23

    CLASES CON HERENCIAclass CabinaPeajeH

    {

     //Atr ibutos //total recaudado

    private in t total;

     //cantidad de vehícul os que han pasado por esa cabina

    private int vehiculos;

     //Métodos

    public CabinaPeajeH () {

    total=0;vehiculos=0;

     }

    public void muestraDatos() {

    System.out.pri nt ln (" Totales desde la última recogida - Peaje: " +total+"  €  Vehículos:" +vehiculos);

     }

    public void recaudar() {

    System.out.pri ntln(" * * * * Ejecutando recaudación * * * * " );

    muestraDatos();

    total=0;

    vehiculos=0;

     }  

  • 8/16/2019 Teoria_ClasesJAVA

    24/30

    24

    CLASES CON HERENCIA //sobrecarga de métodos

    publi c void calculaPeaje(CamionH camion)

    {int ejes=camion.getEj es();

    int pesoTotal=camion.getPesoTotal();

    int peaje=5* ejes + 2* (pesoTotal/1000);

    System.out.println(camion.toStri ng()+" - Peaje: " +peaje+"  € " );

    vehiculos++;

    total += peaje;

     }

    publi c void calculaPeaje(AutobusH bus){

    int pasajeros=bus.getPasajeros();

    int pesoTotal =bus.getPesoTotal ();

    int peaje=1* pasajeros + 5* (pesoTotal/1000);

    System.out.println(bus.toStr ing()+" - Peaje: " +peaje+"  € " );vehiculos++;

    total += peaje;

     }

     }  

  • 8/16/2019 Teoria_ClasesJAVA

    25/30

    25

    CLASES CON HERENCIA

    publi c class PruebaCabinaPeajeH

    {

    public static void main(Stri ng args[] ){

     //Cr ea las cabinas

    CabinaPeajeH cabina1 = new CabinaPeajeH() ;

    CabinaPeajeH cabina2 = new CabinaPeajeH() ;

     //Crea camiones

    CamionH camion1 = new CamionH(" 1234-BCD" ,10000,3);

    CamionH camion2 = new CamionH(" 2345-CDF" ,15500,4);

     //Cr ea autobuses

    AutobusH bus1 = new AutobusH(" 5678-CFG" ,7000,35);AutobusH bus2 = new AutobusH(" 6789-DTD" ,8000,50);

     //Cobr a peajes

    cabina1.calculaPeaje(camion1);

    cabina1.calculaPeaje(bus1);

    cabina1.muestraDatos();

    cabina2.calculaPeaje(camion2);

    cabina2.calculaPeaje(bus2);

    cabina2.muestraDatos();

     //Recaudacabina1.recaudar();

    cabina1.muestraDatos();

    cabina2.recaudar();

    cabina2.muestraDatos();

    System.out.pri nt ln(" Total vehículos de todas las cabinas: “  

    +VehiculoH.getCantidad());

    VehiculoH.borraCantidad();

     }

     }  

    >java PruebaCabinaPeajeHVehículo con matrícula: 1234-BCD Peso total: 10000 # Camión -Ejes: 3 - Peaje: 35 € Vehículo con matrícula: 5678-CFG Peso total: 7000 # Autobús -Pasajeros: 35 - Peaje: 70 € Totales desde la última recogida - Peaje: 105 € Vehículos: 2Vehículo con matrícula: 2345-CDF Peso total: 15500 # Camión -Ejes: 4 - Peaje: 50 € 

    Vehículo con matrícula: 6789-DTD Peso total: 8000 # Autobús -Pasajeros: 50 - Peaje: 90 € Totales desde la última recogida - Peaje: 140 € Vehículos: 2**** Ejecutando recaudación ****Totales desde la última recogida - Peaje: 105 € Vehículos: 2Totales desde la última recogida - Peaje: 0 € Vehículos: 0**** Ejecutando recaudación ****Totales desde la última recogida - Peaje: 140 € Vehículos: 2Totales desde la última recogida - Peaje: 0 € Vehículos: 0Total vehículos de todas las cabinas: 4

    CLASES ABSTRACTAS +

  • 8/16/2019 Teoria_ClasesJAVA

    26/30

    26

    CLASES ABSTRACTAS +HERENCIA + POLIMORFISMO

    • Clases del problema: – 

    Para ver la utilidad de las clases abstractas y el polimorfismo vamos amodificar la jerarquía de clases desarrollada en el apartado anterior de formaque definamos la clase vehículo como una clase abstracta que contenga unmétodo peaje con la intención de calcular el peaje de los distintos tipos devehículos que pasen por las cabinas de peaje.

    CLASES ABSTRACTAS +

  • 8/16/2019 Teoria_ClasesJAVA

    27/30

    27

    CLASES ABSTRACTAS +HERENCIA + POLIMORFISMO

     public abstract class VehiculoA{

    //Atributos

     private String matricula; private int pesoTotal;//Cantidad de vehículos que han pasado por el peaje

     private static int cantidad=0;//Métodos

     public VehiculoA(String matricula, int pesoTotal) {this.matricula=matricula;this.pesoTotal=pesoTotal;incrementaCantidad();

    }

     private static void incrementaCantidad() {cantidad++;}

     public String getMatricula() {return this.matricula;

    } public int getPesoTotal() {

    return this.pesoTotal;}

     public static int getCantidad() {return VehiculoA.cantidad;

    } public static void borraCantidad() {

    VehiculoA.cantidad = 0;}

     public String toString() {return "Vehículo con matrícula: "+matricula

    +" Peso total: “ + pesoTotal;}public abstract int peaje(); 

    }

    class CamionA extends VehiculoA { private int ejes;

     public CamionA(String matricula, int pesoTotal, int ejes) {super(matricula, pesoTotal);this.ejes=ejes;

    } public int getEjes() { return ejes; } public String toString() {

    String s = super.toString();return s+" # Camión - Ejes: "+ejes;

    }public int peaje() {

    return 5*ejes + 2*(super.getPesoTotal()/1000);} }

    class AutobusA extends VehiculoA { private int pasajeros; public AutobusA(String matricula, int pesoTotal, int pasajeros) {

    super(matricula, pesoTotal);this.pasajeros=pasajeros;

    } public int getPasajeros() { return pasajeros; }

     public String toString() {String s = super.toString();return s+" # Autobús - Pasajeros: "+pasajeros;

    }public int peaje() {

    return 1*pasajeros + 5*(super.getPesoTotal()/1000);} 

    }

    CLASES ABSTRACTAS +

  • 8/16/2019 Teoria_ClasesJAVA

    28/30

    28

    CLASES ABSTRACTAS +HERENCIA + POLIMORFISMO

    class CabinaPeajeA{

    //Atributos

    //total recaudado private int total;//cantidad de vehículos que han pasado por esa cabina

     private int vehiculos;//Métodos

     public CabinaPeajeA() {total=0;vehiculos=0;

    } public void muestraDatos() {

    System.out.println("Totales desde la última recogida - Peaje: "+total+" € Vehículos: "+vehiculos); }

     public void recaudar() {System.out.println("**** Ejecutando recaudación ****");muestraDatos();total=0;vehiculos=0;

    }public void calculaPeaje(VehiculoA va) {

    int peaje = va.peaje();System.out.println(va.toString()+" - Peaje: "+peaje+" €" );vehiculos++;total += peaje;

    } }

    CLASES ABSTRACTAS +

  • 8/16/2019 Teoria_ClasesJAVA

    29/30

    29

    CLASES ABSTRACTAS +HERENCIA + POLIMORFISMO

    La prueba de las clases:

     public class PruebaCabinaPeajeA

    {  public static void main(String args[]){//Crea las cabinasCabinaPeajeA cabina1 = new CabinaPeajeA();CabinaPeajeA cabina2 = new CabinaPeajeA();//Crea distintos vehículosVehiculoA v1 = new CamionA("1234-BCD",10000,3);VehiculoA v2 = new CamionA("2345-CDF",15500,4);

    VehiculoA v3 = new AutobusA("5678-CFG",7000,35);VehiculoA v4 = new AutobusA("6789-DTD",8000,50);

    //Cobra peajescabina1.calculaPeaje(v1);cabina1.calculaPeaje(v3);cabina1.muestraDatos();cabina2.calculaPeaje(v2);cabina2.calculaPeaje(v4);cabina2.muestraDatos();//Recaudacabina1.recaudar();cabina1.muestraDatos();cabina2.recaudar();cabina2.muestraDatos();System.out.println("Total vehículos de todas las cabinas: "+VehiculoA.getCantidad());VehiculoA.borraCantidad();

    }}

    >java.exe PruebaCabinaPeajeAVehículo con matrícula: 1234-BCD Peso total: 10000 # Camión - Ejes: 3 -Peaje: 35 € Vehículo con matrícula: 5678-CFG Peso total: 7000 # Autobús - Pasajeros:35 - Peaje: 70 € Totales desde la última recogida - Peaje: 105 € Vehículos: 2Vehículo con matrícula: 2345-CDF Peso total: 15500 # Camión - Ejes: 4 -Peaje: 50 € Vehículo con matrícula: 6789-DTD Peso total: 8000 # Autobús - Pasajeros:

    50 - Peaje: 90 €

     Totales desde la última recogida - Peaje: 140 € Vehículos: 2**** Ejecutando recaudación ****Totales desde la última recogida - Peaje: 105 € Vehículos: 2Totales desde la última recogida - Peaje: 0 € Vehículos: 0**** Ejecutando recaudación ****Totales desde la última recogida - Peaje: 140 € Vehículos: 2Totales desde la última recogida - Peaje: 0 € Vehículos: 0Total vehículos de todas las cabinas: 4

    CLASES ABSTRACTAS +

  • 8/16/2019 Teoria_ClasesJAVA

    30/30

    30

    CLASES ABSTRACTAS +HERENCIA + POLIMORFISMO

    • Tipos de objetos almacenados en estr ucturas de datos dinámicas  : –  Para averiguar con que clase se instanciaron los objetos de una estructura de datos

    dinámica utilizamos los siguientes métodos: Object obj;

    Str ing ti po = obj.getClass().getName();

    import java.util.*;

     public class TipoVehiculo

    {

     public static void main(String args[]){

    //Crea una cabina

    CabinaPeajeA cabina = new CabinaPeajeA();

    //Crea distintos vehículos

    VehiculoA v1 = new CamionA("1234-BCD",10000,3);

    VehiculoA v2 = new CamionA("2345-CDF",15500,4);

    VehiculoA v3 = new AutobusA("5678-CFG",7000,35);

    VehiculoA v4 = new AutobusA("6789-DTD",8000,50);

    //Introducimos los vehículos en una hashtable

    Hashtable vehiculos= new Hashtable();

    vehiculos.put(v1.getMatricula(),v1);

    vehiculos.put(v2.getMatricula(),v2);

    vehiculos.put(v3.getMatricula(),v3);vehiculos put(v4 getMatricula() v4);

    //Calculamos el peaje de todos los vehículos de la hashtable

    for (Enumeration e = vehiculos.elements(); e.hasMoreElements();)

    {

    VehiculoA vaux = (VehiculoA) e.nextElement();

    cabina.calculaPeaje(vaux);

    //Sacamos el tipo para poder aplicarle sus métodos

    String tipo = vaux.getClass().getName();

    System.out.println("Tipo: "+tipo);

    if (tipo.equals("CamionA"))

    {

    CamionA camion = (CamionA) vaux;

    System.out.println("Ejes: "+camion.getEjes());

    } else

    {

    AutobusA bus = (AutobusA) vaux;

    System.out.println("Pasajeros: "+bus.getPasajeros());

    }

    }

    }

    }