Introducción a la programación orientada a objetos con Python

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Introducción a la programación orientada a objetos con Python"

Transcripción

1 Introducciónalaprogramaciónorientadaaobjetos conpython

2 Notasacercadeesteartículo Esteartículohasidoextraídodelapáginawebhttp://blog.rvburke.comcumpliendoconlanormadecopyright establecida. Copyright RafaelVillarBurke,2006.Sepermiteladistribución,copiaymodificacióndelostextos, siempreycuandoseindiquenloscambiosrealizados,seconserveelcopyrightyestanota. SuautororiginalesRafaelVillarBurkeyelartículodatadel22deNoviembrede2006.LaversiónenPDFhasido realizadaporoscarcarballalpregoydatadel24denoviembrede2009. Sehaprocedidoahaceralgunasconcesionesvisualesdecaraaorientarallectordeformamásintuitivaaloque estáviendoencadamomento.lostextoscontenidosencajasgrisesserefierenalíneasdecódigo,ylostextos contenidosencajasconbordenegrosonlasrepresentacionesdelosdatosquedeberíansalirporpantalla.esto sejuntaconlasconcesionesyaestablecidasenelartículooriginal,lascualessonmostradasmásabajo. Icode,thereforeIam.

3 Esteartículoesunaintroducciónalaprogramaciónorientadaaobjetos(POO,oOOPporsussiglaseninglés), unodelosparadigmasdeprogramaciónestructuradamásimportantehoyendía. ElartículousaellenguajePythonparalosdistintosejemplos,yexplicalaimplementacióndelaPOOenese lenguaje,aunqueabordaconceptosgeneralesquesonfácilmentetrasladablesaotroslenguajes. Losfragmentosdecódigoseseñalanusandounestilodetextodiferente(anchofijo)y,cuandoseutilizael intérpretedepython,seprefijacadalíneaconlossímbolos >>>.Estaintroducciónpresuponeconocimientos básicosdeprogramaciónydellenguajepython. Formasdepensar:paradigmasdeprogramación Unodeloselementosbásicosalahoraderealizarunprogramaeslamodelizacióndelproblemaquepretende resolver.esprecisolocalizarlasvariablesylosaspectosrelevantes,asícomocomprenderlospasosnecesarios paraobtenerelresultadoapartirdelosdatosiniciales,etc.esdecir,abstraerelproblema,reduciendosus detallesdeformaquepodamostrabajarconpocoselementoscadavez. Laalgoritmiaplantealaformaóptimaderesolverproblemasconcretos,talescomolaordenacióndeunalistade elementos,labúsquedadeunelementoenunconjunto,lamanipulacióndeconjuntosdedatos,etc.sin embargo,noproporcionanunmarcogeneral,unenfoque,quenospermitaplantearyformularlassolucionesa unproblemadeformacoherente. Losparadigmasdeprogramaciónllenanesehueco,proporcionandoguíastantosobrecómorealizarla abstraccióndelosdatoscomosobreelcontroldelaejecución.esdecir,losparadigmasdeprogramaciónson herramientasconceptualesparaanalizar,representaryabordarlosproblemas,presentando sistematizacionesalternativasocomplementariasparapasardelespaciodelosproblemasaldelas implementacionesdeunasolución. Esmuyrecomendableyproductivocomprenderelenfoquededistintosparadigmas,puestoquepresentan estrategiasalternativas,incrementandonuestrasherramientasdisponiblesyhaciéndonoreflexionarsobre muchasdelastareasquerealizamosalcrearunprograma.además,amenudoocurrequeunosproblemasse formulandeformamuyclarasiselosanalizasegúnunaperspectivadeterminada,mientrasqueproducenuna grancomplejidadvistosdeotramanera. Algunosparadigmashabituales Algunasdelasformasdepensarlosproblemasquehallegadoasistematizarsecomoparadigmasde programaciónson: Laprogramaciónmodular:Losprogramasseformanporpartesseparadasllamadasmódulos.Estos funcionandeformaindependienteentresí,oserelacionanatravésdeinterfacesbiendefinidas.

4 Laprogramaciónprocedural:Unprogramasecomponedeprocedimientos(subrutinas,métodoso funciones)quesonfragmentosdecódigoquepuedenllamarsedesdecualquierpuntodelaejecución deunprograma,incluídosotrosprocedimientosoélmismo.(ej.algol) Laprogramaciónestructurada:Sepuedeexpresarcualquierprogramautilizandoúnicamentetres estructurasdecontrol:secuencial,condicionaleiterativa.losprogramassecomponendepartes menoresconunúnicopuntodeentrada,ysetratadeaislarlosparaevitarlacomplejidadque introducenlosefectoscolaterales.(ej.pascal,c,ada) Laprogramaciónimperativa:Unprogramasepuededefinirentérminosdeestado,ydeinstrucciones secuencialesquemodificandichoestado.(ej.c,basic) Laprogramacióndeclarativa:Esposibleexpresarunprogramaatravésdecondiciones,proposicioneso restricciones,apartirdelosqueseobtienelasoluciónmediantereglasinternasdecontrol.(ej. PROLOG) Laprogramaciónfuncional:Sepuedeexpresarunprogramacomounasecuenciadeaplicacióndefunciones. Eludeelconceptodeestadodelcómputoynoprecisadelasestructurasdecontroldelaprogramación estructurada.(ej.lisp,haskell) Laprogramaciónorientadaaobjetos:Losprogramassedefinenentérminosde clasesdeobjetos quese comunicanentresímedianteelenvíodemensajes.esunaevolucióndelosparadigmasdela programaciónprocedural,estructuradaymodular,yseimplementaenlenguajescomojava, Smalltalk,PythonoC++. Programaciónmultiparadigma Losparadigmasdeprogramaciónsonidealizaciones,y,comotales,nosiempresepresentandeforma totalmente pura,nisiempreresultanincompatiblesentresí.cuandoseentremezclandiversosparadigmasse produceloqueseconocecomoprogramaciónmultiparadigma. Elusodedistintosmodelos,segúnseadaptenmejoralasdiversaspartesdeunproblemaoanuestraformade pensamiento,resultatambiénmásnaturalypermiteexpresardeformamásclarayconcisanuestrasideas. Algunoslenguajes,comoHaskelloPrologestándiseñadosparaencajarperfectamenteenlavisióndeun paradigmaparticular,mientrasqueotros,comopython,seadaptanespecialmentebienalaprogramación multiparadigmaydangranlibertadalahoraderesolverunproblema,alnoimponenunmismopatrónpara todosloscasos. Tiposdedatos Unaformadealmacenaryrepresentarunafechaenunprogramapodríaserlasiguiente: d = 14 m = "Noviembre"

5 a = 2006 def dime_fecha(dia, mes, anho): return "%i de %s de %i del calendario gregoriano" % (dia, mes, anho) print fecha(d, m, a) paraobtenerlasiguientesalida: "14deNoviembrede2006" Enesteejemplo,pararepresentarymanipularloqueconceptualmenteentendemoscomounafecha,seutilizan lasvariablesd,myacomoalmacenesdedatos,yunprocedimientoofunción,denombredime_fecha,para realizarlarepresentacióndelafechaalmacenada. Lasvariablespermitenalmacenartiposdedatosconcretoscomolosenteros(dya)olascadenasdetexto(m),y lafunciónrealizasutrabajodevolviendootrotipoconcreto,unacadenadetexto. Unodelosproblemasdeesteenfoqueesquenoreflejademasiadobienelconceptofechaqueusamoscomo modelomentalalimplementarlocomounconjuntodetresvariablesnorelacionadasentresí(d,mya).esdecir, lastresvariablestienenunaunidadconceptualennuestramente,quenosereflejaenlaformadeexpresarel problema.delamismamanera,lafuncióndime_fechadesconoceigualmentelarelaciónentresusparámetros, quepodríasertotalmentearbitraria. Estasituación,quepuedeparecerunacuestiónde estilo,implicaunriesgodeproblemasdesincronización entrevariables relacionadas,dispersiónendistintaspartesdelcódigodemanipulacionesquesonrelevantesal conjunto,pérdidadelvalorsemánticodecadavariablequepuededarlugaraerroresaltransformarelcódigo Unejemplodedesconexiónsemánticaentrelaimplementaciónyelconceptoesquedpuedesercualquiervalor entero,mientrasqueundíatieneunvalorsituadoentre1y31,mesunacadenadetextodentrodeunnúmero limitadodeopciones,oanopuedetomarvaloresnegativos.porsupuestoqueestosepodríasolucionarcon códigoquehiciesecomprobacionesadicionales,peroenestecasoqueremosresaltarcómounprogramaesun modeloaproximadoaunproblemaycómoseríapreferiblequelaimplementaciónpudieserepresentardeforma másajustadaelcomportamientodelmodeloelegido. Unaposiblesoluciónseríadisponerdeuntipodedatosquerepresentedeformamásadecuadaelconceptode fechayquenospermitamanipularfechasdelamismamaneraquemanipulamosnúmerosenteros,números realesocadenasdetexto,independientementedelaimplementacióninternaquelossustente. Clasesyobjetos Alenunciaralgunostiposdeparadigmashemosvistoquelaprogramaciónorientadaaobjetosdefinelos programasentérminosde clasesdeobjetos quesecomunicanentresímedianteelenvíodemensajes.en esteapartadoaclararemosquéseentiendeenesecontextoporclasesyobjetos. Lasclasessurgendelageneralizacióndelostiposdedatosypermitenunarepresentaciónmásdirectadelos conceptosnecesariosparalamodelizacióndeunproblemapermitiendodefinirnuevostiposalusuario. Lasclasespermitenagruparenunnuevotipolosdatosylasfuncionalidadesasociadasadichosdatos, favoreciendolaseparaciónentrelosdetallesdelaimplementacióndelaspropiedadesesencialesparasuuso.a

