Clase 04

También podría gustarte

Está en la página 1de 39

PROGRAMACION ORIENTADA A

OBJETOS (CTE-212)
José D. Cáceres
Licenciatura en Ciencia y Tecnologías de
la Información Geográfica
Facultad de Ciencias Espaciales
DESCOMPOSICION,
ABSTRACCION,
FUNCIONES
CLASE ANTERIOR
• while loops vs for loops
• Debe saber cómo escribir ambos tipos
• Debe saber cuándo usarlos
• Métodos guess-and-check y aproximación
• Método de bisección para acelerar los
programas

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


Hoy
• Estructuración de programas y detalles de
ocultación
• Funciones
• Especificaciones
• Palabras clave: return vs print
• Scope

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


CÓMO ESCRIBIR CÓDIGO?
• Hasta ahora…
– mecanismos de lenguaje cubierto
– saber cómo escribir diferentes archivos para cada
cálculo
– cada archivo es una pieza de código
– cada código es una secuencia de instrucciones
• Problemas con este enfoque
– fácil para problemas a pequeña escala
– desordenado para problemas más grandes
– difícil hacer un seguimiento de los detalles
– ¿Cómo sabes que se proporciona la información
correcta a la parte correcta del código?

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


BUENA PROGRAMACIÓN
• Más código no necesariamente es algo bueno
• Medir buenos programadores por la cantidad
de funcionalidad
• Introducir funciones
• Mecanismo para lograr la descomposición y la
abstracción

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


EJEMPLO - PROYECTOR
• Un proyector es una caja negra
• No sé cómo funciona
• Conozco la interfaz: entrada / salida
• conecta cualquier dispositivo electrónico que
pueda comunicarse con esa entrada
• La caja negra de alguna manera convierte la
imagen de la fuente de entrada a una pared,
ampliándola
• IDEA DE ABSTRACCIÓN: no necesita saber cómo
funciona el proyector para usarlo

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn
Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn
EJEMPLO - PROYECTOR
• Proyección de una imagen grande para los Juegos
Olímpicos descompuesto en tareas separadas
para proyectores por separado
• Cada proyector toma entrada y produce salida
por separado
• Todos los proyectores trabajan juntos para
producir una imagen más grande
• IDEA DE DESCOMPOSICIÓN: diferentes
dispositivos trabajan juntos para lograr un
objetivo final

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


APLICAR ESTOS CONCEPTOS
A PROGRAMACIÓN
CREAR ESTRUCTURA con
DESCOMPOSICIÓN
• En el ejemplo del proyector, dispositivos separados
• En programación, dividir el código en módulos
– son independientes
– usado para dividir el código
– destinado a ser reutilizable
– mantener el código organizado
– mantener el código coherente
• En esta clase busca, lograr la descomposición con
funciones
• En unas semanas, lograr la descomposición con clases

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


SUPRIMIR DETALLES con
ABSTRACCIÓN
• En el ejemplo del proyector, las instrucciones
sobre cómo usarlo son suficientes, no es
necesario saber cómo construir uno
• En programación, piense en un fragmento de
código como una caja negra
– no puedo ver los detalles
– no necesita ver detalles
– no quiero ver detalles
– ocultar tediosos detalles de codificación
• Lograr abstracción con especificaciones de
funciones o docstrings

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


FUNCIONES
• Escribir piezas reutilizables / trozos de código,
llamadas funciones
• las funciones no se ejecutan en un programa
hasta que son "llamadas" o "invocadas" en un
programa
• Características de la función:
– tiene un nombre
– tiene parámetros (0 o más)
– tiene un docstring (opcional pero recomendado)
– tiene un cuerpo
– devuelve algo

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


CÓMO ESCRIBIR Y LLAMAR / INVOCAR
UNA FUNCIÓN

