You are on page 1of 23

Algoritmos y Programacin

Clase 5:
Mecanismos de la
Programacin Orientada
a Objetos

www.unaj.edu.ar

Algoritmos y Programacin

Temario

Miembros de clases.
Composicin.
Herencia y Jerarquia de clases.
Sobreescritura.
Polimorfismo.
Diagrama de clases UML.

www.unaj.edu.ar

Algoritmos y Programacin

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 Programacin

Mtodos de clase

Hay situaciones donde es necesario ejecutar un mtodo


sin contar con instancias de una clase, para esos casos
se utilizan los mtodos de clase.

Un mtodo de clase solo tiene acceso a sus variables


locales, parmetros y variables de clase.

www.unaj.edu.ar

Algoritmos y Programacin

Miembros de clase en Python


Variables de Clase

Metodo de Clase

www.unaj.edu.ar

Algoritmos y Programacin

Objetos compuestos

La composicin es un tipo de relacin en la cual se expresa una


dependencia entre dos objetos, en dnde un objeto ms
complejo es conformado por objetos ms pequeos. En esta
situacin, 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 ms


simples es almacenarlos en atributos.

Componer es una tecnica fundamental de la programacin


orientada a objetos.

www.unaj.edu.ar

Algoritmos y Programacin

Composicin 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

Algoritmos y Programacin

Herencia

En POO, al principio que permite aplicar el conocimiento de una categora ms


general a una ms especfica se denomina herencia.El trmino herencia se refiere
al hecho de que una clase hereda los atributos (variables) y el comportamiento
(mtodos) de otra clase.

La herencia es el mecanismo por el cual se implementa la relacin 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
Mamfero

La herencia es el mecanismo de los lenguajes


orientados a objetos que implementa la relacin es
un entre clases. La relacin es un entre clases,
nos permite establecer que una clase es como otra,
con la excepcin de que la nueva clase incluye
cosas extras.

Gato
www.unaj.edu.ar

Algoritmos y Programacin

Herencia en Python
En Python cuando una clase A especifica luego de su nombre otro nombre
de clase, llammosla B, entre parntesis, se est indicando que A hereda de B.

ES UNA

ES

A
N
U

Heredan de FiguraGeometrica

La clases Linea, Circulo y Rectangulo son subclases de FiguraGeometrica.


www.unaj.edu.ar

Algoritmos y Programacin

Herencia Multiple
Python provee la posibilidad de definir relaciones de
herencia mltiple 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 mtodo se ejecuta?
c = Cocodrilo() Accin: Toma el mtodo de la clase ms a la izquierda
de la lista, por lo que mostrara: El animal anda
c.desplazar()
www.unaj.edu.ar

Algoritmos y Programacin

Jerarqua de clases
Las clases pueden ser organizadas en jerarquas de
herencia donde, las clases hijas o subclases, heredarn
estado y comportamiento de las clases que se encuentran
ms arriba en la jerarqua, llamadas superclases.
La clase Object es la raz de la jerarqua de clases en
Python. Cualquier clase que no especifique un padre directo,
ser subclase directa de Object.
Las subclases pueden agregar nuevas variables y mtodos,
cambiando en algunos casos el comportamiento de los
mtodos heredados.
www.unaj.edu.ar

Algoritmos y Programacin

Sobreescritura
Qu pasa si en una subclase se define un mtodo que
tenga exactamente la misma firma (nombre, tipo de retorno,
y lista de argumentos (orden, cantidad y tipo) ) que un
mtodo de la superclase?
La subclase esta sobre-escribiendo el metodo de la
superclase.
La sobreescritura permite definir un mtodo en una
subclase, que tenga exactamente la misma firma que un
mtodo de la superclase.

www.unaj.edu.ar

Algoritmos y Programacin

Ejemplo de Sobreescritura
Las tres superclases de FiguraGeometrica: Linea, Circulo y Rectangulo
sobreescriben el mtodo dibujar() definido en la superclase.

Sobreescriben

www.unaj.edu.ar

Algoritmos y Programacin

Reutilizando cdigo

Un forma usual de reutilizar codigo, es invocar metodos con


funcionalidad comun codificados en las superclases.

class Terrestre:
def desplazar(self):
print "camina

Invocacin

