Introducción a la programación orientada a objetos con Python
|
|
- Manuela Acuña Navarrete
- hace 8 años
- Vistas:
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 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 detallesRefactoring: 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 detallesProgramació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 detallesMetaprogramació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 detallesDe 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 detallesDESARROLLANDO 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 detallesIntroducció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 detallesJunio 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 detallespodrí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 detallesFramework 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 detallesTema 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 detallesSesió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 detallesPHP5 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 detallesTema 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 detallesProgramació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 detallesEntendiendo 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 detallesPreliminares: 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 detallesPlantillas 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 detallesProgramació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- */
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
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 detallesEntendiendo 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
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 detallesFco 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 detallesProgramació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 detallesPyGI 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 detallesIntroducció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 detallesIntroducció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 detallesAlgoritmos 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 detallesING1310 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 detallesLa 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 detallesScrolling 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 detallesAseguramiento 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 detallesPROCESOS 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 :. 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 detallesIntroducció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 detallesEstructuras 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 detallesPilas (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 detallesProgramació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 detallesEXAMEN 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 detallesMANUAL 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 detallesFollowing 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 detallesFollowing 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 detallesJava 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 detallesIntroducció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 detallesLenguaje 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 detallesIntroducció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 detallesOrientació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 detallesPython 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 detallesElementos 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 detallesPrá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 detallesAná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 detallesTutorial 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 detalles3. 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 detallesclass 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 detallesPrá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 detallesEl 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 detallesintroducció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 detallesCurso 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 detallesIntroducció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 detallesMatrices 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 detalles2. [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 detalles1 / 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 detallesTema 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 detallesEjercicios 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 detallesManual 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 detallesINFORMÁ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 detallesClases 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 detalles1. 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 detallesSUB 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 detallesEJERCICIOS 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 detallesEENCARNACION 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 detallesTema 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 detallespytod, 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 detallesProgramació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 detallesPrá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 detalles1.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 detallesFortran 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 detallesLenguajes 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 detallesEscuela 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 detallesFacultad 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 detallesOrientació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 detallesManual 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 detallesInforme 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 :.
[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 detallesUNIVERSIDAD 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 detallesTaller 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 detallesCurso 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 detallesPASCAL. 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 detallesLenguaje 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 detallesResumen 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:
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 detallesTutorial: 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 detallesElectró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 detallesFundamentos 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 detallesCLIPS 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 detallesClases 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 detalles7.- 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