Vous êtes sur la page 1sur 10

29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo

http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 1/10
Algunas Ideas de Ingenieria
Comunicaciones Control Java PHP Sistemas Digitales Visual Studio.Net
jueves, 13 de septiembre de 2012
Herencia y polimorfismo
Herencia
La herencia es el concepto que permite que se puedan definir nuevas clases basadas en clases existentes, con el fin de re-
utilizar cdigo previamente desarrollado generando una jerarqua de clases dentro de la aplicacin. Entonces, si una clase se
deriva de otra, esta hereda sus atributos y mtodos. La clase derivada puede aadir nuevos atributos y mtodos y/o redefinir
los atributos y mtodos heredados. Para que un atributo y mtodo puedan ser heredados, es necesario que su visibilidad sea
protected.
En Java, a diferencia de otros lenguajes orientados a objetos, una clase slo puede derivar de una nica clase, con lo cual no
es posible realizar herencia mltiple con base en clases. Sin embargo, es posible simular la herencia mltiple con base en
las interfaces.
Un ejemplo del concepto de herencia puede ser considerando los miembros de una institucin de educacin. La institucin
est conformada por personas, pero cada persona tiene un rol dentro de la institucin, que podra ser: empleado, estudiante,
egresado. As mismo, de empleado se podra derivar la clasificacin acadmico, administrativo. De acadmico se puede
derivar, decano, coordinador, docente. De administrativo se puede derivar, de acuerdo a la cantidad de departamentos de la
institucin.
La representacin de herencia del caso anteriormente expuesto en lenguaje de modelado es la siguiente.
Otro ejemplo del concepto de herencia es el de figuras geomtricas. Se puede considerar una clase denominada
FiguraGeometrica, del cual heredan las clases Cuadrado, Circulo, Triangulo y Rectngulo.
En este caso, la clase FiguraGeometrica, poseera un atributo que puede ser llamado valor1. Este atributo es heredado por las
clases Cuadrado, Circulo, Triangulo y Rectngulo. Sin embargo, las clases Rectngulo y Triangulo requieren dos valores. Esto
indica que deben incluirse como atributos de cada una de estas clases.
Por otro lado, la clase FiguraGeometrica puede implementar los mtodos consultores y modificadores, los que podrn ser
usados por cada una de las clases que la heredan.
As mismo, de la clase Cuadrado, es posible heredar la clase Cubo. De la clase Triangulo es posible heredar la clase Pirmide
y Cono. De la clase Circulo es posible heredar la clase Esfera y Cilindro.
La representacin de herencia del caso anteriormente expuesto en lenguaje de modelado es la siguiente.
Blog en Ingles
Vea tambien
Buscar
Buscar en este
blog
Contadores Sincronos
Restador de 4 bits
Contadores Asincronos
Herencia y
polimorfismo
Diagrama de Bloques
Acceso a Bases de
Datos
Codigo Hamming
Decodificadores
Modulacion en
Amplitud
Conversores de Codigo
Entradas
Populares
Compartir
2

Ms

Siguiente blog Crear un blog