6 estacualidad,denomostrarmásquelainformaciónrelevante,ocultandoelestadoylosmétodosinternosdela clase,esconocidacomo encapsulación,yesunprincipioheredadodelaprogramaciónmodular. Unaspectoimportanteenelusodeclasesesquenosemanipulandirectamente(salvoenloqueseconoce comometaprogramación),sinoquesirvenparaladefiniciónnuevostipos.unaclasedefinepropiedadesy comportamientoquesemuestranenlosentesllamadosobjetos(oinstanciasdeunaclase).laclaseactúa comomoldedeunconjuntodeobjetos,delosquesedicequepertenecenalaclase. Trasladandoestosconceptosalosnúmerosenteros(tipoint),sepuededecirquelasvariablesquealmacenan númerosenterossonobjetosoinstanciasdelaclaseintoquepertenecenalaclaseint. Entérminosmásabstractos,podemospensarenlasclasescomodefinicionesyenlosobjetoscomoexpresiones concretasdedichasdefiniciones. Fisonomíadeunaclase Enpython,elesquemaparaladefinicióndeunaclaseeselsiguiente: class NombreClase: <instrucción_1>... <instrucción_n> endondeclassesunapalabrareservadaqueindicaladeclaracióndeunaclase,nombreclaseunaetiquetaque danombrealaclasey,losdospuntos,queseñalaneliniciodelbloquedeinstruccionesdelaclase. Elcuerpodeinstruccionesdelaclasepuedecontenertantoasignacionesdedatoscomodefinicionesde funciones.estebloquedeinstruccionesseencuentraenelnuevoespaciodenombresconelnombredelaclase, quesegenera,asuvez,conlacreacióndecadaobjeto.enamboscasos,enelespaciodenombresdelaclasey delobjeto,esposibleaccederaloselementosquelointegranusandoeloperadorpunto,comoenelcasodelos espaciosdenombresdeunmódulo(e.j.math.pi,objeto.dato,objeto.funcion()). Silaprimerainstruccióndelcuerpodelaclaseesunacadenadetexto,éstaseusacomocadenade documentacióndelaclase. Nuestroejemplopodríareescribirseentérminosdeunaclaseasí: class Fecha: "Ejemplo de clase para representar fechas" dia = 14 mes = "Noviembre" anho = 2006 def dime_fecha(self): return "%i de %s de %i" % (Fecha.dia, Fecha.mes, Fecha.anho) mi_fecha = Fecha() print mi_fecha.dia, mi_fecha.mes, mi_fecha.anho print mi_fecha.dime_fecha()

7 EnelfragmentodecódigoanteriordefinimoslaclaseFechayellaasignamosvaloresalasetiquetasdia,mesy anho(atributosdelaclase),ydefinimosunafunción(unmétododelaclase),dime_fecha. Fueradeladefinicióndelaclasecreamos(instanciamos)unobjetopertenecientealaclaseFecha.Esta instanciaciónserealizautilizandolanotacióndellamadaafunción,ypodemosentenderlacomounallamadaa unafunciónquedevuelveunobjetodelaclasefecha.elobjetoobtenidoesasignadoalaetiquetami_fecha. Enlasiguientesinstruccionesmostramosporpantallalosvaloresdelaspropiedadesdia,mesyanhoyel resultadodelallamadaalmétododime_fecha,usandoeloperadorpuntoparaaccederalaspropiedadesy métodosdelobjetomi_fecha,yaque,comohemosmencionadoantes,formanpartedelespaciodenombresdel objeto. Lallamadaalmétododime_fechanoincluyeningúnparámetro,peropodemoscomprobarque,deforma contradictoria,ladeclaracióndelmétodoindicauno,self.esteparámetroesañadidoautomáticamenteporel intérpreteenlasllamadasalosmétodosdeunaclase,ycontieneunareferenciaalobjetoquerecibelaseñal(el querecibeunallamadaaunmétodo).selfpermiteaccederalaspropiedadesymétodosdeunobjetoconcretoy aclararemossusignificadoyusomásadelante.porahoranosbastasaberqueesnecesarioincluirselfcomo primerparámetrodelosmétodosdefinidosenunaclaseyquenoesprecisoincluirelparámetroimplícito selfalrealizarllamadasaunmétodoatravésdelobjetoalquepertenece. Enrealidad,enelejemploanterior,lallamadami_fecha.dime_fecha()esunaformamáscómodadeescribir (azúcarsintáctico)fecha.dime_fecha(mi_fecha),loqueexplicalapresenciadelparámetro. Unpaseoentreobjetos Hastaelmomentohemosvistocómolasclasesdefinenlosdatos(oestado)ycomportamientodelosobjetosa travésdeatributos(opropiedades)ymétodos. Ahoravamosahacerunrecorrido,utilizandounasesióninteractivadelintérpreteylascapacidadesde introspeccióndepython,paraexplicarelusoyelcomportamientodelosobjetos. Veremosalgunascaracterísticasdelosobjetos: Identidad.Losobjetossediferencianentresí,deformaquedosobjetos,creadosapartirdelamismaclasey conlosmismosparámetrosdeinicialización,sonentesdistintos. Definensucomportamiento(yoperarsobresusdatos)atravésdemétodos,equivalentesafunciones. Definenoreflejansuestado(datos)atravésdepropiedadesoatributos,quepuedensertiposconcretosu otrosobjetos. Pasamosaverunasesióninteractivadelintérprete: >>> mi_fecha = Fecha()

8 >>> mi_fecha_2 = Fecha() >>> mi_fecha is mi_fecha_2 False >>> print mi_fecha < main.fecha instance at 0x00B184B8> >>> print mi_fecha_2 < main.fecha instance at 0x00B18328> Vemosquetantomi_fechacomomi_fecha_2soninstanciasdelaclaseFecha(enelmódulo main )ycada unatienesupropioespaciodememoriaindependiente. >>> print mi_fecha.dime_fecha() 14 de Noviembre de 2006 >>> print mi_fecha.dia 14 >>> print mi_fecha_2.dia 14 >>> Fecha.dia = 16 >>> print Fecha.dia 16 >>> print mi_fecha.dia 16 >> print mi_fecha_2.dia 16 >>> mi_fecha.dia = 30 >>> print Fecha.dia 16 >>> print mi_fecha.dia 30 >>> print mi_fecha_2.dia 16 Esteúltimoexperimentoobservamoscómo,peseaquemi_fechaymi_fecha_2sondosinstanciasdistintasdela clasefecha,ambashacenreferenciaatravésdesuatributodiaalmismovalordelaclasefecha.dia.sin embargo,cuandoseproduceunaasignaciónaeseatributo(aesaetiqueta,enrealidad)enunodelosobjetos vemoscómo,apartirdeentonces,eseobjetodisponedeunvalor'individual'asociadoalatributo. Esecomportamientorevelalaexistenciadeatributos(oestado)compartidosportodaslasinstanciasdeuna claseydeatributos(oestado)ligadosaunainstanciaparticular.losprimerossesitúanenelespaciode nombresdelaclase,yvemoscómosepuedenhacerasignacionesenlasesióninteractivaanterior,olecturas,en elmétododime_fechadelejemploanterior.lossegundossesitúanenelespaciodenombresdecadaobjeto,y ahíesdonderesultaútilelparámetroself. Antesdeproseguir,podemosescudriñarquésímbolossonaccesiblesyquécontienenlosespaciosdenombres delaclasefechaydelosobjetosmi_fechaymi_fecha_2.usamoslafuncióndirparaloprimero,yelatributo dict paralosegundo,yaqueenpythonlosespaciosdenombresseimplementancomodiccionarios: >>> dir(fecha) [' doc ', ' module ', 'anho', 'dia', 'dime_fecha', 'mes'] >>> dir(fecha3) [' doc ', ' module ', 'anho', 'dia', 'dime_fecha', 'mes'] >>> dir(fecha4) [' doc ', ' module ', 'anho', 'dia', 'dime_fecha', 'mes'] Enlostrespodemosaccederalosmismossímbolos.Sinembargo... >>> Fecha. dict {' module ': ' main ', 'anho': 2006, 'dime_fecha': x00b176f0>, 'dia': 14, 'mes': 'Noviembre', ' doc ': 'Ejemplo de clase para representar fechas'} >>> mi_fecha_2. dict {} >>> mi_fecha. dict {'dia': 30} Elespaciodenombresdelaclaseeselquealbergalosnombresdelosatributosymétodosindicadosenla declaracióndelaclase,ademásdelosatributosespeciales doc,quecontienelacadenadedocumentacióny

