Partimos de la suposición de que se viene de c++.
La sintaxis es parecida.
Declaración de variable: Se irá viendo en los ejemplos.
Sentencias de condición (if, else if), al estilo C++, en los ejemplos se muestra.
Sentencias de control (while, for, ), al estilo C++, en los ejemplos se muestra.
Arrays, se dispone de diferentes objetos que los representan (ArrayList, etc), o se pueden hacer como en C. (se verán ejemplos)
Package:
Un package es una agrupación de clases afines. Equivale al concepto de biblioteca (library) existente en otros lenguajes o sistemas. Físicamente representan una carpeta.
Herencia: Se da en OOP.
Se ejecuta sobre máquina virtual
Hasta ahora: encapsulamos código en funciones.
OOP encapsula conceptos en clases: personas,
trabajadores, vehículos...
Una clase define:
Variables que describen el concepto: Atributos.
Funciones para manipular dicho concepto: Métodos .
Sintaxis para definir una clase:
class Vehiculo {
public int numRuedas;
public String numCarroceria;
public void avanza(){
/* Aquí el código del método */
}
}
Para crear una instancia (objeto) de la clase
//importamos la definición
import paquete.Vehiculo;
//llamamos a la constructora
Vehiculo v = new Vehiculo();
Podemos acceder a los métodos de igual forma:
import paquete.Vehiculo;
Vehiculo v = new Vehiculo();
v.numRuedas = 2;
System.out.println (v.numRuedas);
v.avanza();
Opciónes de visibilidad:
public class Vehiculo{
public int numRuedas;
private String numCarroceria;
}
Vehiculo vi = new Vehiculo();
System.out.println(vi.numRuedas);
Sstem.out.println(vi.numCarroceria);
public class Vehiculo {
protected int numRuedas;
private String numCarroceria;
public String getNumCarroceria() {
return this.numCarroceria;
}
public void setNumCarroceria(String carr) {
this.numCarroceria = carr;
}
}
Vehiculo v = new Vehiculo();
v.setNumCarroceria(“13354a-X”);
System.out.println(v.getNumCarroceria());
Mediante métodos públicos (get/set) accedemos a atributos privados:
class Vehiculo{
private String numCarroceria;
public String setNumCarroceria (String numCarroceria){
if (this.checkNumCarroceria(numCarroceria))
return false;
else {
this.numCarroceria = numCarroceria;
return true;
}
}
private boolean checkNumCarroceria(String numCarroceria){
return numCarroceria.isEmpty();
}
}
Vehiculo v = new Vehiculo();
v.checkNumCarroceria(“23213-ax”); // Error
v.setNumCarroceria(“”); // Devolverá false
public Vehiculo(int a, String b) {
numRuedas = a;
numCarroceria = b;
}
Vehiculo v = new vehiculo(4, “1234-ax”); // Vehículo de 4 ruedas
class Coche extends Vehiculo {
protected int numPuertas;
}
class Moto extends Vehiculo {
protected String manillar;
}
/* Heredan numRuedas, numCarroceria y la función avanza() */
public interface VehiculoConPuertas{
void abrirPuertas();
void cerrarPuertas();
}
public class Coche extends Vehiculo implements VehiculoConPuertas{
@Override
void abrirPuertas(){
/* Implementación ...*/
}
@Override
void cerrarPuertas(){
/* Implementación ...*/
}
}
abstract class Vehiculo {
public abstract void avanzar();
protected int numPuertas;
}
class Moto extends Vehiculo {
protected String manillar;
public void avanzar(){
/* ... */
}
}
class abstract CocheCarreras extends Vehiculo {
protected String manillar;
public abstract void avanzar();
}
void aparcarVehiculos(Vehiculo v){
System.out.println(v.aparcar());
}
Moto m = new Moto();
Coche c = new Coche();
aparcarVehiculos(m);
aparcarVehiculos(c);
Se pueden redefinir métodos de la superclase para que se comporten de otra manera
La función aparcarVehiculos no sabe de qué tipo concreto es v, sin embargo ejecuta la función aparcar correspondiente porque v toma la forma del vehículo concreto que le pasan.
Al hecho de que v pueda tomar diferentes formas se le llama polimorfismo.
class Avion extends Vehiculo {
public int numAlas;
public void aparcar(){...}
public void arreglarAlas(){...}
}
Si en el futuro alguien utiliza nuestra clase abstracta vehículo:
La función aparcar seguirá funcionando igual
Crea las clases Directivo, Consultor y Becario, que heredan de la clase abstracta Trabajador.
Trabajador contendrá los datos básicos: datos personales y sueldo bruto.
Declarad una función abstracta que calculará el sueldo neto anual (bruto anual menos retención).
Directivo, Consultor y Becario redefinirán dicha función con retenciones diferentes.