RSS

Deberes – Interfaces

18 Abr

Vamos a realizar los siguientes ejercicios:

  • Ejercicio 1: Crear una interface Heroe que contenga los métodos luchar, correr, salvar y disparar. Tendrá también un atributo, saludInicial. Crear una clase Batman que la concrete.
  • Ejercicio 2: Crear las siguientes interfaces hijas de Heroe:
    • HeroeVolador: con los métodos volar y aterrizar.
    • HeroeLlamas: con los métodos encenderse, apagarse, lanzarFuego.
    • HeroeIntangible: con los métodos volverseTangible, volverseIntangible.

Y las siguientes clases:

  • Spiderman, que implementa la interfaz Heroe.
  • Superman y Ironman,  que implementa la interfaz Heroe y HeroeVolador.
  • AntorchaHumana, que implementa la interfaz Heroe, HeroeVolador y HeroeLlamas.
  • GataSombra, que implementa la interfaz Heroe y HeroeIntangible.
  • LaVision, que implementa la interfaz Heroe, HeroeVolador y HeroeIntangible.

Para ver los ejercicios resueltos click en Leer más…

Ejercicio 1:

Creamos la interface Heroe.

package paqueteH;

public interface Heroe {
public static final int saludInicial = 100;

public abstract void luchar();
public abstract void correr();
public abstract void salvar();
public abstract void disparar();

}

Creamos la clase Batman, que dará código a los métodos de la interfaz Heroe.
Le hemos añadido algunos atributos propios, como el nombre, la posición, el armaActual, y la salud.
El atributo posición será un objeto de la clase Posicion, con dos atributos, x e y.
El armaActual será un enumerado.

package paqueteH;

public class Batman implements Heroe {

enum Arma {BATARANG, BATGYRO, MINIBOMBAS};
private String nombre;
private Posicion posInicial;
private Arma armaActual;
private int salud;

public Batman ()
{
nombre = "Bruce Wayne";
posInicial = new Posicion();
armaActual = Arma.BATARANG;
salud = saludInicial;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public Posicion getPosInicial() {
return posInicial;
}

public void setPosInicial(Posicion posInicial) {
this.posInicial = posInicial;
}

public Arma getArmaActual() {
return armaActual;
}

public void setArmaActual(Arma armaActual) {
this.armaActual = armaActual;
}

public int getSalud() {
return salud;
}

public void setSalud(int salud) {
this.salud = salud;
}

@Override
public void luchar() {
System.out.println("PAW!!");
salud = salud - 1;
if (salud < 10) {
correr();
}
}

@Override
public void correr() {
System.out.println("Corro!!");
posInicial.setX(posInicial.getX() + 50);
salud = salud - 1;
if (salud <= 0)
{
System.out.println ("Mueroooo!!");
}

}

@Override
public void salvar() {
System.out.println("Salvando a Rachel Dawes");

}

@Override
public void disparar() {
System.out.println("Lanzando: "  + getArmaActual());

}

public String toString(){
return ("Batman: \n Nombre: " + getNombre()
+ " Posicion: " + getPosInicial()
+ " Arma: " + getArmaActual()
+ " Salud: " + getSalud() + "\n");
}
}

Añado el código de la clase Posicion:

package paqueteH;

public class Posicion {

private int x;
private int y;

public Posicion ()
{
x = 0;
y = 0;
}

public Posicion (int x, int y)
{
this.x = x;
this.y = y;
}

public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}

public String toString()
{
return (" (" + getX() + "," + getY()+ ")");
}

}

Creamos una clase PrincipalBatman para probar su funcionamiento:

 package paqueteH;
import paqueteH.Batman.Arma;

public class PrincipalBatman {

public static void main(String[] args) {

Batman b = new Batman();
System.out.println(b.toString());
b.luchar();
b.luchar();
b.correr();
b.disparar();
b.setArmaActual(Arma.MINIBOMBAS);
b.disparar();
b.salvar();

System.out.println("\n" + b.toString());
}

}
 

El resultado de la ejecución es:

Ejercicio 2:

Creamos las interfaces hijas: HeroeVolador, HeroeLlamas, HeroeIntangible

package paqueteH;

public interface HeroeVolador extends Heroe {

public abstract void volar();
public abstract void aterrizar();

}
package paqueteH;

