Clase5
-
Upload
jorge-gamez -
Category
Documents
-
view
813 -
download
0
Transcript of Clase5
www.unaj.edu.ar
Algoritmos y Programación
Clase 5:
Mecanismos de la Programación Orientada
a Objetos
www.unaj.edu.ar
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
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
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
Algoritmos y Programación
Miembros de clase en Python
Variables de Clase
Metodo de Clase
www.unaj.edu.ar
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
Algoritmos y Programación
Composición de objetos en Python
Las instancias de FiguraGeometrica estan compuesta por una instancia de la clase Punto que guarda el centro de la misma.
En el problema de dibujar figuras, la siguiente frase tiene sentido: “Las figuras geometricas tienen un punto que guarda el centro de coordanadas. ”
www.unaj.edu.ar
Algoritmos y Programación
• 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
Mamífero
Gato
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, nos permite establecer que una clase es como otra, con la excepción de que la nueva clase incluye “cosas” extras.
Herencia
www.unaj.edu.ar
Algoritmos y Programación
Herencia en Python
Heredan de FiguraGeometrica
La clases Linea, Circulo y Rectangulo son subclases de FiguraGeometrica.
ES UNA
ES
UN
A
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.
www.unaj.edu.ar
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
c = Cocodrilo()c.desplazar()
Acción: Toma el método de la clase más a la izquierdade la lista, por lo que mostraría: “El animal anda”
¿Qué método se ejecuta?
www.unaj.edu.ar
Algoritmos y Programación
• 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.
Jerarquía de clases
www.unaj.edu.ar
Algoritmos y Programación
• ¿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.
Sobreescritura
www.unaj.edu.ar
Algoritmos y Programación
Ejemplo de SobreescrituraLas tres superclases de FiguraGeometrica: Linea, Circulo y Rectangulo sobreescriben el método dibujar() definido en la superclase.
Sobreescriben
www.unaj.edu.ar
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“
class Mamifero(Terrestre): def desplazar(self):
Terrestre.desplazar(self) print "el mamifero"
m = Mamifero()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”
¿Cuál es el resultado?
Invocación
www.unaj.edu.ar
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
Algoritmos y Programación
• 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.
Binding en Python
www.unaj.edu.ar
Algoritmos y Programación
• 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.
.
Polimorfismo
www.unaj.edu.ar
Algoritmos y Programación
Polimorfismo
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.
≠
≠≠
?
?
?
?
El polimorfismo se vale de la
sobreescritura de metodos y
binding dinámico para poder
funcionar.
www.unaj.edu.ar
Algoritmos y Programación
• 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”
¿Qué es el diseño orientado a objetos?
www.unaj.edu.ar
Algoritmos y Programación
• 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
mensajes()
Estado
Comportamiento
Lenguaje Unificado de Modelado (UML)
www.unaj.edu.ar
Algoritmos y Programación
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, porque violan el encapsulamientonombre del atributo
UML – Diagrama de Clases - Atributos
www.unaj.edu.ar
Algoritmos y Programación
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
atributos
visiblidad operación()visiblidad operación (argumentos):resultado()
Los niveles de visibilidad son los mismos que para los atributos.
UML – Diagrama de Clases - Mensajes
www.unaj.edu.ar
Algoritmos y Programación
Veremos en este curso las técnicas más comúnmente usadas que son composición y herencia.
Motor
atributos
mensajes()
Vehiculo
atributos
mensajes()
Vehiculo
atributos
mensajes()
Automóvil
atributos
mensajes()
Moto
atributos
mensajes()
crear objetos de una clase existente dentro de una nueva clase.
crear una clase nueva como de un tipo de una clase existente.
UML – Diagrama de Clases - Relaciones