8
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

Embed Size (px)

DESCRIPTION

poo :3

Citation preview

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.