Sunteți pe pagina 1din 12

Programacin Orientada a Objetos con Java

OOP
Tecnologa y Conceptos
Orientado a Objetos

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Tecnologa y Conceptos Orientado a Objetos


Herencia
Polimorfismo

Ing. Jess Bernardo Olavarria Paz

4
1

OOP con Java

Herencia
La herencia es una caracterstica ms importante en
la POO.
Permite construir una clase incorporando de manera
implcita todas las caractersticas de una clase previa
existente
Estas caractersticas incluyen tanto los atributos como
los mtodos.

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Herencia
En el mundo real

En OOP

Propiedad que hace


Que una clase
tenga de manera
implcita
Las caractersticas
de su superclase
(Clase superior en la
jerarqua de
clasificacin)

CLASE
datos d1 y d2
mtodos m1,m2 y m3

SUBCLASE
datos d1, d2, d3 y d4
mtodos m1, m2, m3 y m4

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Herencia

Cilindro
altura
area

Circulo

extends

radio
area
circunsferencia

volumen

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Herencia, derivacin de clases


Ejemplo
Forma
dibujar()
mover()
borrar()

Circulo
dibujar()

Cuadrado
dibujar()

Triangulo
dibujar()

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Ventajas de la Herencia
Modelado de la realidad: La herencia entre clases se relaciona
con la realidad del mundo, por eso existe la relacin de
Generalizacin y Especializacin entre clases.
Ejemplo:
Una Figura es una generalizacin de Circulo.
Un Circulo es una especializacin de Figura.
Evita Redundancias: Se evita escribir cdigo repetitivo entre
clases semejantes.
Reutilizacin: El cdigo usado en una clase puede ser adaptado
para otras clases.
Extensibilidad: Posibilidad de ampliar la funcionalidad de la
aplicacin de manera sencilla.
Ing. Jess Bernardo Olavarria Paz

OOP con Java

Implementacin en Java

Sintaxis
class IdentificadorDeClase extends IdentificadorDeSuperClase{
cuerpo-de-la-clase
}
La subclase as definida hereda las variables (porpiedades) y mtodos
(funciones) de la superclase que extiende o de la cual se deriva.
La real potencia de la herencia no es solo el hecho de adquisicin de
propiedades y mtodos de la superclase, sino la facilidad de
especializacin la subclase con propiedades y mtodos adicionales.
En el caso de los mtodos se permitir incluso redefinir los heredados
(polimorfismo con sobreescritura de mtodos en subclases).
Ing. Jess Bernardo Olavarria Paz

OOP con Java

Implementacin en Java
Una clase hereda desde su inmediata super clase todas las
declaraciones de los campos en en mbito de la superclase,
excepto:
Campos y constructores privados no son heredados.
Campos idnticamente declarados, sobre aquellos en la super clase.

Cada campo tiene un acceso especfico:


El campo public es accedido siempre que el nombre de la clase sea
accesible.
El campo protected es accesible al cuerpo de cualquier subclase
(sea dentro o fuera del paquete) y a todos los mtodos dentro del
paquete.
El campo private es restringido a la clase en el cual se declara.
Ing. Jess Bernardo Olavarria Paz

OOP con Java

Palabra clave super

Se usa para hacer referencia a la Superclase en que se basa la clase


actual.
Se puede usar 2 formas:
Invocar al Constructor de la SuperClase
Invocar a Mtodos de la SuperClase
Invocar al Constructor de la SuperClase: Desde el constructor de
la SubClase se llama al constructor de la SuperClase.
Sintaxis:
super(); //Invoca al constructor por defecto de la SuperClase
super(Lista parmetros); //Invoca al constructor con parmetros
de la SuperClase
Ing. Jess Bernardo Olavarria Paz

OOP con Java

Palabra clave super


Ejemplo:

SuperClase

public class Circulo extends Figura{


private double r;
SubClase public Circulo(int x, int y, double r){
super(x,y);
this.r = r;
}
}

Invocar a Mtodos de la SuperClase: Similar a la palabra


reservada this, pero la diferencia es que referencia a los mtodos de
la SuperClase.
Sintaxis:
super.metodo(); //Invoca al mtodo de la SuperClase
super.metodo(Lista parmetros); //Invoca al mtodo con
Parmetros de la SuperClase
Ing. Jess Bernardo Olavarria Paz

OOP con Java

Sobreescritura de Mtodos
Cuando definimos en una subclase un mtodo del mismo
nombre y tipo que en la superclase, por lo tanto el mtodo de
la superclase queda oculto.
Ejemplo
public class Instrumento{ //SuperClase
public void tocar(){ //Mtodo
System.out.println(Tacar instrumento);
}
}

public class Trompeta extends Instrumento{


public void tocar(){ //Mtodo
System.out.println(Tacar Trompeta);
}
}

Si estamos en la SubClase Trompeta:


this.tocar() -> Referencia al mtodo de la SubClase Trompeta
super.tocar() -> Referencia al mtodo de la SuperClase Instrumento
Nota: Si colocamos las palabras reservadas static o final en la
declaracin de un mtodo. Este mtodo no se puede sobreescribir.
Ing. Jess Bernardo Olavarria Paz

OOP con Java

