Figura Rectangulo Elipse Cuadrado Circulo area (): double perimetro (): double Rectangulo ancho: double alto: double Rectangulo (double anchura, double altura) area (): double perimetro (): double getAncho (): double getAlto (): double Elipse semiMayor: double semiMenor: double Elipse (double a, double b) area (): double perimetro (): double getMayor (): double getMenor (): double Cuadrado Cuadrado (double lado) getLado (): double Circulo Circulo (double radio) getRadio(): double
Figura Rectangulo Elipse Cuadrado Circulo Clase Abstracta (No posee objetos ni contructor) Figura area (): double perimetro (): double Relación de Herencia Rectangulo ancho: double alto: double Rectangulo (double anchura, double altura) area (): double perimetro (): double getAncho (): double getAlto (): double Elipse semiMayor: double semiMenor: double Elipse (double a, double b) area (): double perimetro (): double getMayor (): double getMenor (): double Atributos/Variables de la clase Constructor Métodos/Funciones u Operaciones de la clase Método que devuelve el valor del Atributo “ancho” Cuadrado Circulo Cuadrado (double lado) getLado (): double Circulo (double radio) getRadio(): double
// fichero Figura. java /. Orientación a objetos // fichero Figura.java /** Orientación a objetos */ public abstract class Figura { public abstract double area (); public abstract double perimetro (); }
// fichero Rectangulo. java /. Orientación a objetos // fichero Rectangulo.java /** Orientación a objetos */ public class Rectangulo extends Figura { // Variables de la clase private double ancho; private double alto; // Métodos de la clase // Método constructor public Rectangulo (double anchura, double altura) { ancho = anchura; alto = altura; } public double area () { return alto*ancho; }
public double perimetro () { return 2*(alto+alto); } public double getAncho () { return ancho; public double getAlto () { return alto;
// fichero Cuadrado. java /. Orientación a objetos // fichero Cuadrado.java /** Orientación a objetos */ public class Cuadrado extends Rectangulo { // Métodos de la clase // Método constructor public Cuadrado (double lado) { ancho = lado; // equivalente a: “super (lado, lado);” alto = lado; } // Método que retorna el valor del Atributo o miembro “ancho” public double getLado () { return ancho; } }
// fichero Elipse.java /** Orientación a objetos */ public class Elipse extends Figura { // Variables de la clase protected double semiMayor; protected double semiMenor; // Métodos de la clase // Método constructor public Elipse (double a, double b) { if (a >= b) { semiMayor = a; semiMenor = b; } else { semiMayor = b; semiMenor = a; }
public double area () { return Math.PI*semiMayor*semiMenor; } public double perimetro () { return Math.PI*(semiMayor+semiMenor); public double getMayor () { return semiMayor; } public double getMenor () { return semiMenor; } }
// fichero Circulo.java /** Orientación a objetos */ public class Circulo extends Elipse { // Métodos de la clase // Método constructor public Circulo (double radio) { super (radio, radio); } public double getRadio () { return semiMayor;
Características del paradigma Orientado a Objetos que intervienen en el ejemplo: Herencia: La clase Cuadrado, por ejemplo, deriva de la clase Rectangulo, heredando todos los atributos y funciones de la clase Rectangulo. Se dice pués, que es una Subclase de la misma. Redefinición: La clase Rectangulo redefine el método area y el método perímetro que había heredado de la clase padre Figura. Nótese que lo que se consigue con el modificador “abstract” en un método es obligar a redefinir dicho método en la clase derivada, clase hija o subclase. Encapsulamiento: Vemos que para acceder a un atributo desde de una determinada clase desde otra clase es necesario utilizar una llamada a un método (p. ejep.: getAncho), ya que no está permitido acceder directamente a esa variable. Esto se conoce como paso de mensajes entre clases. Polimorfismo: Ver programa principal. Nos permite tratar de forma unificada objetos distintos, que pertenecen a subclases diferentes.