9 module,quecontieneelnombredelmóduloalquepertenecelaclase.esossímbolossonaccesibles tambiénparalosobjetospertenecientesalaclase(talcomonosindicabadir()). Podemosvertambiénqueelespaciodenombresdelobjetomi_fecha_2seencuentravacío,mientrasqueeldel objetomi_fechacontieneelatributodía.estosedebeaqueanteriormenterealizamosunaasignaciónal atributodiadelobjetomi_fecha(dándoleelvalor30).elespaciodenombresrecogeesaversiónparticulardel atributo,quenoapareceenelotroobjeto,puestoqueaccedealatributodeclase. Alosatributoscompartidosportodoslosobjetosdeunaclaseselosdenominaatributosdeclase,cuandose deseadiferenciarlosdelosatributosquepertenecenacadainstanciaenparticular. Accesoindividualizadoaobjetos:self Ahoraquehemosvistocómousaratributosdeclaseparacompartirdatosentretodoslosobjetosdeunamisma clase,tambiénnosinteresaconocercómoutilizaratributoscomunesaunaclaseperoquepuedantomarvalores distintosparacadaunodelosobjetos. Retomamosahoraelmisteriosoparámetroselfquevimosestabapresentecomoprimerparámetrodetodoslos métodosdeunaclase.ensumomentoyacomentamosqueselfcontieneunareferenciaalobjetoquerecibela señal(elobjetocuyométodoesllamado),porloquepodemosusaresareferenciaparaaccederalespaciode nombresdelobjeto,esdecir,asusatributosindividuales. >>> class F:... i = 5... def dime_i(self):... return F.i... def dime_mi_i(self):... return self.i... >>> a = F() >>> a.dime_i() 5 >>> a.dime_mi_i() 5 >>> a.i = 6 >>> a.dime_i() 5 >>> a.dime_mi_i() 6 >>> a.i 6 Enesteejemploelmétododime_iusaelatributodeclaseyretornasuvalor,5,mientrasqueelmétodo dime_mi_iusaunareferenciaalobjetoydevuelveelvalor6,elasignadoalatributodelobjetoa.asíaccedemos selectivamentealatributodeclaseioalatributodeinstanciai. Algoquepuedeaclararalgomáslanaturalezadelparámetroself,esrecordarque,cuandohacemosunallamada aunmétodoun_metododeunobjetoun_objetopertenecientealaclaseunaclase,elintérpretetraducela expresiónun_objeto.un_metodo()comounaclase.un_metodo(un_objeto). Elusodeselfrespondealaformaparticularenquepythonimplementaelsoportedeobjetos,aunquelenguajes

10 comojavaoc++utilizanmecanismossimilaresconlapalabrareservadathis.enpythonselfnoesunapalabra reservadaycualquieretiquetausadacomoprimerparámetrovaldríaigualmente,aunquesedesaconseja totalmenteelusodeotrasetiquetas,portratarsedeunaconvenciónmuyarraigadaenellenguajequehaceel códigomáslegible,facilitaelresaltadodesintaxis,etc. Elmétododeinicialización init Hemosvistoyacómodefiniryusaratributosdeclaseydeinstancia.Peroenpythonnoesnecesariala declaracióndevariables,porloquecualquieratributoalqueserealiceunaasignaciónenelcódigoseconvierte enunatributodeinstancia: >>> a = F() >>> a.i = 6 >>> a.atr = 3 >>> print a.atr 3 >>> a. dict {'i': 6, 'atr': 3} Unafuncionalidadmuyconvenientequehemosvistoenladeclaracióndeatributosdeclaseesladerealizarsu inicializaciónenelcuerpodelaclase.parapoderinicializarlosatributosdeunainstanciaexisteunmétodo especialquepermiteactuarsobrelainicializacióndelobjeto.dichométodosedenomina init (condos guionesbajosalprincipioyalfinal)yadmitecualquiernúmerodeparámetros,siendoelprimerolareferenciaal objetoqueesincializado(self,porconvención),quenospermiterealizarlasasignacionesaatributosdela instancia.estemétodoseejecutasiemprequesecreaunnuevoobjetodelaclase,traslaasignaciónde memoriayconlosatributosdeclaseinicializados,ysecorrespondeparcialmenteconelconceptode constructordelaclaseexistenteenotroslenguajes. Conlareferenciaquenosproporcionaselfpodemosinicializaratributosdeinstancia,convalores predeterminadossilodeseamos,comoencualquierdefinicióndefunción: class Clase: def init (self, x=2): self.x = x self.a = x**2 self.b = x**3 self.c = 999 def dime_datos(self): return "Con x=%i obtenemos: a=%i, b=%i, c=%i" % (self.x, self.a, self.b, self.c) a1 = Clase(2) a1.dime_datos() a2 = Clase(3) a2.dime_datos() Salida: Conx=2obtenemos:a=4,b=8,c=999Conx=3obtenemos:a=9,b=27,c=999 PropiedadesyAtributos Aunqueenlaterminologíageneraldelaprogramaciónorientadaaobjetosatributoypropiedadsepueden utilizarcomosinómimos,enpythonseparticularizaelusodepropiedadesparauntipoespecialdeatributos

11 cuyoaccesoseproduceatravésdellamadasafunciones. class ClaseC(object): def init (self): self. b = 0 def get_b(self): return self. b def set_b(self, valor): if valor > 10: self. b = 0 else: self. b = valor b = property( get_b, set_b, 'Propiedad b') c1 = ClaseC() print c1.b # b es 0 c1.b = 5 print c1.b # b es 5 c2 = ClaseC() print c2.b # b es 0 c2.b = 12 print c2.b #b es 0 Enesteejemplosedefinelapropiedadb,cuyocomportamientoes:cuandoserealizaunaasignación,tomael valorentregadosiesmenorque10,o0encasocontrario,yloalmacenaenunatributoprivado b.cuandose producelalecturadeb,devuelveelvalorguardadoenelatributoprivado. EnPython,parapoderusarpropiedadesenunaclaseesnecesariohacerladerivardelaclaseobjectdeahíque aparezcaalladodelnombredelaclaseclasec.enunapartadoposteriorseexplicaráenquéconsistela derivacióndeclases. Lasignaturadelafunciónproperty,quedefineunapropiedaddelaclaseeslasiguiente:nombre_propiedad= property(get_f,set_f,del_f,doc)dondeget_feslafunciónllamadacuandoseproducelalecturadelatributo; set_flafunciónllamadacuandoseproduceunaasignaciónalatributo;del_flafunciónllamadacuandose eliminaelatributo,ydocesunacadenadedocumentacióndelapropiedad. Laspropiedadesresultanmuyútilespararealizarlavalidacióndelosvaloresasignados,latransformacióno cálculodevaloresdevueltosy,además,dotandegranflexibilidadalahoradeescribirelcódigo,puestoquees posibleempezarusandoatributosyluegosustituirloporunapropiedadquerealicefuncionesadicionales,a medidaqueelcódigolorequieraysimplementecambiandoelcódigodelaclase,sinafectaralcódigoclientede laclase. Herenciayderivacióndeclases Vemosqueelusodeclaseshacemásadecuadalarepresentacióndeconceptosennuestrosprogramas. Además,esposiblegenerarunaclasenuevaapartirdeotra,delaquerecibesucomportamientoyestado (métodosyatributos),adaptándolosoampliándolossegúnseanecesario.

12 Deunaclasequerepresentaseelconceptodevehículopodríamosderivarotraspararepresentarautomóviles, bicicletas,barcosoaviones,dondecadaunodeellosmantieneatributosymétodoscomunes(peso,color, velocidadmáxima,númerodepasajeros),mientrasqueotrossonexclusivos(númeroderuedas,númerode hélices,númerodereactores,altitudmáximadevuelo...). Entérminosmatemáticospodemosexpresarlodiciendoqueesposibleestablecerrelacionesdepertenencia entreclases.sitenemosunaclaseaydeelladerivamosunaclaseb,podemosdecirque"besunaa",oque"bes unaespecializacióndea". EnlaterminologíadelaPOOsediceque"BheredadeA","BesunaclasederivadadeA","AeslaclasebasedeB", "AessuperclasedeB"o"AesclasemadredeB". Estofacilitalareutilizacióndelcódigo,puestoquesepuedenimplementarloscomportamientosydatosbásicos enunaclasebaseyespecializarlosenlasclasesderivadas. Enunprogramahipotéticoquetrabajaseconformasgeométricas,podríamostenerunaclasebaseFormay clasesderivadasdeellacomotriangulo,cuadrado,circulo...enlaclasebasepodríamosdefinirunmétododibuja querepresentalafiguraenpantalla,yunmétodoareayotroperímetroquecalculaneláreayelperímetro, respectivamente. Enellenguajepython,paraexpresarqueunaclasederiva,desciendeoesherederadeotrauotrasclasesse añadetraselnombre,enladeclaracióndelaclase,unatuplaconlosnombresdelasclasesbase. ElsiguienteejemplocreaunaClaseAydeelladerivaunaClaseBqueinicializaunatributoadicional,cambiael comportamientodeunmétodoyheredalosatributosdelaclasemadre: class ClaseA: def init (self, x): self.a = x self.b = 2 * x def muestra(self): print "a=%i, b=%i" % (self.a, self.b) class ClaseB(ClaseA): def init (self, x, y): ClaseA. init (self, x) self.c = 3 * (x + y) + self.b def muestra(self): print "a=%i, b=%i, c=%i" % (self.a, self.b, self.c) print "Objeto A" a = ClaseA(2) print a. dict a.muestra() print "ObjetoB" b = ClaseB(2, 3) print b. dict b.muestra()

