16 17 tecnologias python oop

Software Guru
Software GuruSoftware Guru
16 17 tecnologias python oop
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.
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):
...
...
...
Creación de una clase básica
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.
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 "destructores" 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
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>)
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>
...
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
http://slideshare.net/josech
1 de 70

Recomendados

Programación Orientada a Objetos para Python por
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonJosé Luis Chiquete Valdivieso
9.4K visualizações100 slides
Curso Java Inicial 5 Relaciones Entre Objetos por
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre ObjetosEmilio Aviles Avila
20.9K visualizações50 slides
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UML por
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UMLUnidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UML
Unidad 4 a HERENCIA, CLASES ABSTRACTAS, INTERFACES Y POLIMORFISMO . UMLCindy Adriana Bohórquez Santana
8.2K visualizações44 slides
Python 3 por
Python 3Python 3
Python 3CHREAR
1.1K visualizações51 slides
introduccion a-psp por
introduccion a-pspintroduccion a-psp
introduccion a-pspBrenda Ch
1K visualizações11 slides
Curso de UML 2.0 por
Curso de UML 2.0 Curso de UML 2.0
Curso de UML 2.0 Jose Asdrubal Asencio
2.1K visualizações285 slides

Mais conteúdo relacionado

Mais procurados

Diagrama de clases por
Diagrama de clasesDiagrama de clases
Diagrama de clasesNedoww Haw
207.3K visualizações14 slides
Unidad4 analisis-semantico por
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semanticoInfomania pro
8.1K visualizações36 slides
Proyecto Redes Sociales - Casos De Uso - Descripcion del problema por
Proyecto Redes Sociales - Casos De Uso - Descripcion del problemaProyecto Redes Sociales - Casos De Uso - Descripcion del problema
Proyecto Redes Sociales - Casos De Uso - Descripcion del problemaAlfredo Humberto Escalante Godinez
4.5K visualizações13 slides
10 Curso de POO en java - métodos modificadores y analizadores por
10 Curso de POO en java - métodos modificadores y analizadores10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadoresClara Patricia Avella Ibañez
6.4K visualizações7 slides
Analisis sintactico por
Analisis sintacticoAnalisis sintactico
Analisis sintacticoOscar Eduardo
4.8K visualizações64 slides
Conceptos basicos POO por
Conceptos basicos POOConceptos basicos POO
Conceptos basicos POOUniminuto - San Francisco
6K visualizações30 slides

Mais procurados(20)

Diagrama de clases por Nedoww Haw
Diagrama de clasesDiagrama de clases
Diagrama de clases
Nedoww Haw207.3K visualizações
Unidad4 analisis-semantico por Infomania pro
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semantico
Infomania pro8.1K visualizações
10 Curso de POO en java - métodos modificadores y analizadores por Clara Patricia Avella Ibañez
10 Curso de POO en java - métodos modificadores y analizadores10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores
Clara Patricia Avella Ibañez6.4K visualizações
Analisis sintactico por Oscar Eduardo
Analisis sintacticoAnalisis sintactico
Analisis sintactico
Oscar Eduardo4.8K visualizações
Arquitectura aplicaciones Patrones de diseño por Germania Rodriguez
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseño
Germania Rodriguez3.9K visualizações
Variables y metodos de instancia por Robert Wolf
Variables y metodos de instanciaVariables y metodos de instancia
Variables y metodos de instancia
Robert Wolf1.7K visualizações
Uml lenguaje unificado de modelado por Marvin Zumbado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modelado
Marvin Zumbado10.2K visualizações
Mapa mental uml por rigo berto
Mapa mental umlMapa mental uml
Mapa mental uml
rigo berto500 visualizações
Propiedades De La Poo por da4
Propiedades De La PooPropiedades De La Poo
Propiedades De La Poo
da426K visualizações
Unidad1 y 2 por cibernano
Unidad1 y 2Unidad1 y 2
Unidad1 y 2
cibernano2.2K visualizações
Entidades primitivas para algoritmos por luisce03
Entidades primitivas para algoritmosEntidades primitivas para algoritmos
Entidades primitivas para algoritmos
luisce033.2K visualizações
Herencia y Polimorfismo por nestor_moren
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismo
nestor_moren3.7K visualizações

Destaque

Django - Plataforma de sitios web por
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios webjcarazo
4K visualizações31 slides
IoT, Creando mejores experiencias para los clientes por
IoT, Creando mejores experiencias para los clientesIoT, Creando mejores experiencias para los clientes
IoT, Creando mejores experiencias para los clientesSoftware Guru
685 visualizações9 slides
Taxonomía de un próyecto Web 2 base DevSecOps por
Taxonomía de un próyecto Web 2 base DevSecOpsTaxonomía de un próyecto Web 2 base DevSecOps
Taxonomía de un próyecto Web 2 base DevSecOpsSoftware Guru
514 visualizações42 slides
Theres never been a better time por
Theres never been a better time Theres never been a better time
Theres never been a better time Software Guru
186 visualizações24 slides
La evolución del Project Manager en la era ágil por
La evolución del Project Manager en la era ágilLa evolución del Project Manager en la era ágil
La evolución del Project Manager en la era ágilSoftware Guru
777 visualizações27 slides
Un futuro distribuido con blockchain por
Un futuro distribuido con blockchainUn futuro distribuido con blockchain
Un futuro distribuido con blockchainSoftware Guru
246 visualizações20 slides

