2. Algoritmos y Programación
Temario
• Miembros de clases.
• Composición.
• Herencia y Jerarquia de clases.
• Sobreescritura.
• Polimorfismo.
• Diagrama de clases UML.
www.unaj.edu.ar
3. Algoritmos y Programación
Variables de clase
• Las variables de clase son elementos que guardan
informacion relacionada con la clase y son compartidas
por todas las instancias.
• Las formas de acceder a una variable de clase son:
– NombreDeClase.nombreVariable
– self.nombreVariable
– instancia.nombreVariable
www.unaj.edu.ar
4. Algoritmos y Programación
Métodos de clase
• Hay situaciones donde es necesario ejecutar un método
sin contar con instancias de una clase, para esos casos
se utilizan los métodos de clase.
• Un método de clase solo tiene acceso a sus variables
locales, parámetros y variables de clase.
www.unaj.edu.ar
5. Algoritmos y Programación
Miembros de clase en Python
Variables de Clase
Metodo de Clase
www.unaj.edu.ar
6. Algoritmos y Programación
Objetos compuestos
• La composición es un tipo de relación en la cual se expresa una
dependencia entre dos objetos, en dónde un objeto más
complejo es conformado por objetos más pequeños. En esta
situación, la frase “tiene un”, debe tener sentido:
– La pc tiene un monitor.
– El auto tiene ruedas.
• La forma usual de componer objetos a partir de otros más
simples es almacenarlos en atributos.
• Componer es una tecnica fundamental de la programación
orientada a objetos.
•
www.unaj.edu.ar
7. Algoritmos y Programación
Composición de objetos en Python
En el problema de dibujar figuras, la siguiente frase tiene sentido:
“Las figuras geometricas tienen un punto que guarda el centro de coordanadas. ”
Las instancias de FiguraGeometrica estan compuesta por una
instancia de la clase Punto que guarda el centro de la misma.
www.unaj.edu.ar
8. Algoritmos y Programación
Herencia
• En POO, al principio que permite aplicar el conocimiento de una categoría más
general a una más específica se denomina herencia.El término herencia se refiere
al hecho de que una clase hereda los atributos (variables) y el comportamiento
(métodos) de otra clase.
• La herencia es el mecanismo por el cual se implementa la relación “es un” entre
clases.
• La herencia nos permite concebir una nueva clase de objetos como un refinamiento
de otra clase de objetos ya existente, conservando las similitudes entre las clases
de objetos y especificando solamente las diferencias de la nueva clase de objetos.
Animal La herencia es el mecanismo de los lenguajes
orientados a objetos que implementa la relación “es
un” entre clases. La relación “es un” entre clases,
Mamífero nos permite establecer que una clase es como otra,
con la excepción de que la nueva clase incluye
“cosas” extras.
Gato
www.unaj.edu.ar
9. Algoritmos y Programación
Herencia en Python
En Python cuando una clase A especifica luego de su nombre otro nombre
de clase, llamémosla B, entre paréntesis, se está indicando que A hereda de B.
UNA
ES Heredan de FiguraGeometrica
ES UNA
La clases Linea, Circulo y Rectangulo son subclases de FiguraGeometrica.
www.unaj.edu.ar
10. Algoritmos y Programación
Herencia Multiple
• Python provee la posibilidad de definir relaciones de
herencia múltiple o sea heredar de mas de una clase.
class Terrestre:
def desplazar(self):
print "El animal anda“
class Acuatico:
def desplazar(self):
print "El animal nada"
class Cocodrilo(Terrestre,
Acuatico):
pass ¿Qué método se ejecuta?
c = Cocodrilo() Acción: Toma el método de la clase más a la izquierda
c.desplazar() de la lista, por lo que mostraría: “El animal anda”
www.unaj.edu.ar
11. Algoritmos y Programación
Jerarquía de clases
• Las clases pueden ser organizadas en jerarquías de
herencia donde, las clases hijas o subclases, heredarán
estado y comportamiento de las clases que se encuentran
más arriba en la jerarquía, llamadas superclases.
• La clase Object es la raíz de la jerarquía de clases en
Python. Cualquier clase que no especifique un padre directo,
será subclase directa de Object.
• Las subclases pueden agregar nuevas variables y métodos,
cambiando en algunos casos el comportamiento de los
métodos heredados.
www.unaj.edu.ar
12. Algoritmos y Programación
Sobreescritura
• ¿Qué pasa si en una subclase se define un método que
tenga exactamente la misma firma (nombre, tipo de retorno,
y lista de argumentos (orden, cantidad y tipo) ) que un
método de la superclase?
– La subclase esta sobre-escribiendo el metodo de la
superclase.
• La sobreescritura permite definir un método en una
subclase, que tenga exactamente la misma firma que un
método de la superclase.
www.unaj.edu.ar
13. Algoritmos y Programación
Ejemplo de Sobreescritura
Las tres superclases de FiguraGeometrica: Linea, Circulo y Rectangulo
sobreescriben el método dibujar() definido en la superclase.
Sobreescriben
www.unaj.edu.ar
14. Algoritmos y Programación
Reutilizando código
• Un forma usual de reutilizar codigo, es invocar metodos con
funcionalidad comun codificados en las superclases.
class Terrestre:
def desplazar(self):
print "camina“ Invocación
class Mamifero(Terrestre):
def desplazar(self):
Terrestre.desplazar(self)
print "el mamifero"
m = Mamifero() ¿Cuál es el resultado?
m.desplazar()
Acción: Primero invoca el método de la superclase y luego pasa el control a la
funcionalidad propia de la subclase, por lo que mostraría:“camina” ”el mamifero”
www.unaj.edu.ar
15. Algoritmos y Programación
¿Quien recibe el mensaje dibujar()?
• ¿Cual es la clase del objeto que recibe el mensaje dibujar()?
?
No hay manera de saber, mirando el código, que clase
de figura geometrica ejecutará el dibujar(), eso depende
del valor que tome la variable figura en ejecución.
www.unaj.edu.ar
16. Algoritmos y Programación
Binding en Python
• Conectar la invocación de un método con el cuerpo del
mismo, se llama binding.
• Si el binding, se hace en compilación, se llama binding
temprano o estático.
• Si se hace en ejecución binding tardío o dinámico.
• Python usa binding dinámico, la resolución de las
invocaciones a métodos, se hace en ejecución (run-time),
basándose en el tipo del objeto receptor.
www.unaj.edu.ar
17. Algoritmos y Programación
Polimorfismo
• Polimorfismo es la capacidad de que varias subclases
utilicen un mismo método de forma diferente.
• Para utilizar la tecnica del polimorfismo generalmente se
realiza lo siguiente:
– Se define una jerarquia de herencia.
– Se implementa una interface común en la clase que se
encuentra en el tope de la jerarquia.
– Se codifica diferentes versiones de los métodos
especificados en la interface común.
.
www.unaj.edu.ar
18. Algoritmos y Programación
Polimorfismo El polimorfismo se vale de la
sobreescritura de metodos y
binding dinámico para poder
funcionar.
?
≠
?
≠ ?
≠ ?
En el ejemplo, tenemos tres subclases distintas: Linea, Circulo y Rectangulo que
heredan de una superclase llamada FiguraGeometrica. Esta ultima clase define
el método dibujar() sin implementacion, el cual es sobreescrito en cada una de
las subclases de FiguraGeometrica. Con lo cual el envio del mensaje dibujar()
se traducira en distintos comportamientos según la instancia que lo reciba.
www.unaj.edu.ar
19. Algoritmos y Programación
¿Qué es el diseño orientado a objetos?
• Un diseño Orientado a Objetos expresa, sin necesidad de
escribir código, como colaboran los objetos para realizar sus
actividades.
• Han existido diversos métodos y técnicas orientadas a objetos,
con muchos aspectos en común pero utilizando distintas
notaciones.
• Como resultado de varias de ellas, surgió el Lenguaje Unificado
de Modelado (del Unified Modeling Language – UML) como
estándar para el modelado de sistemas de software. En 1994,
Booch, Rumbaugh (OMT) y Jacobson (Objectory) deciden
unificar sus métodos y nace el UML.
“Es un lenguaje de propósito general
para el modelado orientado a
objetos”
www.unaj.edu.ar
20. Algoritmos y Programación
Lenguaje Unificado de Modelado (UML)
• Posee distintos tipos de diagramas, pero en este curso
veremos sólo el Diagrama de Clases.
• En el diagrama de clases, un clase se describe en función de
sus atributos y mensajes.
La notación para una clase es la siguiente:
NombreDeLaClase
atributos Estado
mensajes() Comportamiento
www.unaj.edu.ar
21. Algoritmos y Programación
UML – Diagrama de Clases - Atributos
Determinan la estructura que permite al objeto conservar un
estado.
La notación para los atributos es la siguiente:
UML define prefijos para definir niveles de visibilidad:
+ para atributos públicos
# para atributos protegidos
- para atributos privados
Se recomienda no usar atributos públicos,
nombre del atributo porque violan el encapsulamiento
www.unaj.edu.ar
22. Algoritmos y Programación
UML – Diagrama de Clases - Mensajes
Es el comportamiento que le permite a un objeto de esta clase
comunicarse con otros objetos.
La notación para los mensajes es la siguiente:
Clase Los niveles de visibilidad
atributos son los mismos que para los
atributos.
visiblidad operación()
visiblidad operación (argumentos):resultado()
www.unaj.edu.ar
23. Algoritmos y Programación
UML – Diagrama de Clases - Relaciones
Veremos en este curso las técnicas más comúnmente usadas
que son composición y herencia.
Vehiculo
crear objetos de crear una
atributos
una clase existente dentro de una clase nueva como de un
nueva clase. tipo de una clase existente. mensajes()
Vehiculo Motor
Automóvil Moto
atributos atributos
atributos atributos
mensajes() mensajes()
mensajes() mensajes()
www.unaj.edu.ar