13 Salida: ObjetoA {'a':2,'b':4} a=2,b=4 ObjetoB {'a':2,'c':19,'b':4} a=2,b=4,c=19 LaclaseClaseAmuestrafuncionalidadesqueyahemosidoviendoenestaintroducción(atributosdeinstanciaa yb,métodomuestra).laclaseclasebsedeclaracomodescendientedelaclasea,porloqueheredasus métodosyatributosymodificaalgoelcomportamientodelaclasemadre.porunaparte,ensumétodode inicializaciónllamaalmétododelaclasemadreconlosparámetrosdeseados,y,posteriomente,añadeun nuevoatributodeinstanciaquenoexisteenlaclasemadre.porotrolado,redefineunmétodoexistenteen ClaseA,cambiandolaimplementación. Estaúltimatécnica,enlaqueunmismonombreseasociaacomportamientosdistintosseconocecomo polimorfismo,ysehabladequeelmétodosehasobrecargado,esdecir,seleasignandistintossignificadosen funcióndesucontexto.elpolimorfismotambiénaludealaposibilidaddeutilizar,enuncontextoenelquese esperaunaclasedada,cualquierclasederivada. Laclaseobject Desdelaversión2.2depython,sehaestablecidounaclasebasellamadaobjectdelaqueseaconsejaderivar todaslasclases.estopermiteaprovecharunaseriedecaracterísticassóloexistentesenlas"nuevasclases" (comoladefinicióndepropiedades),quesedescribenenladocumentacióndepython. Enelejemplosobreelusodepropiedadesseintrodujolaherenciasinexplicarla,derivandolaclasedeobject. Ahoradeberíaestarmásclaralarazón. Jerarquíasdeclases Laherenciapermiteestablecerrelacionesentreclases,y,estasrelacionesdepertenenciapuedenseravarios niveles,yramificarseenloquesedenominanjerarquíasdeclases. Unejemplodeclásicoparavisualizarlasjerarquíasdeclaseseselquepodríaservirparamodelizarelconjuntode empleadosdeunaempresa.enellaapareceunaclasebaseempleado,quedisponedelosatributosnombrey departamento;deelladesciendenlassubclasesgestor(atributoadicionalinformes)ytrabajador(atributo adicionalproyectos),ydeestaúltimaderivanlasclasescomercial(atributoadicionalparticipación)eingeniero (atributooriginalarea). Gráficamentepodríarepresentarsedelasiguientemanera:

14 Eneldiagramasepuedeverennegritalosatributosqueimplementacadaclase,yengrislosqueheredade clasesmadre.elcódigo(básicodeinicialización)delasclasespodríaserelsiguiente: class Empleado: def init (self, nombre, departamento="general"): self.nombre = nombre self.departamento = departamento class Gestor(Empleado): def init (self, nombre): Empleado. init (self, nombre) self.informes = [] class Trabajador(Empleado): def init (self, nombre): Empleado. init (self, nombre) self.proyectos = [] class Comercial(Trabajador): def init (self, nombre, participacion=0.1): Trabajador. init (self, nombre) self.departamento = "ventas" self.participacion = participacion class Ingeniero(Trabajador): def init (self, nombre, area="mecánica"): Trabajador. init (self, nombre) self.departamento = "ingeniería" self.area = area Naturalmente,cadaunadelasclasestendríasuspropiosmétodosquedefiniríancomportamientospropiosde cadaclaseosubclase,quenosehandetalladoenelejemplo. Unaalternativaalaherenciaeslacomposición,enelqueunaclasesecomponedeotrasclasesinternas,yque puedeserunamejoralternativaenmuchoscasos. Encapsulaciónygradosdeprivacidad UnodelosprincipiosqueguíanlaPOO,heredadosdelaprogramaciónmodular,eseldeencapsulación.Hemos

15 vistocómosepuedeagruparcomportamientoydatosgraciasalusodeobjetos,perohastaelmomento,tanto losatributoscomolosmétodosquesedefinenenlasclasescorrespondientesseconviertenenmétodosy atributosvisiblesparalosusuariosdelaclase(laapidelaclase). Sedicequeunmétodooatributoespúblicosiesaccesibledesdeelexteriordelaclase,mientrasquese denominaprivadoencasocontrario. Esdeseablepoderseñalarquémétodosyatributosnodebenutilizarsefueradelaclaseparaevitarexponer excesivamentelosdetallesdelaimplementacióndeunaclaseounobjeto. Pythonutilizaparaelloconvencionesalahoradenombrarmétodosyatributos,deformaqueseseñalesu carácterprivado,parasuexclusióndelespaciodenombres,oparaindicarunafunciónespecial,normalmente asociadaafuncionalidadesestándardellenguaje. _nombre Losnombresquecomienzanconunúnicoguiónbajoindicandeformadébilunusointerno.Además,estos nombresnoseincorporanenelespaciodenombresdeunmóduloalimportarlocon"from...import*". nombre Losnombresqueempiezanpordosguionesbajosindicansuusoprivadoenlaclase. Porejemplo,enladefinicióndeclasesiguiente: class ClaseA: def init (self, a) self. a = a self.x = self. a**2 + 2 self.y = self. a**3 + 3 elatributo aesdeusointernodelaclaseynoseexportadirectamente.acontinuaciónpodemosvercómo tratalosatributos'privados'python: >>> a = ClaseA(2) >>> dir(a) ['_ClaseA a', ' doc ', ' init ', ' module ', 'x', 'y'] >>> a. dict {'x':6, 'y':11, '_ClaseA a':2} Todavíaesposibleaccedera a,peroelnombreestransformadoa'_clasea a',queloseñalacomoun atributodeusoprivado. nombre Losnombresqueempiezanyacabancondosguionesbajosindicanatributos"mágicos",deusoespecialyque residenenespaciosdenombresquepuedemanipularelusuario.solamentedebenusarseenlamaneraquese describeenladocumentacióndepythonydebeevitarselacreacióndenuevosatributosdeestetipo.

16 Algunosejemplosdenombres"singulares"deestetiposon: init,métododeinicializaciónde objetos del,métododedestruccióndeobjetos doc,cadenadedocumentacióndemódulos, clases... class,nombredelaclase str,métodoquedevuelveunadescripcióndelaclasecomocadena detexto repr,métodoquedevuelveunarepresentacióndelaclasecomocadenadetexto module, móduloalquepertenecelaclasesepuedeconsultarlalistadeatributosdeestetipoysudescripcióndetallada enladocumentacióndepython. Resúmenfinal Laprogramaciónorientadaaobjetosenuncialaposibilidaddeescribirunprogramacomounconjuntodeclases deobjetoscapacesdealmacenarsuestado,yqueinteractúanentresíatravésdelenvíodemensajes. Lastécnicasmásimportantesutilizadasenlaprogramaciónorientadaaobjetosson: Abstracción:Losobjetospuedenrealizartareas,interactuarconotrosobjetos,omodificareinformarsobre suestadosinnecesidaddecomunicarcómoserealizandichasacciones. Encapsulación(uocultacióndelainformación):losobjetosimpidenlamodificacióndesuestadointernoola llamadaamétodosinternosporpartedeotrosobjetos,ysolamenteserelacionanatravésdeuna interfazclaraquedefinecómoserelacionanconotrosobjetos. Polimorfismo:comportamientosdistintospuedenestarasociadosalmismonombre Herencia:losobjetosserelacionanconotrosestableciendojerarquías,yesposiblequeunosobjetoshereden laspropiedadesymétodosdeotrosobjetos,extendiendosucomportamientoy/oespecializándolo. Losobjetosseagrupanasíenclasesqueformanjerarquías. Lasclasesdefinenelcomportamientoyestadodisponiblequeseconcretaenlosobjetos. Losobjetossecaracterizanpor: Teneridentidad.Sediferencianentresí. Definirsucomportamientoatravésdemétodos. Definiroreflejarsuestadoatravésdepropiedadesyatributos.

RVBurke. Programación orientada a objetos en Python. Introducción a la programación orientada a objetos. Información. Búsqueda.

RVBurke. Programación orientada a objetos en Python. Introducción a la programación orientada a objetos. Información. Búsqueda. RVBurke Arquitectura y técnica Programación orientada a objetos en Python by pachi Información www.rvburke.com blog.rvburke.com Sobre este sitio Introducción a la programación orientada a objetos Búsqueda

Más detalles

Refactoring: otra práctica de la Programación extrema

