2. Algoritmos y Programación
Temario
• Conceptos de la Programacion Orientada a Objetos
– Definicion de Objetos de software
– Estado y comportamiento
– Mensajes
• Programacion Orientada a Objetos en Python
– Definicion de clases
– Definicion de atributos
– Definicion e Invocacion de metodos
– Constructores
• Encapsulamiento y ocultamiento de información
www.unaj.edu.ar
4. Algoritmos y Programación
Programación Orientada a Objetos
La orientación a objetos es similar a la
manera en
que la gente percibe su entorno
www.unaj.edu.ar
5. Algoritmos y Programación
¿Que son los Objetos?
Uno puede mirar a su alrededor y ver muchos objetos del mundo real: un
perro, un escritorio, un televisor, una bicicleta etc..
Cada uno de los objetos comparten dos características: Estado y
Comportamiento.
Ejemplos:
Una bicicleta tiene estado: cadena, número de cambios, cambio actual
comportamiento: acelerar, realizar un cambio, frenar, etc.
.
Un perro tiene estado: nombre, color, raza.
comportamiento: ladrar, correr, jugar, etc.
www.unaj.edu.ar
6. Algoritmos y Programación
Describiendo a los Objetos
• Los objetos de software son modelos de objetos
del mundo real y ellos también tienen estados y
comportamientos.
• Un objeto de software mantiene sus estados en
variables e implementa su comportamiento en
métodos.
www.unaj.edu.ar
7. Algoritmos y Programación
Representado Objetos
• Podríamos representar objetos del mundo real
utilizando objetos de software.
• Por ejemplo podríamos representar a un perro como
un objeto de software dentro de un programa.
Nuestra Representación
Objeto Real: Perro Objeto Software: Perro
www.unaj.edu.ar
8. Algoritmos y Programación
Objetos Abstractos
Podríamos representar objetos abstractos, (objetos que no
tienen una representación física en nuestro mundo real)
como un objeto de software.
Un ejemplo podría ser la representación de una cuenta
bancaria.
Cuenta Caja de Plazo
Corriente Ahorro Fijo
www.unaj.edu.ar
9. Algoritmos y Programación
Identificando Objetos
Los sustantivos son un buen punto de partida
para determinar los objetos de un sistema
www.unaj.edu.ar
10. Algoritmos y Programación
Identificando Objetos
Supongamos que María quiere ir a su departamento que
está ubicado en el tercer piso del edificio.
¿qué objetos podemos identificar?
• María
• Ascensor
• Departamento
• Edificio
• Portón de entrada
• Ventanas
www.unaj.edu.ar
11. Algoritmos y Programación
Identificando Objetos
• Es importante identificar los objetos y quedarnos
solamente con aquellos que son de nuestro
interés, teniendo siempre presente que es lo que
nosotros queremos modelar / representar.
• Identificar los objetos es un arte y no una
ciencia.
• El resultado dependera del contexto y punto de
vista de quien modela.
www.unaj.edu.ar
12. Algoritmos y Programación
Objetos a Modelar
Programación Orientada a Objetos
Selección de los objetos que queremos modelar
• María
• Ascensor
• Departamento
• Edificio
• Portón de entrada
• Ventanas
www.unaj.edu.ar
13. Algoritmos y Programación
Interactuando con los Objetos
Programación Orientada a Objetos
¿Que hace entonces María para llegar hasta su departamento?
1 Se para delante de la puerta del ascensor y lo llama.
Mensaje
Emisor Receptor
www.unaj.edu.ar
14. Algoritmos y Programación
Interactuando con los Objetos
2 El ascensor llega, abre la puerta, entra María. El ascensor
espera que María le indique a que piso quiere ir.
3 María le indica a que piso quiere ir, entonces el ascensor
cierra la puerta y la lleva hasta el piso seleccionado.
www.unaj.edu.ar
15. Algoritmos y Programación
Mensajes y Responsabilidades
En esta secuencia podemos observar la interacción
existente entre los dos objetos que hemos
identificado:
María se comunicó con el ascensor:
1 A través de un mensaje lo llamó
2 El ascensor tiene la responsabilidad de ir al lugar
donde María lo llamó
3 María sube al ascensor y a través de un nuevo mensaje
le dice que la lleve a un determinado piso
4 El ascensor tiene la responsabilidad de llevarla al piso
indicado
www.unaj.edu.ar
16. Algoritmos y Programación
Estado y Comportamiento
Con este ejemplo pudimos ver como representar situaciones de la
vida real a través de objetos.
¿Cuál es el estado y el comportamiento del ascensor?
Estado Comportamiento
Piso actual Subir
Estado puerta (abierta / cerrada) Bajar
Cantidad de ocupantes Abrir la puerta
Máxima cantidad de ocupantes Cerrar la puerta
Piso Máximo Responder a un llamado
Piso Mínimo
www.unaj.edu.ar
17. Algoritmos y Programación
Estado y Comportamiento
¿Cuál es el estados y el comportamiento de María?
Estado Comportamiento
Nombre sabe decir como se llama
Apellido sabe decir cuantos años tiene
Edad sabe decir en que piso vive
Domicilio sabe su numero de Documento
Documento
www.unaj.edu.ar
18. Algoritmos y Programación
Mensajes
Los objetos tienen estado y comportamiento, pero ¿Cómo se
comunican entre ellos?
¿cuáles son los mensajes que María utiliza para comunicarse
con el ascensor?
1 - Llamar
2 – Abrir la puerta
3 – Cerrar la puerta
4 – Subir (pisos)
5 – Abrir puerta
emisor 6 – Cerrar puerta receptor
www.unaj.edu.ar
19. Algoritmos y Programación
Métodos vs. funciones
Existen 2 distinciones importantes:
1 En un mensaje, siempre hay designado un receptor para aquel mensaje;
es algún objeto, al cual se le envía un mensaje. Cuando se llama a una
función, NO hay receptor.
2 La interpretación del mensaje (el método usado para responder al
mensaje) es determinado por el receptor y podría variar para diferentes
receptores.
?
Receptor
Receptor emisor
www.unaj.edu.ar
20. Algoritmos y Programación
Clases e instancias
María al igual que otras personas que deciden tomar un ascensor,
tienen características comunes: saben pedir un ascensor,
presionar a que piso desean ir, descender, etc.., esto es porque
pertenecen a una Categoría o Clase que podriamos llamar
”pasajero”.
Una clase es un molde a partir de la cual se crean
instancias con las mismas características y
comportamiento.
María y otras personas que hacen uso del ascensor
son instancias de la clase pasajero
www.unaj.edu.ar
22. Algoritmos y Programación
POO en Python
• Python está completamente preparado para
soportar la programacion orientado a objetos.
• En Python cuando se utiliza la programacion
orientada a objetos se puede:
Definir nuevas clases.
Utilizar mecanismos para definir relaciones de herencia entre
clases.
Instanciar las clases ya definidas en el sistema o las que
haya definido el desarrollador.
www.unaj.edu.ar
23. Algoritmos y Programación
Clases en Python
Programación Orientada a Objetos
• Una clase de Python empieza con la palabra
reservada class, seguida de su nombre y finalizando
con :.
• Por convención los nombres de clases deben
comenzar en mayúscula .
• Todo lo que va dentro de una clase se escribe con
sangría (igual que la funciones, if, bucle for, etc.).La
primer sentencia que no esté con sangría, no
pertenece a la clase.
www.unaj.edu.ar
24. Algoritmos y Programación
Clase Ascensor en Python
Programación Orientada a Objetos
• Definamos la clase Ascensor del ejemplo anterior.
Nombre de la clase
Cuerpo de la
clase Ascensor
Codigo no
perteneciente
a la clase Ascensor
www.unaj.edu.ar
25. Algoritmos y Programación
Instancias en Python
Programación Orientada a Objetos
• Para crear un objeto o instanciarlo a partir de una
clase se utiliza la notacion de funciones,o sea se
escribe el nombre de la clase seguido por dos
paréntesis, uno de apertura y otro de cierra.
Creacion de tres
instancias de la
clase Ascensor
www.unaj.edu.ar
26. Algoritmos y Programación
Self
Programación Orientada a Objetos
• La palabra reservada self sirve para referirse al objeto actual, es
utilizada dentro del propio objeto para señalarse a si mismo.
• En todos los métodos de una clase el primer parametro es siempre
self.
• Esta referencia a si mismo es necesaria para poder acceder a los
atributos y métodos del objeto diferenciando, por ejemplo, una variable
local, de una de instancia; las cuales comparten el mismo nombre.
Sirve para eliminar la
ambigüedad. Nos
permite especificar a
que __pisoActual estoy
haciendo referencia, la
variable de instancia o
la variable local
www.unaj.edu.ar
27. Algoritmos y Programación
Atributos en Python
Programación Orientada a Objetos
• Los atributos o variables de instancia son los contenedores del
estado de un objeto.
• Estos se utilizan para almacenar los datos que deben
manejarse en un objeto.
• Para asignar o accesar la informacion que se almacena en
ellos se utiliza la notacion de punto.
Referencia a la
Instancia actual
Atributo que almacena
el piso actual en el cual se
encuentre el sscensor
Notación de Punto
www.unaj.edu.ar
28. Algoritmos y Programación
Declaración de Métodos
Programación Orientada a Objetos
• Los metodos en Python son muy similares a las
funciones.
• Las similitudes más significativas son:
– La definicion de los metodos:
def nombreMetodo(parametros):
– El cuerpo debe estar indentado.
– Pueden o no retornar un resultado.
• Pero se diferencian de las funciones en que:
– Los métodos se encuentran dentro de una definicion de
clase.
– El primer parametro siempre debe ser self. Aunque no se
use.
www.unaj.edu.ar
29. Algoritmos y Programación
Invocación de Métodos
• La forma en que los métodos son invocados difiere de la forma de invocar a
las funciones.
• La notacion de punto se utiliza para invocar los métodos.
• Al invocar un método el parametro self se omite ya que esta implicito en el
objeto.
Referencia a la
Instancia actual
Nombre del metodo
invocado
Notación de Punto
www.unaj.edu.ar
30. Algoritmos y Programación
Constructores
Programación Orientada a Objetos
• Los constructores son métodos especiales mediante los cuales
los programadores pueden inicializar una instancia.
• Los constructores se ejecutan justo después de instanciar un
objeto.
• Los constructores en Python se definen codificando un método
especial llamado __init__.
• En el __init__ se inicializa las variables de instancia del objeto,
dejandolas disponibles para comenzar a operar con ellas a
través de los métodos.
www.unaj.edu.ar
31. Algoritmos y Programación
Constructores
Programación Orientada a Objetos
• Ejemplo de la utilización de un constructor para inicializar
una variable de instancia en los objetos ascensor .
Constructor de la clase Ascensor
Inicializa el atributo __pisoActual
asi puede ser utilizada
por el resto de los métodos.
Objetos ascensor
inicializados en
tres piso distintos
www.unaj.edu.ar
32. Algoritmos y Programación
Métodos Especiales
Programación Orientada a Objetos
• Existen métodos con significados especiales aparte del
__init__ y que cuyos nombres siempre comienzan y terminan
con dos guiones bajos.
• A continuación se listan dos especialmente útiles:
– __str__(self): Método para crear una cadena de texto que
represente al objeto. Se utiliza cuando usamos print para
mostrar al objeto o cuando usamos la función str(obj) para
crear una cadena a partir del objeto.
www.unaj.edu.ar
33. Algoritmos y Programación
Métodos Especiales
Programación Orientada a Objetos
– __cmp__(self, otro): Método llamado cuando se utilizan los
operadores de comparación para comprobar si el objeto es
menor, mayor o igual al objeto pasado como parámetro.
Devuelve un número negativo si el objeto es menor, cero si
son iguales, y un número positivo si el objeto es mayor. Si
este método no está definido y se intenta comparar el objeto
mediante los operadores <, <=, > o >= se lanzará una
excepción. Si se utilizan los operadores == o != para
comprobar si dos objetos son iguales, se comprueba si son
el mismo objeto (si tienen el mismo id).
www.unaj.edu.ar
35. Algoritmos y Programación
Encapsulamiento
Es un mecanismo que consiste en construir una “cápsula” que funciona como
una barrera, alrededor de la información y de las operaciones de los objetos.
Establece la siguiente regla: “todas estas cosas deben permanecer juntas”.
La programación estructurada no provee mecanismos para encapsular.
ENCAPSULAMIENTO: DATOS + MÉTODO
estado
sueldo
getSueldo() Si cambia la forma de liquidar sueldos, se debería
modificar el método getSueldo(), pero los usuarios
no son afectados por el cambio.
setSueldo(s) comportamiento
www.unaj.edu.ar
36. Algoritmos y Programación
Ocultamiento de información
Es la capacidad de ocultar los detalles internos del
comportamiento de un objeto y exponer sólo los que son
necesarios para el resto del sistema.
Del objeto, se conoce solo la interface pública, compuesta por
los métodos y datos que podrán ser requeridos por otros objetos
del sistema, el resto forma parte de la representación privada de
los objetos.
En Python el ocultamiento de un atributo o método viene
determinado por su nombre: si el nombre comienza con dos
guiones bajos (y no termina también con dos guiones bajos) se
trata de un atributo o método privado, en caso contrario es
público.
www.unaj.edu.ar
37. Algoritmos y Programación
Programaciónde información en Python
Ocultamiento Orientada a Objetos
Miembros Privados
Miembros Publicos
Acceso Valido
Acceso Invalido
www.unaj.edu.ar
38. Algoritmos y Programación
Resumen
• Todo es un objeto: un programa orientado a objetos, esta organizado como una
comunidad de objetos interactuando.
• La computación se lleva a cabo por objetos que interactúan entre si enviándose
mensajes.
• Todos los objetos son instancias de una clase. El método invocado por un
objeto en respuesta a un mensaje es determinado por la clase del objeto receptor.
• Una clase es un molde con una estructura y comportamiento asociado, que
tendrán todos los objetos que con ella se creen. Todos los objetos que con ella se
crean, tendrán los mismos datos (con diferentes valores o no) y podrán ejecutar los
mismos métodos.
• El encapsulamiento y el ocultamiento de información se complementan, para
aislar las diferentes partes de un sistema, permitiendo que el código sea
modificado y extendido sin producir efectos colaterales.
www.unaj.edu.ar