Sie sind auf Seite 1von 8

Adrin Intriago Meza

1 A Sistemas

Clases abstractas
El modificador abstract se utiliza para indicar que una clase est incompleta y que
slo se va a utilizar como una clase base. Una clase abstracta se diferencia de
una clase no abstracta en lo siguiente:

No se puede crear una instancia de una clase abstracta directamente, y es


un error en tiempo de compilacin utilizar el operador new en una clase
abstracta. Aunque es posible tener variables y valores cuyos tipos en
tiempo de compilacin sean abstractos, tales variables y valores
sern null o contendrn referencias a instancias de clases no abstractas
derivadas de los tipos abstractos.

Se permite que una clase abstracta contenga miembros abstractos, aunque


no es necesario.

No se puede sellar una clase abstracta.

Cuando una clase no abstracta se deriva de una clase abstracta, la clase no


abstracta debe incluir implementaciones reales de todos los miembros abstractos
heredados; por lo tanto, reemplaza a estos miembros abstractos. En el ejemplo
abstract class A
{
public abstract void F();
}
abstract class B: A
{
public void G() {}
}
class C: B
{
public override void F() {
// actual implementation of F
}
}
la clase abstracta A define el mtodo abstracto F. La clase B define un mtodo
adicional G, pero no proporciona una implementacin de F, por lo que B tambin
debe ser declarada como abstracta. La clase Creemplaza F y proporciona una
implementacin real. Dado que no hay miembros abstractos en C, est permitido
que C sea no abstracta, aunque no es necesario.

Polimorfismo
Polimorfismo es uno de los pilares de la programacin orientada a objetos que
ms se utiliza, lo nico que es dejado de lado por los programadores en cuanto a
su uso en las aplicaciones de negocios.

Adrin Intriago Meza

1 A Sistemas

En este post tratar de explicar su utilizacin en la programacin. Primero


tratemos de definir la palabra polimorfismo segn una bsqueda por internet seria,
Poli = muchos y Morfo = formas; si lo decimos literalmente seria muchas formas.
En programacin seria la capacidad que tiene una clase en convertirse en un
nuevo objeto sin cambiar su esencia y luego volver al objeto origina de donde
sali.
Hay tres tipos de polimorfismo definamos cada uno:
1.
polimorfismo por herencia: cuando se hereda de una clase normal y
puedo convertirme en ella.
2.
polimorfismos por abstraccin: cuando puedo heredar de una clase
abstracta y puedo convertirme en ella.
3.
polimorfismo por interface: es la posibilidad que tenemos de
implementar una interface y puedo convertirme en ella.

Polimorfismo por Herencia:


Este tipo de polimorfismo es el mas comn que existe, y tiene la facultad de
heredar de una clase padre y reemplazarla.

En un proyecto de consola tendremos que crear estas tres clases:

Adrin Intriago Meza

1 A Sistemas

En la clase perro tenemos un mtodo que solo nos devuelve un string. por otra
parte las clases chihuahua y bulldog sern clases que heredaran el
comportamiento de la clase perro.
Ahora supongamos que estos dos perros son callejeros y viene el control de
animales y los meta a la perrera. Esta perrera ser un arreglo o Array en nuestro
programa, de la siguiente manera:

En el arreglo perrera he metido cada uno de los perros que instanciamos, si lo


corremos nos dara esto:

El problema en esta ejecucin es que aunque metimos distintos perros dentro de


nuestra perrera como todos heredan de perros siempre dar el mismo mensaje.
otra cosa que podemos observar es que en el foreach cuando ejecutamos el

Adrin Intriago Meza

1 A Sistemas

Console.WriteLine no nos da error esto se debe que al foreach le hemos dicho que
todo esta basado en la clase perro, de esta forma el runtime sabe que para estar
en la perrera hay que heredar de la clase perro en pocas palabras ser un perro.
Cambiemos el comportamiento de los hijos; veamos supongamos que no todos los
perros ladran de la misma forma el chihuahua ladra distinto que el bulldog. Para
lograr esto la clase perro tiene que dejar o permitir que los hijos modifiquen el
comportamiento; miremos como quedan las clases ya modificadas:

Primero el mtodo Ladrar es de tipo virtual esto me permitir sobrescribir este


mtodo en los hijos, en las clases hijos usaremos la palabra clave override para
sobrescribir el mtodo virtual del padre. Si corremos la aplicacin de consola nos
dar esto:

Cuando corrimos nuestro programa no se ejecut el mtodo del padre sino los
cambios que hicimos en los hijos.

Polimorfismo por Abstraccin:


Este tipo de polimorfismo se da con el uso de las clases abstractas. Pero que es una clase abstracta

es aquella que adems de lo normal que contiene una clase tiene


comportamientos que si estn definidos pero no implementados.
Vemos lo siguiente que pasara si en el ejemplo anterior nos vemos en la
necesidad de implementar un comportamiento en los perros que sea dormir. El
problema que no todos los perros duermen de la misma forma cada uno lo hace a
su manera.

Adrin Intriago Meza

1 A Sistemas

Primero para lograr esto debemos de declarar la clase perro como abstracta y
luego declarar el mtodo dormir para luego implementarlo en las clases hijos, de
esta forma:

Como pueden ver hemos declarado la clase perro como abstracta y el mtodo
dormir tambin. As que el Main del Programa tendramos que implementar el
mtodo abstracto de esta forma:

Si lo corremos nos dara este resultado:

Adrin Intriago Meza

1 A Sistemas

Hay que recordar que las clases abstractas no se pueden instanciar.

Polimorfismo por Interface:


Es uno de los polimorfismos ms importantes porque est basado por contratos,
que son los encargados de decirme que puedo hacer o no y como debo de
hacerlo.
En nuestro ejemplo vamos a crear un contrato que se llamara IPerro y definiremos
los comportamientos que queremos en nuestra interfaz para luego implementarlo
en nuestras clases hijos, de esta forma:

Adrin Intriago Meza

1 A Sistemas

Como pueden ver al convertir nuestra clase perro en una interfaz, tengo que
especificar el comportamiento que quiero por parte de mi interfaz; en este caso
Ladrar y Dormir.
En el Main del Programa tendramos que cambiar esto.

Adrin Intriago Meza

1 A Sistemas

Una de las ventajas de hacer este tipo de polimorfismo es que oculta la


implementacin del comportamiento. Donde podemos ver este tipo de esquema es
el WCF, por que el cliente solo puede ver el servicio y no la implementacin del
mtodo.

Das könnte Ihnen auch gefallen