Refactoring: otra práctica de la Programación extrema Hackers & Developers Magazine Año 0, Número 6 31 Refactoring: otra práctica de la Programación extrema EXTREME PROGRAMMING En ediciones anteriores estuvimos hablando de TDD, sus beneficios y forma de implementarlo.

Más detalles

Programación Orientada a Objetos en Python

Programación Orientada a Objetos en Python Programación Orientada a Objetos en Python La programación orientada a objetos nos propone un paradigma de programación. Paradigma: teoría cuyo núcleo central [...] suministra la base y modelo para resolver

Más detalles

Metaprogramación con Python 3. Andrey Antukh github.com/niwibe

Metaprogramación con Python 3. Andrey Antukh github.com/niwibe Metaprogramación con Python 3 Andrey Antukh www.niwi.be @niwibe github.com/niwibe Las clases Consideramos esta clase como ejemplo: class Spam(object): def init (self, name): self.name = name def say_hello(self):

Más detalles

De 0 a Python en 45' Una breve introducción a Python. Autor: Daniel F Moisset - - Except

De 0 a Python en 45' Una breve introducción a Python. Autor: Daniel F Moisset - - Except De 0 a Python en 45' Una breve introducción a Python Autor: Daniel F Moisset - dmoisset@except.com.ar - Except Modificaciones: Natalia B Bidart - nataliabidart@gmail.com Resumen de la charla Introducción

Más detalles

DESARROLLANDO APLICACIONES CON PYGTK Por: Fabio Esteban Durán Verdugo. Estudiante Ingeniería en Informática Universidad Autónoma de Chile Sede Talca http://www.gnome.cl Que Veremos?... ojalá sea bueno...

Más detalles

Introducción a la Programación

Introducción a la Programación Cali Cali Introducción a la Programación Noviembre 27 de 2006 Nombre: Pregunta 1 2 3 Total Puntos 30 30 50 110 Cal. 1 (30 Puntos) Un pirata necesita encontrar un tesoro en una isla, para hacerlo cuenta

Más detalles

Junio 16 de Junio 2015

Junio 16 de Junio 2015 Examen Junio 16 de Junio 2015 Informática Año 2014/2015 Facultad de CC. Matemáticas 1. Ajuste de imagen [4 puntos] En este problema se pretende representar la temperatura que hay en diversas partes de

Más detalles

podría devolver como resultado una imagen en la que se mostraran las diferencias así:

podría devolver como resultado una imagen en la que se mostraran las diferencias así: Examen Septiembre Informática Año 2014/2015 Facultad de CC. Matemáticas 14 de Septiembre 2015 1. Diferencias de imágenes [3.5 puntos] Escribe una función que reciba dos imágenes y devuelva una nueva imagen

Más detalles

Framework 1. Web en Java. (solo aplicaciones en mantenimiento)

Framework 1. Web en Java. (solo aplicaciones en mantenimiento) Framework 1 Desarrollo de aplicaciones Web en Java (solo aplicaciones en mantenimiento) Enero de 2013 Unidad de Arquitectura y Soporte de Aplicaciones Área de Aplicaciones Especiales y Arquitectura de

Más detalles

Tema 0 Introducción. Curso de Python Avanzado. Juan Pedro Boĺıvar Puente. Instituto de Astrofísica de Andalucía. Mayo de 2011

Tema 0 Introducción. Curso de Python Avanzado. Juan Pedro Boĺıvar Puente. Instituto de Astrofísica de Andalucía. Mayo de 2011 Tema 0 Introducción Curso de Python Avanzado Juan Pedro Boĺıvar Puente Instituto de Astrofísica de Andalucía Mayo de 2011 Juan Pedro Boĺıvar Puente (Instituto de Astrofísica de Andalucía) Tema 0 Introducción

Más detalles

Sesión 2 Laboratorio

Sesión 2 Laboratorio Paradigmas de Programación Sesión 2 Laboratorio Cristian Tejedor García Departamento de Informática Universidad de Valladolid Curso 2016-17 Grado en Ingeniería Informática INDAT 1 Contenido 1. Objetivos

Más detalles

PHP5 Orientado a Objetos

PHP5 Orientado a Objetos PHP5 Orientado a Objetos Hola a todos, en esta ocasión les traigo a ustedes un poco de información acerca de las mejoras introducidas en PHP5 las cuales son principalmente la orientación a objetos que

Más detalles

Tema 2 Orientación a Objetos

Tema 2 Orientación a Objetos Tema 2 Orientación a Objetos Curso de Python Avanzado Juan Pedro Boĺıvar Puente Instituto de Astrofísica de Andalucía Mayo de 2011 Juan Pedro Boĺıvar Puente (Instituto de Astrofísica de Tema Andalucía)

Más detalles

Programación 1 Problemas del Composición condicional

Programación 1 Problemas del Composición condicional Programación 1 Problemas del 6-10-2016 Composición condicional Un problema Programa que indique si un año es o no bisiesto Escriba un año: 2016 El año 2016 es bisiesto Escriba un año: 2017 El año 2017

Más detalles

Entendiendo Decoradores en Python

Entendiendo Decoradores en Python Entendiendo Decoradores en Python El principio de todo Qué es un decorador? Funciones decoradoras Decoradores con parámetros Clases decoradores Decorar clases El principio de todo Todo en Python es un

Más detalles

Preliminares: programación con C++

Preliminares: programación con C++ Preliminares: programación con C++ JUAN CARLOS CONDE RAMÍREZ INTRODUCTION TO PROGRAMMING Archivos y Comentarios Todo programa en lenguaje C++ debe tener la siguiente extensión: file.c, file.cc file.cpp

Más detalles

Plantillas de clases ( Templates )

Plantillas de clases ( Templates ) 1. Plantilla de funciones o funciones genéricas 2. Métodos genéricos 3. Plantillas de clases o clases genéricas 4. Sintaxis 5. Creación de objetos 6. Representación en UML 7. Miembros de las clases genéricas

Más detalles

Programación de alto nivel con python

Programación de alto nivel con python Programación de alto nivel con python Dr. Luis Gerardo de la Fraga E-mail: fraga@cs.cinvestav.mx http://cs.cinvestav.mx/~fraga Departamento de Computación Cinvestav 27 de septiembre, 2016 Dr. Luis Gerardo

Más detalles

#include <stdio.h> /* Factorial de un número - versión 1- */

#include <stdio.h> /* Factorial de un número - versión 1- */ Ejemplo 1: Programa que calcula el factorial de 'n' números introducidos desde teclado. Primera versión: /* Factorial de un número - versión 1- */ long int factorial (int x) /*definición de función*/ int

Más detalles

/home/nabi/documentos/python/videos/body_v9.py

/home/nabi/documentos/python/videos/body_v9.py Página 1 de 6 1 #! /usr/bin/env python 2 # -*- encoding:utf-8 -*- 3 4 #Importamos locals para que python nos permita reconocer si el usuario 5 #presiona ciertas teclas 6 import pygame 7 from pygame.locals

Más detalles

Entendiendo un algoritmo de criptografía asimétrica Understanding RSA

Entendiendo un algoritmo de criptografía asimétrica Understanding RSA Entendiendo un algoritmo de criptografía asimétrica Understanding RSA Una operación asimétrica Que sea fácil de hacer pero difícil de deshacer...... a no ser que se conozca una información (la clave privada)

Más detalles

/home/nabi/documentos/python/videos/body_v8.py

/home/nabi/documentos/python/videos/body_v8.py Página 1 de 5 1 #! /usr/bin/env python 2 # -*- encoding:utf-8 -*- 3 4 #En este primer script vamos a mostrar una pantalla 5 6 fondo_pantalla = 'desierto_bn.jpg' 7 camello_imagen = 'camello.png' 8 9 #Importamos

Más detalles

Fco Javier Lucena Lucena

Fco Javier Lucena Lucena Fco Javier Lucena Lucena Índice Introducción Propiedades Why use it? Instalación Sintaxis Ejemplos http://xkcd.com/ Introducción Python es un lenguaje de programación dinámica muy poderoso. Creado por

Más detalles

Programación 1 Problemas 3. Composición condicional

Programación 1 Problemas 3. Composición condicional Programación 1 Problemas 3 Composición condicional Un problema Programa que indique si un año es o no bisiesto Escriba un año: 2016 El año 2016 es bisiesto Escriba un año: 2017 El año 2017 no es bisiesto

Más detalles

PyGI Guía Máxima - manuq @ PyCon AR 2012

PyGI Guía Máxima - manuq @ PyCon AR 2012 GTK+3 nueva versión "mayor" rompe API, ABI usa Cairo exclusivamente para dibujar mejora mucho el manejo de dispositivos, N punteros, N teclados mejora la sintaxis para hacer themes - CSS-like, animaciones

Más detalles

Introducción a. Python. Unlux 2007. Facundo Batista. Introducci. Arte gráfico: Diana Batista. ó n a Python Unlux 2007

Introducción a. Python. Unlux 2007. Facundo Batista. Introducci. Arte gráfico: Diana Batista. ó n a Python Unlux 2007 ón a Python Unlux 2007 Facundo Batista Arte gráfico: Diana Batista 1 Indice Qué es Python? Corriendo e interpretando Tipos de datos Controles de flujo Encapsulando código Tres detalles 2 Qué es Python?