class Mamifero(Terrestre):
def desplazar(self):
Terrestre.desplazar(self)
print "el mamifero"
m = Mamifero()
m.desplazar()

Cul es el resultado?

Accin: Primero invoca el mtodo de la superclase y luego pasa el control a la


funcionalidad propia de la subclase, por lo que mostrara:camina el mamifero
www.unaj.edu.ar

Algoritmos y Programacin

Quien recibe el mensaje dibujar()?


Cual es la clase del objeto que recibe el mensaje dibujar()?

No hay manera de saber, mirando el cdigo, que clase


de figura geometrica ejecutar el dibujar(), eso depende
del valor que tome la variable figura en ejecucin.
www.unaj.edu.ar

Algoritmos y Programacin

Binding en Python
Conectar la invocacin de un mtodo con el cuerpo del
mismo, se llama binding.
Si el binding, se hace en compilacin, se llama binding
temprano o esttico.
Si se hace en ejecucin binding tardo o dinmico.
Python usa binding dinmico, la resolucin de las
invocaciones a mtodos, se hace en ejecucin (run-time),
basndose en el tipo del objeto receptor.
www.unaj.edu.ar

Algoritmos y Programacin

Polimorfismo
Polimorfismo es la capacidad de que varias subclases
utilicen un mismo mtodo de forma diferente.
Para utilizar la tecnica del polimorfismo generalmente se
realiza lo siguiente:
Se define una jerarquia de herencia.
Se implementa una interface comn en la clase que se
encuentra en el tope de la jerarquia.
Se codifica diferentes versiones de los mtodos
especificados en la interface comn.
.
www.unaj.edu.ar

Algoritmos y Programacin

Polimorfismo

El polimorfismo se vale de la
sobreescritura de metodos y
binding dinmico 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 mtodo 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 segn la instancia que lo reciba.
www.unaj.edu.ar

Algoritmos y Programacin

Qu es el diseo orientado a objetos?

Un diseo Orientado a Objetos expresa, sin necesidad de


escribir cdigo, como colaboran los objetos para realizar sus
actividades.
Han existido diversos mtodos y tcnicas orientadas a objetos,
con muchos aspectos en comn pero utilizando distintas
notaciones.
Como resultado de varias de ellas, surgi el Lenguaje Unificado
de Modelado (del Unified Modeling Language UML) como
estndar para el modelado de sistemas de software. En 1994,
Booch, Rumbaugh (OMT) y Jacobson (Objectory) deciden
unificar sus mtodos y nace el UML.
Es un lenguaje de propsito general
para el modelado orientado a
objetos

www.unaj.edu.ar

Algoritmos y Programacin

Lenguaje Unificado de Modelado (UML)

Posee distintos tipos de diagramas, pero en este curso


veremos slo el Diagrama de Clases.
En el diagrama de clases, un clase se describe en funcin de
sus atributos y mensajes.

La notacin para una clase es la siguiente:


NombreDeLaClase
atributos

Estado

mensajes()

Comportamiento

www.unaj.edu.ar

Algoritmos y Programacin

UML Diagrama de Clases - Atributos


Determinan la estructura que permite al objeto conservar un
estado.
La notacin para los atributos es la siguiente:
UML define prefijos para definir niveles de visibilidad:
+ para atributos pblicos
# para atributos protegidos
- para atributos privados

nombre del atributo

Se recomienda no usar atributos pblicos,


porque violan el encapsulamiento

www.unaj.edu.ar

Algoritmos y Programacin

UML Diagrama de Clases - Mensajes


Es el comportamiento que le permite a un objeto de esta clase
comunicarse con otros objetos.

La notacin para los mensajes es la siguiente:

Clase
atributos

Los niveles de visibilidad


son los mismos que para los
atributos.

visiblidad operacin()
visiblidad operacin (argumentos):resultado()

www.unaj.edu.ar

Algoritmos y Programacin

UML Diagrama de Clases - Relaciones


Veremos en este curso las tcnicas ms comnmente usadas
que son composicin y herencia.

crear objetos de
una clase existente dentro de una
nueva clase.
Vehiculo
atributos
mensajes()

Motor
atributos
mensajes()

crear una
clase nueva como de un
tipo de una clase existente.
Automvil

Vehiculo
atributos
mensajes()

Moto

atributos

atributos

mensajes()

mensajes()

www.unaj.edu.ar

You might also like