user: Usando el lenguaje de programación C++, con dos código fuente diferentes para una misma aplicación, muéstrame la diferencia de programación estructurada y orientada a objetos.

assistant: Aquí te muestro dos códigos fuente diferentes para una misma aplicación, uno implementado en programación estructurada y el otro implementado en programación orientada a objetos en C++ para que puedas ver la diferencia:

- Código fuente en programación estructurada:

```cpp
#include <iostream>
#include <cmath>

double areaCirculo(double radio) {
    return M_PI * radio * radio;
}

double areaTriangulo(double base, double altura) {
    return (base * altura) / 2.0;
}

int main() {
    double radio, base, altura;
    std::cout << "Introduce el radio del círculo: ";
    std::cin >> radio;
    std::cout << "Introduce la base y la altura del triángulo separadas por un espacio: ";
    std::cin >> base >> altura;
    double areaTotal = areaCirculo(radio) + areaTriangulo(base, altura);
    std::cout << "El área total es: " << areaTotal << std::endl;
    return 0;
}
```

- Código fuente en programación orientada a objetos:

```cpp
#include <iostream>
#include <cmath>

class Figura {
public:
    virtual double area() const = 0;
};

class Circulo : public Figura {
public:
    Circulo(double radio) : radio(radio) {}
    double area() const override {
        return M_PI * radio * radio;
    }
private:
    double radio;
};

class Triangulo : public Figura {
public:
    Triangulo(double base, double altura) : base(base), altura(altura) {}
    double area() const override {
        return (base * altura) / 2.0;
    }
private:
    double base, altura;
};

int main() {
    double radio, base, altura;
    std::cout << "Introduce el radio del círculo: ";
    std::cin >> radio;
    std::cout << "Introduce la base y la altura del triángulo separadas por un espacio: ";
    std::cin >> base >> altura;

    Circulo circulo(radio);
    Triangulo triangulo(base, altura);

    double areaTotal = circulo.area() + triangulo.area();
    std::cout << "El área total es: " << areaTotal << std::endl;

    return 0;
}
```

Los dos códigos de ejemplo tienen la misma aplicación, cálculo de área de figuras. La versión estructurada se enfoca en funciones que realizan operaciones en datos estructurados, mientras que la versión orientada a objetos define clases que encapsulan datos y funciones relacionadas en un objeto.

En la versión orientada a objetos, cada figura es un objeto de una clase, que tiene sus propios atributos y métodos para calcular el área de la figura. Por otro lado, en la versión estructurada, las áreas se calculan mediante funciones independientes, lo que significa que el código puede ser más difícil de entender y mantener a medida que aumenta la complejidad de la aplicación.

La programación orientada a objetos también se centra en la encapsulación de datos y en la ocultación de detalles de implementación. En este caso, los detalles de cómo se calcula el área de cada figura se ocultan detrás de los métodos de la clase, lo que permite una mayor modularidad y escalabilidad del código.

Si tienes alguna otra pregunta, no dudes en hacerla. Estoy aquí para ayudarte en lo que necesites.