構造化プログラミングとオブジェクト指向プログラミングの違いを説明するために、足し算、引き算、掛け算、割り算といった簡単な数学演算を行うプログラムを例に考えてみよう。このプログラムの2つの実装を以下に示す。1つは構造化プログラミングを使用したもので、もう1つはオブジェクト指向プログラミングを使用したものである。

構造化プログラミング
```
#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;
  }
}
```

このコードでは、すべての関数が個別に定義され、そのタスクの実行に必要なパラメータが渡される。メイン関数は、数値が要求され、数学演算の結果が表示されるところです。これは構造化プログラミングの一例です。

オブジェクト指向プログラミング：
```
#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;
  }
}
```

このコードでは、数学演算を実行するために必要なデータと、各演算を実行するための関数をカプセル化したクラスMathOperationsを定義しています。メイン関数は、MathOperationsクラスのオブジェクトを作成し、ユーザーから数値を要求し、クラスの関数を呼び出して数学演算を実行します。

この例では、構造化プログラミングとオブジェクト指向プログラミングの基本的な違いは、構造化プログラミングでは、特定のタスクを実行する関数を定義し、そのタスクの実行に必要なデータを渡します。一方、オブジェクト指向プログラミングでは、特定のタスクに関連するデータと関数をカプセル化したクラスを定義する。

オブジェクト指向のコードでは、データaとb、関数sum()、sub()、mul()、div()を含むMathOperationsクラスのオブジェクトを作成します。そして、データを別々の関数に渡すのではなく、そのオブジェクトを使って数学演算を実行する。

オブジェクト指向プログラミングには、モジュール化、カプセル化、コードの再利用といった利点がある。クラスは内部実装を隠すように設計できるため、コードの保守や更新が容易になる。さらに、クラスはプログラムの異なる部分、あるいは異なるプログラムでも再利用することができる。
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.