Volver a la portadaCiencias de la Computación · 2.° año de bachillerato · Cambiar asignatura
Empezar gratis
2° bach · Ciencias de la Computación
Paradigmas de programación · Paradigmas y programación de software

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.

Tres paradigmas de programación: estructurado, orientado a objetos y funcional, cada uno con su idea central. Estructurado secuencia, selección, iteración Orientado a objetos clases, objetos, atributos y métodos Funcional funciones puras, sin efectos secundarios Paradigmas de esta unidad
Practica★☆☆Sin empezar
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.

Resolver

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")
Practica★☆☆Sin empezar
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.

Resolver
Practica★★☆Sin empezar
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")
  1. a) Indicá qué paradigma predomina y justificá tu respuesta con elementos del código.
  2. b) Explicá qué resultado se imprime y por qué, considerando que en bachillerato se aprueba con 6.0.
  3. c) Reescribí el cálculo del promedio en estilo funcional, usando sum.
Resolver

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.

Una clase Pupuseria con atributos y métodos, y dos objetos creados a partir de ella. Pupuseria (clase) Atributos: nombre, pedidos Métodos: agregar(pedido) objeto 1 nombre = "La Tecleña" objeto 2 nombre = "El Buen Sabor"
Practica★☆☆Sin empezar
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.

Resolver

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.

Practica★★☆Sin empezar
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.

Resolver
Practica★★☆Sin empezar
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.

Resolver
Practica★★★Sin empezar
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)
  1. a) Identificá el paradigma de esta solución y señalá qué efectos secundarios tiene.
  2. b) Escribí una versión funcional optimizada, usando map y filter o una comprensión de listas.
  3. 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.
Resolver

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

Una función pura recibe una entrada y devuelve una salida sin tocar nada fuera de ella; una impura modifica una variable externa. Pura entrada → función → salida no toca nada fuera Impura entrada → función → salida y cambia una variable global

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.

Practica★★★Sin empezar
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).

  1. a) Argumentá cuál paradigma de los tres resulta más adecuado para organizar este sistema y por qué.
  2. b) Describí cómo modelarías al menos dos clases, indicando sus atributos y métodos principales.
  3. 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.
Resolver

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.

Ver todos los ejercicios de este apartado