Introducción

¿Conocéis qué es JAVA ?

JAVA

  • Lenguaje de Programación de alto nivel
  • Diferente a Python
  • Permite la ejecución de un mismo programa en múltiples sistemas operativos
  • Fácil de usar y tomar lo mejor de otros lenguajes, como C++

No os preocupéis

Tu enfoque determina tu realidad

https://fsmedia.imgix.net/

¿Qué sabéis de los paradigmas de Programación?

  • ¿Sabéis lo que es?
  • ¿Conocéis alguno?
  • ¿Sabéis para qué sirven?

Ahora, vamos a ver que es la
Programación Orientada a objetos

Algunas características de la POO

  • Es un paradigma de programación.
  • La realidad se representa mediante objetos.
  • Estos objetos constan de:
    • Atributos
    • Métodos
    • Estado
  • Se suele usar el lenguaje UML para representarlo

Aquí tenéis un ejemplo

En la programación orientada a objetos ...

El mundo no es más que un objeto

http://www.flickr.com/photos/restlessglobetrotter/

Hecho de piezas más pequeñas

http://www.flickr.com/photos/steve_poulsen/

¿Os apetece construir un universo?

Hagamos « La comunidad del Anillo »

http://www.flickr.com/photos/tales2astonish/

O...

Hagamos « Superhéroes »

Ahora, un poco de teoría para entender

Composición

  • La composición es una forma de reutilización del software, en donde una clase tiene como miembros referencias a objetos de otras clases.
  • Deben de ser construidos mediante la palabra reservada new
  •              Hombre aragorn = new Hombre(210, "Hola");
              
  • Permite crear clases más complejas.
La gente piensa que la informática es cosa de genios pero la realidad es lo contrario: sólo mucha gente haciendo cosas que se complementan unas a otras, como un muro formado por pequeñas piedras.
Donald Knuth
(1938 - ??)

Herencia

  • Determina la relación «familiar» entre dos clases.
  • Para ello, se utiliza la palabra reservada extends.
  •              public class ClaseHija extends ClasePadre{
                 }
              
  • Se heredan tanto los atributos como los métodos.
  • Una clase puede tener muchas hijas, pero sólo un padre.
  • Todo objeto de una clase hija o derivada es un objeto de la clase padre o clase base.

Herencia

  • Veamos un ejemplo para que quede más claro. Tenemos la clase Persona.
  •              public class Persona{
                    protected int dni;
                    public int getDni(){
                         return this.dni;
                    }
                  public void setDni(int dni){
                     this.dni = dni;
                    }
                    public Persona(int dni){
                       this.dni = dni;
                    }
                }
              

Herencia

  • Y tenemos la clase Empleado.
  •             public class Empleado extends Persona{
                    protected int antiguedad;
                    public Empleado (int dni, int ant){
                       super(dni);
                       this.antiguedad = ant;
                    }
                }
              

Herencia

  • Ya que todo Empleado es una Persona, las siguientes asignaciones son válidas:
  •             Persona p;
                Empleado e = new Empleado (45829821,2);
                p = e;
              
  • Sin embargo, ésta no lo es.
  •             Persona p = new Persona(45829821);
                Empleado e = p; // ERROR
              

Herencia

  • No se pueden crear objetos de una clase abstracta.
  •              Figura f = new Figura(); // ERROR
              
  • Hay que declarar los constructores porque son utilizados por sus clases derivadas.

Herencia

  • ¿Y si hacemos un casting?
  •             Persona p = new Persona(45829821);
                Empleado e = (Empleado)p; // ERROR
              
  • También fallará.
  • El casting no se puede hacer de una variable de clase padre a una variable de clase hija, ni entre clases hijas de un mismo padre

Herencia

  • Los métodos abstractos son aquellos que se declaran en la clase padre, pero que se implementan en la clase hija o derivada.
  • Toda clase que contenga un método abstracto se denomina clase abstracta.
  • Una clase hija que no redefine un método abstracto también es una clase abstracta.
  • Se utiliza la palabra reservada abstract
  •                 public abstract class Figura{
                        //...
                      public abstract double area;
                    }
                

Herencia

  • Si no queremos que se pueda heredar, usamos la palabra final
  •                 public final class Rombo extends Figura{
    
                    }
                

Encapsulamiento

  • Es el ocultamiento del estado, es decir, de los datos miembro de un objeto de manera que sólo se pueda cambiar mediante las operaciones definidas para ese objeto.
  • Con este aislamiento, se protegen los datos asociados a un objeto contra su modificación.
  • Existen 3 niveles de visibilidad:
    • Públicos: cualquiera puede acceder al método o al atributo.
    • Privados: únicamente pueden acceder aquellos que se encuentren en la misma clase.
    • Protegidos: solamente pueden acceder aquellos que se encuentren en la misma jerarquía de herencia.

Encapsulamiento

Visibilidad de los modificadores

ModificadorClasePaqueteClase HijaMundo
PúblicoSiSiSiSi
ProtegidoSiSiSiNo
Sin ModificadorSiSiNoNo
PrivadoSiNoNoNo

Polimorfismo

  • El polimorfismo es la propiedad que implica que un método se comporte de diferente forma en función del tipo de clase del objeto que le llama a su ejecución.
  • Veamos un ejemplo

Polimorfismo

Polimorfismo

Ejemplos

          public class Figura{
              protected double posX;
              protected double posY;
              public double  area(){
               return 0;
              }
          }
        
          public class Circulo extends Figura {
              private double radio;
              public double area(){
                return 3.14 * radio * radio;
              }
          }
        
          public class Rectangulo extends Figura {
              private double base;
              private double altura;
              public double area(){
                return base * altura;
              }
            }
          

Veamos otro ejemplo.

Ejercicio: Cread vuestro propio ejemplo

  • Debe de contener la mayor parte posible de lo visto hasta ahora.
  • Herencia, polimorfismo y clases abstractas son mínimas.
  • Debe ser un ejemplo de la vida real (más o menos).
  • En alud tenéis la actividad correspondiente para subirlas.

Así que recordad

Las clases son las piezas

http://www.flickr.com/photos/intvgene/

Pero es necesario
juntarlas

Para construir un
imperio

http://commons.wikimedia.org/wiki/File:Legoland_washington_dc_capitol.JPG