Pontificia Universidad Cat´olica de Chile Escuela de Ingenier´ıa
Departamento de Ciencias de la Computaci´on
Clase 17: Programaci´ on Orientada a Objetos
Rodrigo Toro Icarte (rntoro@uc.cl)
IIC1103 Introducci´on a la Programaci´on - Secci´on 5
Clase pasada POO Ejemplo Ejercicios
Clases pasadas
Hemos visto distintos tipos de datos en Python:
int, float, complex, bool, string, list y tuple.
... de hecho podemos saber la clase de un objeto con el comando type().
2 c = [1 ,2 ,3 ,4]
3 d = (1 ,2 ,3 ,4)
4
5 p r i n t(t y p e( a ) ) # < c l a s s ’ f l o a t ’ >
6 p r i n t(t y p e( b ) ) # < c l a s s ’ str ’ >
7 p r i n t(t y p e( c ) ) # < c l a s s ’ l i s t ’ >
8 p r i n t(t y p e( d ) ) # < c l a s s ’ t u p l e ’ >
Clase pasada POO Ejemplo Ejercicios
Clases pasadas
Hemos visto distintos tipos de datos en Python:
int, float, complex, bool, string, list y tuple.
... de hecho podemos saber la clase de un objeto con el comando type().
1 a = 4 .5 ; b = " 4.5 "
2 c = [1 ,2 ,3 ,4]
3 d = (1 ,2 ,3 ,4)
4
Programaci´ on Orientada a Objetos
En computaci´on aspiramos a modelar el mundo para solucionar problemas reales.
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
En computaci´on aspiramos a modelar el mundo para solucionar problemas reales.
Programaci´ on Orientada a Objetos
... o para matar el tiempo.
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
... o para matar el tiempo.
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
Queremos modelar el mundo...
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
Queremos modelar el mundo...
Miren a su alrededor... ¿qu´e ven?
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
“Hay Objetos que pertenecen a cierta Clase”.
Puerta Ventana Plum´on Persona
Trabajemos un poco con la clase persona.
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
“Hay Objetos que pertenecen a cierta Clase”.
Ejemplos:
Puerta Ventana Plum´on Persona
Trabajemos un poco con la clase persona.
Programaci´ on Orientada a Objetos
“Hay Objetos que pertenecen a cierta Clase”.
Ejemplos:
Puerta Ventana Plum´on Persona
Trabajemos un poco con la clase persona.
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
Ejercicio: Dise˜ne un mini-siding, donde se pueda agregar notas a cada estudiante y calcular promedios.
Soluci´on: Tenemos que manejar una lista de estudiantes.
¿C´omo los representamos?
Opci´on: Con tuplas (nombre, apellido, n◦ de alumno, notas)
1 e s t u d i a n t e s = []
2 e s t u d i a n t e s . a p p e n d ((’ J u a n ’,’ ´A g u i l a ’,’ 1 4 0 0 0 0 0 0 ’,[]) )
3 e s t u d i a n t e s . a p p e n d ((’ A l d o ’,’ V e r r i ’,’ 1 4 0 0 0 0 0 1 ’,[]) )
4 e s t u d i a n t e s . a p p e n d ((’ Mar ´ı a ’,’ P i n t o ’,’ 1 4 0 0 0 0 0 2 ’,[]) )
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
Ejercicio: Dise˜ne un mini-siding, donde se pueda agregar notas a cada estudiante y calcular promedios.
Soluci´on: Tenemos que manejar una lista de estudiantes.
¿C´omo los representamos?
1 e s t u d i a n t e s = []
2 e s t u d i a n t e s . a p p e n d ((’ J u a n ’,’ ´A g u i l a ’,’ 1 4 0 0 0 0 0 0 ’,[]) )
3 e s t u d i a n t e s . a p p e n d ((’ A l d o ’,’ V e r r i ’,’ 1 4 0 0 0 0 0 1 ’,[]) )
4 e s t u d i a n t e s . a p p e n d ((’ Mar ´ı a ’,’ P i n t o ’,’ 1 4 0 0 0 0 0 2 ’,[]) )
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
Ejercicio: Dise˜ne un mini-siding, donde se pueda agregar notas a cada estudiante y calcular promedios.
Soluci´on: Tenemos que manejar una lista de estudiantes.
¿C´omo los representamos?
Opci´on: Con tuplas (nombre, apellido, n◦ de alumno, notas)
1 e s t u d i a n t e s = []
2 e s t u d i a n t e s . a p p e n d ((’ J u a n ’,’ ´A g u i l a ’,’ 1 4 0 0 0 0 0 0 ’,[]) )
Programaci´ on Orientada a Objetos
1 e s t u d i a n t e s = []
2 e s t u d i a n t e s . a p p e n d ((’ J u a n ’,’ ´A g u i l a ’,’ 1 4 0 0 0 0 0 0 ’,[]) )
3 e s t u d i a n t e s . a p p e n d ((’ A l d o ’,’ V e r r i ’,’ 1 4 0 0 0 0 0 1 ’,[]) )
4 e s t u d i a n t e s . a p p e n d ((’ Mar ´ı a ’,’ P i n t o ’,’ 1 4 0 0 0 0 0 2 ’,[]) )
5
6 # A g r e g o n o t a s
7 e s t u d i a n t e s [ 0 ] [ 3 ] . a p p e n d ( 6 . 5 )
8 e s t u d i a n t e s [ 0 ] [ 3 ] . a p p e n d ( 7 . 0 )
9 e s t u d i a n t e s [ 0 ] [ 3 ] . a p p e n d ( 6 . 7 )
10
11 e s t u d i a n t e s [ 1 ] [ 3 ] . a p p e n d ( 3 . 0 )
12 e s t u d i a n t e s [ 1 ] [ 3 ] . a p p e n d ( 2 . 7 )
13 e s t u d i a n t e s [ 1 ] [ 3 ] . a p p e n d ( 3 . 8 )
14
15 e s t u d i a n t e s [ 2 ] [ 3 ] . a p p e n d ( 5 . 7 )
16 e s t u d i a n t e s [ 2 ] [ 3 ] . a p p e n d ( 7 . 0 )
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
19 # M u e s t r o p r o m e d i o s
20 for e in e s t u d i a n t e s :
21 p r o m e d i o = sum( e [ 3 ] ) /len( e [ 3 ] )
22 p r i n t( e [1] ," \ t = > ",’ % 0 . 2 f ’% p r o m e d i o )
23
24 # S a l i d a :
25 # > > > ´A g u i l a = > 6 . 7 3
26 # > > > V e r r i = > 3 . 1 7
27 # > > > P i n t o = > 6 . 3 0
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
¿No les parecen inc´omodas las tuplas?
Con muchos atributos equivocarse con los id es f´acil. No podemos cambiar los valores de los atributos. Se pueden agregar tuplas en orden incorrecto.
... Ser´ıa ´util si Python nos permitiera crear nuestros propios tipos de datos.
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
¿No les parecen inc´omodas las tuplas?
Debemos recordar el significado de cada id.
Con muchos atributos equivocarse con los id es f´acil.
No podemos cambiar los valores de los atributos.
Se pueden agregar tuplas en orden incorrecto.
... Ser´ıa ´util si Python nos permitiera crear nuestros propios tipos de datos.
Programaci´ on Orientada a Objetos
¿No les parecen inc´omodas las tuplas?
Debemos recordar el significado de cada id.
Con muchos atributos equivocarse con los id es f´acil.
No podemos cambiar los valores de los atributos.
Se pueden agregar tuplas en orden incorrecto.
... Ser´ıa ´util si Python nos permitiera crear nuestros propios tipos de datos.
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
Python nos permite definir nuestras propias clases.
Sintaxis
class nombre clase:
bloque codigo clase
Ahora podemos crear un objeto del tipo nombre clase. Sintaxis
variable = nombre clase()
Programaci´ on Orientada a Objetos
Python nos permite definir nuestras propias clases.
Sintaxis
class nombre clase:
bloque codigo clase
Ahora podemos crear un objeto del tipo nombre clase.
Sintaxis
variable = nombre clase()
Clase pasada POO Ejemplo Ejercicios
Programaci´ on Orientada a Objetos
Ejemplo:
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 p a s s
4
5 # C r e o un o b j e t o de la c l a s e p e r s o n a
6 p = p e r s o n a ()
7 p r i n t(t y p e( p ) )
8 # > > > < c l a s s ’ _ _ m a i n _ _ . p e r s o n a ’ >
... por ahora persona no hace nada.
Programaci´ on Orientada a Objetos
Ejemplo:
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 p a s s
4
5 # C r e o un o b j e t o de la c l a s e p e r s o n a
6 p = p e r s o n a ()
7 p r i n t(t y p e( p ) )
8 # > > > < c l a s s ’ _ _ m a i n _ _ . p e r s o n a ’ >
... por ahora persona no hace nada.
Clase pasada POO Ejemplo Ejercicios
Atributos
A cada objeto le podemos agregar atributos (variables) y ver/modificar sus valores.
Sintaxis
var = nombre clase()
var.nombre atributo = valor print(var.nombre atributo)
Atributos
A cada objeto le podemos agregar atributos (variables) y ver/modificar sus valores.
Sintaxis
var = nombre clase()
var.nombre atributo = valor print(var.nombre atributo)
Clase pasada POO Ejemplo Ejercicios
Atributos
Ejemplo: En nuestro problema cada persona tiene un nombre, apellido, n´umero de alumno y lista de notas.
Primero defino la clase persona.
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 p a s s
Atributos
Ejemplo: En nuestro problema cada persona tiene un nombre, apellido, n´umero de alumno y lista de notas.
Primero defino la clase persona.
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 p a s s
Clase pasada POO Ejemplo Ejercicios
Atributos
... luego creo personas y agrego sus atributos.
5 # C r e o una p e r s o n a y le d a m o s v a l o r a sus a t r i b u t o s
6 j u a n = p e r s o n a ()
7 j u a n . n o m b r e = ’ J u a n ’
8 j u a n . a p e l l i d o = ’ ´A g u i l a ’
9 j u a n . n _ a l u m n o = ’ 1 4 0 0 0 0 0 0 ’
10
11 # C r e o o t r a p e r s o n a
12 a l d o = p e r s o n a ()
13 a l d o . n o m b r e = ’ A l d o ’
14 a l d o . a p e l l i d o = ’ V e r r i ’
15 a l d o . n _ a l u m n o = ’ 1 4 0 0 0 0 0 1 ’
16
Clase pasada POO Ejemplo Ejercicios
Atributos
Finalmente, podr´ıamos agregarlos a una lista y mostrar sus nombres.
24 e s t u d i a n t e s = []
25 e s t u d i a n t e s . a p p e n d ( j u a n )
26 e s t u d i a n t e s . a p p e n d ( a l d o )
27 e s t u d i a n t e s . a p p e n d ( m a r i a )
28
29 # M u e s t r o los n o m b r e s
30 for e in e s t u d i a n t e s :
31 p r i n t( e . n o m b r e )
¿Qu´e cosas pueden fallar con este enfoque?
Clase pasada POO Ejemplo Ejercicios
Atributos
Finalmente, podr´ıamos agregarlos a una lista y mostrar sus nombres.
23 # A g r e g o e s t u d i a n t e s a mi l i s t a
24 e s t u d i a n t e s = []
25 e s t u d i a n t e s . a p p e n d ( j u a n )
26 e s t u d i a n t e s . a p p e n d ( a l d o )
27 e s t u d i a n t e s . a p p e n d ( m a r i a )
28
29 # M u e s t r o los n o m b r e s
30 for e in e s t u d i a n t e s : p r i n t( e . n o m b r e )
¿Qu´e cosas pueden fallar con este enfoque?
Atributos
Finalmente, podr´ıamos agregarlos a una lista y mostrar sus nombres.
23 # A g r e g o e s t u d i a n t e s a mi l i s t a
24 e s t u d i a n t e s = []
25 e s t u d i a n t e s . a p p e n d ( j u a n )
26 e s t u d i a n t e s . a p p e n d ( a l d o )
27 e s t u d i a n t e s . a p p e n d ( m a r i a )
28
29 # M u e s t r o los n o m b r e s
30 for e in e s t u d i a n t e s :
31 p r i n t( e . n o m b r e )
Clase pasada POO Ejemplo Ejercicios
Constructores
Constructor: Es un m´etodo que se llama cuando se crea un nuevo objeto de la clase.
Sintaxis
class nombre clase:
def init (self, par 1, par 2, ...):
Bloque c´odigo constructor
Al hacer var = nombre clase(val 1,val 2,...) se ejecuta init ().
Constructores
Constructor: Es un m´etodo que se llama cuando se crea un nuevo objeto de la clase.
Sintaxis
class nombre clase:
def init (self, par 1, par 2, ...):
Bloque c´odigo constructor
Al hacer var = nombre clase(val 1,val 2,...) se ejecuta init ().
Clase pasada POO Ejemplo Ejercicios
Constructores
Ejemplo:
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , n o m b r e ) :
5 p r i n t(" P e r s o n a c r e a d a : ", n o m b r e )
6
7 # C r e o una p e r s o n a
8 j = p e r s o n a (" j u a n ")
Preguntas:
¿Qu´e muestra el c´odigo anterior?
¿Qu´e es self?
Constructores
Ejemplo:
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , n o m b r e ) :
5 p r i n t(" P e r s o n a c r e a d a : ", n o m b r e )
6
7 # C r e o una p e r s o n a
8 j = p e r s o n a (" j u a n ")
Preguntas:
¿Qu´e muestra el c´odigo anterior?
Clase pasada POO Ejemplo Ejercicios
Constructores
self : Es una variable especial que contiene el objeto reci´en creado.
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , n o m b r e ) :
5 p r i n t(" P e r s o n a c r e a d a : ", n o m b r e )
6
7 # C r e o una p e r s o n a
8 j = p e r s o n a (" j u a n ")
9 j . n o m b r e = ’ J u a n ’
10 j . a p e l l i d o = ’ ´A g u i l a ’
11 j . n _ a l u m n o = ’ 1 4 0 0 0 0 0 0 ’
... en este caso, self equivale a j.
Constructores
self : Es una variable especial que contiene el objeto reci´en creado.
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , n o m b r e ) :
5 p r i n t(" P e r s o n a c r e a d a : ", n o m b r e )
6
7 # C r e o una p e r s o n a
8 j = p e r s o n a (" j u a n ")
9 j . n o m b r e = ’ J u a n ’
10 j . a p e l l i d o = ’ ´A g u i l a ’
11 j . n _ a l u m n o = ’ 1 4 0 0 0 0 0 0 ’
Clase pasada POO Ejemplo Ejercicios
Constructores
¿De qu´e nos podr´ıa servir tener self (i.e. j) en el constructor?
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , n o m b r e ) :
5 p r i n t(" P e r s o n a c r e a d a : ", n o m b r e )
6
7 # C r e o una p e r s o n a
8 j = p e r s o n a (" j u a n ")
9 j . n o m b r e = ’ J u a n ’
10 j . a p e l l i d o = ’ ´A g u i l a ’
... podemos agregar los atributos en el constructor
Constructores
¿De qu´e nos podr´ıa servir tener self (i.e. j) en el constructor?
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , n o m b r e ) :
5 p r i n t(" P e r s o n a c r e a d a : ", n o m b r e )
6
7 # C r e o una p e r s o n a
8 j = p e r s o n a (" j u a n ")
9 j . n o m b r e = ’ J u a n ’
10 j . a p e l l i d o = ’ ´A g u i l a ’
11 j . n _ a l u m n o = ’ 1 4 0 0 0 0 0 0 ’
Clase pasada POO Ejemplo Ejercicios
Constructores
Con self.var = valor agregamos un atributo al objeto.
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , nombre , a p e l l i d o , n _ a l u m n o ) :
5 # A g r e g o a t r i b u t o s a p e r s o n a
6 s e l f . n o m b r e = n o m b r e
7 s e l f . a p e l l i d o = a p e l l i d o
8 s e l f . n _ a l u m n o = n _ a l u m n o
9 s e l f . n o t a s = []
Creo objetos de la clase persona mediante su constructor:
12 j u a n = p e r s o n a (’ J u a n ’, ’ ´A g u i l a ’, ’ 1 4 0 0 0 0 0 0 ’)
13 a l d o = p e r s o n a (’ A l d o ’, ’ V e r r i ’, ’ 1 4 0 0 0 0 0 1 ’)
14 m a r i a = p e r s o n a (’ Mar ´ı a ’, ’ P i n t o ’, ’ 1 4 0 0 0 0 0 2 ’)
Constructores
Con self.var = valor agregamos un atributo al objeto.
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , nombre , a p e l l i d o , n _ a l u m n o ) :
5 # A g r e g o a t r i b u t o s a p e r s o n a
6 s e l f . n o m b r e = n o m b r e
7 s e l f . a p e l l i d o = a p e l l i d o
8 s e l f . n _ a l u m n o = n _ a l u m n o
9 s e l f . n o t a s = []
Creo objetos de la clase persona mediante su constructor:
12 j u a n = p e r s o n a (’ J u a n ’, ’ ´A g u i l a ’, ’ 1 4 0 0 0 0 0 0 ’)
13 a l d o = p e r s o n a (’ A l d o ’, ’ V e r r i ’, ’ 1 4 0 0 0 0 0 1 ’)
Clase pasada POO Ejemplo Ejercicios
Constructores
16 # A g r e g o n o t a s
17 j u a n . n o t a s . e x t e n d ([6.5 , 7.0 , 6 . 7 ] )
18 a l d o . n o t a s . e x t e n d ([3.0 , 2.7 , 3 . 8 ] )
19 m a r i a . n o t a s . e x t e n d ([5.7 , 7.0 , 6 . 2 ] )
20
21 # F o r m o l i s t a con los e s t u d i a n t e s
22 e s t u d i a n t e s = [ juan , aldo , m a r i a ]
23
24 # M u e s t r o p r o m e d i o s
25 for e in e s t u d i a n t e s :
26 p r o m e d i o = sum( e . n o t a s ) /len( e . n o t a s )
27 p r i n t( e . a p e l l i d o ," \ t = > ",’ % 0 . 2 f ’% p r o m e d i o )
28
Constructores
Ventaja constructores:
L´ogica para asignar atributos dentro de la definici´on de la clase.
Obligamos asignaci´on de atributos.
Podemos ejecutar c´odigo cada vez que se crea el objeto.
Clase pasada POO Ejemplo Ejercicios
Constructores
Constructores conocidos
1 # i n p u t c u a l q u i e r a
2 n = i n p u t(" I n g r e s e i n p u t : ")
3
4 # c o n s t r u c t o r e s que h e m o s u t i l i z a d o
5 i = int( n )
6 f = f l o a t( n )
7 c = c o m p l e x( n )
8 b = b oo l( n )
9 s = str( n )
10 l = l is t()
11 t = t u p l e()
Constructores
Constructores conocidos
1 # i n p u t c u a l q u i e r a
2 n = i n p u t(" I n g r e s e i n p u t : ")
3
4 # c o n s t r u c t o r e s que h e m o s u t i l i z a d o
5 i = int( n )
6 f = f l o a t( n )
7 c = c o m p l e x( n )
8 b = b oo l( n )
9 s = str( n )
10 l = l is t()
11 t = t u p l e()
Clase pasada POO Ejemplo Ejercicios
M´ etodos
Idea: Adem´as de atributos, los objetos tienen comportamiento.
comportamiento == acci´on == m´etodo == c´odigo
M´ etodos
Ejemplo 1: ¿Qu´e objetos importantes hay aqu´ı?
Clase pasada POO Ejemplo Ejercicios
M´ etodos
¿Qu´e atributos y acciones nos interesan de ellos?
M´ etodos
usuario - volumen - posici´on - destino
+ intentar entrar() + intentar salir()
Clase pasada POO Ejemplo Ejercicios
M´ etodos
guardia - volumen - posici´on
+ se˜nal cerrar puertas()
M´ etodos
metro
- volumen interior - personas interior - posici´on
+ avanzar() + detenerse() + abrir puertas() + cerrar puertas()
Clase pasada POO Ejemplo Ejercicios
M´ etodos
Ejemplo 2: ¿Qu´e objetos importantes hay aqu´ı?
M´ etodos
¿Qu´e atributos y acciones nos interesan de ellos?
(a)Girasol. (b) Zombie. (c) Planta.
Clase pasada POO Ejemplo Ejercicios
M´ etodos
girasol - vida
- frecuencia sol - posici´on - dibujo + lanzar sol()
M´ etodos
zombie - vida - da˜no - velocidad - posici´on - dibujo + comer() + avanzar()
Clase pasada POO Ejemplo Ejercicios
M´ etodos
planta - vida - da˜no
- frecuencia ataque - posici´on
- dibujo + atacar()
Clase pasada POO Ejemplo Ejercicios
M´ etodos
M´etodo: Funci´on asociada a una clase particular.
Sintaxis
class nombre clase:
def init (self, par 1, par 2, ...):
Bloque c´odigo constructor
def nombre m´etodo(self, par 1, par 2, ...):
Bloque c´odigo m´etodo
Sintaxis
var = nombre clase()
var.nombre m´etodo(val 1, val 2, ...)
Clase pasada POO Ejemplo Ejercicios
M´ etodos
M´etodo: Funci´on asociada a una clase particular.
Sintaxis
class nombre clase:
def init (self, par 1, par 2, ...):
Bloque c´odigo constructor
def nombre m´etodo(self, par 1, par 2, ...):
Bloque c´odigo m´etodo
Para llamar al m´etodo:
Clase pasada POO Ejemplo Ejercicios
M´ etodos
En mini-siding ¿Qu´e m´etodos podr´ıamos agregar a persona?
- nombre - apellido - n alumno - notas
+ agregar nota(n) + agregar notas(l) + obtener promedio()
¿C´omo programar´ıan obtener promedio()?
Clase pasada POO Ejemplo Ejercicios
M´ etodos
En mini-siding ¿Qu´e m´etodos podr´ıamos agregar a persona?
persona - nombre - apellido - n alumno - notas
+ agregar nota(n) + agregar notas(l) + obtener promedio()
¿C´omo programar´ıan obtener promedio()?
M´ etodos
En mini-siding ¿Qu´e m´etodos podr´ıamos agregar a persona?
persona - nombre - apellido - n alumno - notas
+ agregar nota(n) + agregar notas(l) + obtener promedio()
¿C´omo programar´ıan obtener promedio()?
Clase pasada POO Ejemplo Ejercicios
M´ etodos
1 # D e f i n o el t i p o de d a t o ( c l a s e ) " p e r s o n a "
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , nombre , a p e l l i d o , n _ a l u m n o ) :
5 # A t r i b u t o s de p e r s o n a
6 s e l f . n o m b r e = n o m b r e
7 s e l f . a p e l l i d o = a p e l l i d o
8 s e l f . n _ a l u m n o = n _ a l u m n o
9 s e l f . n o t a s = []
10 # M ´e t o d o s
11 def a g r e g a r _ n o t a ( self , n ) :
12 s e l f . n o t a s . a p p e n d ( n ) def a g r e g a r _ n o t a s ( self , l ) :
M´ etodos
20 # C r e o las p e r s o n a s y doy v a l o r e s a sus a t r i b u t o s
21 j u a n = p e r s o n a (’ J u a n ’, ’ ´A g u i l a ’, ’ 1 4 0 0 0 0 0 0 ’)
22 a l d o = p e r s o n a (’ A l d o ’, ’ V e r r i ’, ’ 1 4 0 0 0 0 0 1 ’)
23 m a r i a = p e r s o n a (’ Mar ´ı a ’, ’ P i n t o ’, ’ 1 4 0 0 0 0 0 2 ’)
24
25 # A g r e g o n o t a s
26 j u a n . a g r e g a r _ n o t a s ([6.5 , 7.0 , 6 . 7 ] )
27 a l d o . a g r e g a r _ n o t a s ([3.0 , 2.7 , 3 . 8 ] )
28 m a r i a . a g r e g a r _ n o t a s ([5.7 , 7.0 , 6 . 2 ] )
29
30 # F o r m o l i s t a y m u e s t r o p r o m e d i o s
31 e s t u d i a n t e s = [ juan , aldo , m a r i a ]
32 for e in e s t u d i a n t e s :
33 p r i n t( e . a p e l l i d o ," \ t = > ",’ % 0 . 2 f ’% e . g e t _ p r o m e d i o () )
34
35 # S a l i d a :
Clase pasada POO Ejemplo Ejercicios
M´ etodos
Self es una variable especial que contiene al objeto sobre el que se ejecuta la funci´on.
Definici´on m´etodo agregar notas(l).
13 def a g r e g a r _ n o t a s ( self , l ) :
14 s e l f . n o t a s . e x t e n d ( l )
Llamados a agregar notas(l) son sin el self.
26 j u a n . a g r e g a r _ n o t a s ([6.5 , 7.0 , 6 . 7 ] )
27 a l d o . a g r e g a r _ n o t a s ([3.0 , 2.7 , 3 . 8 ] )
28 m a r i a . a g r e g a r _ n o t a s ([5.7 , 7.0 , 6 . 2 ] )
Obs: Necesitamos self para acceder a atributos y m´etodos.
Clase pasada POO Ejemplo Ejercicios
M´ etodos
Self es una variable especial que contiene al objeto sobre el que se ejecuta la funci´on.
Definici´on m´etodo agregar notas(l).
13 def a g r e g a r _ n o t a s ( self , l ) :
14 s e l f . n o t a s . e x t e n d ( l )
Llamados a agregar notas(l) son sin el self.
26 j u a n . a g r e g a r _ n o t a s ([6.5 , 7.0 , 6 . 7 ] )
27 a l d o . a g r e g a r _ n o t a s ([3.0 , 2.7 , 3 . 8 ] )
28 m a r i a . a g r e g a r _ n o t a s ([5.7 , 7.0 , 6 . 2 ] )
Clase pasada POO Ejemplo Ejercicios
M´ etodos
Self es una variable especial que contiene al objeto sobre el que se ejecuta la funci´on.
Definici´on m´etodo agregar notas(l).
13 def a g r e g a r _ n o t a s ( self , l ) :
14 s e l f . n o t a s . e x t e n d ( l )
Llamados a agregar notas(l) son sin el self.
26 j u a n . a g r e g a r _ n o t a s ([6.5 , 7.0 , 6 . 7 ] )
27 a l d o . a g r e g a r _ n o t a s ([3.0 , 2.7 , 3 . 8 ] ) m a r i a . a g r e g a r _ n o t a s ([5.7 , 7.0 , 6 . 2 ] )
M´ etodos
Ventajas m´etodos:
Asociamos funcionalidades propias de una clase, a su definici´on.
Ganamos sem´antica.
C´odigo reutilizable.
Clase pasada POO Ejemplo Ejercicios
M´ etodos
M´etodos conocidos
Algunos m´etodos sobre strings...
2 s = " h o l a "
3 s . r e p l a c e (’ h ’,’ ’)
4 s . l o w e r ()
5 s . c o u n t (’ a ’)
Algunos m´etodos sobre listas...
8 l = [1 ,2 ,3 ,4 ,5]
9 l . a p p e n d (6)
10 l . e x t e n d ([7 ,8 ,9])
11 l . s o r t ()
12 l . r e v e r s e ()
M´ etodos
M´etodos conocidos
Algunos m´etodos sobre strings...
2 s = " h o l a "
3 s . r e p l a c e (’ h ’,’ ’)
4 s . l o w e r ()
5 s . c o u n t (’ a ’)
Algunos m´etodos sobre listas...
8 l = [1 ,2 ,3 ,4 ,5]
9 l . a p p e n d (6)
10 l . e x t e n d ([7 ,8 ,9])
11 l . s o r t ()
Clase pasada POO Ejemplo Ejercicios
Clases vs Objetos
¿Cu´al es la diferencia entre la clase y el objeto?
Clase
La clase es el template del objeto (≈ su molde).
A partir del molde podemos construir objetos. Objeto
Un objeto es una instancia particular de una clase.
Clase pasada POO Ejemplo Ejercicios
Clases vs Objetos
¿Cu´al es la diferencia entre la clase y el objeto?
Clase
La clase es el template del objeto (≈ su molde).
Objeto
Un objeto es una instancia particular de una clase.
Clase pasada POO Ejemplo Ejercicios
Clases vs Objetos
¿Cu´al es la diferencia entre la clase y el objeto?
Clase
La clase es el template del objeto (≈ su molde).
A partir del molde podemos construir objetos.
Objeto
Clases vs Objetos
zombie - vida - da˜no - velocidad - dibujo + atacar() + avanzar()
Clase pasada POO Ejemplo Ejercicios
Clases vs Objetos
Clase:
2 c l a s s p e r s o n a :
3 # C o n s t r u c t o r
4 def _ _ i n i t _ _ ( self , nombre , a p e l l i d o , n _ a l u m n o ) :
5 # A g r e g o a t r i b u t o s a p e r s o n a
6 s e l f . n o m b r e = n o m b r e
7 s e l f . a p e l l i d o = a p e l l i d o
8 s e l f . n _ a l u m n o = n _ a l u m n o
9 s e l f . n o t a s = []
Objetos (instancias) de la clase:
Clase pasada POO Ejemplo Ejercicios
Ejemplo
Programe un simulador de batallas entre:
Clase pasada POO Ejemplo Ejercicios
Ejemplo
Programe un simulador de batallas entre:
(b) Gok´u. (c)Chuck Norris.
Clase pasada POO Ejemplo Ejercicios
Ejemplo
Programe un simulador de batallas entre:
(a) S´uperman. (b) Gok´u.
Clase pasada POO Ejemplo Ejercicios
Ejemplo
Programe un simulador de batallas entre:
Ejemplo
Usaremos una sola clase:
guerrero - nombre - vida - fuerza - precisi´on - velocidad - defensa + golpear(g)
Clase pasada POO Ejemplo Ejercicios
Ejemplo
Consideremos que est´an luchando j1 contra j2:
Se golpea por turnos.
Comienza el jugador con mayor velocidad.
Si j1 intenta golpear a j2, la probabilidad de acierto es:
j1.precision − j2.velocidad 100
Si j1 golpea a j2, el da˜no ser´a:
Ejemplo
1 i m p o r t r a n d o m
2
3 c l a s s g u e r r e r o :
4 def _ _ i n i t _ _ ( self , nombre , vida , fuerza , p r e c i s i o n , v e l o c i d a d , d e f e n s a ) :
5 s e l f . n o m b r e = n o m b r e ; s e l f . v i d a = v i d a
6 s e l f . f u e r z a = f u e r z a ; s e l f . p r e c i s i o n = p r e c i s i o n
7 s e l f . v e l o c i d a d = v e l o c i d a d ; s e l f . d e f e n s a = d e f e n s a
8
9 def g o l p e a r ( self , g ) :
10 # veo si a c i e r t o el g o l p e
11 if( r a n d o m . r a n d o m () <= ( s e l f . p r e c i s i o n - g . v e l o c i d a d ) / 1 0 0 ) :
12 # en c a s o de acertar , a g r e g o da ~n o al o p o n e n t e
13 g . v i d a -= max([( s e l f . f u e r z a - g . d e f e n s a )
14 + r a n d o m . r a n d r a n g e ( -10 ,11) ,1])
Clase pasada POO Ejemplo Ejercicios
Ejemplo
Funci´on que simula la batalla:
20 def s i m u l a r _ b a t a l l a ( j1 , j2 ) :
21 # c o m i e n z a j u g a d o r m ´a s v e l o z
22 g o l p e a d o r , r e c e p t o r = j1 , j2
23 if( j1 . v e l o c i d a d < j2 . v e l o c i d a d ) :
24 g o l p e a d o r , r e c e p t o r = j2 , j1
25 # se g o l p e a n h a s t a que a l g u n o t e n g a v i d a c e r o
26 w h i l e( j1 . v i d a > 0 and j2 . v i d a > 0) :
27 p r i n t(" \ n " + j1 . nombre , j1 . vida ," vs ",
28 j2 . vida , j2 . n o m b r e )
29 g o l p e a d o r . g o l p e a r ( r e c e p t o r )
30 # c a m b i o de t u r n o s
31 g o l p e a d o r , r e c e p t o r = r e c e p t o r , g o l p e a d o r
Ejemplo
Creamos objetos y simulamos una batalla:
37 # b a t a l l a de e j e m p l o
38 s u p e r m a n = g u e r r e r o (’ S u p e r m a n ’,100 ,50 ,80 ,30 ,20)
39 g o k u = g u e r r e r o (’ Gok ´u ’,100 ,60 ,80 ,40 ,20)
40 c h u c k = g u e r r e r o (’ C h u c k N o r r i s ’,200 ,99 ,99 ,99 ,99)
41
42 # s i m u l a b a t a l l a
43 s i m u l a r _ b a t a l l a ( goku , c h u c k )
Clase pasada POO Ejemplo Ejercicios
Ejercicios
1) Agregue a la clase persona del mini-siding un m´etodo que borre las notas de un estudiante.
2) Agregue un nuevo guerrero al simulador de batallas con los siguientes atributos:
Nombre: Aldo Verri Vida: 10
Fuerza: 1 Precisi´on: 1 Velocidad: 1
Ejercicios
3) Cree una clase ampolleta con un m´etodo para cambiar su estado (si estaba apagada pasa a estar prendida y viceversa).
Luego cree 4 ampolletas y que el usuario sea capaz de prenderlas y apagarlas.
4) Cree un mini-plants vs zombies. Para ello debe programar una clase planta y una clase zombie. Ambos tienen vida y se encuentran a n metros de distancia. En cada turno, la planta ataca al zombie (desde lejos) y el zombie se acerca a la planta (un metro). Cuando el zombie se encuentre a 1 metro de la planta, puede atacarla (2 mordiscos por turno). El da˜no de cada ataque de la planta es p.ataque +
random.randrange(-10,11), y el da˜no del ataque del zombie es z.ataque + 2*random.randrange(-10,11). El juego acaba
Clase pasada POO Ejemplo Ejercicios
Ejercicios
5) Cree un tablero de n × n donde existan 5 objetos: un l´apiz, un cuaderno, un computador, un pase escolar y una mochila.
Tambi´en hay una persona en alguna posici´on del tablero. En cada turno, la persona se puede mover una casilla en cualquier direcci´on (izquierda, derecha, arriba, abajo). Para ello utilice las teclas asdw. El juego consiste en obtener cada objeto y dejarlo en la mochila. La persona s´olo puede cargar un objeto a la vez y no puede mover de lugar la mochila. El juego termina cuando todos los objetos est´an en la mochila. La idea es hacer esto en el m´ınimo n´umero de pasos. Para mostrar los distintos