human
同じアプリケーションに2つの異なるソースコードを使用して、C ++プログラミング言語を使用して、構造化されたオブジェクト指向のプログラミングの違いを表示してください。
gpt
構造化プログラミングとオブジェクト指向プログラミングの違いを説明するために、足し算、引き算、掛け算、割り算といった簡単な数学演算を行うプログラムを例に考えてみよう。このプログラムの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クラスのオブジェクトを作成します。そして、データを別々の関数に渡すのではなく、そのオブジェクトを使って数学演算を実行する。

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