• No se han encontrado resultados

Clase 17: Programación Orientada a Objetos

N/A
N/A
Protected

Academic year: 2022

Share "Clase 17: Programación Orientada a Objetos"

Copied!
87
0
0

Texto completo

(1)

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

(2)

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 ’ >

(3)

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

(4)

Programaci´ on Orientada a Objetos

En computaci´on aspiramos a modelar el mundo para solucionar problemas reales.

(5)

Clase pasada POO Ejemplo Ejercicios

Programaci´ on Orientada a Objetos

En computaci´on aspiramos a modelar el mundo para solucionar problemas reales.

(6)

Programaci´ on Orientada a Objetos

... o para matar el tiempo.

(7)

Clase pasada POO Ejemplo Ejercicios

Programaci´ on Orientada a Objetos

... o para matar el tiempo.

(8)

Clase pasada POO Ejemplo Ejercicios

Programaci´ on Orientada a Objetos

Queremos modelar el mundo...

(9)

Clase pasada POO Ejemplo Ejercicios

Programaci´ on Orientada a Objetos

Queremos modelar el mundo...

Miren a su alrededor... ¿qu´e ven?

(10)

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.

(11)

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.

(12)

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.

(13)

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 ’,[]) )

(14)

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 ’,[]) )

(15)

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 ’,[]) )

(16)

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 )

(17)

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

(18)

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.

(19)

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.

(20)

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.

(21)

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()

(22)

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()

(23)

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.

(24)

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.

(25)

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)

(26)

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)

(27)

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

(28)

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

(29)

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

(30)

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?

(31)

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?

(32)

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 )

(33)

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 ().

(34)

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 ().

(35)

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?

(36)

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?

(37)

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.

(38)

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 ’

(39)

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

(40)

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 ’

(41)

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 ’)

(42)

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 ’)

(43)

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

(44)

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.

(45)

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()

(46)

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()

(47)

Clase pasada POO Ejemplo Ejercicios

M´ etodos

Idea: Adem´as de atributos, los objetos tienen comportamiento.

comportamiento == acci´on == m´etodo == c´odigo

(48)

M´ etodos

Ejemplo 1: ¿Qu´e objetos importantes hay aqu´ı?

(49)

Clase pasada POO Ejemplo Ejercicios

M´ etodos

¿Qu´e atributos y acciones nos interesan de ellos?

(50)

M´ etodos

usuario - volumen - posici´on - destino

+ intentar entrar() + intentar salir()

(51)

Clase pasada POO Ejemplo Ejercicios

M´ etodos

guardia - volumen - posici´on

+ se˜nal cerrar puertas()

(52)

M´ etodos

metro

- volumen interior - personas interior - posici´on

+ avanzar() + detenerse() + abrir puertas() + cerrar puertas()

(53)

Clase pasada POO Ejemplo Ejercicios

M´ etodos

Ejemplo 2: ¿Qu´e objetos importantes hay aqu´ı?

(54)

M´ etodos

¿Qu´e atributos y acciones nos interesan de ellos?

(a)Girasol. (b) Zombie. (c) Planta.

(55)

Clase pasada POO Ejemplo Ejercicios

M´ etodos

girasol - vida

- frecuencia sol - posici´on - dibujo + lanzar sol()

(56)

M´ etodos

zombie - vida - da˜no - velocidad - posici´on - dibujo + comer() + avanzar()

(57)

Clase pasada POO Ejemplo Ejercicios

M´ etodos

planta - vida - da˜no

- frecuencia ataque - posici´on

- dibujo + atacar()

(58)

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, ...)

(59)

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:

(60)

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()?

(61)

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()?

(62)

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()?

(63)

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 ) :

(64)

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 :

(65)

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.

(66)

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 ] )

(67)

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 ] )

(68)

M´ etodos

Ventajas m´etodos:

Asociamos funcionalidades propias de una clase, a su definici´on.

Ganamos sem´antica.

C´odigo reutilizable.

(69)

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 ()

(70)

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 ()

(71)

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.

(72)

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.

(73)

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

(74)

Clases vs Objetos

zombie - vida - da˜no - velocidad - dibujo + atacar() + avanzar()

(75)

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:

(76)

Clase pasada POO Ejemplo Ejercicios

Ejemplo

Programe un simulador de batallas entre:

(77)

Clase pasada POO Ejemplo Ejercicios

Ejemplo

Programe un simulador de batallas entre:

(b) Gok´u. (c)Chuck Norris.

(78)

Clase pasada POO Ejemplo Ejercicios

Ejemplo

Programe un simulador de batallas entre:

(a) uperman. (b) Gok´u.

(79)

Clase pasada POO Ejemplo Ejercicios

Ejemplo

Programe un simulador de batallas entre:

(80)

Ejemplo

Usaremos una sola clase:

guerrero - nombre - vida - fuerza - precisi´on - velocidad - defensa + golpear(g)

(81)

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:

(82)

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])

(83)

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

(84)

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 )

(85)

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

(86)

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

(87)

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

Referencias

Documento similar