SlideShare una empresa de Scribd logo
PROGRAMACIÓN ORIENTADA A
OBJETOS
Particularidades de OOP en Python
● Todo es un objeto, incluyendo los tipos y clases.
● Permite herencia múltiple.
● No existen métodos ni atributos privados.
● Los atributos pueden ser modificados directamente.
● Permite "monkey patching".
● Permite "duck typing".
● Permite la sobrecarga de operadores.
● Permite la creación de nuevos tipos de datos.
Clases y objetos
● Las clases son prototipos a partir de los cuales
pueden crearse objetos que adquieren las
propiedades, características y
comportamientos definidos por las clases.
● A la creación de un objeto a partir de una clase,
se le llama "instanciar".
● Todos los elementos de Python son instancias
de al menos una clase.
object
Todo, incluyendo las clases y tipos de Python
son instancias de object.
Para corroborar si un objeto es instancia de unas
clase se utiliza la función isinstance().
Definición de una clase
● Para definir una clase se utiliza la expresión class.
●
● Con la sintaxis anterior, la clase nueva "hereda" los
métodos y atributos de object.
class <ClaseNueva>(object):
...
...
...
Convención para nombres de clases
● Según la PEP-8, las clases deben utilizar mayúsculas al
principio de cada palabra que conforma su nombre
(conocidas como CapWords o CamelCase).
● No se deben usar caracteres especiales.
● Las clases de uso interno pueden ser precedidas por un
guión bajo.
● Algunos ejemplos:
● ClaseBasica
● CalculoNumerico
● _ManejodeMemoria
● Figura
Creación de una clase básica
Clases de viejo estilo
● Hasta la versión 2.1 de Python, las clases y los tipos
eran entidades distintas y las clases se definían de la
siguiente forma:
● Por motivos de compatibilidad con versiones
anteriores, esta sintaxis está aún permitida en las
versiones más recientes de Python 2, pero no
corresponde al "nuevo estilo" de clases en el que
clases y tipos son iguales.
● Python 3 ya no soporta al viejo estilo, por lo que la
sintaxis descrita crea un objeto que "hereda" a object
sin necesidad de especificarlo.
class <ClaseNueva>:
...
...
Clases de viejo estilo en Python 2
Definición de clases en Python 3
Instanciamiento de un objeto a partir
de una clase
● Para instanciar un objeto a partir de una clase
se utiliza el operador de asignación "=".
● El objeto instanciado es ligado al nombre en el
espacio de nombres.
● Es posible crear objetos dentro de un objeto, tal
como es el caso de las listas.
● Cada objeto tiene su propio identificador
interno, el cual puede ser consultado con la
función id().
Instanciamiento de un objeto a partir
de una clase
Instanciamiento de objetos dentro
de un objeto
Atributos y métodos
● Un objeto cuenta con elementos que almacenan
datos y otros que ejecutan acciones.
● A los elementos que almacenan datos dentro de
un objeto se les denomina "atributos".
● A las piezas de código que realizan ciertas tareas
inherentes del objeto se conocen como "métodos".
<objeto>.<atributo>
<objeto>.<atributo>(<parámetros>)
Ejemplo de atributos y métodos
● Los objetos de tipo complex cuentan con los atributos
real e imag, los cuales contienen los componentes
reales e imaginarios del número correspondientemente.
● Además, dichos objetos cuentan con el método
conjugate(), el cual regresa el número conjugado del
objeto.
Nombres de atributos y métodos
● Sin guiones, son atributos normales.
● dibuja, superficie, desp_datos(),
● Encerrados entre dobles guiones bajos son
atributos especiales.
● __init__(), __name__, __del__(), __doc__
● Con dobles guiones bajos al principio son
atributos "escondidos".
● __privado, __no_tocar
Definición de atributos
● Un atributo se define de la siguiente manera:
class <Clase>(object):
...
<nombre> = <contenido>
...
Uso de atributos
● En Python es posible modificar el atributo de un
objeto sin necesidad de acceder a éste por medio de
un método.
● Lo único que se requiere para modificar un atributo
es un operador de asignación.
Atributos de clase
● Al igual que los objetos, es posible modificar un
atributo de clase con el operador de identidad.
● Al modificar el atributo de clase, el dato
modificado se reflejará en los atributos de los
objetos instanciados que no hayan modificado
dicho atributo.
Atributos de clase
Adición de atributos a los objetos
Definición de métodos
● La única diferencia sintáctica entre la
definición de un método y la definición de una
función es que el primer parámetro del método
por convención debe ser el nombre "self".
class <Clase>(object):
...
...
def <nombre>(self, <argumentos>):
...
...
...
...
Definición de métodos
Ámbito de los métodos
● Los métodos cuentan con un espacio de
nombres propio.
● En caso de no encontrar un nombre en su
ámbito local, buscará en el ámbito superior
hasta encontrar alguna coincidencia.
● Los métodos pueden acceder y crear atributos
dentro del objeto al que pertencen,
anteponiendo la palabra self y el operador de
atributo "." antes del nombre del atributo en
cuestión.
El script ambitos_metodos
Métodos especiales
● Las clases en Python cuentan con múltiples
métodos especiales , los cuales se encuentran
entre dobles guiones bajos __<metodo>__()
● Los métodos especiales más utilizados son
__init__() y __del__()
● El método __init__() se ejecuta tan pronto como
un objeto de una clase es instanciado.
● El método __del__() se ejecuta cuando un objeto
es desechado.
El método __init__()
● El método __init__() es un método especial, el cual
se ejecuta al momento de instanciar un objeto.
● El comportamiento de __init__() es muy similar a
los "constructores" en otros lenguajes.
● Los argumentos que se utilizan en la definición de
__init__() corresponden a los parámetros que se
deben ingresar al instanciar un objeto.
El método __del__()
● El método __del__() es un método especial, el cual
se ejecuta al momento de que un objeto es
descartado por el intérprete.
● El comportamiento de __del__() es muy similar a
los "constructores" en otros lenguajes.
El script init_y_del.py
El script init_y_del.py ejecutado en
terminal
El script init_y_del.py importado
Decoradores
● Un decorador en Python permite modificar de forma
dinámica a una función o un método mediante otra
función.
● El funcionamiento detallado de los decoradores
queda fuera de los alcances de este curso.
● Para invocar un decorador se utiliza el signo de
arroba (@).
● Los decoradores en Python son discutidos y
definidos en el PEP-318.
http://www.python.org/dev/peps/pep-0318/
Métodos de clase y métodos estáticos
● En ciertas ocasiones es necesario contar con
métodos que interactúen con elementos de la clase
de la cual el objeto es instanciado.
● Python permite definir métodos de clase y métodos
dinámicos.
Métodos de clase
● Los métodos de clase son aquellos que están
ligados directamente con los atributos definidos en
la clase que los contiene.
● Para definir un método de clase se utiliza el
decorador @classmethod y por convención se utiliza
cls como argumento inicial en lugar de self.
● Del mismo modo, los métodos de clase utilizan el
prefijo cls para referirse a los atributos de la clase.
class <Clase>(object):
...
...
@classmethod
def <metodo>(cls, <argumentos>):
...
...
El script metodo_clase.py
El script metodo_clase.py
Métodos estáticos
● Los métodos estáticos hacen referencia a las instancias y
métodos de una clase.
● Para definir un método estático se utiliza el decorador
@staticmethod y no utiliza ningún argumento inicial.
● Al no utilizar self, los métodos estáticos no pueden
interactuar con los atributos y métodos de la instancia.
● Para referirse a los elementos de la clase, se debe utilizar
el nombre de la clase como prefijo.
class <Clase>(object):
...
...
@staticmethod
def <metodo>(<argumentos>):
...
...
El script metodo_estatico.py
El script metodo_estatico.py
Estado de un objeto
● Al conjunto de datos y objetos relacionados con un
objeto en un momento dado, se le conoce como
"estado".
● Un objeto puede tener múltiples estados a lo largo
de su existencia conforme se relaciona con su
entorno y otros objetos.
Interfaces
● La manera en que los métodos de un objeto pueden
ser accedidos por otros objetos se conoce como
"interfaz".
● Una interfaz bien definida permite a objetos de
distinta índole interactuar entre sí de forma modular.
● La interfaz define el modo en que los objetos
intercambian información.
Implementaciones
● Una implementación corresponde al mecanismo
interno que se desencadena en un método cuando
éste es invocado.
● Las implementaciones procesan las entradas
proveniente de las interfaces y actúan en
consecuencia ya sea:
● Modificando el estado del objeto.
● Transfiriendo la información resultante del proceso
interno a través de la interfase.
Encapsulamiento
● El encapsulamiento en OOP se refiere a la capacidad
que tienen los objetos de interactuar con otros por
medio de las interfaces:
● Independientemente de la implementación.
● De forma modular e intercambiable.
● Con la información suficiente de entrada y de salida.
● En algunos otros lenguajes de programación el
encapsulamiento también se refiere a restringir el
acceso a los elementos de los objetos al mínimo
posible.
Encapsulamiento en Python
● En Python, el encapsulamiento consiste en crear
interfaces eficaces antes que en esconder la
implementación de los objetos.
● A diferencia de otros lenguajes, NO existen atributos
ni métodos privados dentro de Python.
● Python permite acceder a los atributos de un objeto
sin necesidad de que haya un método de por medio.
Name mangling
● En el caso de querer restringir de algún modo el
acceso a ciertos atributos o métodos, éstos se pueden
esconder mediante una técnica conocida como "name
mangling".
● Los atributos que utilizan "name mangling" se
comportan de forma muy parecida a un método
estático.
● Los atributos no son despelgados usando help(), pero
sí son listados con dir()
Name mangling
class <Clase>:
__<atributo_restringido>
...
...
def __<metodo_restringido>(self,<parámetros>):
...
...
<objeto> = <Clase>()
<variable> = <objeto>._<Clase>__<atributo_restringido>
<objeto>._<Clase>__<campo_restringido>(<parámetros>)
El script secreto.py
El script secreto.py
El script secreto.py
El script secreto.py en el entorno
interactivo
● Los atributos y métodos escondidos en realidad sólo
ofuscan el modo en el que se puede acceder a ellos.
<objeto>._<Clase>__,nombre>
Relaciones de objetos en Python
● En OOP existen 2 tipos de relaciones principales.
● Relación "es un", la cual se realiza mediante la herencia.
● Relación "tiene un", la cual se realiza mediante la asociación
de los objetos.
Herencia
● Es posible crear nuevas clases a partir de una o
varias clases mediante la herencia.
● La clase original se denomina superclase.
● La clase que hereda los atributos y métodos de la
superclase se denomina subclase.
● Se pueden definir atributos y métodos adicionales a
la superclase e incluso se pueden sobrescribir los
atributos y métodos heredados en la subclase.
Herencia no es instanciamiento
● La herencia es una relación exclusiva entre clases.
● Todas las clases y tipos en Python son subclases de
object.
● El instanciamiento crea objetos a partir de una clase,
pero no es posible heredar de un objeto a una clase.
issubclass()
● La función issubclass() comprueba si una clase es
subclase de otra.
Herencia
● La herencia de clases en Python es muy simple.
class <SuperClase>(object):
...
...
class <SubClase>(<SuperClase>, <OtraSuperClase>,... ):
...
...
El script herencia.py
El script herencia.py
El script herencia.py
El script herencia.py
El script herencia.py
El script herencia.py
Abstracción
● En el script herencia.py puede observarse que la clase
Forma define una serie de métodos, pero ninguno de
éstos realiza alguna acción.
● La clase Forma únicamente define las interfaces de
los métodos, mientras que sus subclases definen las
implementaciones de dichos métodos mediante la
sobrescritura de éstos.
● A esta técnica se le conoce como "abstracción".
Abstracción en Python
● En otros lenguajes se pueden crear clases y métodos
abstractos de forma explícita.
● Python no requiere de una definición explícita de una
clase o método abstracto.
● El módulo abc permite el uso explícito de clases
abstractas básicas tal como se especifica en en el PEP
3119 (http://www.python.org/dev/peps/pep-3119/)
Extensión de métodos sobrescritos
● Es común que los métodos de una subclase no
requieran de sobrescribir por completo el método de
la superclase, sino más bien extenderlo.
● Python permite reutilizar el código contenido en un
método de una superclase mediante la función
super().
La función super() en Python 2
La sintaxis en Python 2 de la función super() es la
siguiente:
class <SuperClase>:
def <metodo>(self, <argumentos>)
...
...
class <SubClase>(<SuperClase>):
def <metodo>
super(<SubClase>, self).<metodo>
...
La función super() en Python 3
La sintaxis en Python 3 de la función super() es la
siguiente:
class <SuperClase>:
def <metodo>
...
...
class <SubClase>(<SuperClase>):
def <metodo>
super().<metodo>
...
secreto_heredado.py
secreto_heredado.py
secreto_heredado.py
secreto_heredado.py
secreto_heredado.py
secreto_heredado.py
Herencia Múltiple
● Python permite la herencia múltiple.
● Los atributos y métodos de la superclase que es
referida primero al definir la subclase tienen
precedencia sobre los atributos y métodos las
superclases siguientes.
herencia_multiple.py
herencia_multiple.py
herencia_multiple.py
herencia_multiple.py
herencia_multiple.py
herencia_multiple.py
herencia_multiple.py
Asociación de objetos
● La agregación y la composición representan una
forma en la que se asocian los objetos con otros
objetos.
● En el caso de la agregación, los objetos contenidos
pueden existir independientemente de la existencia
del contenedor.
● En el caso de la composición, los objetos contenidos
en el objeto principal, perduran mientras exista
dicho objeto.
● La composición es un caso particular de agregación.
Composición y agregación en Python
● En vista de que en Python los atributos de un objeto
también son objetos los cuales están vinculados al
objeto original en su espacio de nombres; la
composición y la agregación sólo dependen de las
referencias que se haga a los objetos en los distintos
espacios de nombres.
"Monkey patching"
● Debido a que las funciones son objetos en Python,
es posible añadirlas a un objeto como si fueran
atributos. A ésto se le conoce como "Monkey
patching".
● Es posible añadir métodos a una clase de forma
dinámica mediante "Monkey patching".
● Los métodos son un tipo particular de atributo en
Python.
"Monkey patching"
"Monkey patching"
Polimorfismo
● Polimorfismo es la característica de los objetos de
comportarse de maneras distintas ante una interfaz
dada, dependiendo de la información dada y un
contexto específico.
● La sobrecarga de operadores es un tipo de
polimorfismo.
Polimorfismo
● El polimorfismo se basa en la aplicación de diversas
implementaciones a partir de una clase abstracta que
define una interfaz estándar.
● E polimorfismo se da exclusivamente entre objetos
instanciados de clases con una superclase común.
Polimorfismo en Python
● Python puede sobrescribir cualquier atributo
definido por una superclase, incluyendo los métodos
relativos a los operadores.
● De ese modo, es posible hacer diversas
implementaciones del atributo para cada subclase.
"Duck typing"
● Python permite que cualquier objeto que tenga una
interfaz sintácticamente compatible pueda ser
ejecutado sin necesidad de tener una superclase
común.
● A esta técnica se le conoce como "duck typing".
El script ducktyping.py
Copia de objetos
● El módulo copy() permite realizar copias de objetos
de forma superficial o intensiva.
● copy.copy() hace la copia superficial, creando un
objeto nuevo, pero con las referencias de sus
contenidos intactas.
● copy.deepcopy() hace una copia a profundidad
porcurando crear nuevos objetos a partir de los
contenidos.
Copia de objetos
Persistencia de objetos
● Una vez que se termina de ejecutar un programa, los
objetos y los estados en los que se encuentran son
destruidos.
● Python puede preservar los objetos en un archivo
mediante el módulo pickle
El script persistencia.py
DISTRIBUCIÓN DE SOFTWARE
Distribución de código mediante
distutils
● El módulo distutils permite "empacar" el código de
un proyecto de software para ser redistribuido.
● La configuración del paquete se realiza en el archivo
setup.py
setup.py
Algunos datos en setup.py
● name="Control",
● version="0.1",
● description="Caso de Estudio",
● author="José Luis Chiquete",
● author_email="josech@gmail.com",
● url="http://twitter/josech",
● download_url="http://openintelligence.mx/descargas"
● license="GPL",
● packages=["caso"]
● py_modules=["altas.py"]
Ejecución de setup.py
Open Intelligence®
http://openintelligence.mx
info@openintelligence.mx
+52(55) 3548-1400
Algunos derechos reservados. Esta obra puede ser modificada, redistribuida y
comercializada bajo los términos de la licencia Atribución 2.5 México (CC BY 2.5)
http://creativecommons.org/licenses/by/2.5/mx/

Más contenido relacionado

PDF
Programacion Orientada a Objetos en python
PDF
Introduction to Data Science
PPT
Sistemas operativos
PDF
Programación Orientada a Eventos Java
PPTX
Componentes de una red
PPT
8.control acceso
PPTX
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,
PPT
Cuaderno de logo
Programacion Orientada a Objetos en python
Introduction to Data Science
Sistemas operativos
Programación Orientada a Eventos Java
Componentes de una red
8.control acceso
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,
Cuaderno de logo

La actualidad más candente (20)

PPT
Poo 3 herencia
PPTX
Clase 2 - Introducción a la programación con Python I.pptx
ODP
02 python Programación orientada a objetos y funcional
PDF
2. Casos de uso y diagramas de casos de uso
PPT
Ejercicios
PPTX
Conceptos de POO (Programacion Orientada a Objetos)
PPT
Métodos POO
PDF
11 Curso de POO en java - métodos constructores y toString()
PDF
Semana 4 Estructuras de datos(Tuplas, Conjuntos y Diccionarios)
PPTX
1. introduccion a la programación orientada a objeto (poo)
PPTX
Algoritmos de ordenamiento externos
PDF
Introducción a los modelos de datos
PPTX
Requerimiento funcional y no funcional
PPT
POO: Herencia, Abstraccion y Polimorfismo
PDF
Introduccion a python 3
PPT
Herencia - Programación Orientada a Objetos
PDF
Conceptos básicos de programación orientada a objetos (poo)
PPTX
Diagramas de clases y actividades
PPT
Tipos De Datos
Poo 3 herencia
Clase 2 - Introducción a la programación con Python I.pptx
02 python Programación orientada a objetos y funcional
2. Casos de uso y diagramas de casos de uso
Ejercicios
Conceptos de POO (Programacion Orientada a Objetos)
Métodos POO
11 Curso de POO en java - métodos constructores y toString()
Semana 4 Estructuras de datos(Tuplas, Conjuntos y Diccionarios)
1. introduccion a la programación orientada a objeto (poo)
Algoritmos de ordenamiento externos
Introducción a los modelos de datos
Requerimiento funcional y no funcional
POO: Herencia, Abstraccion y Polimorfismo
Introduccion a python 3
Herencia - Programación Orientada a Objetos
Conceptos básicos de programación orientada a objetos (poo)
Diagramas de clases y actividades
Tipos De Datos
Publicidad

Destacado (20)

PDF
Programador Jr. para Python Primera Parte
PPT
Tratamiento de datos
PDF
Automatización de Procesos de Negocios con BPMS de Código Abierto
PPT
Introducción a machine learning
PDF
Python para principiantes
PPTX
Programación Orientada a Objetos - Resumen
PPTX
Programacion Orientada a Objetos
PPTX
POO: Clases
PDF
PPTX
Programación orientada a objetos
PDF
Las funciones en JavaScript para la programación orientada a objetos
PPTX
Lenguajes programación orientada a objetos
PDF
Data Science: De la Matemática a la Práctica
PDF
Descubrimiento de Insights a través de Text Mining: cómo y para qué analizar ...
PDF
Big y Open Data para las Smart Cities
PDF
Estrategias omnicanal para la mejora de los procesos de comunicación y marke...
PPTX
Convergencia de Analítica con la Experiencia Digital
PDF
Explorando los Límites de la Predicción
PDF
Big Data en salud: Un mundo de posibilidades
PDF
Mongo db comandos básicos
Programador Jr. para Python Primera Parte
Tratamiento de datos
Automatización de Procesos de Negocios con BPMS de Código Abierto
Introducción a machine learning
Python para principiantes
Programación Orientada a Objetos - Resumen
Programacion Orientada a Objetos
POO: Clases
Programación orientada a objetos
Las funciones en JavaScript para la programación orientada a objetos
Lenguajes programación orientada a objetos
Data Science: De la Matemática a la Práctica
Descubrimiento de Insights a través de Text Mining: cómo y para qué analizar ...
Big y Open Data para las Smart Cities
Estrategias omnicanal para la mejora de los procesos de comunicación y marke...
Convergencia de Analítica con la Experiencia Digital
Explorando los Límites de la Predicción
Big Data en salud: Un mundo de posibilidades
Mongo db comandos básicos
Publicidad

Similar a Programación Orientada a Objetos para Python (20)

PDF
16 17 tecnologias python oop
PDF
Paradigmas de programación y sus definiciones
PPTX
03 Oop
PPTX
Presentación - Orientación a Objetos y clases.pptx
PDF
Clase4_Python-CTIC
PDF
Python 3
PPTX
Programación Orientada a Objetos - atributos y métodos
PDF
Tema 6. Introducción a la POO_Programación.pdf
PDF
Programación Orientada a Objetos
PPTX
Programación Orientada a Objetos - Unidad 2: clases y objetos
PDF
Programación Orientada a Objetos en Java - Parte I 2015
PPT
Constructor Y Destructor
PPTX
programacion orientada a objetos con PHP .pptx
PDF
[ES] Programación orientada a objeto con java
PPT
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
PDF
Proyecto en android completado
PPTX
Encapsulación y Ocultamiento de Datos.pptx
PDF
POO(dxd).pdf.flores.alvarado.elias.tbjdeapp
PDF
Teoría Programación Orientada a Objetos.
PPTX
Asignacion2
16 17 tecnologias python oop
Paradigmas de programación y sus definiciones
03 Oop
Presentación - Orientación a Objetos y clases.pptx
Clase4_Python-CTIC
Python 3
Programación Orientada a Objetos - atributos y métodos
Tema 6. Introducción a la POO_Programación.pdf
Programación Orientada a Objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos en Java - Parte I 2015
Constructor Y Destructor
programacion orientada a objetos con PHP .pptx
[ES] Programación orientada a objeto con java
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Proyecto en android completado
Encapsulación y Ocultamiento de Datos.pptx
POO(dxd).pdf.flores.alvarado.elias.tbjdeapp
Teoría Programación Orientada a Objetos.
Asignacion2

Último (20)

PDF
CyberOps Associate - Cisco Networking Academy
PPT
introduccion a las_web en el 2025_mejoras.ppt
PDF
Influencia-del-uso-de-redes-sociales.pdf
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
Sesion 1 de microsoft power point - Clase 1
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPT
Que son las redes de computadores y sus partes
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
CyberOps Associate - Cisco Networking Academy
introduccion a las_web en el 2025_mejoras.ppt
Influencia-del-uso-de-redes-sociales.pdf
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Sesion 1 de microsoft power point - Clase 1
Power Point Nicolás Carrasco (disertación Roblox).pptx
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Presentación PASANTIAS AuditorioOO..pptx
Que son las redes de computadores y sus partes
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
historia_web de la creacion de un navegador_presentacion.pptx
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Calidad desde el Docente y la mejora continua .pdf
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx

Programación Orientada a Objetos para Python

  • 2. Particularidades de OOP en Python ● Todo es un objeto, incluyendo los tipos y clases. ● Permite herencia múltiple. ● No existen métodos ni atributos privados. ● Los atributos pueden ser modificados directamente. ● Permite "monkey patching". ● Permite "duck typing". ● Permite la sobrecarga de operadores. ● Permite la creación de nuevos tipos de datos.
  • 3. Clases y objetos ● Las clases son prototipos a partir de los cuales pueden crearse objetos que adquieren las propiedades, características y comportamientos definidos por las clases. ● A la creación de un objeto a partir de una clase, se le llama "instanciar". ● Todos los elementos de Python son instancias de al menos una clase.
  • 4. object Todo, incluyendo las clases y tipos de Python son instancias de object. Para corroborar si un objeto es instancia de unas clase se utiliza la función isinstance().
  • 5. Definición de una clase ● Para definir una clase se utiliza la expresión class. ● ● Con la sintaxis anterior, la clase nueva "hereda" los métodos y atributos de object. class <ClaseNueva>(object): ... ... ...
  • 6. Convención para nombres de clases ● Según la PEP-8, las clases deben utilizar mayúsculas al principio de cada palabra que conforma su nombre (conocidas como CapWords o CamelCase). ● No se deben usar caracteres especiales. ● Las clases de uso interno pueden ser precedidas por un guión bajo. ● Algunos ejemplos: ● ClaseBasica ● CalculoNumerico ● _ManejodeMemoria ● Figura
  • 7. Creación de una clase básica
  • 8. Clases de viejo estilo ● Hasta la versión 2.1 de Python, las clases y los tipos eran entidades distintas y las clases se definían de la siguiente forma: ● Por motivos de compatibilidad con versiones anteriores, esta sintaxis está aún permitida en las versiones más recientes de Python 2, pero no corresponde al "nuevo estilo" de clases en el que clases y tipos son iguales. ● Python 3 ya no soporta al viejo estilo, por lo que la sintaxis descrita crea un objeto que "hereda" a object sin necesidad de especificarlo. class <ClaseNueva>: ... ...
  • 9. Clases de viejo estilo en Python 2
  • 10. Definición de clases en Python 3
  • 11. Instanciamiento de un objeto a partir de una clase ● Para instanciar un objeto a partir de una clase se utiliza el operador de asignación "=". ● El objeto instanciado es ligado al nombre en el espacio de nombres. ● Es posible crear objetos dentro de un objeto, tal como es el caso de las listas. ● Cada objeto tiene su propio identificador interno, el cual puede ser consultado con la función id().
  • 12. Instanciamiento de un objeto a partir de una clase
  • 13. Instanciamiento de objetos dentro de un objeto
  • 14. Atributos y métodos ● Un objeto cuenta con elementos que almacenan datos y otros que ejecutan acciones. ● A los elementos que almacenan datos dentro de un objeto se les denomina "atributos". ● A las piezas de código que realizan ciertas tareas inherentes del objeto se conocen como "métodos". <objeto>.<atributo> <objeto>.<atributo>(<parámetros>)
  • 15. Ejemplo de atributos y métodos ● Los objetos de tipo complex cuentan con los atributos real e imag, los cuales contienen los componentes reales e imaginarios del número correspondientemente. ● Además, dichos objetos cuentan con el método conjugate(), el cual regresa el número conjugado del objeto.
  • 16. Nombres de atributos y métodos ● Sin guiones, son atributos normales. ● dibuja, superficie, desp_datos(), ● Encerrados entre dobles guiones bajos son atributos especiales. ● __init__(), __name__, __del__(), __doc__ ● Con dobles guiones bajos al principio son atributos "escondidos". ● __privado, __no_tocar
  • 17. Definición de atributos ● Un atributo se define de la siguiente manera: class <Clase>(object): ... <nombre> = <contenido> ...
  • 18. Uso de atributos ● En Python es posible modificar el atributo de un objeto sin necesidad de acceder a éste por medio de un método. ● Lo único que se requiere para modificar un atributo es un operador de asignación.
  • 19. Atributos de clase ● Al igual que los objetos, es posible modificar un atributo de clase con el operador de identidad. ● Al modificar el atributo de clase, el dato modificado se reflejará en los atributos de los objetos instanciados que no hayan modificado dicho atributo.
  • 21. Adición de atributos a los objetos
  • 22. Definición de métodos ● La única diferencia sintáctica entre la definición de un método y la definición de una función es que el primer parámetro del método por convención debe ser el nombre "self". class <Clase>(object): ... ... def <nombre>(self, <argumentos>): ... ... ... ...
  • 24. Ámbito de los métodos ● Los métodos cuentan con un espacio de nombres propio. ● En caso de no encontrar un nombre en su ámbito local, buscará en el ámbito superior hasta encontrar alguna coincidencia. ● Los métodos pueden acceder y crear atributos dentro del objeto al que pertencen, anteponiendo la palabra self y el operador de atributo "." antes del nombre del atributo en cuestión.
  • 26. Métodos especiales ● Las clases en Python cuentan con múltiples métodos especiales , los cuales se encuentran entre dobles guiones bajos __<metodo>__() ● Los métodos especiales más utilizados son __init__() y __del__() ● El método __init__() se ejecuta tan pronto como un objeto de una clase es instanciado. ● El método __del__() se ejecuta cuando un objeto es desechado.
  • 27. El método __init__() ● El método __init__() es un método especial, el cual se ejecuta al momento de instanciar un objeto. ● El comportamiento de __init__() es muy similar a los "constructores" en otros lenguajes. ● Los argumentos que se utilizan en la definición de __init__() corresponden a los parámetros que se deben ingresar al instanciar un objeto.
  • 28. El método __del__() ● El método __del__() es un método especial, el cual se ejecuta al momento de que un objeto es descartado por el intérprete. ● El comportamiento de __del__() es muy similar a los "constructores" en otros lenguajes.
  • 30. El script init_y_del.py ejecutado en terminal
  • 32. Decoradores ● Un decorador en Python permite modificar de forma dinámica a una función o un método mediante otra función. ● El funcionamiento detallado de los decoradores queda fuera de los alcances de este curso. ● Para invocar un decorador se utiliza el signo de arroba (@). ● Los decoradores en Python son discutidos y definidos en el PEP-318. http://www.python.org/dev/peps/pep-0318/
  • 33. Métodos de clase y métodos estáticos ● En ciertas ocasiones es necesario contar con métodos que interactúen con elementos de la clase de la cual el objeto es instanciado. ● Python permite definir métodos de clase y métodos dinámicos.
  • 34. Métodos de clase ● Los métodos de clase son aquellos que están ligados directamente con los atributos definidos en la clase que los contiene. ● Para definir un método de clase se utiliza el decorador @classmethod y por convención se utiliza cls como argumento inicial en lugar de self. ● Del mismo modo, los métodos de clase utilizan el prefijo cls para referirse a los atributos de la clase. class <Clase>(object): ... ... @classmethod def <metodo>(cls, <argumentos>): ... ...
  • 37. Métodos estáticos ● Los métodos estáticos hacen referencia a las instancias y métodos de una clase. ● Para definir un método estático se utiliza el decorador @staticmethod y no utiliza ningún argumento inicial. ● Al no utilizar self, los métodos estáticos no pueden interactuar con los atributos y métodos de la instancia. ● Para referirse a los elementos de la clase, se debe utilizar el nombre de la clase como prefijo. class <Clase>(object): ... ... @staticmethod def <metodo>(<argumentos>): ... ...
  • 40. Estado de un objeto ● Al conjunto de datos y objetos relacionados con un objeto en un momento dado, se le conoce como "estado". ● Un objeto puede tener múltiples estados a lo largo de su existencia conforme se relaciona con su entorno y otros objetos.
  • 41. Interfaces ● La manera en que los métodos de un objeto pueden ser accedidos por otros objetos se conoce como "interfaz". ● Una interfaz bien definida permite a objetos de distinta índole interactuar entre sí de forma modular. ● La interfaz define el modo en que los objetos intercambian información.
  • 42. Implementaciones ● Una implementación corresponde al mecanismo interno que se desencadena en un método cuando éste es invocado. ● Las implementaciones procesan las entradas proveniente de las interfaces y actúan en consecuencia ya sea: ● Modificando el estado del objeto. ● Transfiriendo la información resultante del proceso interno a través de la interfase.
  • 43. Encapsulamiento ● El encapsulamiento en OOP se refiere a la capacidad que tienen los objetos de interactuar con otros por medio de las interfaces: ● Independientemente de la implementación. ● De forma modular e intercambiable. ● Con la información suficiente de entrada y de salida. ● En algunos otros lenguajes de programación el encapsulamiento también se refiere a restringir el acceso a los elementos de los objetos al mínimo posible.
  • 44. Encapsulamiento en Python ● En Python, el encapsulamiento consiste en crear interfaces eficaces antes que en esconder la implementación de los objetos. ● A diferencia de otros lenguajes, NO existen atributos ni métodos privados dentro de Python. ● Python permite acceder a los atributos de un objeto sin necesidad de que haya un método de por medio.
  • 45. Name mangling ● En el caso de querer restringir de algún modo el acceso a ciertos atributos o métodos, éstos se pueden esconder mediante una técnica conocida como "name mangling". ● Los atributos que utilizan "name mangling" se comportan de forma muy parecida a un método estático. ● Los atributos no son despelgados usando help(), pero sí son listados con dir()
  • 46. Name mangling class <Clase>: __<atributo_restringido> ... ... def __<metodo_restringido>(self,<parámetros>): ... ... <objeto> = <Clase>() <variable> = <objeto>._<Clase>__<atributo_restringido> <objeto>._<Clase>__<campo_restringido>(<parámetros>)
  • 50. El script secreto.py en el entorno interactivo ● Los atributos y métodos escondidos en realidad sólo ofuscan el modo en el que se puede acceder a ellos. <objeto>._<Clase>__,nombre>
  • 51. Relaciones de objetos en Python ● En OOP existen 2 tipos de relaciones principales. ● Relación "es un", la cual se realiza mediante la herencia. ● Relación "tiene un", la cual se realiza mediante la asociación de los objetos.
  • 52. Herencia ● Es posible crear nuevas clases a partir de una o varias clases mediante la herencia. ● La clase original se denomina superclase. ● La clase que hereda los atributos y métodos de la superclase se denomina subclase. ● Se pueden definir atributos y métodos adicionales a la superclase e incluso se pueden sobrescribir los atributos y métodos heredados en la subclase.
  • 53. Herencia no es instanciamiento ● La herencia es una relación exclusiva entre clases. ● Todas las clases y tipos en Python son subclases de object. ● El instanciamiento crea objetos a partir de una clase, pero no es posible heredar de un objeto a una clase.
  • 54. issubclass() ● La función issubclass() comprueba si una clase es subclase de otra.
  • 55. Herencia ● La herencia de clases en Python es muy simple. class <SuperClase>(object): ... ... class <SubClase>(<SuperClase>, <OtraSuperClase>,... ): ... ...
  • 62. Abstracción ● En el script herencia.py puede observarse que la clase Forma define una serie de métodos, pero ninguno de éstos realiza alguna acción. ● La clase Forma únicamente define las interfaces de los métodos, mientras que sus subclases definen las implementaciones de dichos métodos mediante la sobrescritura de éstos. ● A esta técnica se le conoce como "abstracción".
  • 63. Abstracción en Python ● En otros lenguajes se pueden crear clases y métodos abstractos de forma explícita. ● Python no requiere de una definición explícita de una clase o método abstracto. ● El módulo abc permite el uso explícito de clases abstractas básicas tal como se especifica en en el PEP 3119 (http://www.python.org/dev/peps/pep-3119/)
  • 64. Extensión de métodos sobrescritos ● Es común que los métodos de una subclase no requieran de sobrescribir por completo el método de la superclase, sino más bien extenderlo. ● Python permite reutilizar el código contenido en un método de una superclase mediante la función super().
  • 65. La función super() en Python 2 La sintaxis en Python 2 de la función super() es la siguiente: class <SuperClase>: def <metodo>(self, <argumentos>) ... ... class <SubClase>(<SuperClase>): def <metodo> super(<SubClase>, self).<metodo> ...
  • 66. La función super() en Python 3 La sintaxis en Python 3 de la función super() es la siguiente: class <SuperClase>: def <metodo> ... ... class <SubClase>(<SuperClase>): def <metodo> super().<metodo> ...
  • 73. Herencia Múltiple ● Python permite la herencia múltiple. ● Los atributos y métodos de la superclase que es referida primero al definir la subclase tienen precedencia sobre los atributos y métodos las superclases siguientes.
  • 81. Asociación de objetos ● La agregación y la composición representan una forma en la que se asocian los objetos con otros objetos. ● En el caso de la agregación, los objetos contenidos pueden existir independientemente de la existencia del contenedor. ● En el caso de la composición, los objetos contenidos en el objeto principal, perduran mientras exista dicho objeto. ● La composición es un caso particular de agregación.
  • 82. Composición y agregación en Python ● En vista de que en Python los atributos de un objeto también son objetos los cuales están vinculados al objeto original en su espacio de nombres; la composición y la agregación sólo dependen de las referencias que se haga a los objetos en los distintos espacios de nombres.
  • 83. "Monkey patching" ● Debido a que las funciones son objetos en Python, es posible añadirlas a un objeto como si fueran atributos. A ésto se le conoce como "Monkey patching". ● Es posible añadir métodos a una clase de forma dinámica mediante "Monkey patching". ● Los métodos son un tipo particular de atributo en Python.
  • 86. Polimorfismo ● Polimorfismo es la característica de los objetos de comportarse de maneras distintas ante una interfaz dada, dependiendo de la información dada y un contexto específico. ● La sobrecarga de operadores es un tipo de polimorfismo.
  • 87. Polimorfismo ● El polimorfismo se basa en la aplicación de diversas implementaciones a partir de una clase abstracta que define una interfaz estándar. ● E polimorfismo se da exclusivamente entre objetos instanciados de clases con una superclase común.
  • 88. Polimorfismo en Python ● Python puede sobrescribir cualquier atributo definido por una superclase, incluyendo los métodos relativos a los operadores. ● De ese modo, es posible hacer diversas implementaciones del atributo para cada subclase.
  • 89. "Duck typing" ● Python permite que cualquier objeto que tenga una interfaz sintácticamente compatible pueda ser ejecutado sin necesidad de tener una superclase común. ● A esta técnica se le conoce como "duck typing".
  • 91. Copia de objetos ● El módulo copy() permite realizar copias de objetos de forma superficial o intensiva. ● copy.copy() hace la copia superficial, creando un objeto nuevo, pero con las referencias de sus contenidos intactas. ● copy.deepcopy() hace una copia a profundidad porcurando crear nuevos objetos a partir de los contenidos.
  • 93. Persistencia de objetos ● Una vez que se termina de ejecutar un programa, los objetos y los estados en los que se encuentran son destruidos. ● Python puede preservar los objetos en un archivo mediante el módulo pickle
  • 96. Distribución de código mediante distutils ● El módulo distutils permite "empacar" el código de un proyecto de software para ser redistribuido. ● La configuración del paquete se realiza en el archivo setup.py
  • 98. Algunos datos en setup.py ● name="Control", ● version="0.1", ● description="Caso de Estudio", ● author="José Luis Chiquete", ● author_email="josech@gmail.com", ● url="http://twitter/josech", ● download_url="http://openintelligence.mx/descargas" ● license="GPL", ● packages=["caso"] ● py_modules=["altas.py"]
  • 100. Open Intelligence® http://openintelligence.mx info@openintelligence.mx +52(55) 3548-1400 Algunos derechos reservados. Esta obra puede ser modificada, redistribuida y comercializada bajo los términos de la licencia Atribución 2.5 México (CC BY 2.5) http://creativecommons.org/licenses/by/2.5/mx/