Clase IV Conversión de tipos y Excepciones Objetivo Manejar la conversión entre tipos. Capturar Excepciones. Para aplicar estos conocimientos, se realizará una calculadora de divisiones.
Duración Aproximada
50 minutos Pasos 1) Crear una nueva aplicación de consola, llamada Labintaxis! ") Crear una estructura de de captura de distintas excepciones, de la si#uiente $orma% tr& ' (( Pre#unta por el dividendo (( ividendo, de strin# a decimal (( Pre#unta por el divisor (( ivisor, de strin# a decimal (( #enera la division * catc+ catc+ ivide-&eroException ivide-&eroException err) err) ' Console./riteLine Console ./riteLine0o 0o se puede dividir por cero 2 0 3 0 3 err.Messa#e)4 * catc+ catc+ 5nvalidCastException 5nvalidCastException err) err) ' Console./riteLine Console ./riteLine0Entrada 0Entrada 5nvalida 2 0 3 0 3 err.Messa#e)4 * catc+ catc+ Exception Exception err) err) ' Console./riteLine Console ./riteLine0o 0o se puede realizar la operacion 2 0 3 0 3 err.Messa#e)4 * La estructura soporta 6 tipos de excepciones. Error al dividir por cero, error de casteo u otro tipo de error. 7demas de mostrar un mensaje, muestra la propert& Messa#e del objeto Exceception capturado, 8ue brinda in$ormación 9:ser ;rendl&< sobre el error.
6) olicitar al usuario el in#reso del dividendo. Console.=eadLine) devuelve un strin#, este debe ser trans$ormado lue#o a decimal, utilizando ecimal.Parse). Console./riteLine05n#rese el dividendo0)4 strin# usr5nput > Console.=eadLine)4 decimal dividendo > ecimal.Parseusr5nput)4
4) olicitar
el divisor, de la misma $orma 8ue el dividendo ?) =ealizar la división, #uardando el valor en una variable 9resultado< 8ue lue#o será mostrada junto a un mensaje, de la si#uiente $orma% decimal resultado > dividendo ( divisor4 Console./riteLine)4 Console./riteLine0=esultado de% 0 3 dividendo.@otrin#0A.AA0) 3 0 ( 0 3 divisor.@otrin#0A.AA0))4 Console./riteLineresultado.@otrin#0A.AA0))4 Bbservar 8ue el resultado se pasa a strin#, indicando la cantidad de decimales con los 8ue se debe mostrar. ) ;inalmente, incluir todo el blo8ue de códi#o en un ciclo do D +ile, 8ue de la opción de ejecutar otra cuenta. F) Ejecutar la aplicación. 5n#resar valores correctamente. Lue#o #enerar dos excepciones% :na intentando dividir por cero, la otra in#resando una cadena de texto no valida, es decir 8ue no sea numGrica. Bbservar los mensajes. Lue#o entrar en modo debu##in#, & observar el objeto excepción. H) Para lo#rar una excepción de castin#, debemos realizar unas modi$icaciones en el códi#o. Para #enerar la división, reemplazar el códi#o por el si#uiente object resultado > dividendo ( divisor4 Console./riteLine)4 Console./riteLine0=esultado de% 0 3 dividendo.@otrin#0A.AA0) 3 0 ( 0 3 divisor.@otrin#0A.AA0))4 Console./riteLinestrin#)resultado)4 Como al dividir se obtiene un decimal, al 8ue se lo está #uardando en una variable del tipo object, lue#o, si se intenta castear resultado a strin#, esto arroja un error de 5nvalidCast. Probar el códi#o. El error no se #enerará en timpo de compilación, sino en tiempo de ejecución. I) Para lo#rar 8ue el códi#o anterior sea correcto, en lu#ar de castear resultado a strin#, castearlo a decimal, al ejecutar la aplicación, el el resultado sera el correcto.
Clases y herencia Objetivos
Escribir la primera aplicación 8ue utilice clases & +erencia. Crear una librerJa de clases
Duración Aproximada 6A minutos
Pasos 1) En Kisual tudio "AA?, crear una nueva aplicación de consola, llamada LabClases1. ") 7#re#ar un nuevo pro&ecto a la solución llamado Clases, 8ue sea de tipo Class Librar&.
6) 7l item class1.cs, renombrarlo a 7.cs. =enombrar tambien el nombre de la clase dentro del $ile. !) 7#re#ar un usin# para &stem.Console, para acceder mas rapido a los elementos de escritura & lectura de la consola. ?) La clase 7 debe tener un propert& 9ombre5nstancia<. os constructores, uno por de$ecto, 8ue asi#ne nombre instancia como 95nstancia sin nombre< & otro 8ue permita pasarle por parametro el nombre. 7demás, 1 mGtodo 9Mostrarombre< 8ue devuelva por consola el nombre de la instancia & otros tres mGtodos M1, M" & M6 8ue muestren por consola un mensaje avisando 8ue el metodo $ue invocado. Lue#o, a#re#ar un nuevo item de tipo $ile a la solución, -.cs, donde se implementará la clase -, +eredera de 7. Esta clase debe implementar el mGtodo M!, 8ue muestre por consola el mensaje 9Metodo del +ijo 5nvocado<. El constructor de - debe pasar por de$ecto, como parametro al constructor de la clase 7 95nstancia de -<. Compilar la clase. Bbservar 8ue se #enera un 7ssembl& propio, con nombre Clases. ) Para poder utilizar las clases en nuestra aplicación, será necesario re$erenciarla. Para esto, desde el olution Explorer, accedemos a las re$erencias del pro&ecto LabClases1, & a#re#amos una nueva re$erencia, +aciendo clic derec+o sobre la carpeta =e$erences.
esde el cuadro de diálo#o, nos diri#imos a la ventana Projects, para poder a#re#ar una re$erencia a un pro&ecto 8ue existe dentro de la misma solución, & ele#imos Clases. 7+ora LabClases1 9conoce< al assembl& Clases.
7)
e$inir el usin# para 9Clases< en pro#ram.cs. Crear una instancia de 7 & otra de -, observar el intellisense, & los mGtodos disponibles para cada clase. Llamar a todos los mGtodos de 7 & -, observar 8ue, si bien no $ueron de$inidos en -, M1, M" & M6 están disponibles. H) Compilar & Ejecutar la aplicación. I) Probar cambiar accesibilidad de los miembros, de public a protected & a private. Bbservar los errores en tiempo de compilación & analizarlos.
Métodos Virtuales y Ocultamiento Objetivos Comprender el uso de los modi$icadores virtual, ne & override. Poder predecir las llamadas
Duración Aproximada 6A minutos
Pasos 1) Crear una nueva aplicación de consola llamada 9LabClases"< ") 7#re#ar un pro&ecto Clases, de tipo Class Librar&. =enombrar el $ile a Clases.cs 6) Copiar el si#uiente códi#o% namespace Clases
' public class 7 ' public void ;) ' Console./riteLine07.;0)4 * public virtual void ) ' Console./riteLine07.0)4 * * public class - % 7 ' ne public void ;) ' Console./riteLine0-.;0)4 * public override void ) ' Console./riteLine0-.0)4 * * * Bbservar 8ue se estan de$iniendo dos clases en el mismo arc+ivo $Jsico. Para la CL= esto es completamente transparente. olo importa 8ue se esta de$iniendo Clases.7 & Clases.- dentro de un assembl& llamado clases. !) Compilar la librerJa. Bbservar 8ue el compilador no arroja nin#Nn arnin# ni error. ?) =e$erenciar Clases en el pro&ecto principal de la solución. Copiar el si#uiente códi#o dentro del main% - b > ne -)4 7 a > b4 a.;)4 b.;)4 a.)4 b.)4 Console.=eadOe&)4
6)
Compilar & ejecutar el códi#o. 7nalizar la salida por pantalla. F) Eliminar el modi$icador ne del mGtodo ; de la clase -. Compilar. Bbservar 8ue se arroja un arnin#, advirtiendo 8ue si es intencional el rede$inir el mGtodo ;, debe ser declarado como ne. H) uitar el operador override de -.). Bbservar 8ue arroja un arnin#, & 8ue al ejecutar la aplicación, llama a 7.).
Class Designer Objetivos ;amiliarizarse con el :so del Class esi#ner. =e$orzar conceptos de PBB & intaxis de len#uaje
Duración Aproximada !? minutos
Recomendaciones Crear una estructura de clases compleja, 8ue utilice clases abstractas e 5nter$aces & 8ue modelice el mundo real se puede extender el ejercicio del módulo de PBB). esarrollarla en el Class esi#ner. 7#re#arle
mGtodos 8ue muestren mensajes de consola in$ormando 8ue $ueron invocados. Por ejemplo, una clase base abstracta, 7nimal, 8ue ten#a un mGtodo virtual, 9Emitironido<. En la implementacion en cada una de las clases +ijas, debe escribirse el resultado, por ejemplo, en Perro, al invocar 9Emitironido< el mensaje en consola debe decir 9Perro Ladrando<. e esta $orma, se puede +acer un se#uimiento del llamado de mGtodos.