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