package com.trifulcas.cartas;
public abstract class Carta {
private String palo;
private int numero;
public Carta(String palo, int numero) {
this.palo = palo;
this.numero = numero;
}
protected String getPalo() {
return palo;
}
protected void setPalo(String palo) {
this.palo = palo;
}
public int getNumero() {
return numero;
}
protected void setNumero(int numero) {
this.numero = numero;
}
public abstract int getValor();
@Override
public String toString() {
return getNumero()+" de "+getPalo();
}
}
package com.trifulcas.cartas;
public class Espanyola extends Carta {
public Espanyola(String palo, int numero) {
super(palo, numero);
// TODO Auto-generated constructor stub
}
@Override
public int getValor() {
return getNumero()<10?getNumero():10;
}
}
package com.trifulcas.cartas;
public class Francesa extends Carta {
public Francesa(String palo, int numero) {
super(palo, numero);
// TODO Auto-generated constructor stub
}
@Override
public int getValor() {
// TODO Auto-generated method stub
return getNumero();
}
}
package com.trifulcas.cartas;
import java.util.ArrayList;
import java.util.Collections;
public abstract class Baraja {
protected ArrayList<Carta> baraja = new ArrayList<>();
public Baraja() {
/*
baraja.add(new Espanyola("oros",1));
baraja.add(new Espanyola("oros",2));
baraja.add(new Espanyola("oros",3));
baraja.add(new Espanyola("oros",4));
baraja.add(new Espanyola("copas",7));
*/
}
public void desordenar() {
Collections.shuffle(baraja);
}
public Carta repartir() {
if (baraja.isEmpty()) {
return null;
} else {
return baraja.removeFirst();
}
}
@Override
public String toString() {
return "Baraja [baraja=" + baraja + "]";
}
public abstract void crearMazo();
}
package com.trifulcas.cartas;
import java.util.ArrayList;
import java.util.Arrays;
public class BarajaEspanyola extends Baraja {
@Override
public void crearMazo() {
ArrayList<Integer> numeros=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,10,11,12));
ArrayList<String> palos=new ArrayList<>(Arrays.asList("Oros","Copas","Espadas","Bastos"));
baraja.clear();
for(int numero: numeros) {
for(String palo: palos) {
baraja.add(new Espanyola(palo,numero));
}
}
}
}
package com.trifulcas.cartas;
import java.util.ArrayList;
import java.util.Arrays;
public class BarajaFrancesa extends Baraja {
@Override
public void crearMazo() {
ArrayList<Integer> numeros=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13));
ArrayList<String> palos=new ArrayList<>(Arrays.asList("Picas","Tréboles","Corazones","Diamantes"));
baraja.clear();
for(int numero: numeros) {
for(String palo: palos) {
baraja.add(new Francesa(palo,numero));
}
}
}
}
package com.trifulcas.cartas;
import java.util.ArrayList;
public class Jugador {
private String nombre;
private ArrayList<Carta> mano;
public Jugador(String nombre) {
super();
this.nombre = nombre;
mano=new ArrayList<>();
}
protected String getNombre() {
return nombre;
}
protected void setNombre(String nombre) {
this.nombre = nombre;
}
protected ArrayList<Carta> getMano() {
return mano;
}
protected void setMano(ArrayList<Carta> mano) {
this.mano = mano;
}
protected void setMano(Carta carta) {
this.mano.add(carta);
}
@Override
public String toString() {
return "Jugador [nombre=" + nombre + ", mano=" + mano + "]";
}
}
package com.trifulcas.cartas;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class Poquer {
ArrayList<Jugador> jugadores;
BarajaFrancesa baraja;
public Poquer(ArrayList<Jugador> jugadores) throws Exception {
if (jugadores.size()>10 || jugadores.size()<2) {
throw new Exception("Número de jugadores incorrecto");
}
this.jugadores=jugadores;
baraja=new BarajaFrancesa();
baraja.crearMazo();
}
public Jugador jugar() {
baraja.desordenar();
for(Jugador j:jugadores) {
for(int i=0;i<5;i++) {
j.setMano(baraja.repartir());
}
}
return getGanador();
}
public Jugador getGanador() {
// poker: 4 cartas iguales
// full: 3 cartas iguales y dos iguales
// trio: 3 cartas iguales
// doble pareja: 2 y 2
// pareja: 2 cartas iguales
for (Jugador j:jugadores) {
System.out.println(j);
System.out.println(contarCartas(j.getMano()));
}
return jugadores.get(0);
}
public HashMap<Integer,Integer> contarCartas(ArrayList<Carta> cartas){
HashMap<Integer,Integer> res=new HashMap<Integer,Integer>();
for(Carta c:cartas) {
res.put(c.getValor(), Collections.frequency(cartas.stream().map(Carta::getValor).toList(), c.getValor()));
}
return res;
}
}
package com.trifulcas.cartas;
import java.util.ArrayList;
public class ProbarCartas {
public static void main(String[] args) {
// TODO Auto-generated method stub
Baraja miBaraja=new BarajaFrancesa();
miBaraja.crearMazo();
System.out.println(miBaraja);
Carta c=miBaraja.repartir() ;
Jugador j=new Jugador("Ana");
System.out.println(j);
System.out.println(c);
System.out.println(miBaraja);
miBaraja.desordenar() ;
ArrayList<Jugador> jugadores=new ArrayList<>();
jugadores.add(j);
jugadores.add(new Jugador("Eva"));
try {
Poquer test=new Poquer(jugadores);
test.jugar();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(miBaraja);
}
}
Mes: noviembre 2023
Ejercicios Interfaces
package com.trifulcas.Interfaces;
public interface ISaludo {
public String saludar();
}
package com.trifulcas.Interfaces;
public interface IDespedida {
public String adios();
}
package com.trifulcas.Interfaces;
public class Amigo1 implements ISaludo {
@Override
public String saludar() {
// TODO Auto-generated method stub
return "Ola k ase???";
}
}
package com.trifulcas.Interfaces;
public class Amigo2 implements IDespedida{
@Override
public String adios() {
// TODO Auto-generated method stub
return "Adios con el corazón";
}
}
package com.trifulcas.Interfaces;
public class Amigo1 implements ISaludo {
@Override
public String saludar() {
// TODO Auto-generated method stub
return "Ola k ase???";
}
}
package com.trifulcas.Interfaces;
public class Amigo2 implements IDespedida{
@Override
public String adios() {
// TODO Auto-generated method stub
return "Adios con el corazón";
}
}
package com.trifulcas.Interfaces;
public class Amigo3 implements ISaludo, IDespedida {
@Override
public String adios() {
// TODO Auto-generated method stub
return "Hasta luego Lucas";
}
@Override
public String saludar() {
// TODO Auto-generated method stub
return "Como están los máquinas?";
}
}
package com.trifulcas.Interfaces;
public interface ITotal {
public int total();
}
package com.trifulcas.Interfaces;
import java.util.ArrayList;
import com.trifulcas.cartas.Carta;
public class Notas implements ITotal {
private ArrayList<Integer> notas;
public Notas() {
notas=new ArrayList<>();
}
public int addNumero(int nota) {
notas.add(nota);
return notas.size();
}
@Override
public int total() {
int total=0;
for(int nota:notas) {
total+=nota;
}
return total;
}
}
package com.trifulcas.Interfaces;
import java.util.ArrayList;
public class Alumno implements ITotal, ISaludo {
public ArrayList<String> alumnos;
public Alumno() {
alumnos=new ArrayList<>();
}
@Override
public String saludar() {
return "Hola "+(alumnos.size()>0?alumnos.get(0):"");
}
@Override
public int total() {
// TODO Auto-generated method stub
return alumnos.size();
}
}
package com.trifulcas.Interfaces;
public interface IFigura {
public void dibujar();
}
package com.trifulcas.Interfaces;
public interface IFigura2D extends IFigura {
public double area();
}
package com.trifulcas.Interfaces;
public interface IFigura3D extends IFigura2D{
public double volumen();
}
package com.trifulcas.Interfaces;
public class Cuadrado implements IFigura2D {
private double lado;
protected double getLado() {
return lado;
}
protected void setLado(double lado) {
this.lado = lado;
}
public Cuadrado(double lado) {
this.lado=lado;
}
@Override
public double area() {
// TODO Auto-generated method stub
return lado*lado;
}
@Override
public void dibujar() {
System.out.println("Cuadrado");
}
}
Cartas Java
package com.trifulcas.cartas;
public abstract class Carta {
private String palo;
private int numero;
protected String getPalo() {
return palo;
}
protected void setPalo(String palo) {
this.palo = palo;
}
public int getNumero() {
return numero;
}
protected void setNumero(int numero) {
this.numero = numero;
}
public abstract int getValor();
@Override
public String toString() {
return getNumero()+" de "+getPalo();
}
}
package com.trifulcas.cartas;
public class Espanyola extends Carta {
@Override
public int getValor() {
return getNumero()<10?getNumero():10;
}
}
package com.trifulcas.cartas;
public class Francesa extends Carta {
@Override
public int getValor() {
// TODO Auto-generated method stub
return getNumero();
}
}
package com.trifulcas.cartas;
import java.util.ArrayList;
public class Baraja {
private ArrayList<Carta> baraja=new ArrayList<>();
public int addCarta(Carta carta) {
baraja.add(carta);
return baraja.size();
}
public int totalValor() {
int total=0;
for(Carta c:baraja) {
total+=c.getValor();
}
return total;
}
}
package com.trifulcas.cartas;
public class ProbarCartas {
public static void main(String[] args) {
// TODO Auto-generated method stub
Francesa f= new Francesa();
f.setPalo("Picas");
f.setNumero(8);
System.out.println(f);
Baraja miBaraja=new Baraja();
miBaraja.addCarta(f);
Espanyola e=new Espanyola();
e.setPalo("Oros");
e.setNumero(12);
miBaraja.addCarta(e);
System.out.println(miBaraja.totalValor());
}
}
Clases Figuras
package com.trifulcas.figuras;
public abstract class Figura {
private String nombre;
public abstract void dibujar();
protected String getNombre() {
return nombre;
}
protected void setNombre(String nombre) {
this.nombre = nombre;
}
}
package com.trifulcas.figuras;
public abstract class Figura2D extends Figura {
public abstract double area();
}
package com.trifulcas.figuras;
public abstract class Figura3D extends Figura2D{
public abstract double volumen();
}
package com.trifulcas.figuras;
public class Cuadrado extends Figura2D {
private double lado;
protected double getLado() {
return lado;
}
protected void setLado(double lado) {
this.lado = lado;
}
public Cuadrado(double lado) {
this.lado=lado;
}
@Override
public double area() {
// TODO Auto-generated method stub
return lado*lado;
}
@Override
public void dibujar() {
System.out.println("Cuadrado");
}
}
package com.trifulcas.figuras;
public class Circulo extends Figura2D {
private double radio;
protected double getRadio() {
return radio;
}
protected void setRadio(double radio) {
this.radio = radio;
}
public Circulo(double radio) {
this.radio = radio;
}
@Override
public double area() {
return Math.PI*radio*radio;
}
@Override
public void dibujar() {
System.out.println("Círculo");
}
}
package com.trifulcas.figuras;
public class Cubo extends Figura3D {
private double lado;
protected double getLado() {
return lado;
}
protected void setLado(double lado) {
this.lado = lado;
}
public Cubo(double lado) {
this.lado = lado;
}
@Override
public double volumen() {
return Math.pow(lado, 3);
}
@Override
public double area() {
// Se puede hacer más sencillo pero así también
// Ojo que acoplamos cubo a cuadrado
Cuadrado c=new Cuadrado(lado);
return c.area() * 6;
}
@Override
public void dibujar() {
System.out.println("Cubo");
}
}
package com.trifulcas.figuras;
public class Esfera extends Figura3D {
private double radio;
protected double getRadio() {
return radio;
}
protected void setRadio(double radio) {
this.radio = radio;
}
public Esfera(double radio) {
this.radio = radio;
}
@Override
public double volumen() {
return 4/3*Math.PI*Math.pow(radio, 3);
}
@Override
public double area() {
return 4*Math.PI*Math.pow(radio, 2);
}
@Override
public void dibujar() {
// TODO Auto-generated method stub
}
}
Cuadrado c=new Cuadrado(2);
System.out.println(c.area());
Circulo ci=new Circulo(1);
System.out.println(ci.area());
Cubo cu=new Cubo(2);
System.out.println(cu.area());
System.out.println(cu.volumen());
Esfera e=new Esfera(1);
System.out.println(e.area());
System.out.println(e.volumen());
Y más ejemplos interfaces
public interface IGirar {
public void izquierda();
public void derecha();
}
public interface IAvanzar {
public void adelante();
public void atras();
}
public interface IVertical {
public void arriba();
public void abajo();
}
public class Tren implements IAvanzar {
@Override
public void adelante() {
// TODO Auto-generated method stub
}
@Override
public void atras() {
// TODO Auto-generated method stub
}
}
public class Coche implements IAvanzar, IGirar {
@Override
public void izquierda() {
// TODO Auto-generated method stub
}
@Override
public void derecha() {
// TODO Auto-generated method stub
}
@Override
public void adelante() {
// TODO Auto-generated method stub
}
@Override
public void atras() {
// TODO Auto-generated method stub
}
}
public class Torreta implements IGirar {
@Override
public void izquierda() {
// TODO Auto-generated method stub
}
@Override
public void derecha() {
// TODO Auto-generated method stub
}
}
public class Helicoptero implements IAvanzar, IGirar, IVertical {
@Override
public void arriba() {
// TODO Auto-generated method stub
}
@Override
public void abajo() {
// TODO Auto-generated method stub
}
@Override
public void izquierda() {
// TODO Auto-generated method stub
}
@Override
public void derecha() {
// TODO Auto-generated method stub
}
@Override
public void adelante() {
// TODO Auto-generated method stub
}
@Override
public void atras() {
// TODO Auto-generated method stub
}
}
Ejemplos Interfaces
public interface IVolar {
public void volar();
}
public interface INadar {
public void nadar();
}
public interface ICorrer {
public void correr();
}
public interface IActivo {
public boolean esActivo();
}
public interface ISaludo {
public void hola();
public void adios();
}
public class Delfin implements INadar, IActivo{
@Override
public void nadar() {
System.out.println("Soy un delfín nadando en el inmenso mar");
}
@Override
public boolean esActivo() {
// TODO Auto-generated method stub
return true;
}
}
public class Pato implements IVolar, ICorrer, INadar, IActivo{
@Override
public void nadar() {
System.out.println("Pato Nadando");
}
@Override
public void correr() {
System.out.println("Corriendo");
}
@Override
public void volar() {
System.out.println("Volando");
}
@Override
public boolean esActivo() {
// TODO Auto-generated method stub
return true;
}
}
public class Submarino implements INadar, IActivo {
@Override
public void nadar() {
System.out.println("Inmersión!!");
}
@Override
public boolean esActivo() {
// TODO Auto-generated method stub
return false;
}
}
public static void main(String[] args) {
// El mismo polimorfismo que teniamos con la herencia
// Lo tenemos con los interfaces
ArrayList<INadar> cosas = new ArrayList<>();
comprobar(new Delfin());
comprobar(new Pato());
comprobar(new Submarino());
List<String> alumnos = new ArrayList<String>();
Saludos pepe=new Saludos();
pepe.hola();
ISaludo ana=new Saludos();
ana.adios();
}
public static void comprobar(IActivo elemento) {
if (elemento.esActivo()) {
System.out.println("A tope con la actividad");
}
}
Ejemplo Abstracta
public abstract class FiguraGeometrica {
private int lados;
public int getLados() {
return lados;
}
public void setLados(int lados) {
this.lados = lados;
}
public void yuju() {
for(int i=0;i<10;i++) {
System.out.println("¡YUJU!!");
}
}
// Como un contrato en el que las clases derivadas
// Se comprometen a implementarlos
public abstract double perimetro();
public abstract double area();
}
public class Cuadrado extends FiguraGeometrica {
@Override
public double perimetro() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double area() {
// TODO Auto-generated method stub
return 0;
}
}
public class Rectangulo extends FiguraGeometrica {
private double ancho;
private double alto;
public Rectangulo(double ancho, double alto) {
this.ancho = ancho;
this.alto = alto;
}
public Rectangulo(double ancho) {
this(ancho,1);
}
public Rectangulo() {
this(1);
}
public double getAncho() {
return ancho;
}
public void setAncho(double ancho) {
this.ancho = ancho;
}
public double getAlto() {
return alto;
}
public void setAlto(double alto) {
this.alto = alto;
}
public double perimetro() {
return ancho * 2 + alto * 2;
}
public double area() {
return ancho * alto;
}
public boolean oblongo() {
return ancho > alto;
}
}
Ejemplos polimorfismo
public class Empleado {
private String nombre;
protected int sueldo;
// getters y setters
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setSueldo(int sueldo) {
if (sueldo>900 && sueldo <10000) {
this.sueldo = sueldo;
}
}
public double sueldoNeto() {
return sueldo*.87;
}
@Override
public String toString() {
return "Empleado [nombre=" + nombre + ", sueldo=" + sueldo + "]";
}
}
public class Comercial extends Empleado {
private double comision;
private int ventas;
public double getComision() {
return comision;
}
public void setComision(double comision) {
this.comision = comision;
}
public int getVentas() {
return ventas;
}
public void setVentas(int ventas) {
this.ventas = ventas;
}
@Override
public double sueldoNeto() {
return super.sueldoNeto()+ventas*comision;
}
}
public class Directivo extends Empleado {
@Override
public double sueldoNeto() {
return super.sueldoNeto()*2;
}
}
ArrayList<Vehiculo> tropa=new ArrayList<>();
tropa.add(new Coche()); // Un coche es un vehículo
tropa.add(new Bicicleta()); // Esto también
tropa.add(new Coche());
tropa.add(new Tanque()); // Y eso también lo es
for(Vehiculo v:tropa) {
v.acelerar(); // al acelerar estoy llamando al método de cada objeto
v.derecha();
System.out.println(v);
}
Empleado pepe=new Empleado();
pepe.setSueldo(1000);
Comercial ana=new Comercial();
ana.setSueldo(1000);
ana.setComision(.05);
ana.setVentas(20000);
Directivo antonio=new Directivo();
antonio.setSueldo(5000);
ArrayList<Empleado> empresa=new ArrayList<>();
empresa.add(pepe);
empresa.add(ana);
empresa.add(antonio);
int total=0;
for(Empleado e:empresa) {
total+=e.sueldoNeto();
System.out.println(e.sueldoNeto());
}
System.out.println(total);
}
Ejercicio Vehículo
public class Vehiculo {
private int velocidad;
private int direccion;
protected int velocidadMaxima;
protected int velocidadIncremento;
protected int direccionIncremento;
public Vehiculo() {
// Me está diciendo como se comporta mi clase
velocidadMaxima=200;
velocidadIncremento=10;
direccionIncremento=10;
}
public void acelerar() {
velocidad+=velocidadIncremento;
if (velocidad>velocidadMaxima) {
velocidad=velocidadMaxima;
}
}
public void frenar() {
velocidad-=velocidadIncremento;
if (velocidad<0) {
velocidad=0;
}
}
public void izquierda() {
direccion+=direccionIncremento;
if (direccion>=360) {
direccion-=360;
}
}
public void derecha() {
direccion-=direccionIncremento;
if (direccion<0) {
direccion+=360;
}
}
@Override
public String toString() {
return "Vehiculo [velocidad=" + velocidad + ", direccion=" + direccion + "]";
}
}
public class Coche extends Vehiculo {
public Coche() {
velocidadMaxima=150;
}
}
public class Bicicleta extends Vehiculo {
public Bicicleta() {
velocidadIncremento=3;
}
}
public class Tanque extends Vehiculo {
public Tanque() {
direccionIncremento=90;
}
}
Vehiculo v=new Vehiculo();
v.acelerar();
v.acelerar();
v.derecha();
v.derecha();
System.out.println(v);
for(int i=0;i<50;i++) {
v.acelerar();
v.derecha();
System.out.println(v);
}
Coche c= new Coche();
for(int i=0;i<50;i++) {
c.acelerar();
System.out.println(c);
}
Bicicleta b= new Bicicleta();
for(int i=0;i<50;i++) {
b.acelerar();
System.out.println(b);
}
Tanque t=new Tanque();
for(int i=0;i<5;i++) {
t.derecha();
System.out.println(t);
}
Ejercicio Ikea
public class Producto {
protected String nombre;
protected String familia;
public Producto(String nombre, String familia) {
super();
this.nombre = nombre;
this.familia = familia;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getFamilia() {
return familia;
}
public void setFamilia(String familia) {
this.familia = familia;
}
}
public class Asiento extends Producto{
protected int patas;
public Asiento(String nombre, String familia, int patas) {
super(nombre, familia);
this.patas=patas;
}
}
public class Sillon extends Asiento {
private String color;
public Sillon(String nombre, String familia) {
super(nombre, familia, 4);
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
public class Sofa extends Asiento {
private String material;
public Sofa(String nombre, String familia, int patas) {
super(nombre, familia, patas);
}
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
}
}
Producto p=new Producto("Börkjlon","Strogürl");
Asiento a=new Asiento("Gïorlda","Weuipr",4);
Sillon sillon=new Sillon("Forlidër","Forlüder");
Sofa sofa= new Sofa("Gïorlda","Weuipr",4);