Lenguaje de Programación orientada a objetos en

edgardoqo 57 views 51 slides Aug 31, 2025
Slide 1
Slide 1 of 51
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51

About This Presentation

Pythom


Slide Content

Python: Programación Orientada
a Objetosa Objetos
JESSE PADILLA AGUDELO
Ingeniero Electrónico

Licencia de la Presentación
3Python Manizales - Jesse Padilla Agudelo

Objetivos
?Dar un repaso general a la Programación
Orientada a Objetos, comprendiendo de
manera general conceptos tales como
Objetos,Clases,Métodos,Herencia,Objetos,Clases,Métodos,Herencia,
polimorfismo,etc.
?Conocer e implementar cada uno de los
conceptos claves de la POO usando Python
comolenguajedeprogramación.
4Python Manizales - Jesse Padilla Agudelo

Introducción
?Hoy en día la POO es un paradigma de
programaciónfundamentalparaeldesarrollode
cualquiertipodeaplicación,poresohoyendíase
la mayoría delos lenguajesdealto nivel(Como
Java,C#,C++entreotros)soportaneste
paradigmaybuscanexplotarloalmáximo,Python
Java,C#,C++entreotros)soportaneste
paradigmaybuscanexplotarloalmáximo,Python
noeslaexcepcióndehechoenPythontrabajar
conPOOesmuyfácilyagradable.Razónporla
cual durante esta presentación analizaremos de
formadetalladalasvirtudesdePythonalahora
dedesarrollarsoftwarebajoesteparadigma.
5Python Manizales - Jesse Padilla Agudelo

Índice
1. Conceptos de Programación Orientada a Objetos
2. Python: Clases y Objetos
3. Python: Herencia
4.Python: Herencia Múltiple4.Python: Herencia Múltiple
5. Python: Polimorfismo
6. Python: Encapsulación
7. Python: Clases de Nuevo Estilo
8. Python: Métodos Especiales
6Python Manizales - Jesse Padilla Agudelo

POO –Programación Orientada a
Objetos
?La programación orientada a objetos es un
paradigma de programación que busca
representarentidadesuobjetosagrupandorepresentarentidadesuobjetosagrupando
datos y métodos que puedan describir sus
característicasycomportamiento.
7Python Manizales - Jesse Padilla Agudelo

POO–Programación Orientada a
Objetos
?LaPOOparadigmadeprogramaciónenelque
losconceptosdelmundorealrelevantespara
nuestroproblemasemodelanatravésdenuestroproblemasemodelanatravésde
clasesyobjetos,yenelquenuestroprograma
consiste en una serie de interacciones entre
estosobjetos.
8Python Manizales - Jesse Padilla Agudelo

Ventajas de la POO
?Fomenta la reutilización y extensión del código.
?Permite crear sistemas más complejos.
?Relacionar el sistema al mundo real.
Facilita la creación de programas visuales.?Facilita la creación de programas visuales.
?Construcción de prototipos
?Agiliza el desarrollo de software
?Facilita el trabajo en equipo
?Facilita el mantenimiento del software
9Python Manizales - Jesse Padilla Agudelo

Modelo Orientado a Objetos
?Para entender la POO vamos a revisar unos
conceptos básicos:
1. Objeto
2.Clase 2.Clase
3. Mensaje
4. Método
5. Interfaz
6. Herencia
10Python Manizales - Jesse Padilla Agudelo

POO: El Objeto
?Un objetoes una unidad que engloba en sí
mismo características y comportamiento
necesarias para procesar información. Cada
objeto contiene datos y funciones. Y un objeto contiene datos y funciones. Y un
programa se construye como un conjunto de
objetos, o como un único objeto.
11Python Manizales - Jesse Padilla Agudelo

POO: El Objeto
?Ejemplo
–Carro BMW
?Características
–4 Ruedas Micheline4 Ruedas Micheline
–Motor BMW
–Caja de cambios de 7 Velocidades
–Color Azul
–2 Espejos
12Python Manizales - Jesse Padilla Agudelo

POO: La Clase
?Laclaseesunmodelooprototipoquedefine
lasvariablesymétodoscomunesatodoslos
objetos de cierta clase. También se puede
decirqueunaclaseesunaplantillagenéricadecirqueunaclaseesunaplantillagenérica
para un conjunto de objetos de similares
características.
13Python Manizales - Jesse Padilla Agudelo

POO: La Clase
?Ejemplo:
–Clase Vehículo
–Numero de Ruedas
–Tipo de Motor
–Capacidad del Tanque de Gasolina
–Numero de Velocidades de la Caja de Cambios
–Color
14Python Manizales - Jesse Padilla Agudelo

POO: Mensaje
?Elmensajeeselmodoenquesecomunican
losobjetosentresi.
?Ejemplo:
Cuandollamemosaunafuncióndeunobjeto,–Cuandollamemosaunafuncióndeunobjeto,
diremosqueestamosenviandounmensajeaese
objeto.
15Python Manizales - Jesse Padilla Agudelo

POO: Método
?UnMétodoesenPOOseencargadeprocesar
los mensajes que lleguen a un objeto, un
método no es otra cosa que una función o
procedimientopertenecienteaunobjeto.procedimientopertenecienteaunobjeto.
16Python Manizales - Jesse Padilla Agudelo

POO: Interfaz
?Lasclasesyporlotantotambiénlosobjetos,
tienen partes públicas y partes privadas.
Algunas vecesllamaremosa la parte pública
deunobjetosuinterfaz.Setratadelaúnicadeunobjetosuinterfaz.Setratadelaúnica
partedelobjetoqueesvisibleparaelrestode
losobjetos,demodoqueesloúnicodeloque
sedisponeparacomunicarseconellos.
17Python Manizales - Jesse Padilla Agudelo

POO: Herencia
?La herencia es uno de los conceptos más
crucialesenlaPOO.Laherenciabásicamente
consisteenqueunaclasepuedeheredarsus
variablesymétodosavariassubclases.Estovariablesymétodosavariassubclases.Esto
significa que una subclase, aparte de los
atributos y métodos propios, tiene
incorporados los atributos y métodos
heredadosdelasuperclase.
18Python Manizales - Jesse Padilla Agudelo

Python: Clases y Objetos
?Python está completamente orientado a
objetos: puede definir sus propias clases,
heredar de las que usted defina o de las
incorporadas en el lenguaje, e instanciar las
clasesquehayadefinido.clasesquehayadefinido.
?En Python las clases se definen mediante la
palabra reservadaclassseguida del nombre
de la clase, dos puntos (:) y a continuación,
indentado,elcuerpodelaclase.
19Python Manizales - Jesse Padilla Agudelo

Python: Clases y Objetos
?Ejemplo:
classEjemplo: #1
pass #2
EnesteejemploelnombredelaclaseesEjemplo?EnesteejemploelnombredelaclaseesEjemplo
y no hereda de otra clase. Por convención las
clasesempiezanenMayúscula.
?Esta clase no define atributos pero no puede
estar vacía para eso usamos la funciónpass,
equivalenteenotroslenguajesausar{}
20Python Manizales - Jesse Padilla Agudelo

POO en Python: el método __init__
Las clases de Python no tienen constructores o
destructoresexplícitos.LasclasesdePythontienenalgo
similaraunconstructor:elmétodo__init__.
21Python Manizales - Jesse Padilla Agudelo

POO en Python: el método __init__
?__init__se llama inmediatamente tras crear una instancia
delaclase.
?Sería tentador pero incorrecto denominar a esto el
constructor de la clase. Es tentador porque parece igual a
un constructor (por convención,__init__es el primer
métododefinidoparalaclase),actúacomouno(eselmétododefinidoparalaclase),actúacomouno(esel
primerpedazodecódigoqueseejecutaenunainstanciade
laclasereciéncreada),einclusosuenacomouno.
?Incorrecto, porque el objeto ya ha sido construido para
cuandosellamaa__init__,yyatieneunareferenciaválida
a la nueva instancia de la clase. Pero__init__es lo más
parecidoaunconstructorquevaaencontrarenPython,y
cumpleelmismopapel.
22Python Manizales - Jesse Padilla Agudelo

POO en Python: el método __init__
?Elprimeratributoovariabledecadamétododeclase,
incluido__init__, es siempre una referencia a la
instanciaactualdelaclase.
?Porconvención,esteargumentosiempresedenomina
self.Enelmétodo__init__,selfserefierealobjetoself.Enelmétodo__init__,selfserefierealobjeto
reciéncreado;enotrosmétodosdelaclase,serefiere
alainstanciacuyométodohasidollamado.
?Los métodos__init__pueden tomar cualquier
cantidad de argumentos, e igual que las funciones,
éstos pueden definirse con valores por defecto,
haciéndolesopcionalesparaquieninvoca.
23Python Manizales - Jesse Padilla Agudelo

POO en Python: el método __init__
?Por convención, el primer argumento de
cualquier clase de Python (la referencia a la
instancia)sedenominaself.
?Cumpleelpapeldelapalabrareservadathisen
C++oJava,peroselfnoesunapalabrareservadaC++oJava,peroselfnoesunapalabrareservada
enPython,sinounameraconvención.
?Aunque necesita especificarselfde forma
explícita cuando define el método,no se
especificaalinvocarelmétodo;Pythonloañadirá
deformaautomática.
24Python Manizales - Jesse Padilla Agudelo

POO en Python: Instanciación de las
Clases
?Crear un objeto o instanciar una clase en
Python es muy sencillo. Para instanciar una
clase,simplementeseinvocaalaclasecomo
sifueraunafunción,pasandolosargumentossifueraunafunción,pasandolosargumentos
que defina el método__init__. El valor de
retornoseráelobjetoreciéncreado.
25Python Manizales - Jesse Padilla Agudelo

POO en Python: Instanciación de las
Clases
26Python Manizales - Jesse Padilla Agudelo

POO en Python: Borrar Objetos
?Crearinstanciasnuevasessencillo,destruirlas
lo es más. En general, no hay necesidad de
liberar de forma explícita las instancias,
porqueseeliminanautomáticamentecuandoporqueseeliminanautomáticamentecuando
las variables a las que se asignan salen de
ámbito.Sonraraslaspérdidasdememoriaen
Python.
27Python Manizales - Jesse Padilla Agudelo

POO con Python: Atributos de datos
?Python admite atributos de datos (llamados variables de
instanciaenJava,yvariablesmiembroenC++).
?Parahacerreferenciaaesteatributodesdecódigoqueesté
fuera de la clase, debe calificarlo con el nombre de la
instancia,instancia.data, de la misma manera que
calificaríaunafunciónconelnombredesumódulo.calificaríaunafunciónconelnombredesumódulo.
?Parahacerreferenciaaatributosdedatosdesdedentrode
laclase,useselfcomocalificador.Porconvención,todoslos
atributosdedatosseinicializanenelmétodo__init__.Sin
embargo, esto no es un requisito, ya que los atributos, al
igual que las variables locales, comienzan a existir cuando
selesasignasuprimervalor.
28Python Manizales - Jesse Padilla Agudelo

POO en Python: Atributos de datos
29Python Manizales - Jesse Padilla Agudelo

POO en Python: Sobre Carga de
Métodos
?C++yJavaadmitenlasobrecargadefuncionesporlista
de argumentos,es decir una clase puede tener varios
métodosconelmismonombre,peroconargumentos
en distinta cantidad, o de distinto tipo. Python no
admite sobrecarga de funciones. Los métodos se
definensóloporsunombreyhayunúnicométodopordefinensóloporsunombreyhayunúnicométodopor
claseconunnombredado.
?Demaneraquesiunaclasesucesoratieneunmétodo
__init__, siempre sustituye al método__init__de su
clase padre, incluso si éste lo define con una lista de
argumentos diferentes. Y se aplica lo mismo a
cualquierotrométodo
30Python Manizales - Jesse Padilla Agudelo

POO en Python: Sobre Carga de
Operadores
?Lasobrecargadeoperadorespermiteredefinir
ciertos operadores, como "+" y "-", para
usarlosconlasclasesquehemosdefinido.Se
llamasobrecargadeoperadoresporquellamasobrecargadeoperadoresporque
estamos reutilizando el mismo operadorcon
unnúmerodeusosdiferentes,yelcompilador
decidecómousareseoperadordependiendo
sobrequéopera.
31Python Manizales - Jesse Padilla Agudelo

POO en Python: Sobre Carga de
Operadores
?__add__( self, other) -> Oper. Suma
?__sub__( self, other) -> Oper. Resta
?__mul__( self, other) -> Oper. Multiplicacion
?__rmul__( self, other) -> Oper. Multi. PorEscalar
?__floordiv__( self, other) -> Oper. division Redondeo?__floordiv__( self, other) -> Oper. division Redondeo
?__mod__( self, other) -> Oper. modulo
?__divmod__( self, other) -> Oper. division
?__pow__( self, other[, modulo]) -> Oper. Potencia
?__and__( self, other) -> Oper. and
?__xor__( self, other) -> Oper. xor
?__or__( self, other) -> Oper. or
32Python Manizales - Jesse Padilla Agudelo

POO en Python: Sobre Carga de
Operadores
33Python Manizales - Jesse Padilla Agudelo

Python: Herencia
?Unadelasprincipalespropiedadesdelasclases
eslaherencia.Estapropiedadnospermitecrear
nuevas clases a partir de clases existentes,
conservandolaspropiedadesdelaclaseoriginaly
añadiendootrasnuevas.añadiendootrasnuevas.
?La nueva clase obtenida se conoce como clase
derivada, y las clases a partir de las cuales se
deriva,clasesbase.Además,cadaclasederivada
puedeusarsecomoclasebaseparaobteneruna
nuevaclasederivada.
34Python Manizales - Jesse Padilla Agudelo

Python: Herencia
?Definición de una clase heredada en Python.
classInstrumento:
pass
classGuitarra(Instrumento):classGuitarra(Instrumento):
pass
classBajo(Instrumento):
pass
35Python Manizales - Jesse Padilla Agudelo

Herencia: El Método __init__
?Cuando creamos una clase derivada a partir
de una clase padre y tenemos que la clase
derivada proporciona o requiere su propio
método__init__,estemétododelaclasemétodo__init__,estemétododelaclase
derivada debe llamar explícitamente el
método__init__delaclasebase.
36Python Manizales - Jesse Padilla Agudelo

Herencia: El Método __init__
37Python Manizales - Jesse Padilla Agudelo

Python: Herencia Múltiple
classacuatico:
pass
classterrestre:classterrestre:
pass
classanfibio(acuatico, terrestre):
pass
38Python Manizales - Jesse Padilla Agudelo

Polimorfismo
?En programación orientada a objetos se
denominapolimorfismoa la capacidad que
tienenlosobjetosdeunaclasederesponder
almismomensajeoeventoenfuncióndelosalmismomensajeoeventoenfuncióndelos
parámetros utilizados durante su invocación.
Un objeto polimórfico es una entidad que
puede contener valores de diferentes tipos
durantelaejecucióndelprograma.(wikipedia)
39Python Manizales - Jesse Padilla Agudelo

Python: Polimorfismo
?Elpolimorfismoeselprocesodelautilización
de un operador o función de diferentes
formas para diferentes datos de entrada. En
términosprácticos,elpolimorfismosignificatérminosprácticos,elpolimorfismosignifica
quesilaclaseBheredadelaclaseA,notiene
que heredar todo acerca de la clase A, que
puede hacer algunas de las cosas que hace
unaclasediferente
40Python Manizales - Jesse Padilla Agudelo

Python: Polimorfismo
?AdiferenciadeJavayC++elPolimorfismoen
Python no es de gran importancia, dada su
naturalezadelenguajedinámico.
?EnPythonnoexistelasobrecargademétodos,?EnPythonnoexistelasobrecargademétodos,
elultimométodoquesedeclarereemplazara
a los anteriores, aunque se puede conseguir
este comportamiento usando métodos de #
argumentosvariable(*otros,**otros)
41Python Manizales - Jesse Padilla Agudelo

Encapsulación
?Para proteger a las variables de
modificaciones no deseadas se introduce el
conceptodeencapsulación.Losmiembrosde
unaclasesepuedendividirenpúblicosyunaclasesepuedendividirenpúblicosy
privados.Losmiembrospúblicossonaquellos
alosquesepuedeaccederlibrementedesde
fueradelaclase.Losmiembrosprivados,por
elcontrario,solamentepuedenseraccedidos
porlosmétodosdelapropiaclase.
42Python Manizales - Jesse Padilla Agudelo

Encapsulación
?LaEncapsulaciónseconsigueenotroslenguajes
de programación como Java y C++ utilizando
modificadores de acceso que definen si
cualquiera puede acceder a esa método o
atributo.atributo.
?Enestoslenguajestenemoslosmodificaciones:
?public-> hace visible los métodos y atributos
fueradelaclase.
?private->hacequelosmétodosyatributossolo
seanaccesiblespormétodosdentrodelaclase.
43Python Manizales - Jesse Padilla Agudelo

Python: Encapsulación
?En Python no existen los modificadores de
acceso.
?Elaccesoaunaatributooalosmétodosviene
determinadoporsunombre:sielnombredeterminadoporsunombre:sielnombre
comienzacondosguionesbajos(ynotermina
también con dos guiones bajos) se trata de
unaatributoométodo privada,sinoesasi
estossonpúblicos.
44Python Manizales - Jesse Padilla Agudelo

Python: Encapsulación
45Python Manizales - Jesse Padilla Agudelo

Python: Clases de Nuevo Estilo
?Laramas2.xdePython tienedostiposdeclases,
las de estilo viejo y las de estilo nuevo
conviviendo. Las de estilo viejo siguen
exactamente el mismo modelo que cualquier
programadordecualquierversiónanteriorprogramadordecualquierversiónanterior
deberíaconocer.Todaslascaracterísticasquese
explicarán a continuación se aplican sólo a las
clasesdeestilonuevo.Eventualmentesedejarán
desoportarlasclasesdeestiloviejo, enPython
3.0
46Python Manizales - Jesse Padilla Agudelo

Python: Clases de Nuevo Estilo
?¿Cómo se define una clase de estilo nuevo?Se hace
heredando de una clase existente. La mayoría de los
tipos internos de Python, como enteros, listas,
diccionarios, e incluso archivos son ahora clases de
estilo nuevo. Hay además una clase de estilo nuevo
llamada'object'queseconvierteenlaclasebaseparallamada'object'queseconvierteenlaclasebasepara
todoslostiposinternos,demodoquesinoqueremos
heredardeunnuevotipointernosepuedeheredarde
este:
class MiClase(object):
def __init__(self):
pass
47Python Manizales - Jesse Padilla Agudelo

Preguntas
48Python Manizales - Jesse Padilla Agudelo

Referencias
?Pythonparatodos,RaúlGonzálezDuque
?Inmersión en Python, MARK PILGRIM –
FRANCISCOCALLEGO–RICARDOCÁRDENAS.
AprendaaPensarComounProgramadorcon?AprendaaPensarComounProgramadorcon
Python, ALLEN DOWNEY - JEREY ELKNER –
CHIRISMEYER
49Python Manizales - Jesse Padilla Agudelo

Enlaces
?www.python.org
?http://es.wikipedia.org/wiki/Programaci%C3%B3
n_orientada_a_objetos
?http://www.python.org/doc/2.5.2/ref/numeric-
types.htmltypes.html
?http://blog.rvburke.com/2006/11/22/programaci
on-orientada-a-objetos-en-python/
?http://www.freenetpages.co.uk/hp/alan.gauld/sp
anish/tutclass.htm
?http://juanjoalvarez.net/?q=cambiospython
50Python Manizales - Jesse Padilla Agudelo

51Python Manizales - Jesse Padilla Agudelo
Tags