Paradigmas de programación
En el centro escolar, la cooperativa quiere un programa que cobre las compras con el IVA del 13 %. Una persona lo escribe como una lista de órdenes paso a paso. Otra lo organiza en «objetos» como Producto y Venta. Una tercera lo arma con pequeñas funciones que solo calculan y devuelven valores. Los tres programas funcionan. ¿En qué se diferencian y cómo elegir? Eso lo vas a poder responder al final de la página.
¿Qué es un paradigma?
Un paradigma de programación es una manera de pensar y organizar un programa: qué piezas lo forman y cómo se relacionan entre sí. No es un lenguaje. Un mismo lenguaje, como Python, permite usar varios paradigmas.
Pensalo como las formas de cocinar pupusas: podés seguir una receta paso a paso, trabajar por estaciones (una persona hace la masa, otra el relleno) o usar una «máquina» que recibe masa y relleno y siempre entrega la misma pupusa. El resultado se parece, pero la organización del trabajo cambia.
Explicá con tus propias palabras qué es un paradigma de programación. Luego nombrá los tres paradigmas que se estudian en esta unidad: el estructurado, el orientado a…
Explicá con tus propias palabras qué es un paradigma de programación. Luego nombrá los tres paradigmas que se estudian en esta unidad: el estructurado, el orientado a objetos y el funcional.
Paradigma estructurado
La programación estructurada construye cualquier programa con solo tres estructuras de control:
-
Secuencia: las instrucciones se ejecutan una tras otra, en orden.
-
Selección: se elige un camino según una condición (
if/else). -
Iteración: se repite un bloque mientras se cumpla algo (
for,while).
Ejemplos del centro escolar: secuencia, entrar al aula, sentarte y sacar el cuaderno. Selección, si suena el timbre del recreo, salís; si no, seguís en clase. Iteración, repetir el ejercicio hasta que te salga bien.
total = 0
for precio in [1.50, 2.00, 0.75]: # iteración
total = total + precio # secuencia
if total > 3: # selección
print("Compra grande")
else:
print("Compra pequeña")
La programación estructurada se apoya en tres tipos de estructuras de control. Nombralas y escribí, para cada una, un ejemplo cotidiano, por ejemplo algo que ocurre en…
La programación estructurada se apoya en tres tipos de estructuras de control. Nombralas y escribí, para cada una, un ejemplo cotidiano, por ejemplo algo que ocurre en tu centro escolar, que muestre cómo funciona.
Leé el siguiente código: a) Indicá qué paradigma predomina y justificá tu respuesta con elementos del código. b) Explicá qué resultado se imprime y por qué, considerando…
Leé el siguiente código:
notas = [6.5, 8.0, 4.5, 9.0, 7.5]
suma = 0
for n in notas:
suma = suma + n
promedio = suma / len(notas)
if promedio >= 6.0:
print("Aprobado")
else:
print("Aplazado")
- a) Indicá qué paradigma predomina y justificá tu respuesta con elementos del código.
- b) Explicá qué resultado se imprime y por qué, considerando que en bachillerato se aprueba con 6.0.
- c) Reescribí el cálculo del promedio en estilo funcional, usando
sum.
Paradigma orientado a objetos
En la programación orientada a objetos (POO) el programa se organiza en objetos que juntan datos y acciones. Cada objeto se crea a partir de una clase, que es el molde.
-
Clase: plantilla que describe cómo son y qué hacen los objetos.
-
Atributos: los datos del objeto (variables dentro de la clase).
-
Métodos: las acciones del objeto (funciones dentro de la clase).
-
Objeto: un ejemplar concreto creado con la clase.
class Pupuseria:
def __init__(self, nombre):
self.nombre = nombre # atributo
self.pedidos = [] # atributo
def agregar(self, pedido): # método
self.pedidos.append(pedido)
mi_negocio = Pupuseria("La Tecleña") # objeto
mi_negocio.agregar("2 de queso")
__init__ es un método especial que se ejecuta al crear el objeto y le da sus valores iniciales. self es el propio objeto: así cada pupusería guarda sus propios pedidos.
Observá el siguiente fragmento en Python: Indicá a qué paradigma pertenece. Después señalá en el código qué elementos corresponden a una clase, a un atributo y a un…
Observá el siguiente fragmento en Python:
class Pupuseria:
def __init__(self, nombre):
self.nombre = nombre
self.pedidos = []
def agregar(self, pedido):
self.pedidos.append(pedido)
Indicá a qué paradigma pertenece. Después señalá en el código qué elementos corresponden a una clase, a un atributo y a un método.
Paradigma funcional
La programación funcional construye el programa combinando funciones. Lo ideal es que sean funciones puras:
-
Con los mismos datos de entrada devuelven siempre el mismo resultado.
-
No tienen efectos secundarios: no modifican variables externas, ni la lista que reciben, ni imprimen ni guardan nada por su cuenta.
Esta propiedad se llama transparencia referencial: se puede reemplazar la llamada a la función por su resultado sin cambiar el programa. Sirve porque la función es fácil de probar (basta comparar entrada y salida) y no genera errores ocultos por cambios inesperados en otras partes.
# Impura: depende de y cambia una variable global
total = 0
def sumar(precio):
global total
total = total + precio # efecto secundario
# Pura: solo usa sus parámetros y devuelve un valor
def con_iva(precio):
return precio * 1.13
Llamar con_iva(10) siempre da 11.3. En cambio, sumar(10) da resultados distintos según cuántas veces se llamó antes.
Herramientas funcionales en Python
precios = [12.00, 25.00, 18.50]
con_descuento = [p * 0.90 for p in precios] # comprensión de listas
total = sum(precios) # sum: función que suma
baratos = list(filter(lambda p: p < 20, precios)) # filter: se queda con algunos
nuevos = list(map(lambda p: p * 0.90, precios)) # map: transforma cada uno
La lista precios no cambia: cada operación crea una lista nueva.
Un compañero afirma que, en la programación funcional, una función siempre devuelve el mismo resultado si recibe los mismos datos y que no modifica variables externas.…
Un compañero afirma que, en la programación funcional, una función siempre devuelve el mismo resultado si recibe los mismos datos y que no modifica variables externas. Explicá qué nombre recibe esta propiedad y por qué resulta útil. Luego compará esta idea con una función que, en estilo estructurado, cambia una variable global cada vez que se la llama.
Una tienda de un centro comercial de Santa Tecla quiere calcular el total de una compra aplicando el IVA del 13 %. Escribí en Python una función que reciba una lista de…
Una tienda de un centro comercial de Santa Tecla quiere calcular el total de una compra aplicando el IVA del 13 %. Escribí en Python una función que reciba una lista de precios en dólares y devuelva el total con IVA incluido, usando el estilo funcional (sin modificar la lista original y sin variables externas). Después explicá en dos o tres líneas qué la hace funcional.
Se quiere obtener los precios con descuento del 10 % de los productos de una lista, conservando solo los que cuestan menos de 20 dólares después del descuento. Observá…
Se quiere obtener los precios con descuento del 10 % de los productos de una lista, conservando solo los que cuestan menos de 20 dólares después del descuento. Observá esta solución:
precios = [12.00, 25.00, 18.50, 30.00, 15.00]
resultado = []
for p in precios:
d = p * 0.90
if d < 20:
resultado.append(d)
- a) Identificá el paradigma de esta solución y señalá qué efectos secundarios tiene.
- b) Escribí una versión funcional optimizada, usando
mapyfiltero una comprensión de listas. - c) Compará ambas versiones en cuanto a legibilidad, facilidad para probarlas y riesgo de errores, y decidí cuál preferirías usar en un proyecto en equipo, justificando tu elección.
Comparar los tres con un mismo problema
Problema: dada una lista de precios, obtener el total con IVA del 13 %.
# Estructurado: pasos, variable que cambia
total = 0
for p in precios:
total = total + p
total = total * 1.13
# Orientado a objetos: datos y acciones juntos
class Carrito:
def __init__(self):
self.precios = []
def agregar(self, p):
self.precios.append(p)
def total_con_iva(self):
return sum(self.precios) * 1.13
# Funcional: una función pura
def total_con_iva(precios):
return sum(precios) * 1.13
| Paradigma | Idea central | Cuándo conviene |
|---|---|---|
| Estructurado | Secuencia, selección, iteración | Programas pequeños o procesos paso a paso |
| Orientado a objetos | Objetos con datos y métodos | Sistemas con muchas entidades que tienen estado propio (libros, estudiantes, préstamos) |
| Funcional | Funciones puras, sin efectos secundarios | Cálculos y transformaciones de datos fáciles de probar |
Los paradigmas no se excluyen: un sistema grande puede organizarse con clases y usar funciones puras para los cálculos, como la multa por días de retraso (depende solo de los días y de la tarifa).
Volvé al principio: la cooperativa puede resolver el cobro con los tres estilos. El estructurado sigue pasos, el orientado a objetos agrupa la venta en una clase y el funcional calcula con funciones puras. Se elige según el tamaño del sistema y qué parte del problema se quiere resolver.
Un equipo de estudiantes debe desarrollar un sistema para administrar los préstamos de libros de la biblioteca de su instituto nacional. El sistema manejará libros,…
Un equipo de estudiantes debe desarrollar un sistema para administrar los préstamos de libros de la biblioteca de su instituto nacional. El sistema manejará libros, estudiantes y préstamos, y cada uno tiene datos propios y acciones propias (por ejemplo, prestar o devolver un libro).
- a) Argumentá cuál paradigma de los tres resulta más adecuado para organizar este sistema y por qué.
- b) Describí cómo modelarías al menos dos clases, indicando sus atributos y métodos principales.
- c) Señalá una parte del sistema, como el cálculo de la multa por días de retraso, donde convendría usar una función pura, y explicá la razón.
Resumen
-
Un paradigma es una forma de organizar un programa; un mismo lenguaje, como Python, admite varios.
-
Estructurado: secuencia, selección e iteración.
-
Orientado a objetos: clases (moldes) con atributos (datos) y métodos (acciones); los objetos son ejemplares de una clase.
-
Funcional: funciones puras, sin efectos secundarios, con transparencia referencial; fáciles de probar.
-
Los paradigmas se pueden combinar según lo que pida el problema.