orientación a objetos - wordpress.com€¦ · orientación a objetos parte 2 tkinter . más sobre...

37
Orientación a Objetos Parte 2 tkinter

Upload: others

Post on 01-Apr-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Orientación a Objetos

Parte 2

tkinter

Page 2: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Más sobre herencia

• Suponga la siguiente jerarquía:

ClaseA Métodos m1, m2

ClaseB Métodos m2, m3

ClaseC Métodos m3, m4

Page 3: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Más sobre herencia

Para m = ClaseC(1,2,3,4,5,6) Qué valores retorna: m.m4(), m.m3(), m.m2(), m.m1()?

Page 4: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Algo nuevo

• Creación dinámica de atributos en objetos

– setattr(objeto, atributo, valor)

– Ejemplo:

– A.campo = 10 es equivalente a:

• setattr(A, “campo”, 10)

• Acceso a atributos (independientemente como fueron creados)

– getattr(A, “campo”)

Page 5: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Atributos de clase

• Se definen en la clase antes de cualquiera de los métodos.

• Se referencian dentro de la clase como NombreClase.atributo_de_clase.

• Los atributos de clase son globales para todas las instancias de la clase.

Page 6: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Ejemplo de Atributos de Clase

Discusión: Qué pasaría si decimos a.mi = 900?

Page 7: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Métodos de clase

• Permiten invocarse mediante NombreClase.Metodo()

Page 8: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Ejercicio

• Desarrolle una clase Cripto que: – Implemente la criptografía por corrimiento:

• abcdefghijklmnopqrstuvwxyz como base

• bcdefghijklmnopqrstuvwxyza con corrimiento de 1

– Así “casa” se codifica como “dbtb”

• Consideraciones sobre la clase: – Atributo de clase: corrimiento

– Método de clase: establezca corrimiento

– Atributo de instancia: tira

– Métodos: codifique

Page 9: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Cripto

Page 10: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Estatuto raise y las clases para el manejo de errores

• raise

• raise clase – Raise IndexError

• raise instancia – raise

IndexError(“variable no definida”)

• Definición de clases de error propias.

• Propagación de errores: raise

Page 11: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Ejercicio

• Clase Empleado – __init__(self, persona, puesto = None, salario)

• Persona debe corresponder a: – nombre [segundo nombre] apellido_1 apellido_2

• En caso contrario debe hacer un raise de un error EmpleadoError(“nombre mal conformado”)

– aplicarAumento(porcentaje) – obtenerApellido(self)

• Retorna el primer apellido

• Especialización Jefe(Empleado) – El puesto es “Jefe” – aplicarAumento(porcentaje, bono= 1000)

Page 12: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Clase Empleado

Page 13: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Clase Jefe

Page 14: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Sobrecarga de operadores

• __getitem__(self, llave) x[llave] • __add__(self, otro) x + otro • __radd__(self, otro) otro + x • __iadd__(self, otro) x += otro • __str__(self) print(x) • __call__(self) x() • __call__(self, p) x(p) • __sub__(self, otro) x - otro • __bool__(self) if x • __contains__(self, x) x in …

Page 15: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Ejemplo de sobrecarga

Page 16: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Otro ejemplo de sobre carga

Page 17: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Ejemplo: una calculadora

Page 18: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Calculadora

• Cómo quitar los _ innecesarios?

• Cómo hacer para que la calculadora adquiera el comportamiento normal?

Page 19: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Toplevel • El widget Toplevel provee un

contenedor separado para otros widgets, como por ejemplo los frames.

• Hay 4 tipos de Toplevel: – La ventana principal referida

generalmente como root. – El toplevel child que actúa como

una ventana separada, al menos que la raíz sea destruida en cuyo caso la ventana hija será destruida.

– El toplevel transient que se dibuja al frente de su padre y que se oculta si el padre se oculta o es minimizado.

– Un toplevel no decorado, que crea una ventana que no puede ser movida o minimizada en forma directa.

Page 20: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Frame

• Los widgets frame son contenedores para otros widgets.

• Los frames pueden tener un tipo de relieve y un ancho de borde.

Page 21: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Label • El widget Label permite presentar texto o imágenes.

Page 22: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

UNIVERSOS LAURENTIANOS

Page 23: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos
Page 24: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos
Page 25: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos
Page 26: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos
Page 27: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Representación de los Universos Laurentianos

Un universo laurentiano está definido por una matriz de 3 dimensiones: alto, frente, profundidad. En el ejemplo anterior: Alto = 2, Frente = 5, Profundidad = 3

10001 01001 11111 10001 00000 00110

Page 28: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Operaciones sobre universos

• sucumbir

Page 29: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Operaciones sobre universos

• Sumar (+) +

Page 30: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Obtener visión aérea

• aerea

[ [3 0 0 1 3] [0 2 0 0 1] [1 2 3 3 1] ]

Page 31: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Obtener vision frontal

• Frontal

• Similarmente se definen izquierda, derecha y posterior.

[ [1 0 3 1 1] [1 0 3 3 2] [1 0 3 3 1] ]

Page 32: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Crear Universos

• Universo(Tapa=2, Frente=5, Profundidad=3) crea un universo vacio.

Page 33: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Creación de Universos a partir de archivos

• Universo(archivo=nombre)

• Suponga que el archivo contiene:

• No es válido combinar archivo con tapa, frente, profundidad. Las dimensiones se deducen.

10001 01001 11111 10001 00000 00110

Raise de ErrorLuarentiano

Las tapas siguientes se

suman !!

Page 34: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Creación de Universos particulares

• Universo(tapa, frente, profundidad, forma, tam, desp)

• Donde forma puede ser: – “”solido”: todos los cubitos elementos son azules – “tablero”: como un tablero comenzando con azul,

blanco, y así sucesivamente. – “recuadro”: todo el borde azul, el ancho es de tam – “invrecuadro”: el inverso de recuadro de tam – “horizontal”: de tamaño tam con desplazamiento desp

(visto desde arriba) – “vertical”: igual al anterior pero visto desde arriba

Page 35: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

El antiUniverso de un Universo

• Transforma todos los blancos en azules y viceversa y luego los cubos caen.

Page 36: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Atributos de clase

• Valores por defecto para la dimensión de un universo laurentiano.

Page 37: Orientación a Objetos - WordPress.com€¦ · Orientación a Objetos Parte 2 tkinter . Más sobre herencia •Suponga la siguiente jerarquía: ClaseA Métodos m1, m2 ClaseB Métodos

Escritura de Universos en Archivos

• genTexto(nombreArchivo)

10001 01001 11111 10001 00000 00110