Más detalles

Introducción a la Computación. Testing en Python. Facultad de Ciencias Exactas y Naturales, UBA 28/05/2013

Introducción a la Computación. Testing en Python. Facultad de Ciencias Exactas y Naturales, UBA 28/05/2013 Introducción a la Computación Testing en Python Maximiliano Geier (mgeier@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA 28/05/2013 Maximiliano Geier (UBA) Clase 9: Testing en Python 28/05/2013

Más detalles

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos 1! 1. Algoritmos recursivos " 1.1 Algoritmos recursivos. Recursión simple " 1.2 Algoritmos con vuelta atrás y ejemplos! 2. Complejidad de

Más detalles

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco ING1310 Introducción a la Computación Python Conceptos Básicos Carlos Reveco creveco@dcc.uchile.cl careveco@miuandes.cl Facultad de Ingeniería/Universidad de los Andes/Chile Rev : 254 C.Reveco Facultad

Más detalles

La Computación de Alto Desempeño puede ser versátil: comunicando C con Python. Pablo N Alcain, Cecilia G Jarne, María G Molina, Rodrigo Lugones

La Computación de Alto Desempeño puede ser versátil: comunicando C con Python. Pablo N Alcain, Cecilia G Jarne, María G Molina, Rodrigo Lugones La Computación de Alto Desempeño puede ser versátil: comunicando C con Python Pablo N Alcain, Cecilia G Jarne, María G Molina, Rodrigo Lugones Python Muchísimas librerías Sintaxis limpia No hace falta

Más detalles

Scrolling DURACIÓN: PERÍODOS DE CUATRO CLASES

Scrolling DURACIÓN: PERÍODOS DE CUATRO CLASES Scrolling Un nuevo paso podemos darlo observando la técnica en el caso de esos juegos en los que los fondos se desplazan a medida que el jugador avanza. Una muestra la puedes ver dentro del propio Pilas,

Más detalles

Aseguramiento de la calidad y pruebas de software 5- Pruebas del software Caja Blanca/Cobertura Blanca A. Vargas Govea

Aseguramiento de la calidad y pruebas de software 5- Pruebas del software Caja Blanca/Cobertura Blanca A. Vargas Govea Aseguramiento de la calidad y pruebas de software 5- Pruebas del software Caja Blanca/Cobertura Blanca A. Vargas Govea vargasgovea@itesm.mx Marzo 19, 2013 Contenido Pruebas de caja blanca Cobertura Casos

Más detalles

PROCESOS DE RAZONAMIENTO INVERSO: PATRÓN DE DISEÑO ADAPTER EN PYTHON Y PHP, LOS

PROCESOS DE RAZONAMIENTO INVERSO: PATRÓN DE DISEÑO ADAPTER EN PYTHON Y PHP, LOS 10 PROCESOS DE RAZONAMIENTO INVERSO: PATRÓN DE DISEÑO ADAPTER EN PYTHON Y PHP, LOS CÓMO Y LOS PARA QUÉ TIENES UN ENCHUFE DE TRES PATAS PERO UN TOMA CORRIENTE DE DOS. NECESITAS INSERTAR LA CLAVIJA EN EL

Más detalles

Índice de Contenidos :.

Índice de Contenidos :. Índice de Contenidos :. Introducción General :: 1 TCP Vs UDP :: 2 Cliente/Servidor TCP :: 2.1 Cliente/Servidor UDP :: 2.2 Servidores Multicliente :: 3 Gestión de Sockets en Blender :: 3.1 Implementación

Más detalles

Introducción a Python. Cecilia Manzino

Introducción a Python. Cecilia Manzino Características del lenguaje Es un lenguaje de programación multiparadigma, soporta la programación orientada a objetos, imperativa y, en menor medida, funcional. Es un lenguaje multiplataforma, puede

Más detalles

Estructuras de Decisión Simples y Dobles

Estructuras de Decisión Simples y Dobles Estructuras de Decisión Simples y Dobles 1 Estructuras no secuenciales Los programas que hemos escrito hasta ahora han consistido en una serie de sentencias que se ejecutan secuencialmente, una después

Más detalles

Pilas (Práctica 3) import pilas from random import randint # Vamos a necesitar generar números al azar

Pilas (Práctica 3) import pilas from random import randint # Vamos a necesitar generar números al azar Pilas (Práctica 3) Objetivo Ahora vas a trabajar progresivamente en varios programas hasta conseguir dominar el uso de diferentes elementos, sobre todo, entender cómo se trabaja con clases y con objetos.

Más detalles

Programación I: Funciones y módulos

Programación I: Funciones y módulos Programación I: Funciones y módulos Esteban De La Fuente Rubio 2 de abril de 23 Índice. Funciones.. Definición y llamado de funciones............................................. 2.2. Parámetros por omisión..................................................

Más detalles

EXAMEN PROGRAMACIÓN 15 de Junio de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas

EXAMEN PROGRAMACIÓN 15 de Junio de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas Apellidos Nombre Firma NIA Grupo EXAMEN PROGRAMACIÓN 15 de Junio de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas Pregunta 1 (0,5 puntos).- Indicar si las siguientes afirmaciones son

Más detalles

MANUAL DE RUBY (PARTE V) Luis José Sánchez González

MANUAL DE RUBY (PARTE V) Luis José Sánchez González MANUAL DE RUBY (PARTE V) Luis José Sánchez González 1. VARIABLES DE CLASE Hemos visto anteriormente las variables de instancia. Cuando se crean instancias a partir de una clase invocando al método new,

Más detalles

Following are the form numbers of successful candidates:- (Syed Abrar Ali) REGISTRAR. Page 1 of 8

Following are the form numbers of successful candidates:- (Syed Abrar Ali) REGISTRAR. Page 1 of 8 0201 CE 0207 CE 0208 EE 0210 CS 0211 BI 0215 EL 0217 CE 0219 BE 0220 BE 0222 EE 0223 SE 0224 EE 0226 CS 0228 CS 0235 CS 0237 EE 0238 SE 0239 CI 0240 EL 0243 CI 0244 SE 0245 CE 0246 CS 0252 CI 0253 EE 0254

Más detalles

Following are the form numbers of successful candidates:- (Dr. Mumtaz-Ul-Imam) REGISTRAR. Page 1 of 7

Following are the form numbers of successful candidates:- (Dr. Mumtaz-Ul-Imam) REGISTRAR. Page 1 of 7 0103 TE 0104 CE 0107 CE 0108 EE 0109 BE 0110 BE 0111 EL 0112 EE 0114 CS 0115 CS 0116 TE 0117 BE 0118 BE 0120 TE 0121 EE 0128 CS 0129 CE 0130 SE 0133 TE 0134 SE 0136 BE 0140 EE 0141 EE 0143 SE 0144 SE 0145

Más detalles

Java Básico. Métodos estáticos

Java Básico. Métodos estáticos Java Básico Métodos estáticos Agregando métodos estáticos En un programa es deseable separar los algoritmos y asignarles un nombre. Cada algoritmo separado será llamado método. Cuando no necesitamos crear

Más detalles

Introducción a Python

Introducción a Python Introducción a Python Javier Béjar ECSDI 2017/2018 Facultat d Informàtica de Barcelona, UPC Extraido de material de Nguyen Duc Minh Khoi y Nowel Strite Introducción Python Lenguaje de alto nivel Énfasis

Más detalles

Lenguaje Ruby y su entorno

Lenguaje Ruby y su entorno Lenguaje Ruby y su entorno Curso de Ruby III: Módulos y Mixins Pedro Navajas Modelo Laboratorio de Software Libre Escuela Politécnica Superior Universidad de Córdoba 21 de Marzo de 2011 Pedro Navajas Modelo

Más detalles

Introducción a la Computación. Testing en Python. Maximiliano Geier. Facultad de Ciencias Exactas y Naturales, UBA 13/11/2017

Introducción a la Computación. Testing en Python. Maximiliano Geier. Facultad de Ciencias Exactas y Naturales, UBA 13/11/2017 Introducción a la Computación Testing en Python Maximiliano Geier Facultad de Ciencias Exactas y Naturales, UBA 13/11/2017 Maximiliano Geier (UBA) Testing en Python 13/11/2017 1 / 12 Testing Qué era testing?

Más detalles

Orientación a Objetos. Parte 2 tkinter

Orientación a Objetos. Parte 2 tkinter Orientación a Objetos Parte 2 tkinter Más sobre herencia Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos m2, m3 ClaseC Métodos m3, m4 Más sobre herencia Para m = ClaseC(1,2,3,4,5,6)

Más detalles

Python 3.3: A migrar!

Python 3.3: A migrar! Python 3.3: A migrar! Jesús Cea Avión Twitter: @jcea jcea@jcea.es http://www.jcea.es/ 12 de diciembre de 2012 Origen y motivación: Objetivo: Para un programador nuevo, Python 3 es un lenguaje más limpio

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Práctica 1: sockets en Python

Práctica 1: sockets en Python Práctica 1: sockets en Python Álvaro Navarro anavarro@gsyc.es Jesús M. González-Barahona jgb@gsyc.es Infraestructura de Redes 5 o Ingeniería Informática 08/09 1. Fase 1: Cliente UDP Esta primera fase tiene

Más detalles

Análisis probabilístico y algoritmos aleatorizados

Análisis probabilístico y algoritmos aleatorizados Análisis probabilístico y algoritmos aleatorizados Johan Van Horebeek, horebeek@cimat.mx Análisis probabilístico: considerar el input de un algoritmo como de cierta distribución probabilística. Algoritmo

Más detalles

Tutorial de Python orientado a objetos

Tutorial de Python orientado a objetos Tutorial de Python orientado a objetos En la primera llave creamos una clase llamada Gelantia. En la primera parte def init (self, tam, color, sabor): definimos las características del objeto. En la segunda

Más detalles

3. Indicar la salida por pantalla (2 puntos-10 minutos)

3. Indicar la salida por pantalla (2 puntos-10 minutos) APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL Calificación CURSO 2º GRUPO Junio

Más detalles

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida } REUTILIZACIÓN DE CLASES:MODELO DE HERENCIA EN JAVA Java soporta herencia simple pero no múltiple. Lo hace mediante el mecanismo de extensión de clase. A partir de él, una subclase se extiende (hereda)

