23
www.unaj.edu.ar Algoritmos y Programación Clase 5: Mecanismos de la Programación Orientada a Objetos

Clase5

Embed Size (px)

Citation preview

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