• No se han encontrado resultados

Clases Abstractas e Interfaces

N/A
N/A
Protected

Academic year: 2021

Share "Clases Abstractas e Interfaces"

Copied!
7
0
0

Texto completo

(1)

Clases Abstractas e Interfaces

Presentación basada en:

1. Java 2., Curso de programación. Fco. Javier Ceballos. Ed. Alfoomega&RA-MA, 2003.

2. Apuntes del Curso Programación Orientado a Objetos. Pablo Castells. Escuela Politécnica Superior, Universidad Autonoma de Madrid.

3. Apuntes del Curso de java. Luis Hernández y Carlos Cervigón. Facultad de Informática. Universidad Católica de Madrid.

Clases Abstractas

„ Definición:Clases definidas en la jerarquía que simplemente recogen las características comunes de otra serie de clases ( sus

descendientes), pero que no se van a (o no se deben) utilizar para crear ejemplares.

„ Características de una Clase abstracta:

„ Modela el comportamiento común de sus clases derivadas.

„ Establece métodos que necesariamente han de ser implementados por sus

subclases (las clases derivadas)ÆMETODOS ABSTRACTOS.

„ Métodos sin código, se declaran pero no se definen

„ Deben definirse en alguna subclaseÆSi una subclase no implementa un método abstracto heredado debe ser abstractatambién

„ Un método abstracto debe pertenecer a una clase abstracta

„ Implementa métodosque son comunes a todas sus subclases (No

abstractos).

„ La clase abstracta puede definir atributos comunesa sus subclases.

„ En el sistema no se crean ejemplaresde la clase abstracta porque no serían objetos con existencia propia en el mundo real.

(2)

Clases Abstractas:Ejemplo

„

Clases Abstractas:

ObjetoGrafico y Paralelogramo

„

En el programa de dibujo sólo se van a crear

objetos gráficos concretos

de : puntos, elipses,

círculos, cuadrados, rectángulos, rombos o

romboides.

Clases Abstractas:Ejemplo(2)

„ Para definir una clase como abstracta se coloca la palabra reservada

abstractantes de class:

„ public abstract classObjetoGrafico {...

„ Si en la clase abstracta se quiere obligar a que las subclases implementen un determinado método, basta declararlo como método abstracto. No tendrá cuerpo y terminará en punto y coma:

public abstract classObjetoGrafico { // Abstracta public abstractString toString();

public abstract voiddesplaza();

public abstract booleanesCerrada();

public abstract doublearea(); }

„ Para definir un método como abstractose coloca la palabra reservada

abstractantes de este

„ Las subclases (no abstractas) no podrán compilarse si no implementan

métodos con esos prototipos.

Métodos Abstractos

(3)

Clases Abstractas:Ejemplo(3)

// Clase Punto: no abstracta

public classPunto extendsObjetoGrafico {

privatedouble x; privatedouble y; publicPunto() { x = 0; y = 0; }

publicPunto(doublecx, doublecy) { x = cx;

y = cy; }

public doubledameX() { returnx; }

public doubledameY() { returny; }

public voidponX(doubled) { x = d; }

public voidponY(doubled) { y = d; }

…..

Clases Abstractas:Ejemplo(4)

// Implementa todos los métodos abstractos: public voiddesplaza(doubledeltaX, doubledeltaY) {

x += deltaX; y += deltaY; }

publicString toString(){

return"(" + x + "," + y + ")"; }

public booleanesCerrada() { returnfalse; }

public doublearea(){return0;}

(4)

Clases Abstractas:Ejemplo(5)

// Paralelogramo: otra clase abstracta

public abstract class

Paralelogramo extends

ObjetoGrafico {

protected

Punto esquina;

public

Paralelogramo() { esquina = new

Punto(0, 0); }

public

Punto dameEsquina() { return

esquina; }

public void

ponEsquina(Punto p) { esquina = p; }

// Implementa uno de los métodos abstractos

public boolean

esCerrada() { return

true; }

// Todos los paralelogramos son cerrados.

}

„

Nota

: Los métodos abstractos toString(), desplaza() y

area()

no

presentan problemas por que Paralelogramo es una clase

abstracta.

Clases Abstractas:Ejemplo(6)

// Cuadrado: clase no abstracta

public classCuadrado extendsParalelogramo {

protected doublelado;

publicCuadrado() { super(); lado = 0; }

public doubledameLado() { return lado; }

public voidponLado(double d) { lado = d; }

// Implementa los otros dos métodos abstractos publicString toString() {

return"[" + esquina.toString() + ", " + lado + "]"; }

public voiddesplaza(doubledeltaX, doubledeltaY) { esquina.desplaza(deltaX, deltaY);

}

(5)

Utilidad de los métodos

abstractos

class

ObjetoCompuesto {

private

Vector objeto

s

Grafico

s

= new

Vector ();

void

agregarObjetos (

ObjetoGrafico

obj) {

objeto

s

Grafico

s

.addElement (obj);

}

double

area () {

double

a = 0;

Enumeration enum = objeto

s

Grafico

s

.elements ();

while (enum.hasMoreElements ())

a += ((

ObjetoGrafico

) enum.nextElement ()) .

area

();

return

a;

}

}

Clase Abstracta

La clase java.lang.Number

„

Es una clase abstracta

Byte Short Integer Long Float Double abstract Number shortValue() byteValue() métodos no abstractos longValue() intValue() floatValue() doubleValue() métodos abstractos

(6)

La clase java.lang.Object

„

Clase padre por defecto si no se especifica

otra

„

class

A {...} es equivalente a

class

A

extends

Object

{...}

„

Tratamiento genérico de objetos: vectores,

etc.

„

Proporciona definición por defecto para

métodos como: toString, finalize, getClass

„

Los

arrays

son también subclases de

Object

Meta-información de clases(1)

„

Se puede obtener Meta-información sobre las

clases en tiempo de ejecución

„

El operador

instanceof

„

Cuadrado c = new Cuadrado();

„

ObjetoGrafico obj1 = c;

„

c instanceof

Cuadrado

Æ

true

„

c instanceof

Paralelogramo

Æ

true

„

c instanceof

ObjetoGrafico

Æ

true

„

c instanceof

Circulo

Æ

false

„

obj1 instanceof

Cuadrado

Æ

true

(7)

Meta-información de clases(2)

ObjetoGrafico.java

C:\ObjetoGrafico.java:82: inconvertible types found : Cuadrado

required: Punto

if (c instanceof Punto) System.out.println ("c instancia de Punto"); ^ 1 error

Meta-información de clases(2)

„

Ejemplo

classA { voidf (Persona p) { if (p instanceofEmpleado)

System.out.println ("Clase Empleado"); else if (p instanceofPersona)

System.out.println ("Clase Persona"); }

} // Bloque main

A a = new A ();

Directivo dir = new Directivo (...); Persona p = dir;

a.f (dir); a.f (p); Animal x = p;

Referencias

Documento similar

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

En cada antecedente debe considerarse como mínimo: Autor, Nombre de la Investigación, año de la investigación, objetivo, metodología de la investigación,

For Keyword Spotting on the Spanish Albayzin database, we have shown that the approach based on the phone-decoding and the confusion matrix outperforms the rest of the

Para terminar esta comunicación, nos gustaría destacar la gran acogida que han tenido las experiencias llevadas a cabo, y en lo que respecta al profesor, como hemos indicado al

No sólo la historia deja de estar representada en la ontología (algo que puede ser un fin deseable en la física) sino que se pierden de vista tensiones entre nuestras tipo- logías

azules; el intermedio más amplio con pequeños y numerosos toques con distintos colores sobre el arrastre del anterior; y el tercero en el lateral y la parte superior del

El método consiste en la identificación temática de cada pieza gráfica, que por ser en ocasiones muy abstractas (sobre todo en Zabaleta), requieren de particular atención: no

"la inspección de la figura (para aquéllos que deseen dibujarla) les indi- cará todas las diferentes posibilidades permitidas por la ecuación" 30. Se puede decir que, en