public interface HeroeIntangible extends Heroe {

public void volverseIntangible();
public void volverseTangible();

}
package paqueteH;

public interface HeroeLlamas extends Heroe {

public abstract void encenderse();
public abstract void apagarse();
public abstract void lanzarFuego();
}

Creamos la clase Spiderman, que implementa la interface Heroe.

package paqueteH;

public class Spiderman implements Heroe {

enum Habilidad {ESCALAR, SUPERFUERZA, LANZARTELARAÑAS};
private String nombre;
private Posicion posInicial;
private Habilidad habilidadActual;
private int salud;

public Spiderman()
{
nombre = "Peter Parker";
posInicial = new Posicion();
habilidadActual = Habilidad.SUPERFUERZA;
salud = saludInicial;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public Posicion getPosInicial() {
return posInicial;
}

public void setPosInicial(Posicion posInicial) {
this.posInicial = posInicial;
}

public Habilidad getHabilidadActual() {
return habilidadActual;
}

public void setHabilidadActual(Habilidad habilidadActual) {
this.habilidadActual = habilidadActual;
}

public int getSalud() {
return salud;
}

public void setSalud(int salud) {
this.salud = salud;
}

@Override
public void luchar() {
System.out.println("SMASH!!");
salud = salud - 1;
if (salud < 10) {
disparar();
}
}

@Override
public void correr() {
System.out.println("Corro!!");
posInicial.setX(posInicial.getX() + 150);
salud = salud - 1;
if (salud <= 0)
{
System.out.println("Mueroooo !");
}
}

@Override
public void salvar() {
System.out.println("Salvando a Mary Jane Watson");
}

@Override
public void disparar() {
this.setHabilidadActual(Habilidad.LANZARTELARAÑAS);
System.out.println("Disparando Telaraña!!!");

}

public String toString(){
return ("Spiderman: \n Nombre: " + getNombre()
+ " Posicion: " + getPosInicial()
+ " Habilidad: " + getHabilidadActual()
+ " Salud: " + getSalud() + "\n");
}

}

Creamos las clases Superman, IronMan que implementan las interfaces Heroe y HeroeVolador.

package paqueteH;

public class Superman implements Heroe, HeroeVolador {

enum Habilidad {SUPERFUERZA, SUPERVELOCIDAD, INVULNERABILIDAD, VISIONX, VISIONCALORIFICA};
private String nombre;
private Posicion posInicial;
private Habilidad habilidadActual;
private int salud;

public Superman()
{
nombre = "Clark Kent";
posInicial = new Posicion();
habilidadActual = Habilidad.SUPERFUERZA;
salud = saludInicial;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public Posicion getPosInicial() {
return posInicial;
}

public void setPosInicial(Posicion posInicial) {
this.posInicial = posInicial;
}

public Habilidad getHabilidadActual() {
return habilidadActual;
}

public void setHabilidadActual(Habilidad habilidadActual) {
this.habilidadActual = habilidadActual;
}

public int getSalud() {
return salud;
}

public void setSalud(int salud) {
this.salud = salud;
}

@Override
public void volar() {
System.out.println("Capa y a volar!!");
posInicial.setX(posInicial.getX() + 5000);
posInicial.setY(posInicial.getY() + 10000);
}

@Override
public void aterrizar() {
System.out.println("Aterrizando");
}

@Override
public void luchar() {
System.out.println("SPLASHHHHH");
}

@Override
public void correr() {
System.out.println("Corro!");
posInicial.setX(posInicial.getX() + 2000);
}

@Override
public void salvar() {
System.out.println("Salvando a Lois Lane");
}

@Override
public void disparar() {
setHabilidadActual(Habilidad.VISIONCALORIFICA);
System.out.println("Usando " + getHabilidadActual());
}

public String toString(){
return ("Superman: \n Nombre: " + getNombre()
+ " Posicion: " + getPosInicial()
+ " Habilidad: " + getHabilidadActual()
+ " Salud: " + getSalud() + "\n");
}

}
package paqueteH;

public class IronMan implements Heroe, HeroeVolador {

enum Arma {PUÑOS, MISILES};
private String nombre;
private Posicion posInicial;
private Arma armaActual;
private int salud;

public IronMan()
{
nombre = "Tony Stark";
posInicial = new Posicion();
armaActual = Arma.PUÑOS;
salud = saludInicial;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public Posicion getPosInicial() {
return posInicial;
}

public void setPosInicial(Posicion posInicial) {
this.posInicial = posInicial;
}

public Arma getArmaActual() {
return armaActual;
}

public void setArmaActual(Arma armaActual) {
this.armaActual = armaActual;
}

public int getSalud() {
return salud;
}

public void setSalud(int salud) {
this.salud = salud;
}

@Override
public void luchar() {
// TODO Auto-generated method stub
System.out.println("BOOOOM");
salud = salud - 1;
if (salud < 10)
{
volar();
}
}

@Override
public void correr() {
System.out.println("Corro!!");
posInicial.setX(posInicial.getX() + 20);
salud = salud - 1;
if (salud <= 0)
{
System.out.println("Mueroooo!");
}

}

@Override
public void salvar() {
System.out.println("Salvando a Virginia Potts");
}

@Override
public void disparar() {
// TODO Auto-generated method stub
System.out.println("Lanzando: "  + getArmaActual());
}

@Override
public void volar() {
System.out.println("Armadura y Volandoo!!");
posInicial.setX(posInicial.getX() + 500);
posInicial.setY(posInicial.getY() + 1000);
}

@Override
public void aterrizar() {
// TODO Auto-generated method stub
System.out.println("Aterrizando");
posInicial.setY(0);
}

public String toString(){
return ("Ironman: \n Nombre: " + getNombre()
+ " Posicion: " + getPosInicial()
+ " Arma: " + getArmaActual()
+ " Salud: " + getSalud() + "\n");
}

}

Creamos la clase GataSombra que implementa la interfaz Heroe y HeroeIntangible.

package paqueteH;

public class GataSombra implements Heroe, HeroeIntangible {

private String nombre;
private Posicion posInicial;
private int salud;

public GataSombra()
{
nombre="Kitty Pride";
posInicial = new Posicion();
salud = saludInicial;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Posicion getPosInicial() {
return posInicial;
}
public void setPosInicial(Posicion posInicial) {
this.posInicial = posInicial;
}
public int getSalud() {
return salud;
}
public void setSalud(int salud) {
this.salud = salud;
}

@Override
public void volverseIntangible() {
System.out.println("Volviendome intangible");

}

@Override
public void volverseTangible() {
System.out.println("Volviendome tangible");

}

@Override
public void luchar() {
System.out.println("Luchando");
}

@Override
public void correr() {
System.out.println("Corriendo");
}

@Override
public void salvar() {
System.out.println("Salvando a Jane Doe");
}

@Override
public void disparar() {
System.out.println("Disparando");
}

public String toString(){
return ("GataSombra: \n Nombre: " + getNombre()
+ " Posicion: " + getPosInicial()
+ " Salud: " + getSalud() + "\n");
}
}

Creamos la clase AntorchaHumana que implementa la interfaz Heroe, HeroeVolador y HeroeLlamas.

package paqueteH;

public class AntorchaHumana implements Heroe, HeroeVolador, HeroeLlamas {

enum Habilidad {DERRETIR, CEGAR, LANZARAYOS, LANZAPLASMA};
private String nombre;
private Posicion posInicial;
private Habilidad habilidadActual;
private int salud;

public AntorchaHumana ()
{
nombre = "Johny Storm";
posInicial = new Posicion();
habilidadActual = Habilidad.LANZAPLASMA;
salud = saludInicial;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Posicion getPosInicial() {
return posInicial;
}
public void setPosInicial(Posicion posInicial) {
this.posInicial = posInicial;
}
public Habilidad getHabilidadActual() {
return habilidadActual;
}
public void setHabilidadActual(Habilidad habilidadActual) {
this.habilidadActual = habilidadActual;
}
public int getSalud() {
return salud;
}
public void setSalud(int salud) {
this.salud = salud;
}
@Override
public void encenderse() {
System.out.println("Estoy en llamas!!");
}

@Override
public void apagarse() {
System.out.println("Apagandome");

}

@Override
public void lanzarFuego() {
System.out.println("Lanzando fuego!!");

}

@Override
public void volar() {
System.out.println("Volando!!");
setPosInicial(new Posicion(5000,10000));
}

@Override
public void aterrizar() {
System.out.println("Aterrizando!!");
setPosInicial(new Posicion(5000,0));
}

@Override
public void luchar() {
System.out.println("PAAAW!!");
salud = salud - 1;
}

@Override
public void correr() {
System.out.println("Corro!");
setPosInicial(new Posicion(10,0));
}

@Override
public void salvar() {
System.out.println("Salvando a Jane Doe");
}

@Override
public void disparar() {
System.out.println("Disparando con: " + habilidadActual);
}

public String toString()
{
return ("AntorchaHumana: \n Nombre: " + getNombre()
+ " Posicion: " + getPosInicial()
+ " Habilidad: " + getHabilidadActual()
+ " Salud: " + getSalud() + "\n");
}

}

Creamos la clase LaVision que implementa la interfaz Heroe, HeroeVolador y HeroeIntangible.

package paqueteH;

public class LaVision implements Heroe, HeroeIntangible, HeroeVolador {

enum Habilidad {LANZARAYOS, SUPERDENSO, OBTENERENERGIA};
private String nombre;
private Posicion posInicial;
private Habilidad habilidadActual;
private int salud;

public LaVision()
{
nombre = "LaVision";
posInicial = new Posicion();
habilidadActual = Habilidad.LANZARAYOS;
salud = saludInicial;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public Posicion getPosInicial() {
return posInicial;
}

public void setPosInicial(Posicion posInicial) {
this.posInicial = posInicial;
}

public Habilidad getHabilidadActual() {
return habilidadActual;
}

public void setHabilidadActual(Habilidad habilidadActual) {
this.habilidadActual = habilidadActual;
}

public int getSalud() {
return salud;
}

public void setSalud(int salud) {
this.salud = salud;
}

@Override
public void volar() {
System.out.println("Volandoo!!");
posInicial.setY(posInicial.getY()+ 1000);
}

@Override
public void aterrizar() {
System.out.println("Aterrizando!!");
posInicial.setY(0);
}

@Override
public void volverseIntangible() {
System.out.println("Volviendo intangible");

}

@Override
public void volverseTangible() {
System.out.println("Volviendome tangible");

}

@Override
public void luchar() {
System.out.println("SMASSSSSSH!!");

}

@Override
public void correr() {
System.out.println("Corro!");
posInicial.setX(posInicial.getX()+ 10);
}

@Override
public void salvar() {
System.out.println("Salvando a Wanda");

}

@Override
public void disparar() {
System.out.println("Disparando : " + getHabilidadActual());

}

public String toString()
{
return "LaVision: \n Nombre: " + getNombre()
+ " Posicion: " + getPosInicial()
+ " Habilidad actual: " + getHabilidadActual()
+ " Salud: " + getSalud();
}

}

Creamos un programa principal para probar estas clases:

package paqueteH;

public class PrincipalTodos {

public static void main(String[] args) {

Superman s = new Superman();
IronMan i = new IronMan();
AntorchaHumana a = new AntorchaHumana();
GataSombra g = new GataSombra();
LaVision v = new LaVision();

System.out.println(s.toString());
System.out.println(i.toString());
System.out.println(a.toString());
System.out.println(g.toString());
System.out.println(v.toString());

System.out.println();

s.volar();
s.salvar();
i.luchar();
i.disparar();
i.salvar();
a.luchar();
a.encenderse();
a.salvar();
g.correr();
g.volverseIntangible();
g.salvar();
v.volar();
v.disparar();
v.salvar();
}

}

Ejecutamos:


		
Anuncios
 
3 comentarios

Publicado por en 18 abril, 2011 en Deberes

 

Etiquetas: , , ,

3 Respuestas a “Deberes – Interfaces

  1. María del Mar

    5 mayo, 2015 at 5:53 pm

    Excelente y muy entretenidos estos deberes

     
  2. idosama

    26 abril, 2013 at 9:53 pm

    Una consulta. En el ejercicio 2, en los héroes que implementan dos interfaces, Superman (por ejemplo), extiende de Heroe y HeroeVolador… no basta solo con implementar HeroeVolador? Ya que esta interfaz extiende de Heroe?

    Realicé el ejercicio implementando solo la interfaz hija y no hubo problemas de compilación.

    Gracias y felicitaciones por la página.

     
    • Nendrel

      2 agosto, 2013 at 5:03 pm

      Opino lo mismo que tú. Al ser Heroe el interfaz “padre” no haría falta implementarlo en las clases (Superman, etc.) ya que al implementar las interfaz “hijas” ya tienen las del padre.

       

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: