herencia y polimorfismo en csharp

Download Herencia y Polimorfismo en CSharp

Post on 05-Jul-2015

1.227 views

Category:

Documents

7 download

Embed Size (px)

TRANSCRIPT

UNIVERSIDADDECORDOBA FACULTADDECIENCIASBASICASEINGENIERIAS PROGRAMAINGENIERIADESISTEMAS CURSO:ElectivadeprofundizacinI(desarrollodesoftwarelibre) TEMA:HerenciaypolimorfismoenC#. DESCRIPCION: Desarrollo practico del tema de la herencia y el polimorfismo en C#, abordandoaspectosdellenguajecomolaimplementacindeclases,reasdevisibilidad, declaracindepropiedades,sintaxisparadefinirlaherencia,clasesabstractasymtodos polimrficosdeltiposabstracto,virtualysobreescritousandoparaellounaaplicacinde consola.Eldocumentopresentaalrespectolospasosnecesariosparacrear,compilary ejecutar una aplicacin de consola desde el entorno de desarrollo integrado (IDE) MonoDevelopenLinuxparaellenguajeC#. OBJETIVO: Disear e implementar en el lenguaje C# una jerarqua de clases para ejemplificarconunaaplicacindeconsolalosconceptosdeherenciaypolimorfismoen este lenguaje integrando conceptos nuevos de orientacin a objetos como el uso de propiedades,especificandolospasosparaconstruir,compilaryejecutarlaaplicacinen elentornodedesarrolloMonoDevelop. PALABRASCLAVES:DiseodeclasesUML,HerenciaypolimorfismoenC#,mtodos virtuales, abstractos y sobreescritos en C#, desarrollo de aplicaciones de consola en MonoDevelop. DESARROLLO:Acontinuacinsepresentaundiagramadeclasesenelqueseilustra unajerarquadeclasesquepermitenrealizarlascuatrooperacionesbsicasentredos nmerosenteros,empleadoparaellounaclaseabstractaqueserdeclasepadreyenla quelosdosnmerossemodelanconelconceptodepropiedad,ademssepresentarala formadetrabajodeC#conrelacinalosmtodospolimrficosyelllamadodemtodos delaclasepadredesdemtodosdelaclasehijaconelapuntadorbase.

Lic. Luis Roberto Olascoaga Surmay

Diagramadeclases Elsiguientediagramadeclasesilustralasclases necesarias paraelejemploconuna relacindeherenciaentrelaclasepadreobaseTNumeros(queesabstracta),susclases hijas correspondientes a cada una de las cuatro operaciones bsicas. Observe la convencin seguida en el diseo para expresar conceptos de orientacin a objetos propiosdellenguajeC#,comosonloscasosdelaspropiedades,losmtodosvirtuales, abstractosysobreescrito.NotequeelmtodoMostrar()delaclasepadreTNumerosno esobligadoimplementarloporlasclasehijas,porellolaclaseTRestanolohaceaunque lasotrassilosobreescribe,estedetalleseexplicamasadelante.

Lic. Luis Roberto Olascoaga Surmay

Implementacin. 1. EntrarenMonodevelop:Aplicaciones+programacin+Monodevelop

ElIDE(entornodedesarrollointegrado)demonodevelopescomosigue:

2. Crearunanuevasolucin:Archivo+nuevo+solucin.

Lic. Luis Roberto Olascoaga Surmay

Conloquesedespliegalasiguienteventana,enlaquedelnodoC#delalistaplantilla seleccionamos la opcin proyecto de consola. Seguidamente asigne un nombre al proyecto (para el caso ejemplo1) y de forma opcional seleccione un directorio para guardarelproyectoconsusarchivosrespectivos,usandoparaelloelbotnexaminar.Si marcalaopcincrearsubdirectoriodesolucinporseparado,MonoDevelopcrearaun directorioaparteconelmismonombredelasolucinparacontenerenelloslosarchivos decdigofuentedeclase(.cs)quecuelgadentrodeldirectorio(raz)delasolucin,enel quevanlosarchivosdeproyectoyconfiguracin.Seguidamentepulseelbotnadelante.

3. Posteriormente se presenta una ventana en la que puede aadir otros proyectos adicionalesalasolucin,loscualessoncompletamenteopcionales.Asporejemplo tenemoslaopcinparasoporteGTK#,lacualesempleadaporlasaplicacionesque tendrnunainterfazgraficadeusuario(GUI)endondedesarrollamosconventanasy eventos.Igualmentevemoslaopcinpara unproyectodetraduccin,conelfinde creararchivosnecesariosquepermitancambiardurantelaejecucindelprogramanel

Lic. Luis Roberto Olascoaga Surmay

idioma de la interfaz del usuario, incluido los posibles mensajes de texto que se presentenalusuariofinal. Para este caso ninguna de estas opciones son necesarias y por ello no debe marcarlas. En la ventana siguiente se observan estas opciones y se aprecia una descripcinbastanteclaraalrespecto.

4. Lasiguientepantallailustraelestadoinicialdelasolucin,dondeenelpanelizquierdo vemoselinspectordelasolucin,mostrandolasreferencias(ensambladosexternos) ylasclasesquecomponenelproyecto,paraestecasoelarchivoprincipalMain.cs quecontienelaclaseMainClasspresentadaenelpaneldeladerecha.Enestese apreciaqueladefinicindelaclaseseencuentradentrodeunnombredeespacio (namespace)llamadoejemplo1,queesmismonombredelasolucin.Laclasetiene pordefectounnicomtodoqueespblico,esttico(static),tipovoidllamadoMainy que recibe por parmetro un vector de cadenas de caracteres (Qu representan estosparmetros?).

Lic. Luis Roberto Olascoaga Surmay

Enesteejercicionoesnecesariousarlosnombresdeespacio,porlotantoentodos losarchivosdeclasequecrearemosincluidoeldelaclaseprincipal,quitaremosla declaracindelnombredeespacioylallavedeapertura{ycierredeesta}.Antesde ver el cdigo de esta clase, construiremos otras clases con sus correspondientes archivosdecdigofuente(.cs) 5. Anadirunanuevaclase:Clickderechoenelnombredelasolucin(ejemplo1)+aadir +nuevoarchivo.

6. Enlasiguienteventanaseleccionedelpaneldelaizquierdalaopcingeneral,luego

del panel de laderecha marque clase vaca y finalmente ingreseel nombrede la clase,paraestecasoserTNumeros.Finalmentepulseelbotnnuevo.

Lic. Luis Roberto Olascoaga Surmay

La pantalla de abajo ilustra el esqueleto de la clase TNumeros recin creada que seguidamenteprocederemosacompletar.

7. Implemente la clase TNumeros como indica en la pantalla de abajo, siguiendo la sugerencia anteriormente sealada borrando el nombre de espacio. En C# el constructor de una clase tiene el mismo nombre de la clase, una visibilidad (normalmentepublica)peronoseindicaningntipoderetornonisiquieravoid.Enla implementacin del constructor, se inicia los dos atributos a cero y se imprimeun mensajeindicandoqueseestaejecutandoelconstructordelaclasepadre,estonoes necesario para la funcionalidad de la clase, solo se ha incluido para que usted compruebequeconstructoresseutilizanencadaobjetoinicializado.Estaclasecomo caractersticasprincipalestienequeesabstractaporlocualseprecedesudeclaracin de la palabra reservada abstract. Esta clase declara dos atributos ambos de tipo entero,paradefinirposteriormenteconellosdospropiedadesdelmismotipo,tantoel nombredelatributocomoeldelapropiedad soloobedecenaunaconvencin; de modoquealosatributosselesasignaunnombrequeempiezaporlaletraF(deField ocampo)ylapropiedadtendrelmismonombredelatributoperosinlaletraFinicial deste.

Lic. Luis Roberto Olascoaga Surmay

Comopuedeobservarseenlaimagenquesigueabajo,ladefinicindeunapropiedad es similar a la de un mtodo con la salvedad que no se indican parntesis ni parmetros para la propiedad. Aprecie adems que los mtodos que proveen el encapsuladoseincluyenenelcuerpodelapropiedaddentrodelasllaves{}deesta. Estos mtodos como es habitual son el modificador (set) y el selector (get). Una

Lic. Luis Roberto Olascoaga Surmay

propiedadenesteordendeideas,esentoncesunaformadeaccesoindirectoalos atributos,pueslapropiedad sehacepblica, elatributorelacionadoconellasigue siendoprivadoycuandoseleasignaunvaloralapropiedadesteescapturadode maneraautomticaenlavariablereservadallamadavalue,esasignadoalatributopor elmtodoset.Cuandoserequiereusarelvalordelapropiedad,estevalorsetoma delvalordelatributoyseretornaconlasentencia return enlaimplementacindel mtodo get. La clase tiene un mtodo abstracto (que carece de implementacin) llamadoOperacion()yotrovirtualllamadoMostrar()quepuedesersobreescritopor lasclaseshijasyqueesusadoparapresentarenpantallaelresultadodelaoperacin entrelosdosnmeros. 8. Siguiendolospasos5y6creeunanuevaclasellamadaTSumaqueheredadela claseabstractaTNumeros;locualenlasintaxisdeC#seindicaponiendodospuntos (:)despusdelnombredelaclasehija(TSuma)seguidodelnombredelaclasepadre (TNumeros),comoseapreciaseguidamente:

Enlaimplementacindelconstructorvemoslasentencia: base(),quesignificaque antesdedeejecutarelconstructordelaclasehijasevaaejecutarelconstructordela clasepadre.Esteconstructorenlaclasehijasolomuestraunmensajeindicandoel tipodehijo.PorelloalcrearunobjetodelaclaseTSumasemuestrandosmensajes, elqueyaindicamosenlaclasepadreseguidodelquevemosenlapresentepantalla.

Lic. Luis Roberto Olascoaga Surmay

Al heredar de una clase abstracta, la clase TSuma debe implementar todos los mtodosabstractos heredados, para elcaso se tratadel mtodo Operacion(), que debeserdefinidodeidnticaformaacomovienedelaclasepadre;esdecirconel mismonombre,mismavisibilidad,idnticotipoderesultadoeiguallistadeparmetros tanto en tipo, orden y cantidad. Cuando una clase hija implementa un mtodo abstractosedebeusarlapalabrareservadaoverride(sobreescrito)enelmomento enquese declaraelmtodoyestavezdichomtododebeteneruncuerpo,una implementacin.ParaelcasolaclaseTSumasimplementeretornalasumadelasdos propiedades Num1 + Num2. Por qu no se implemento como return FNum1+FNum2? ElmtodoMostrar()enlaclasepadrefuedeclaradocomovirtual,loquesignificaque tiene una implementacin pero puede ser sobre escrito por la clase hija, por ello tambinestaprecedidoporlapalabrareservadaoverride.Enlaimplementacindel mtodoMostrar()delaclasehijavemosquemostramoslosdosnmerosseparados porelsignodelaoperacinyluegoinvocamos(ejecutamos)laimplementacindela clasepadreparaestemismomtodo,locualsehaceusandonuevamentelapalabra reservada base,estavezindicandoelnombredelmtododelaclasepadrequese quiereejecutar.Estamismatcnicasepuedeaplicarparacualquiercasoendonde requerimos ejecutar la implementacin de un mtodo de la clase padre desde la implementacindeunmtododelaclasehija,ojosinimportarqueestosmtodosno seanlosmismos(encuantoasunombre).Qusucedesienlaimplementacindel mtodomos