def es_par( i ):
"""
Input: i, un entero positivo
Returns True si i es par, de lo contrario returns False
"""
print(‘dentro de es_par')
return i % 2 == 0

es_par(3)

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


EN EL CUERPO DE LA FUNCIÓN

def es_par( i ):
"""
Input: i, un entero positivo
Returns True if i es par, de lo contrario returns False
"""
print(‘dentro de es_par')
return i % 2 == 0

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


El Ambiente (SCOPE) de la Variable
• El parámetro formal se une al valor del parámetro actual
cuando se llama a la función
• Nuevo scope/marco/entorno creado al ingresar una
función
• El scope es mapeo de nombres a objetos

def f( x ):
x=x+1
print('in f(x): x =', x)
return x

x=3
z = f( x )

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


VARIABLE SCOPE

def f( x ):
x=x+1
print('in f(x): x =', x)
return x

x=3
z = f( x )

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


VARIABLE SCOPE

def f( x ):
x=x+1
print('in f(x): x =', x)
return x

x=3
z = f( x )

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


VARIABLE SCOPE

def f( x ):
x=x+1
print('in f(x): x =', x)
return x

x=3
z = f( x )

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


VARIABLE SCOPE

def f( x ):
x=x+1
print('in f(x): x =', x)
return x

x=3
z = f( x )

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


UNA ADVERTENCIA SI NO HAY
DECLARACIÓN return
def es_par( i ):
"""
Input: i, un entero positivo
No regresa nada
"""
i % 2 == 0

• Python devuelve el valor None, si no se


declara return
• Representa la ausencia de un valor

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


return VS. print
• return solo tiene • la impresión se puede
significado dentro de una utilizar fuera de las
función funciones
• solo un return es • puede ejecutar muchas
ejecutado dentro de la declaraciones print
función dentro de una función
• código dentro de la • el código dentro de la
función pero después de función se puede ejecutar
la declaración return no después de una
se ejecuta declaración print
• tiene un valor asociado, • tiene un valor asociado,
dado a quien llamó la se envía a la consola
función
Ejercicio: Llamadas de Función

https://pollev.com/multiple_choice_polls/GyatbU944RGvu0uf65OCG/respond

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


FUNCIONES COMO ARGUMENTOS
• Los argumentos pueden tomar cualquier tipo, incluso funciones
def func_a():
print('dentro de func_a')

def func_b(y):
print('dentro de func_b')
return y

def func_c(z):
print('dentro de func_c')
return z()

print(func_a())
print(5+func_b(2))
print(func_c(func_a))

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


FUNCIONES COMO ARGUMENTOS
• Los argumentos pueden tomar cualquier tipo, incluso funciones
def func_a():
print('dentro de func_a')

def func_b(y):
print('dentro de func_b')
return y

def func_c(z):
print('dentro de func_c')
return z()

print(func_a())
print(5+func_b(2))
print(func_c(func_a))

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


FUNCIONES COMO ARGUMENTOS
• Los argumentos pueden tomar cualquier tipo, incluso funciones
def func_a():
print('dentro de func_a')

def func_b(y):
print('dentro de func_b')
return y

def func_c(z):
print('dentro de func_c')
return z()

print(func_a())
print(5+func_b(2))
print(func_c(func_a))

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


FUNCIONES COMO ARGUMENTOS
• Los argumentos pueden tomar cualquier tipo, incluso funciones
def func_a():
print('dentro de func_a')

def func_b(y):
print('dentro de func_b')
return y

def func_c(z):
print('dentro de func_c')
return z()

print(func_a())
print(5+func_b(2))
print(func_c(func_a))

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


EJEMPLO SCOPE
• Dentro de una función, puede acceder a una variable definida
afuera
• dentro de una función, no puede modificar una variable
definida afuera --puede usar variables globales, pero es mal
visto
def f(y): def g(y): def h(y):
x=1 print(x) x += 1
x += 1 print(x + 1)
print(x) x=5
x=5 h(x)
x=5 g(x) print(x)
f(x) print(x)
print(x)
Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn
EJEMPLO SCOPE
• Dentro de una función, puede acceder a una variable definida
afuera
• dentro de una función, no puede modificar una variable
definida afuera --puede usar variables globales, pero es mal
visto
def f(y): def g(y): def h(y):
x=1 print(x) x += 1
x += 1 print(x + 1) x=5
print(x) x=5 h(x)
x=5 g(x) print(x)
f(x) print(x)
print(x)
x del scope
global/principal
Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn
Ejercicio: Funciones como Argumentos

https://pollev.com/multiple_choice_polls/FNjz9lRuo1JRrhAHt1jH1/respond

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


CUANDO EL CÓDIGO SE VEA MUY
COMPLICADO

• ¡Python Tutor es tu mejor amigo para ayudar


a resolver esto!

http://www.pythontutor.com/
Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn
DETALLES DEL SCOPE
def g(x):
def h():
x = 'abc’
x=x+1
print('g: x =', x)
h()
return x

x=3
z = g(x)

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


DETALLES DEL SCOPE
def g(x):
def h():
x = 'abc’
x=x+1
print('g: x =', x)
h()
return x

x=3
z = g(x)

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


DETALLES DEL SCOPE
def g(x):
def h():
x = 'abc’
x=x+1
print('g: x =', x)
h()
return x

x=3
z = g(x)

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


DETALLES DEL SCOPE
def g(x):
def h():
x = 'abc’
x=x+1
print('g: x =', x)
h()
return x

x=3
z = g(x)

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


DETALLES DEL SCOPE
def g(x):
def h():
x = 'abc’
x=x+1
print('g: x =', x)
h()
return x

x=3
z = g(x)

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


DETALLES DEL SCOPE
def g(x):
def h():
x = 'abc’
x=x+1
print('g: x =', x)
h()
return x

x=3
z = g(x)

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn


DESCOMPOSICION Y ABSTRACCION
• Poderoso juntos
• El código puede usarse muchas veces, ¡pero
solo tiene que depurarse una vez!

Prog. Orientada a Objetos – CTE 212 José David Cáceres jcaceres@unah.edu.hn

También podría gustarte