Destaque(9)

Django - Plataforma de sitios web por jcarazo
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios web
jcarazo4K visualizações
IoT, Creando mejores experiencias para los clientes por Software Guru
IoT, Creando mejores experiencias para los clientesIoT, Creando mejores experiencias para los clientes
IoT, Creando mejores experiencias para los clientes
Software Guru685 visualizações
Taxonomía de un próyecto Web 2 base DevSecOps por Software Guru
Taxonomía de un próyecto Web 2 base DevSecOpsTaxonomía de un próyecto Web 2 base DevSecOps
Taxonomía de un próyecto Web 2 base DevSecOps
Software Guru514 visualizações
Theres never been a better time por Software Guru
Theres never been a better time Theres never been a better time
Theres never been a better time
Software Guru186 visualizações
La evolución del Project Manager en la era ágil por Software Guru
La evolución del Project Manager en la era ágilLa evolución del Project Manager en la era ágil
La evolución del Project Manager en la era ágil
Software Guru777 visualizações
Un futuro distribuido con blockchain por Software Guru
Un futuro distribuido con blockchainUn futuro distribuido con blockchain
Un futuro distribuido con blockchain
Software Guru246 visualizações
IoT, Creando mejores experiencias para los clientes por Software Guru
IoT, Creando mejores experiencias para los clientesIoT, Creando mejores experiencias para los clientes
IoT, Creando mejores experiencias para los clientes
Software Guru649 visualizações
Somos pocas pero picosas (Mujeres en TI) por Software Guru
Somos pocas pero picosas (Mujeres en TI)Somos pocas pero picosas (Mujeres en TI)
Somos pocas pero picosas (Mujeres en TI)
Software Guru411 visualizações
Ecommerce en México: Recuento 2016. por Software Guru
Ecommerce en México: Recuento 2016.Ecommerce en México: Recuento 2016.
Ecommerce en México: Recuento 2016.
Software Guru225 visualizações

Similar a 16 17 tecnologias python oop

Programación Orientada a Objetos - atributos y métodos por
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodosAlvaro Enrique Ruano
33.4K visualizações22 slides
programacion orientada a objetos por
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
8.3K visualizações47 slides
Introducción a la programación en Python (día 2) por
Introducción a la programación en Python (día 2)Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)CodeSyntax
291 visualizações36 slides
Programación orientada a objetos con c++ por
Programación orientada a objetos con c++Programación orientada a objetos con c++
Programación orientada a objetos con c++Karime Hernández
544 visualizações31 slides
Programación Orientada a Objetos - Unidad 2: clases y objetos por
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosJosé Antonio Sandoval Acosta
859 visualizações60 slides
Clase4_Python-CTIC por
Clase4_Python-CTICClase4_Python-CTIC
Clase4_Python-CTICAbraham Zamudio
2.1K visualizações72 slides

Similar a 16 17 tecnologias python oop(20)