Más detalles

Práctica 5c. Práctica 5c. José M. Ordax

Práctica 5c. Práctica 5c. José M. Ordax Práctica 5c José M. Ordax chemi@javahispano.org 1 Copyright 2004 Arancha Ocaña Díaz-Ufano Este documento puede ser distribuido solo bajo los términos y condiciones de la Licencia de Documentación de javahispano

Más detalles

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad: El TAD Diccionario Cuando se usa un conjunto en el diseño de un algoritmo podría no ser necesario contar con operaciones de unión o intersección. A menudo lo que se necesita es simplemente manipular un

Más detalles

introducción a la computación

introducción a la computación introducción a la computación representaciones computacionales Bruno Lara Guzmán Departamento de Computación, Facultad de Ciencias 20 de noviembre de 2013 (UAEM) introducción a la computación 20 de noviembre

Más detalles

Curso de Python Inicial

Curso de Python Inicial Logo IAA-CSIC Curso organizado por el Gabinete de Formación del CSIC Curso de Python Inicial Clases Contenidos 1. Paradigmas de la Programación 2. Programación Orientada a objetos 3. Clases 4. Objetos

Más detalles

Introducción a la Computación. Testing en Python. Maximiliano Geier. Facultad de Ciencias Exactas y Naturales, UBA 17/06/2014

Introducción a la Computación. Testing en Python. Maximiliano Geier. Facultad de Ciencias Exactas y Naturales, UBA 17/06/2014 Introducción a la Computación Testing en Python Maximiliano Geier Facultad de Ciencias Exactas y Naturales, UBA 17/06/2014 Maximiliano Geier (UBA) Clase 25: Testing en Python 17/06/2014 1 / 13 Qué era

Más detalles

Matrices Dispersas Un ejemplo de aplicación de POO en Python. Introducción a la Computación Clase 24 Patricia Borensztejn

Matrices Dispersas Un ejemplo de aplicación de POO en Python. Introducción a la Computación Clase 24 Patricia Borensztejn Matrices Dispersas Un ejemplo de aplicación de POO en Python. Introducción a la Computación Clase 24 Patricia Borensztejn Diccionarios y Tuplas Refrescamos diccionarios porque los vamos a usar para representar

Más detalles

2. [2014] [EXT-B] Encuentra dos matrices A, B cuadradas de orden 2 que sean solución del sistema matricial

2. [2014] [EXT-B] Encuentra dos matrices A, B cuadradas de orden 2 que sean solución del sistema matricial 1 [214] [EXT-A] a) Dsicute, en función del parámetro m, el rango de la matriz A = Para qué valores del parámetro m existe la matriz inversa de A? 1 3-1 m+1 3 m-1 m-1 m+3-1 2 [214] [EXT-B] Encuentra dos

Más detalles

1 / 14 Fundamentos de programación de Sistemas Embebidos Introducción

1 / 14 Fundamentos de programación de Sistemas Embebidos Introducción Fundamentos de programación de Sistemas Embebidos Introducción Mg. Ing. E. Sergio Burgos Universidad Nacional de Entre Ríos Facultad de Ingeniería Especialización en Sistemas Embebidos 31/08/2018 1 / 14

Más detalles

Tema 3 Cuestiones avanzadas

Tema 3 Cuestiones avanzadas Tema 3 Cuestiones avanzadas Curso de Python Avanzado Juan Pedro Boĺıvar Puente Instituto de Astrofísica de Andalucía Mayo de 2011 Juan Pedro Boĺıvar Puente (Instituto de Astrofísica de Tema Andalucía)

Más detalles

Ejercicios De Programación De C++ Algoritmos. Lenguaje De Programación C++:

Ejercicios De Programación De C++ Algoritmos. Lenguaje De Programación C++: Ejercicios De Programación De C++ 1. Muestre en pantalla el mensaje Bienvenido. Algoritmos 1. Inicio 2. muestrer en pantalla el mensaje Bienvenido 3. Fin Lenguaje De Programación C++: #include

Más detalles

Manual rápido para evaluación de series en Python

Manual rápido para evaluación de series en Python Manual rápido para evaluación de series en Python Breve introducción Python es un lenguaje de programación interpretado con fines científicos, de educación y para hacer programas de uso rápido. Es la base

Más detalles

INFORMÁTICA INDUSTRIAL

INFORMÁTICA INDUSTRIAL INFORMÁTICA INDUSTRIAL Herencia en C++. M. Abderrahim, A. Castro, J. C. Cas3llo Departamento de Ingeniería de Sistemas y Automá3ca AGENDA Herencia Constructores de las Clases Derivadas Destructores de

Más detalles

Clases y objetos en python (Programacion Orientada a Objetos)

Clases y objetos en python (Programacion Orientada a Objetos) Clases y objetos en python (Programacion Orientada a Objetos) pythondiario.com /2014/10/clases-y-objetos-en-python-programacion.html Python es un lenguaje de programación orientada a objetos (POO). La

Más detalles

1. Manejo de memoria estática 2. Manejo de memoria dinámica

1. Manejo de memoria estática 2. Manejo de memoria dinámica 1. Manejo de memoria estática 2. Manejo de memoria dinámica *La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. *El sistema operativo

Más detalles

SUB 15C 2016 FI GRUPO A 2016 ACADEMIA UNION ESTRELLA ROJA

SUB 15C 2016 FI GRUPO A 2016 ACADEMIA UNION ESTRELLA ROJA SUB 15C 2016 FI GRUPO A 2016 Fecha: 1 Fecha: 2 Fecha: 3 Fecha: 4 Fecha: 5 Fecha: 6 Fecha: 7 Fecha: 8 Fecha: 9 Fecha: 10 Fecha: 11 Fecha: 12 Fecha: 13 SUB 15C 2016 FI GRUPO B 2016 Fecha: 1 Fecha: 2 Fecha:

Más detalles

EJERCICIOS PAU MATEMÁTICAS II ANDALUCÍA Autor: Fernando J. Nora Costa-Ribeiro Más ejercicios y soluciones en fisicaymat.wordpress.

EJERCICIOS PAU MATEMÁTICAS II ANDALUCÍA Autor: Fernando J. Nora Costa-Ribeiro Más ejercicios y soluciones en fisicaymat.wordpress. MATRICES Y DETERMINANTES 0 - Considera las matrices 0 y. Determina, si existe, la 2 3 matriz X que verifica AX+B=A 2. Andalucía - Junio 204 Opción B - Oficial 2- Sabiendo que el determinante de la matriz

Más detalles

EENCARNACION R E ANNIE BESANT D el con armonía en más ponerse y más aclararse puede reencarnación, la de concepto Nuestro prin un como consideramos la

EENCARNACION R E ANNIE BESANT D el con armonía en más ponerse y más aclararse puede reencarnación, la de concepto Nuestro prin un como consideramos la EENCARNACION R E ANNIE BESANT D í ó, N, b, ó, A. -,,, ; ó x í, ó ó L. ó, ó L M.. zó H 1 x, b D O. í ó C : ó,,, z, á ; ó, z L. í í ñ, ú í - í,, Q. ; í j z ; b í b ; ó í ó ; b ó b,, D í. é z á Tí, í ó ;

Más detalles

Tema 2: Introducción a Python

Tema 2: Introducción a Python Tema 2: Introducción a Python Carmen Graciani Díaz José Luis Ruiz Reina Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Inteligencia Artificial, 2015-16 Introducción

Más detalles

pytod, un prototipo experimental para realizar Depuración Omnisciente a scripts escritos en el Lenguaje de Programación Python

pytod, un prototipo experimental para realizar Depuración Omnisciente a scripts escritos en el Lenguaje de Programación Python pytod, un prototipo experimental para realizar Depuración Omnisciente a scripts escritos en el Lenguaje de Programación Python Milton Galo Patricio Inostroza Aguilera Objetivos de la charla Mostrar el

