Adrián Intriago Meza 1 “A” Sistemas Clases abstractas El modificador abstract se utiliza para indicar que una clase está incompleta sólo se va a utilizar como una clase base. Una clase abstracta se diferencia d 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 tip tiempo de compilaciónsean 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 abstracto #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 m todo abstracto '. /a clase + define un m tod adicional , pero no proporciona una implementación de ', por lo que + tambi n 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 1olimorfismo es uno de los pilares de la programación orientada a ob%etos que más se utiliza, lo 2nico que es de%ado de lado por los programadores en cuanto su uso en las aplicaciones de negocios.
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.