Clases Abstractas

Post on 07-Oct-2015

220 views 0 download

description

poo :3

Transcript of Clases Abstractas

Clases abstractas
El modificador abstract se utiliza para indicar que una clase está incompleta y que sólo 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 compilación utilizar el operador new en una clase abstracta. unque es posible tener variables y valores cuyos tipos en tiempo de compilación sean abstractos, tales variables y valores serán null o contendrán referencias a instancias de clases no abstractas derivadas de los tipos abstractos.
• !e permite que una clase abstracta contenga miembros abstractos, aunque
no es necesario.
• No se puede sellar una clase abstracta.
"uando una clase no abstracta se deriva de una clase abstracta, la clase no abstracta debe incluir implementaciones reales de todos los miembros abstractos #eredados$ por lo tanto, reemplaza a estos miembros abstractos. En el e%emplo abstract class &   public abstract void '()$ * abstract class +: &   public void () &* * class ": + &   public override void '() &   -- actual implementation of '   * *
la clase abstracta define el mtodo abstracto '. /a clase + define un mtodo adicional , pero no proporciona una implementación de ', por lo que + tambin debe ser declarada como abstracta. /a clase "reemplaza ' y proporciona una implementación real. 0ado que no #ay miembros abstractos en ", está permitido que " sea no abstracta, aunque no es necesario.
Polimorfismo
 
Adrián Intriago Meza 1 “A” Sistemas
En este post tratar de e3plicar su utilización en la programación. 1rimero tratemos de definir la palabra polimorfismo seg2n una b2squeda por internet seria, 1oli 4 muc#os y 5orfo 4 formas$ si lo decimos literalmente seria 6muc#as formas7. En programación seria la capacidad que tiene una clase en convertirse en un nuevo ob%eto sin cambiar su esencia y luego volver al ob%eto origina de donde salió. 8ay tres tipos de polimorfismo definamos cada uno:
9. polimorfismo por #erencia: cuando se #ereda de una clase normal y puedo convertirme en ella.
. polimorfismos por abstracción: cuando puedo #eredar de una clase abstracta y puedo convertirme en ella.
;. 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 com2n que e3iste, y tiene la facultad de #eredar de una clase padre y reemplazarla.
 
Adrián Intriago Meza 1 “A” Sistemas
En la clase perro tenemos un mtodo que solo nos devuelve un string. por otra parte las clases c#i#ua#ua y bulldog serán clases que #eredaran el comportamiento de la clase perro.  #ora supongamos que estos dos perros son calle%eros y viene el control de animales y los meta a la perrera. Esta perrera será un arreglo o rray en nuestro programa, de la siguiente manera:
En el arreglo perrera #e metido cada uno de los perros que instanciamos, si lo corremos nos dar<a esto:
 
Adrián Intriago Meza 1 “A” Sistemas
"onsole.=rite/ine no nos da error esto se debe que al foreac# le #emos dic#o que todo esta basado en la clase perro, de esta forma el runtime sabe que para estar  en la perrera #ay que #eredar de la clase perro en pocas palabras ser un perro. "ambiemos el comportamiento de los #i%os$ veamos supongamos que no todos los perros ladran de la misma forma el c#i#ua#ua ladra distinto que el bulldog. 1ara lograr esto la clase perro tiene que de%ar o permitir que los #i%os modifiquen el comportamiento$ miremos como quedan las clases ya modificadas:
1rimero el mtodo /adrar es de tipo virtual esto me permitirá sobrescribir este mtodo en los #i%os, en las clases #i%os usaremos la palabra clave override para sobrescribir el mtodo virtual del padre. !i corremos la aplicación de consola nos dará esto:
"uando corrimos nuestro programa no se e%ecutó el mtodo del padre sino los cambios que #icimos en los #i%os.
Polimorfismo por Abstracción:
Este tipo de polimorfismo se da con el uso de las clases abstractas. Pero que es una clase abstracta
 
Adrián Intriago Meza 1 “A” Sistemas
1rimero para lograr esto debemos de declarar la clase perro como abstracta y luego declarar el mtodo dormir para luego implementarlo en las clases #i%os, de esta forma:
"omo pueden ver #emos declarado la clase perro como abstracta y el mtodo
dormir tambin. s< que el 5ain del 1rograma tendr<amos que implementar el
mtodo abstracto de esta forma:
!i lo corremos nos dar<a este resultado:
 
Adrián Intriago Meza 1 “A” Sistemas
8ay que recordar que las clases abstractas no se pueden instanciar.
Polimorfismo por Interface:
Es uno de los polimorfismos más importantes porque está basado por contratos,
que son los encargados de decirme que puedo #acer o no y como debo de
#acerlo.
En nuestro e%emplo vamos a crear un contrato que se llamara ?1erro y definiremos
los comportamientos que queremos en nuestra interfaz para luego implementarlo
en nuestras clases #i%os, de esta forma:
 
Adrián Intriago Meza 1 “A” Sistemas
"omo 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
/adrar y 0ormir.
 
Adrián Intriago Meza 1 “A” Sistemas
Una de las venta%as de #acer este tipo de polimorfismo es que oculta la
implementación del comportamiento. 0onde podemos ver este tipo de esquema es
el ="', por que el cliente solo puede ver el servicio y no la implementación del
mtodo.