Más detalles

Programación Orientada a Objetos en JAVA

Programación Orientada a Objetos en JAVA Programación Orientada a Objetos en JAVA Jorge Pérez Introducción a la Computación Jorge Pérez Programación Orientada a Objetos en JAVA 1 / 36 Orientación a Objetos OO es un paradigma de modelación y programación

Más detalles

Práctica 8: Barreras

Práctica 8: Barreras Arquitectura y Tecnología de Computadores 14 de febrero de 2014 Objetivos Aprender a utilizar las variables condición y las barreras de la biblioteca Pthreads. Diseñar e implementar una barrera: Barrera

Más detalles

1.1. NOCIONES DE CÁLCULO VECTORIAL

1.1. NOCIONES DE CÁLCULO VECTORIAL 1.1. NOCIONES DE CÁLCULO VECTORIAL 1.1.1. Los vectores a y b forman entre sí un ángulo de 90E. Si el vector s es s=a+b, es correcto decir: a) s = a 2 + b 2 b) s =/( a + b ) c) s =/( a + b +2 a b ) d) s

Más detalles

Fortran tiene dos tipos diferentes de subprogramas, las funciones y las subrutinas.

Fortran tiene dos tipos diferentes de subprogramas, las funciones y las subrutinas. PROGRAMACION MODULAR: La programación modular es un método de diseño que permite resolver un problema mediante su descomposición en problemas más simples o módulos que se pueden analizar, programar y poner

Más detalles

Lenguajes de Programación Curso 04-05. Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces 1. 2. Clases abstractas 2

Lenguajes de Programación Curso 04-05. Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces 1. 2. Clases abstractas 2 Objetivos Herencia. Utilización de interfaces y clases abstractas. Índice 1. Interfaces 1 2. Clases abstractas 2 3. Collections Framework 3 3.1. Collection........................................... 3

Más detalles

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática Fundamentos de la informática 5. Gestión de ficheros de texto en Java Contenido Introducción La clase PrintWriter La clase

Más detalles

Facultad de Ingeniería Escuela de Ingeniería de Sistemas y Computación Algoritmia y Programación

Facultad de Ingeniería Escuela de Ingeniería de Sistemas y Computación Algoritmia y Programación Facultad de Ingeniería Escuela de Ingeniería de Sistemas y Computación Algoritmia y Programación NORMAS PARA LA ENTREGA DE LOS LABORATORIOS Coloque el nombre de los integrantes del grupo, nombre del profesor,

Más detalles

Orientación a Objetos

Orientación a Objetos Orientación a Objetos En el capítulo de introducción ya comentábamos que Python es un lenguaje multiparadigma en él se podía trabajar con programación estructurada, como veníamos haciendo hasta ahora,

Más detalles

Manual Básico para Encantadores de Serpientes

Manual Básico para Encantadores de Serpientes Manual Básico para Encantadores de Serpientes Qué flauta necesito? Para encantar a nuestra particular serpiente tenemos dos herramientas. La principal es el Terminal, que podemos encontrar en cualquier

Más detalles

Informe de Segunda Presentación

Informe de Segunda Presentación UNIVERSIDAD DE TARAPACA ARICA Informe de Segunda Presentación Integrantes: José Báez Mª Francisca Chacana Carlos Galleguillos Pablo Vargas Introducción Python es un lenguaje de programación de alto nivel

Más detalles

Índice de Contenidos :.

Índice de Contenidos :. [Contenido] 1. Intro 2. Rutas 3. Grupos 4. Apuntando 5.Juego Índice de Contenidos :. Introducción :: 1 Arquitectura:: 1.1 Máquina de Estados Finitos:: 1.2 Sistemas de Reglas :: 1.3 Búsqueda de Rutas::

Más detalles

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO INGENIERÍA EN COMPUTACIÓN

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO INGENIERÍA EN COMPUTACIÓN UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO INGENIERÍA EN COMPUTACIÓN REPORTE DE INVESTIGACIÓN PROGRAMA FUNCIÓN FACTORIAL ALGORITMO PROGRAMA FUNCION FIBONACCI ALGORITMO

Más detalles

Taller de Programación en Redes Stack TCP/IP - Sockets

Taller de Programación en Redes Stack TCP/IP - Sockets Taller de Programación en Redes Stack TCP/IP - Sockets Lic. en Sistemas de Información - Universidad Nacional de Luján Dr. Gabriel Tolosa tolosoft@unlu.edu.ar Lic. Marcelo Fernández fernandezm@unlu.edu.ar

Más detalles

Curso de Desarrollo Web en PHP orientado a objetos con MVC. Cookies y Sesiones Variables de Sesión Encriptación, hashing con MD5, SHA1 y SHA512

Curso de Desarrollo Web en PHP orientado a objetos con MVC. Cookies y Sesiones Variables de Sesión Encriptación, hashing con MD5, SHA1 y SHA512 Curso de Desarrollo Web en PHP orientado a objetos con MVC Eugenia Bahit, Mayo 2015 14 Cookies y Sesiones Variables de Sesión Encriptación, hashing con MD5, SHA1 y SHA512 1 Definición de los datos de acceso

Más detalles

PASCAL. Repaso de Pascal Introducción a Python. Pascal. Pascal - introducción. Pascal Declaraciones: Variables. Pascal Declaraciones: Tipos 07/04/2015

PASCAL. Repaso de Pascal Introducción a Python. Pascal. Pascal - introducción. Pascal Declaraciones: Variables. Pascal Declaraciones: Tipos 07/04/2015 Repaso de Pascal Introducción a Python Lenguajes de Programación 2015 PASCAL Pascal - introducción Pascal es un Lenguaje basado en el paradigma imperativo clasico Estructura la programación mediante Funciones

Más detalles

Lenguaje C Bucles, Condicionales, operadores y Algoritmos.

Lenguaje C Bucles, Condicionales, operadores y Algoritmos. Lenguaje C Bucles, Condicionales, operadores y Algoritmos. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia Operadores Los operadores son aquellos

Más detalles

Resumen de Sintaxis en C

Resumen de Sintaxis en C 1 Tipos, operadores y expresiones Resumen de Sintaxis en C Identificadores: Formados por letras, números y '_'. Los primeros 31 caracteres son significativos (dependiente del compilador). Las mayúsculas

Más detalles

, , , Indicar la salida por pantalla (2 puntos-20 minutos) Indicar la impresión por pantalla del siguiente programa:

, , , Indicar la salida por pantalla (2 puntos-20 minutos) Indicar la impresión por pantalla del siguiente programa: 3. Indicar la salida por pantalla (2 puntos-20 minutos) Indicar la impresión por pantalla del siguiente programa: #include class ClaseA int a; ClaseA(int n):a(n) void mostrar()cout

Más detalles

Tutorial: Python + Soap Web Service. Daniel Montenegro Cordero

Tutorial: Python + Soap Web Service. Daniel Montenegro Cordero Tutorial: Python + Soap Web Service Daniel Montenegro Cordero Python - Lenguaje de programación interpretado. - Filosofia código legible. - Permite programación orientada a objetos, imperativa y funcional.

Más detalles

Electrónica Básica. Aritmética Binaria. Electrónica Digital. José Ramón Sendra Sendra Dpto. de Ingeniería Electrónica y Automática ULPGC

Electrónica Básica. Aritmética Binaria. Electrónica Digital. José Ramón Sendra Sendra Dpto. de Ingeniería Electrónica y Automática ULPGC Electrónica Básica Aritmética Binaria Electrónica Digital José Ramón Sendra Sendra Dpto. de Ingeniería Electrónica y Automática ULPGC ARITMÉTICA BINARIA Operaciones en el sistema Binario Natural Suma Binaria

Más detalles

Fundamentos de Programación

Fundamentos de Programación Fundamentos de Programación Excep5on errores en 5empo de ejecución 1.12.2009 José A. Mañas Dpto. de Ingeniería de Sistemas Telemá@cos hcp://www.lab.dit.upm.es/~fprg/ excepciones una

Más detalles

CLIPS Definición de funciones

CLIPS Definición de funciones CLIPS Definición de funciones Por función consideramos tanto las funciones predefinidas en CLIPS como las definidas por el usuario en este lenguaje, o las definidas en un lenguaje externo (C, FORTRAN o

Más detalles

Clases y Objetos en Python. Introducción a la Computación Clase 23 Patricia Borensztejn

Clases y Objetos en Python. Introducción a la Computación Clase 23 Patricia Borensztejn Clases y Objetos en Python Introducción a la Computación Clase 23 Patricia Borensztejn Tipos en Python Ya vimos que tenemos un conjunto importante de tipos básicos y compuestos en Python definidos por

Más detalles

7.- Seleccionando funciones friend o funciones miembro para sobrecarga de operadores.

7.- Seleccionando funciones friend o funciones miembro para sobrecarga de operadores. 7.- Seleccionando funciones friend o funciones miembro para sobrecarga de operadores. En muchas situaciones se obtienen resultados equivalentes si se usa tanto una función friend o una función miembro

Más detalles