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
raise Estatuto raise y las clases para el raise clase Raise IndexError raise instancia raise IndexError( variable no definida ) Definición de clases de error propias. Propagación de errores: raise manejo de errores
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) add (self, otro) radd (self, otro) iadd (self, otro) str (self) call (self) call (self, p) sub (self, otro) bool (self) contains (self, x) x[llave] x + otro otro + x x += otro print(x) x() x(p) x - otro if 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?
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. Toplevel
Los widgets frame son contenedores para otros widgets. Los frames pueden tener un tipo de relieve y un ancho de borde. Frame
El widget Label permite presentar texto o imágenes. Label
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 [ [1 0 3 1 1] [1 0 3 3 2] [1 0 3 3 1] ] Similarmente se definen izquierda, derecha y posterior.
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: Las tapas siguientes se suman!! 10001 01001 11111 10001 00000 00110 No es válido combinar archivo con tapa, frente, profundidad. Las dimensiones se deducen. Raise de ErrorLuarentiano
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