36
Programación Orientada a Objetos WTPC 2019

Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Programación Orientada a Objetos

WTPC 2019

Page 2: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Estructurado

Órdenes a la computadora

Lectura lineal

Segmentado en “funciones”

Page 3: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Estructurado

Edad

<18 >18

Page 4: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Edad

<18 >18

Estructurado

Page 5: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Orientado a objetos

Objeto 1

Objeto 3Objeto 2

mensajemensaje

mensaje

Page 6: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Orientado a objetos

Objeto 1

Objeto 3Objeto 2

mensajemensaje

mensaje

EstadoTodas las propiedades de un objeto

ComportamientoCómo un objeto reacciona frente a una interacción.

IdentidadDistintos objetos pueden tener idénticos estados y el mismo comportamiento, pero cada uno tendrá su identidad.

Page 7: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

ObjetoAtributos: datos

Métodos: procedimientos

Objeto 1

Objeto 3Objeto 2

mensajemensaje

mensaje

El objeto puede, a través de sus métodos, modificarse a sí mismo

Page 8: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Clase: blueprint de los objetosEl concepto abstracto detrás del objeto concreto

Page 9: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Clase: blueprint de los objetosEl concepto abstracto detrás del objeto concreto

humano Rodrigo Lugones

Page 10: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Clase: blueprint de los objetosEl concepto abstracto detrás del objeto concreto

mamífero

humano

Page 11: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

CaracterísticasComposición

Encapsulamiento

Herencia

Polimorfismo

Page 12: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Composición

La forma natural de crear objetos es construyéndolos a partir de objetos ya existentes.

De esta manera, un sistema complejo se compone de subsistemas más simples.

Page 13: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Composición

Director Violín Violín Cello Flauta Fagot

Page 14: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Composición

Director Violín Violín Cello Flauta Fagot

Orquesta

Page 15: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Composición

Director Violín Violín Cello Flauta Fagot

Orquesta

Un objeto puede tener como atributos otros objetos

Page 16: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Encapsulamiento

Uno no siempre quiere que el usuario tenga acceso a todos los métodos o los atributos de una clase.

Se denomina encapsulamiento al ocultamiento del estado, es decir, de los datos miembro de un objeto de manera que sólo se pueda cambiar mediante las operaciones definidas para ese objeto.

Page 17: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Encapsulamiento

Prohibir el acceso a algunos métodos de una clase

Permitir que la clase se modifique a sí misma con métodos

Prohibir el acceso (directo) a los atributos de una clase

Page 18: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Encapsulamiento

Prohibir el acceso a algunos métodos de una clase

Permitir que la clase se modifique a sí misma con métodos

Prohibir el acceso (directo) a los atributos de una clase

En la práctica: elegir qué métodos y atributos son privados

caja negra

Page 19: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Crear nuevas clases partiendo de una clase preexistente, evitando el rediseño, la modificación y la verificación de la parte ya implementada.

La herencia facilita la creación de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento (métodos) y eventualmente los atributos (variables) de su superclase

Herencia

Page 20: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Herencia

Violín Cello Cello Cello

Instrum

Page 21: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Herencia

Cuerdas Vientos

Violín Cello Fagot Flauta

Instrum

El violín es un tipo de cuerdas.Cuerdas es un tipo de instrumento.

Page 22: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

PolimorfismoCualquier instrumento puede tocar una nota*, pero una flauta y un violín suenan distinto

contrato

implementación

Una única interfaz para entidades de distinto tipo. Es decir, mismo mensaje a objetos de tipos distintos.

Page 23: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

PolimorfismoCualquier instrumento puede tocar una nota*, pero una flauta y un violín suenan distinto

contrato

implementación

Una única interfaz para entidades de distinto tipo

*¿Siempre puedo reemplazar a un hijo por su padre?

Page 24: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Subtipado: Principio de Liskov

Creamos una subclase. La nueva clase derivada debe extender sin reemplazar funcionalidades de la clase padre.

El principio de sustitución de Liskov plantea que si un programa utiliza una clase base, entonces la referencia a la clase base debe poder ser reemplazada por la clase derivada, sin que eso afecte la funcionalidad de un programa.

Page 25: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Subtipado

Page 26: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

OOP en Python

Page 27: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

OOP en Python

constructor

método

método

Page 28: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

OOP en Python>>> from orquesta import Flauta >>> primeraFlauta = Flauta("Primera flauta", "plata", 10) >>> primeraFlauta.tocar("la") Flauta toca la>>> primeraFlauta.tocar("sol") Flauta toca sol>>> primeraFlauta.tocar("mi") Flauta toca mi>>> primeraFlauta.estado() La flauta está sana>>> primeraFlauta.notasTocadas 3

Page 29: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

OOP en Python: Herencia

Page 30: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

OOP en Python: Herencia

Page 31: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

OOP en Python: Herencia

>>> from orquesta import Flauta >>> primeraFlauta = Flauta("Primera flauta", "plata", 10) >>> primeraFlauta.tocar("mi") Flauta toca mi>>> primeraFlauta.notasTocadas >>> primeraFlauta.estado() Sano

Page 32: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

OOP en Python: Encapsulamiento>>> from orquesta import Flauta >>> primeraFlauta = Flauta("Primera flauta", "plata", 10) >>> primeraFlauta.tocar("mi") Flauta toca mi>>> primeraFlauta.estado() Sano>>> primeraFlauta.__notasTocadas

--------------------------------------------AttributeError Traceback (most recent call last)<ipython-input-10-d2d7ea4a537a> in <module>()----> 1 primeraFlauta.__notasTocadas

AttributeError: 'Flauta' object has no attribute '__notasTocadas'

Page 33: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

OOP en Python: Encapsulamiento>>> from orquesta import Flauta >>> primeraFlauta = Flauta("Primera flauta", "plata", 10) >>> primeraFlauta.tocar("mi")Flauta toca mi>>> primeraFlauta.estado()Sano>>> primeraFlauta.getNotasTocadas()1

Page 34: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Extra: Built-in methods>>> from orquesta import Flauta >>> primeraFlauta = Flauta("Primera flauta", "plata", 10) >>> print(primeraFlauta)<__main__.Flauta object at 0x7f949603e978>

Page 35: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Extra: Built-in methods>>> from orquesta import Flauta >>> primeraFlauta = Flauta("Primera flauta", "plata", 10) >>> print(primeraFlauta)Este instrumento es una flauta

Page 36: Programación Orientada a Objetos · Orientada a Objetos WTPC 2019. Estructurado Órdenes a la computadora ... La herencia facilita la creación de objetos a partir de otros ya existentes

Extra: Built-in methods

Son métodos “por defecto”, con un cierto comportamiento “por defecto”. Los dos que vimos hasta ahora fueron __init__ y __str__