Tipos de Herencia

Herencia Simple:
Una clase puede heredar de una unica

Clase.

Herencia Mltiple:
Una clase puede heredar de varia clases
Clases forman un grafo dirigido acclico

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Conversiones de tipos de datos primitivos y objetos

Base
void f()
void g()

Upcast

Downcast
Subclase
void f()
void g()
void u()
void v()
void w()

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Casting entre objetos


Upcasting: La razn para el trmino upcasting es histrica y esta
basado en la manera de hacer los diagramas de herencia de la
clase, que ha sido tradicionalmente dibujado: con la raz en la
cima de la pgina, creciendo descendente.
Es casting de una subclase hacia una clase, se mueve hacia
arriba. En el Upcasting es siempre seguro porque se hace desde
un tipo especfico a un tipo mas general. La clase derivada es
una subclase de la clase base. Esta clase derivada puede
contener ms mtodos que la super clase pero al menos debe
contener los mtodos de la super clase.
Para este caso, no se necesita una notacin especial.
Downcasting: En el caso de upcasting, vimos que se pierde la
informacin del tipo especfico. Para el caso de downcasting, la
clase base no puede ser mas grande que su clase derivada. Por
ejemplo, no se sabe realmente si un instrumento es actualmente
una guitarra, podra ser otra subclase, por ejemplo, bateria o
trompeta..
Ing. Jess Bernardo Olavarria Paz

OOP con Java

Casting entre objetos

Para el ejemplo de Punto y Circulo, podemos explicar el casting de la siguiente


manera:
public class Figuras{
public static void main(String arg[]){
Punto p;
Circulo c;
p = new Punto(2,3);
c = new Circulo(5,6,10);
System.out.println(p);
System.out.println(c);
//a continuacin mostramos el upcasting
p = c;
System.out.println(Datos del circulo: +p); // llamada por defecto
// a toString() del circulo
}
}

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Polimorfismo
Polimorfismo significa que una misma operacin puede
comportarse de modo distinto en clases distintas.
El Polimorfismo se traduce como un objeto y muchas formas.
Es la abstraccin o similitud con el caso de la realidad donde
un objeto reacciona ante un mismo mensaje de diversas
formas.
En realidad puede observarse polimorfismo en dos
circunstancia:

Polimorfismo en la misma clase.


Polimorfismo en las subclases de una clase.
Ing. Jess Bernardo Olavarria Paz

OOP con Java

Polimorfismo en la misma clase

Un objeto de la realidad puede reaccionar (comportarse) a un mismo mensaje de


acuerdo al tipo de informacin contenido. En POO se denomina: Sobre carga
esttica de mtodos, lo cual significa que un objeto de una clase puede reaccionar a
un mismo mensaje de acuerdo a este ultimo (al tipo de dato, que es un objeto, en el
mensaje). Puede existir mas de una implementacin de un mtodo. Las
implementaciones del mtodo tendrn el mismo nombre pero no la misma
especificacin.
class Gato{
..
}
class Perro{
..
}
class Perro{
public void sniff(Gato g){System.out.println(Huelo un ratn...);}
public void sniff(Perro p){System.out.println(Huelo un hueso...);}
}

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Polimorfismo en subclases

En realidad, objetos de la misma clase pueden reaccionar ante un mismo mensaje de manera diferente
solo por el hecho de pertenecer a subclases diferentes. En POO se denomina: Polimorfismo dinmicos
por niveles (sobre escritura de mtodos en la subclases) esto significa que usando subclases puede
construirse por niveles un polimorfismo dinmico y en tiempo de ejecucin.
class Pato{
..
}
class Perro{
..
}
class PerroDeCasa extends Perro{
public void ver(Pato p){System.out.println(Que lindo perrito...);}
}
class PerroDeCaza extends Perro{
public void ver(Pato p){System.out.println(Amo, disparale de una vez...);}
}

Ing. Jess Bernardo Olavarria Paz

OOP con Java

abstract

Una clase abstracta es cuando se pueden declarar clases que tan solo definan parte
de una implementacin, y dejar las clases extendidas para proporcionar
implementacin especfica de algunos de los mtodos o todos ellos.
La abstraccin es til cuando parte del comportamiento es verdadero para la
mayora o el total de los objetos de determinado tipo, pero cierto comportamiento
slo tiene sentido para tipos particulares de objetos y no para una superclase
general.
En Java, una clase abstract y cada mtodo no implementado en la clase se marca
especficamente como abstract.

Ing. Jess Bernardo Olavarria Paz

10

OOP con Java

abstract: Implementacin de clases abstractas


Figura 2D
dim1
dim2
area()

Triangulo
area()

Circulo
area()

Rectngulo
area()

Ing. Jess Bernardo Olavarria Paz

OOP con Java

Abandonar Sobre-escritura de mtodos con final


Si por alguna razn no se quiere permitir la sobreescritura del mtodo, se le puede declarar con final.

Ing. Jess Bernardo Olavarria Paz

11

OOP con Java

Abandonar la herencia con final


Se puede prevenir la creacin de subclases de una
clase declarando toda la clase final.

Ing. Jess Bernardo Olavarria Paz

12

S-ar putea să vă placă și