Programación Orientada a Objetos - atributos y métodos por Alvaro Enrique Ruano
Programación Orientada a Objetos - atributos y métodosProgramación Orientada a Objetos - atributos y métodos
Programación Orientada a Objetos - atributos y métodos
Alvaro Enrique Ruano33.4K visualizações
programacion orientada a objetos por jent46
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
jent468.3K visualizações
Introducción a la programación en Python (día 2) por CodeSyntax
Introducción a la programación en Python (día 2)Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)
CodeSyntax291 visualizações
Programación orientada a objetos con c++ por Karime Hernández
Programación orientada a objetos con c++Programación orientada a objetos con c++
Programación orientada a objetos con c++
Karime Hernández544 visualizações
Programación Orientada a Objetos - Unidad 2: clases y objetos por José Antonio Sandoval Acosta
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
José Antonio Sandoval Acosta859 visualizações
Clase4_Python-CTIC por Abraham Zamudio
Clase4_Python-CTICClase4_Python-CTIC
Clase4_Python-CTIC
Abraham Zamudio2.1K visualizações
[ES] Programación orientada a objeto con java por Eudris Cabrera
[ES] Programación orientada a objeto con java[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java
Eudris Cabrera3.3K visualizações
03 Oop por Network Sens
03   Oop03   Oop
03 Oop
Network Sens573 visualizações
Unidad 2 ProgramacióN Orientada A Objetos (Repaso) por Sergio Sanchez
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Sergio Sanchez3.4K visualizações
Constructor Y Destructor por Tecnologico
Constructor Y DestructorConstructor Y Destructor
Constructor Y Destructor
Tecnologico19.6K visualizações
Clases por Angelina Leal
ClasesClases
Clases
Angelina Leal619 visualizações
Programación orientada a objetos con c++ prev por jtk1
Programación orientada a objetos con c++ prevProgramación orientada a objetos con c++ prev
Programación orientada a objetos con c++ prev
jtk11.2K visualizações
manual de C# por Brendita Martinez
manual de C#manual de C#
manual de C#
Brendita Martinez176 visualizações
Manual de c# por Ana Ruth G H
Manual de c#Manual de c#
Manual de c#
Ana Ruth G H802 visualizações
Manual c# 2 por Elizabeth Reyna
Manual c# 2Manual c# 2
Manual c# 2
Elizabeth Reyna321 visualizações

Mais de Software Guru

Hola Mundo del Internet de las Cosas por
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasSoftware Guru
999 visualizações19 slides
Estructuras de datos avanzadas: Casos de uso reales por
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesSoftware Guru
377 visualizações44 slides
Building bias-aware environments por
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environmentsSoftware Guru
120 visualizações61 slides
El secreto para ser un desarrollador Senior por
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorSoftware Guru
199 visualizações29 slides
Cómo encontrar el trabajo remoto ideal por
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealSoftware Guru
126 visualizações74 slides
Automatizando ideas con Apache Airflow por
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowSoftware Guru
348 visualizações25 slides

Mais de Software Guru(20)

Hola Mundo del Internet de las Cosas por Software Guru
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
Software Guru999 visualizações
Estructuras de datos avanzadas: Casos de uso reales por Software Guru
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
Software Guru377 visualizações
Building bias-aware environments por Software Guru
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
Software Guru120 visualizações
El secreto para ser un desarrollador Senior por Software Guru
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
Software Guru199 visualizações
Cómo encontrar el trabajo remoto ideal por Software Guru
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
Software Guru126 visualizações
Automatizando ideas con Apache Airflow por Software Guru
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
Software Guru348 visualizações
How thick data can improve big data analysis for business: por Software Guru
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
Software Guru159 visualizações
Introducción al machine learning por Software Guru
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
Software Guru140 visualizações
Democratizando el uso de CoDi por Software Guru
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
Software Guru225 visualizações
Gestionando la felicidad de los equipos con Management 3.0 por Software Guru
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
Software Guru348 visualizações
Taller: Creación de Componentes Web re-usables con StencilJS por Software Guru
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
Software Guru162 visualizações
El camino del full stack developer (o como hacemos en SERTI para que no solo ... por Software Guru
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
Software Guru774 visualizações
¿Qué significa ser un programador en Bitso? por Software Guru
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
Software Guru326 visualizações
Colaboración efectiva entre desarrolladores del cliente y tu equipo. por Software Guru
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Software Guru194 visualizações
Pruebas de integración con Docker en Azure DevOps por Software Guru
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
Software Guru327 visualizações
Elixir + Elm: Usando lenguajes funcionales en servicios productivos por Software Guru
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Software Guru509 visualizações
Así publicamos las apps de Spotify sin stress por Software Guru
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
Software Guru418 visualizações
Achieving Your Goals: 5 Tips to successfully achieve your goals por Software Guru
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
Software Guru203 visualizações
Acciones de comunidades tech en tiempos del Covid19 por Software Guru
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
Software Guru268 visualizações
De lo operativo a lo estratégico: un modelo de management de diseño por Software Guru
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
Software Guru331 visualizações

16 17 tecnologias python oop

  • 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. 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().
  • 4. 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): ... ... ...
  • 5. Creación de una clase básica
  • 6. Definición de clases en Python 3
  • 7. 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().
  • 8. Instanciamiento de un objeto a partir de una clase
  • 9. Instanciamiento de objetos dentro de un objeto
  • 10. 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>)
  • 11. 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.
  • 12. 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
  • 13. Definición de atributos ● Un atributo se define de la siguiente manera: class <Clase>(object): ... <nombre> = <contenido> ...
  • 14. 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.
  • 15. Adición de atributos a los objetos
  • 16. 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>): ... ... ... ...
  • 18. Á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.
  • 20. 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.
  • 21. 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.
  • 22. 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 "destructores" en otros lenguajes.
  • 24. El script init_y_del.py ejecutado en terminal
  • 26. 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.
  • 27. 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.
  • 28. 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.
  • 29. 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.
  • 30. 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.
  • 31. 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()
  • 32. 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>)
  • 33. 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.
  • 34. 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.
  • 35. 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.
  • 36. issubclass() ● La función issubclass() comprueba si una clase es subclase de otra.
  • 37. Herencia ● La herencia de clases en Python es muy simple. class <SuperClase>(object): ... ... class <SubClase>(<SuperClase>, <OtraSuperClase>,... ): ... ...
  • 44. 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".
  • 45. 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/)
  • 46. 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().
  • 47. 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> ...
  • 48. 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> ...
  • 56. 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.
  • 57. 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.
  • 58. "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.
  • 61. 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.
  • 62. 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.
  • 63. 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.
  • 64. "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".
  • 66. 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.
  • 68. 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