prompter: 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.

assistant: Por supuesto, aquí te muestro dos códigos fuente diferentes para una misma aplicación en C++, uno estructurado y otro orientado a objetos:

Código estructurado:

    #include <iostream>
    #include <string>
    #include <cmath>

    using namespace std;

    int main() {
        double base, altura, area;
        string unidad;

        cout << "Ingresa la base del triángulo: ";
        cin >> base;

        cout << "Ingresa la altura del triángulo: ";
        cin >> altura;

        cout << "Ingresa la unidad de medida (cm, m, etc.): ";
        cin >> unidad;

        area = (base * altura) / 2;

        cout << "El área del triángulo es " << area << " " << unidad << " cuadrados." << endl;

        return 0;
    }


Código orientado a objetos:

    #include <iostream>
    #include <string>
    #include <cmath>

    using namespace std;

    class Triangulo {
        private:
            double base;
            double altura;
            string unidad;

        public:
            Triangulo(double b, double h, string u) {
                base = b;
                altura = h;
                unidad = u;
            }

            double calcular_area() {
                return (base * altura) / 2;
            }

            void imprimir_area() {
                double area = calcular_area();
                cout << "El área del triángulo es " << area << " " << unidad << " cuadrados." << endl;
            }
    };

    int main() {
        double base, altura;
        string unidad;

        cout << "Ingresa la base del triángulo: ";
        cin >> base;

        cout << "Ingresa la altura del triángulo: ";
        cin >> altura;

        cout << "Ingresa la unidad de medida (cm, m, etc.): ";
        cin >> unidad;

        Triangulo triangulo(base, altura, unidad);
        triangulo.imprimir_area();

        return 0;
    }


La diferencia principal entre estos dos códigos es que el primero está estructurado como una serie de instrucciones secuenciales, mientras que el segundo está estructurado como una clase que encapsula los datos y métodos necesarios para realizar una tarea específica.

En el código orientado a objetos, la clase Triangulo define los datos (base, altura y unidad) y los métodos (calcular_area e imprimir_area) necesarios para calcular y mostrar el área del triángulo. El programa principal crea un objeto Triangulo y llama a su método imprimir_area para mostrar el resultado.

En cambio, en el código estructurado, todas las variables son globales y el programa utiliza funciones simples para realizar los cálculos necesarios y mostrar el resultado.

La programación orientada a objetos permite una mayor modularidad y reutilización del código, ya que se pueden crear múltiples instancias de una clase y cada una de ellas puede realizar la misma tarea de forma independiente. Además, la encapsulación de los datos y métodos dentro de una clase reduce la complejidad del código y lo hace más fácil de mantener y depurar. Por otro lado, la programación estructurada es más adecuada para problemas simples y lineales, donde no se requiere una estructura más compleja como la que ofrece la programación orientada a objetos.