assistant: Para ilustrar la diferencia entre la programación estructurada y la programación orientada a objetos, podemos considerar el ejemplo de un programa que realiza operaciones matemáticas simples como suma, resta, multiplicación y división. A continuación se muestran dos implementaciones de este programa, una utilizando programación estructurada y otra utilizando programación orientada a objetos.

Programación estructurada:

#include <iostream>
using namespace std;

// Prototipos de funciones
float sum(float a, float b);
float sub(float a, float b);
float mul(float a, float b);
float div(float a, float b);

// Función principal
int main() {
  float a, b;
  cout << "Ingrese dos números: ";
  cin >> a >> b;
  cout << "La suma es: " << sum(a, b) << endl;
  cout << "La resta es: " << sub(a, b) << endl;
  cout << "La multiplicación es: " << mul(a, b) << endl;
  cout << "La división es: " << div(a, b) << endl;
  return 0;
}

// Definiciones de funciones
float sum(float a, float b) {
  return a + b;
}

float sub(float a, float b) {
  return a - b;
}

float mul(float a, float b) {
  return a * b;
}

float div(float a, float b) {
  if (b != 0) {
    return a / b;
  } else {
    cout << "Error: división por cero" << endl;
    return 0;
  }
}


En este código, todas las funciones son definidas por separado y se les pasa los parámetros que necesitan para realizar su tarea. La función principal es donde se piden los números y se muestran los resultados de las operaciones matemáticas. Este es un ejemplo de programación estructurada.

Programación orientada a objetos:

#include <iostream>
using namespace std;

// Clase que define un objeto de operaciones matemáticas
class OperacionesMatematicas {
  public:
    float a, b;
    float sum();
    float sub();
    float mul();
    float div();
};

// Función principal
int main() {
  OperacionesMatematicas op;
  cout << "Ingrese dos números: ";
  cin >> op.a >> op.b;
  cout << "La suma es: " << op.sum() << endl;
  cout << "La resta es: " << op.sub() << endl;
  cout << "La multiplicación es: " << op.mul() << endl;
  cout << "La división es: " << op.div() << endl;
  return 0;
}

// Definiciones de funciones de la clase OperacionesMatematicas
float OperacionesMatematicas::sum() {
  return a + b;
}

float OperacionesMatematicas::sub() {
  return a - b;
}

float OperacionesMatematicas::mul() {
  return a * b;
}

float OperacionesMatematicas::div() {
  if (b != 0) {
    return a / b;
  } else {
    cout << "Error: división por cero" << endl;
    return 0;
  }
}


En este código, se define una clase OperacionesMatematicas que encapsula los datos necesarios para realizar las operaciones matemáticas y también las funciones para realizar cada operación. La función principal se encarga de crear un objeto de la clase OperacionesMatematicas, pedir los números al usuario y llamar a las funciones de la clase para realizar las operaciones matemáticas.

En este ejemplo, la diferencia fundamental entre la programación estructurada y la programación orientada a objetos es que en la programación estructurada se definen funciones que realizan tareas específicas y se les pasa los datos necesarios para realizar esa tarea. En la programación orientada a objetos, en cambio, se define una clase que encapsula los datos y las funciones relacionadas con una tarea específica.

En el código orientado a objetos, se crea un objeto de la clase OperacionesMatematicas que contiene los datos a y b y las funciones sum(), sub(), mul() y div(). Luego, se utiliza ese objeto para realizar las operaciones matemáticas, en lugar de pasar los datos a funciones separadas.

La programación orientada a objetos tiene ventajas en términos de modularidad, encapsulamiento y reutilización de código. Las clases pueden ser diseñadas para ocultar su implementación interna, lo que facilita el mantenimiento y la actualización del código. Además, las clases pueden ser reutilizadas en diferentes partes del programa o incluso en diferentes programas.