Introducción a la programación orientada a objetos con Python
|
|
|
- Manuela Acuña Navarrete
- hace 10 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
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.
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
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):
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...
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
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
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
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
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
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
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
#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
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)
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
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?
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 ([email protected]) Facultad de Ciencias Exactas y Naturales, UBA 28/05/2013 Maximiliano Geier (UBA) Clase 9: Testing en Python 28/05/2013
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
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 [email protected] [email protected] Facultad de Ingeniería/Universidad de los Andes/Chile Rev : 254 C.Reveco Facultad
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 [email protected] Marzo 19, 2013 Contenido Pruebas de caja blanca Cobertura Casos
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
Í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
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
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
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.
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..................................................
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
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,
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
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
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
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
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
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)
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
Práctica 1: sockets en Python
Práctica 1: sockets en Python Álvaro Navarro [email protected] Jesús M. González-Barahona [email protected] Infraestructura de Redes 5 o Ingeniería Informática 08/09 1. Fase 1: Cliente UDP Esta primera fase tiene
Análisis probabilístico y algoritmos aleatorizados
Análisis probabilístico y algoritmos aleatorizados Johan Van Horebeek, [email protected] Análisis probabilístico: considerar el input de un algoritmo como de cierta distribución probabilística. Algoritmo
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
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)
Práctica 5c. Práctica 5c. José M. Ordax
Práctica 5c José M. Ordax [email protected] 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
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
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
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
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
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
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
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
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
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
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
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
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
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í, í ó ;
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
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
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
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
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
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
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
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
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,
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
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
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 [email protected] Lic. Marcelo Fernández [email protected]
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
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
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
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
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.
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
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
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
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