Acceder
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 2/10
Sentencia Extends
La sentencia extends permite implementar el concepto de herencia. Se incluye para que una clase herede de otra clase. Por
ejemplo, en el caso de jerarqua de herencia de personal acadmico, debe existir una clase persona y una clase estudiante. Al
implementar la clase estudiante, se le debe incluir la sentencia extends para que herede de la clase persona. La sintaxis es la
siguiente.
Una vez incluida la sentencia extends, la clase estudiante tiene acceso a atributos y mtodos protegidos de la clase persona.
Sentencia super
La sentencia super es utilizada para acceder a mtodos implementados en la clase superior en el concepto de herencia. Esta
sentencia es comnmente utilizada para acceder al constructor de la clase superior desde el constructor de la clase inferior.
Por ejemplo en el caso de jerarqua de herencia de personal acadmico, debe existir una clase persona con atributos como
identificacin, nombre, apellido y correo, y una clase estudiante que puede acceder a estos atributos pero que adicionalmente
tiene atributos como cdigo y facultad. Al implementar el constructor de la clase estudiante para asignar los valores de los
atributos, se puede hacer un llamado al constructor de la clase persona envindole los parmetros definidos en dicha clase. La
sintaxis es la siguiente.
En el ejemplo anterior, el constructor de la clase estudiante, hace un llamado al constructor de la clase persona asignando los
valores a los atributos all definidos.
Sobre-escritura de mtodos
La sobre-escritura de mtodos es una caracterstica que se presenta en el concepto de herencia que consiste en implementar
un mtodo en la clase superior e inferior en la jerarqua de herencia. Por ejemplo, considerando las clases cuadrado y cubo de
la jerarqua de Figuras Geomtricas que se presenta en la siguiente figura, es posible crear un mtodo getArea tanto para la
clase cuadrado y para la clase cubo. Entonces, si se crea una referencia de la clase cuadrado, dependiendo de la instancia del
objeto que se crea que puede ser de cuadrado o cubo, se accede al mtodo implementado en cuadrado o en cubo
respectivamente.
1 public class Persona{
2 ...
3 }
4
5 public class Estudiante extends Persona{
6 ...
7 }
01 public class Persona{
02
03 protected int id
04 protected String nombre
05 protected String apellido
06 protected String correo
07
08 public Persona(int id, String nombre, String apellido, String correo){
09 this.id=id;
10 this.nombre=nombre;
11 this.apellido=apellido;
12 this.correo=correo;
13 }
14 }
01 public class Estudiante extends Persona{
02
03 private int codigo
04 private String facultad
05
06 public Estudiante(int id, String nombre, String apellido, String correo, int codigo, String
facultad){
07 super(id, nombre, apellido, correo);
08 this.codigo=codigo;
09 this.facultad=facultad;
10 }
11 }
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 3/10
La implementacin de esta jerarqua es la siguiente
Clase Cuadrado
Clase Cubo
En la implementacin anterior, sobre escribe el mtodo getArea, debido a que el rea del cuadrado es diferente al rea del
cubo. Java identifica a cual mtodo sobre-escrito debe acceder en tiempo de ejecucin.
Clases Abstractas
Una clase abstracta es aquella que no puede ser instanciada, es decir, no se pueden crear objetos de esta clase. Se usa para
permitir que otras clases hereden de esta proporcionando atributos y mtodos que son comunes de las clases heredadas. La
sintaxis para la creacin de una clase abstracta es la siguiente
Una clase abstracta puede contener atributos y mtodos. Sin embargo, adicionalmente, puede contener mtodos abstractos,
los cuales son definidos pero no implementados. Su finalidad es que las clases que heredan de la clase abstracta,
implementen de forma obligatoria dichos mtodos abstractos.
Con base en la jerarqua de herencia de Figuras Geomtricas, la implementacin de la clase FiguraGeometrica es la siguiente
De esta forma, las clases que hereden de la clase FiguraGeometrica, pueden acceder al atributo valor1, a los mtodos
getValor1 y setValor1 y deben implementar los mtodos getArea y getPerimetro.
Cuando se implementa una clase abstracta, es importante tener en cuenta que la clase no debe ser instanciada. Por ejemplo
en el caso de FiguraGeometrica, no se debe crear un objeto instancia de esta clase, debido a que FiguraGeometrica en la
realidad acta como una generalizacin, es decir, para realizar clculos sobre una figura, es necesario determinar a que figura
se hace referencia como por ejemplo, un cuadrado o un triangulo. Por otro lado, al definir un mtodo abstracto, es necesario
01 package FigurasGeometricas;
02
03 public class Cuadrado {
04 protected int valor1;
05
06 public Cuadrado(double valor1) {
07 this.valor1=valor1;
08 }
09
10 public double getArea() {
11 return Math.pow(this.valor1, 2);
12 }
13 }
01 package FigurasGeometricas;
02
03 public class Cubo extends Cuadrado {
04
05 public Cubo(double valor1) {
06 super(valor1);
07 }
08
09 public double getArea() {
10 return Math.pow(this.valor1, 3);
11 }
12 }
1 public abstract class FiguraGeometrica {
2 ...
3 }
01 package FigurasGeometricas;
02
03 public abstract class FiguraGeometrica {
04
05 protected double valor1;
06
07 public FiguraGeometrica(double valor1) {
08 super();
09 this.valor1 = valor1;
10 }
11
12 public double getValor1() {
13 return valor1;
14 }
15
16 public void setValor1(double valor1) {
17 this.valor1 = valor1;
18 }
19
20 public abstract double getArea();
21 public abstract double getPerimetro();
22 }
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 4/10
identificar que servicios deben obligatoriamente implementar las clases que hereden de la clase abstracta. Por ejemplo,
cualquier figura como cuadrado o triangulo tienen rea y tienen permetro. Por consiguiente estos servicios deben ser
implementados mediante la definicin de un mtodo abstracto.
De esta manera la implementacin de las clases que heredan de FiguraGeometrica es la siguiente.
Clase Cuadrado
Clase Circulo
Clase Triangulo
Clase Rectangulo
01 package FigurasGeometricas;
02
03 public class Cuadrado extends FiguraGeometrica {
04
05 public Cuadrado(double valor1) {
06 super(valor1);
07 }
08
09 @Override
10 public double getArea() {
11 return Math.pow(this.valor1, 2);
12 }
13
14 @Override
15 public double getPerimetro() {
16 return this.valor1*4;
17 }
18 }
01 package FigurasGeometricas;
02
03 public class Circulo extends FiguraGeometrica {
04
05 public Circulo(double valor1) {
06 super(valor1);
07 }
08
09 @Override
10 public double getArea() {
11 return Math.PI*Math.pow(this.valor1, 2);
12 }
13
14 @Override
15 public double getPerimetro() {
16 return Math.PI*this.valor1;
17 }
18 }
01 package FigurasGeometricas;
02
03 public class Triangulo extends FiguraGeometrica {
04 private double valor2;
05
06 public Triangulo(double valor1, double valor2) {
07 super(valor1);
08 this.valor2 = valor2;
09 }
10
11 public double getValor2() {
12 return valor2;
13 }
14
15 public void setValor2(double valor2) {
16 this.valor2 = valor2;
17 }
18
19 @Override
20 public double getArea() {
21 return (this.valor1*this.valor2)/2;
22 }
23
24 @Override
25 public double getPerimetro() {
26 return this.valor1 + (2 * Math.sqrt((Math.pow(this.valor1, 2)+Math.pow(this.valor2, 2))));
27 }
28 }
01 package FigurasGeometricas;
02
03 public class Rectangulo extends FiguraGeometrica {
04 private double valor2;
05
06 public Rectangulo(double valor1, double valor2) {
07 super(valor1);
08 this.valor2 = valor2;
09 }
10
11 public double getValor2() {
12 return valor2;
13 }
14
15 public void setValor2(double valor2) {
16 this.valor2 = valor2;
17 }
18
19 @Override
20 public double getArea() {
21 return this.valor1*this.valor2;
22 }
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 5/10
Interfaces
Una interface es un tipo especial de clase que permite realizar un conjunto de declaraciones de mtodos sin implementacin.
En una interface tambin se pueden definir constantes, que son implcitamente public, static y final y deben siempre
inicializarse en la declaracin.
Para que una clase use las definiciones de una interface, dicha clase debe incluir la sentencia implements el cual indica que
implementa la interface. La sintaxis es la siguiente.
El objetivo de los mtodos declarados en una interface es definir un tipo de conducta para las clases que implementan dicha
interface. Todas las clases que implementan una determinada interface estn obligadas a proporcionar una implementacin de
los mtodos declarados en la interface, adquiriendo un comportamiento.
Una clase puede implementar una o varias interfaces. Para indicar que una clase implementa ms de una interface se ponen
los nombres de las interfaces, separados por comas, posterior a incluir la sentencia implements. La sintaxis es la siguiente
Un ejemplo del uso de interfaces con base en el modelo de herencia de figuras geomtricas es el siguiente. En este ejemplo,
se plantea la posibilidad de dibujar una figura, como circulo o rectngulo. Para ello, se crea una interface denominada
FiguraDibujable que contiene mtodos que definen comportamiento de dibujo de la figura. Entonces se puede hacer una clase
que herede de Circulo e implemente FiguraDibujable y una clase que herede de Rectangulo e implemente FiguraDibujable.
Clase FiguraGeometrica
Interface FiguraDibujable
Clase Circulo
23
24 @Override
25 public double getPerimetro() {
26 return 2*this.valor1 + 2*this.valor2;
27 }
28 }
1 public interface MiInterface {
2 ...
3 }
4
5 public class MiClase implements MiInterface {
6 ...
7 }
1 public class MiClase implements MiInterface1, MiInterface2, MiInterfaceN {
2 ...
3 }
01 package FigurasGeometricas;
02
03 public abstract class FiguraGeometrica {
04
05 protected double valor1;
06
07 public FiguraGeometrica(double valor1) {
08 super();
09 this.valor1 = valor1;
10 }
11
12 public double getValor1() {
13 return valor1;
14 }
15
16 public void setValor1(double valor1) {
17 this.valor1 = valor1;
18 }
19
20 public abstract double getArea();
21 public abstract double getPerimetro();
22 }
1 package FigurasGeometricas;
2
3 import java.awt.Graphics;
4
5 public interface FiguraDibujable {
6 public void setCoordenadas(int x, int y);
7 public void dibujar2D(Graphics g);
8 }
01 package FigurasGeometricas;
02
03 public class Circulo extends FiguraGeometrica {
04
05 public Circulo(double valor1) {
06 super(valor1);
07 }
08
09 @Override
10 public double getArea() {
11 return Math.PI*Math.pow(this.valor1, 2);
12 }
13
14 @Override
15 public double getPerimetro() {
16 return Math.PI*this.valor1;
17 }
18 }
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 6/10
Clase CirculoDibujable
Clase Rectangulo
Clase RectanguloDibujable
POLIMORFISMO
El polimorfismo es la caracterstica de la programacin orientada a objetos que permite modificar la instancia de un objeto en
tiempo de ejecucin basado en una jerarqua de herencia. De esta forma, es posible generar una relacin de vinculacin
denominada binding. El polimorfismo se puede realizar con clases superiores normales, abstractas e interfaces.
El objetivo del polimorfismo, consiste en poder acceder a diferentes servicios en tiempo de ejecucin sin necesidad de
implementar diferentes referencias a objetos. Esta caracterstica, provee una gran flexibilidad en el proceso de desarrollo y
ejecucin de la aplicacin.
Por ejemplo, considerando la jerarqua de herencia de Figuras Geomtricas de la siguiente figura, es posible hacer uso del
concepto de polimorfismo.
01 Clase CirculoDibujable
02 package FigurasGeometricas;
03 import java.awt.Graphics;
04
05 public class CirculoDibujable extends Circulo implements FiguraDibujable {
06 private int x;
07 private int y;
08
09 public CirculoDibujable(double valor1, int x, int y) {
10 super(valor1);
11 this.x = x;
12 this.y = y;
13 }
14
15 @Override
16 public void setCoordenadas(int x, int y) {
17 this.x=x;
18 this.y=y;
19 }
20
21 @Override
22 public void dibujar2D(Graphics g) {
23 g.drawOval(this.x, this.y, (int)this.valor1, (int)this.valor1);
24 }
25 }
01 package FigurasGeometricas;
02
03 public class Rectangulo extends FiguraGeometrica {
04 protected double valor2;
05
06 public Rectangulo(double valor1, double valor2) {
07 super(valor1);
08 this.valor2 = valor2;
09 }
10
11 public double getValor2() {
12 return valor2;
13 }
14
15 public void setValor2(double valor2) {
16 this.valor2 = valor2;
17 }
18
19 @Override
20 public double getArea() {
21 return this.valor1*this.valor2;
22 }
23
24 @Override
25 public double getPerimetro() {
26 return 2*this.valor1 + 2*this.valor2;
27 }
28 }
01 package FigurasGeometricas;
02
03 import java.awt.Graphics;
04
05 public class RectanguloDibujable extends Rectangulo implements FiguraDibujable {
06 private int x;
07 private int y;
08
09 public RectanguloDibujable(double valor1, double valor2, int x, int y) {
10 super(valor1, valor2);
11 this.x = x;
12 this.y = y;
13 }
14
15 @Override
16 public void setCoordenadas(int x, int y) {
17 this.x=x;
18 this.y=y;
19 }
20
21 @Override
22 public void dibujar2D(Graphics g) {
23 g.drawRect(this.x, this.y, (int)this.valor1, (int)this.valor2);
24 }
25 }
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 7/10
Con base en el modelo anterior, se puede crear una referencia de la clase FiguraGeometrica de la siguiente forma.
A la referencia figura se le puede generar instancia de cualquiera de las clases que derivan de ella de la siguiente forma.
En la primera lnea, el objeto figura tiene la forma de circulo, de tal forma que si se accede al mtodo getArea, se ejecuta el
mtodo implementado en crculo.
En la segunda lnea, el objeto figura tiene la forma de cuadrado, de tal forma que si se accede al mtodo getArea, se ejecuta el
mtodo implementado en cuadrado.
En la tercer lnea, el objeto figura tiene la forma de rectngulo, de tal forma que si se accede al mtodo getArea, se ejecuta el
mtodo implementado en rectngulo.
En la cuarta lnea, el objeto figura tiene la forma de triangulo, de tal forma que si se accede al mtodo getArea, se ejecuta el
mtodo implementado en triangulo.
En la quinta lnea, el objeto figura tiene la forma de cubo, de tal forma que si se accede al mtodo getArea, se ejecuta el
mtodo implementado en cubo.
La siguiente implementacin del modelo presentado demuestra en tiempo de ejecucin el concepto de polimorfismo.
Clase FiguraGeometrica
Clase Circulo
1 FiguraGeometrica figura;
1 figura = new Circulo(5);
2 figura = new Cuadrado(5);
3 figura = new Rectangulo(5,2);
4 figura = new Triangulo(5,2);
5 figura = new Cubo(5);
01 package FigurasGeometricas;
02
03 public abstract class FiguraGeometrica {
04
05 protected double valor1;
06
07 public FiguraGeometrica(double valor1) {
08 super();
09 this.valor1 = valor1;
10 }
11
12 public double getValor1() {
13 return valor1;
14 }
15
16 public void setValor1(double valor1) {
17 this.valor1 = valor1;
18 }
19
20 public abstract double getArea();
21 public abstract double getPerimetro();
22 }
01 package FigurasGeometricas;
02
03 public class Circulo extends FiguraGeometrica {
04
05 public Circulo(double valor1) {
06 super(valor1);
07 }
08
09 @Override
10 public double getArea() {
11 return Math.PI*Math.pow(this.valor1, 2);
12 }
13
14 @Override
15 public double getPerimetro() {
16 return Math.PI*this.valor1;
17 }
18 }
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 8/10
Clase Cuadrado
Clase Rectangulo
Clase Triangulo
Clase Cubo
Clase Principal
01 package FigurasGeometricas;
02
03 public class Cuadrado extends FiguraGeometrica {
04
05 public Cuadrado(double valor1) {
06 super(valor1);
07 }
08
09 @Override
10 public double getArea() {
11 return Math.pow(this.valor1, 2);
12 }
13
14 @Override
15 public double getPerimetro() {
16 return this.valor1*4;
17 }
18 }
01 package FigurasGeometricas;
02
03 public class Rectangulo extends FiguraGeometrica {
04 protected double valor2;
05
06 public Rectangulo(double valor1, double valor2) {
07 super(valor1);
08 this.valor2 = valor2;
09 }
10
11 public double getValor2() {
12 return valor2;
13 }
14
15 public void setValor2(double valor2) {
16 this.valor2 = valor2;
17 }
18
19 @Override
20 public double getArea() {
21 return this.valor1*this.valor2;
22 }
23
24 @Override
25 public double getPerimetro() {
26 return 2*this.valor1 + 2*this.valor2;
27 }
28 }
01 package FigurasGeometricas;
02
03 public class Triangulo extends FiguraGeometrica {
04 private double valor2;
05
06 public Triangulo(double valor1, double valor2) {
07 super(valor1);
08 this.valor2 = valor2;
09 }
10
11 public double getValor2() {
12 return valor2;
13 }
14
15 public void setValor2(double valor2) {
16 this.valor2 = valor2;
17 }
18
19 @Override
20 public double getArea() {
21 return (this.valor1*this.valor2)/2;
22 }
23
24 @Override
25 public double getPerimetro() {
26 return this.valor1 + (2 * Math.sqrt((Math.pow(this.valor1, 2)+Math.pow(this.valor2, 2))));
27 }
28 }
01 package FigurasGeometricas;
02
03 public class Cubo extends Cuadrado {
04
05 public Cubo(double valor1) {
06 super(valor1);
07 }
08
09 public double getArea() {
10 return Math.pow(this.valor1, 3);
11 }
12 }
01 package FigurasGeometricas;
02
03 public class Principal {
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 9/10
Entrada ms reciente Entrada antigua Pgina principal
Suscribirse a: Enviar comentarios (Atom)
Publicado por Hector Florez Fernandez en 17:07

Etiquetas: Java
Salida Estandar
En la implementacin de la clase Principal, se puede apreciar que el objeto figura cambia de forma cada vez que se hace una
nueva instancia. As mismo en cada instancia accede a la implementacin del mtodo de la clase instanciada.
El ltimo caso, realiza la instancia de la clase Cubo, en donde esta clase no tiene implementado el mtodo getPerimetro. Para
este caso, en el llamado a este mtodo, se accede al mtodo getPerimetro implementado en la clase superior que es
Cuadrado.
04
05 public static void main(String[] args) {
06 FiguraGeometrica figura;
07 figura = new Circulo(5);
08 System.out.println(figura.getClass());
09 System.out.println("Area: "+figura.getArea());
10 System.out.println("Perimetro: "+figura.getPerimetro());
11 figura = new Cuadrado(5);
12 System.out.println(figura.getClass());
13 System.out.println("Area: "+figura.getArea());
14 System.out.println("Perimetro: "+figura.getPerimetro());
15 figura = new Rectangulo(5,2);
16 System.out.println(figura.getClass());
17 System.out.println("Area: "+figura.getArea());
18 System.out.println("Perimetro: "+figura.getPerimetro());
19 figura = new Triangulo(5,2);
20 System.out.println(figura.getClass());
21 System.out.println("Area: "+figura.getArea());
22 System.out.println("Perimetro: "+figura.getPerimetro());
23 figura = new Cubo(5);
24 System.out.println(figura.getClass());
25 System.out.println("Area: "+figura.getArea());
26 System.out.println("Perimetro: "+figura.getPerimetro());
27 }
28 }
01 class FigurasGeometricas.Circulo
02 Area: 78.53981633974483
03 Perimetro: 15.707963267948966
04 class FigurasGeometricas.Cuadrado
05 Area: 25.0
06 Perimetro: 20.0
07 class FigurasGeometricas.Rectangulo
08 Area: 10.0
09 Perimetro: 14.0
10 class FigurasGeometricas.Triangulo
11 Area: 5.0
12 Perimetro: 15.770329614269007
13 class FigurasGeometricas.Cubo
14 Area: 125.0
15 Perimetro: 20.0
+2 Recomendar esto en Google
Introduce tu comentario...
Comentar como:
Cuenta de Google
Publicar

Vista previa
Crear un enlace
No hay comentarios:
Publicar un comentario en la entrada
Enlaces a esta entrada
29/5/2014 Algunas Ideas de Ingenieria: Herencia y polimorfismo
http://hflorezf-es.blogspot.com/2012/09/herencia-y-polimorfismo.html 10/10
Plantilla Awesome Inc.. Con la tecnologa de Blogger.

Vous aimerez peut-être aussi