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

Post on 01-Apr-2021

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Orientación a Objetos

Parte 2

tkinter

Más sobre herencia

• Suponga la siguiente jerarquía:

ClaseA Métodos m1, m2

ClaseB Métodos m2, m3

ClaseC Métodos m3, m4

Más sobre herencia

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

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”)

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.

Ejemplo de Atributos de Clase

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

Métodos de clase

• Permiten invocarse mediante NombreClase.Metodo()

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

Cripto

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

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)

Clase Empleado

Clase Jefe

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 …

Ejemplo de sobrecarga

Otro ejemplo de sobre carga

Ejemplo: una calculadora

Calculadora

• Cómo quitar los _ innecesarios?

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

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.

Frame

• Los widgets frame son contenedores para otros widgets.

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

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

UNIVERSOS LAURENTIANOS

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

Operaciones sobre universos

• sucumbir

Operaciones sobre universos

• Sumar (+) +

Obtener visión aérea

• aerea

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

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] ]

Crear Universos

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

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 !!

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

El antiUniverso de un Universo

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

Atributos de clase

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

Escritura de Universos en Archivos

• genTexto(nombreArchivo)

10001 01001 11111 10001 00000 00110

top related