手続き型言語、オブジェクト指向言語
Unityは、C#でコードを書きます。これはオブジェクト指向言語と呼ばれています
では、それと対比される手続き型言語との違いは何でしょうか
オブジェクト指向を使っていないBASICを例に説明します
BASICの例
まず、BASICで簡単なゲームのキャラクターを管理する方法を考えます。以下はBASICでキャラクターの位置を更新する例です。
以下のコードは、キャラクターのX位置を更新するBASICプログラムです。このプログラムでは、キャラクターの位置 x を表示し、更新して、一定の条件(位置が10を超える)に達したら位置をリセットするという操作を行います。
10 LET x = 0
20 PRINT "Character X Position: "; x
30 LET x = x + 1
40 IF x > 10 THEN LET x = 0
50 GOTO 20- 初期化:basicコードをコピーする10 LET x = 0- xを0に初期化します。これがキャラクターの初期位置を示します。
 
- 位置の表示:basicコードをコピーする20 PRINT "Character X Position: "; x- 現在の xの値(キャラクターの位置)を表示します。
 
- 現在の 
- 位置の更新:basicコードをコピーする30 LET x = x + 1- xの値を1増加させます。これでキャラクターが1ステップ右に移動します。
 
- 位置のリセット:basicコードをコピーする40 IF x > 10 THEN LET x = 0- xが10を超えた場合、- xを0にリセットします。これにより、キャラクターが画面の端に到達したら左端に戻ります。
 
- ループ:basicコードをコピーする50 GOTO 20- 行20に戻り、再び位置を表示して更新します。このループにより、キャラクターの位置が連続的に更新され続けます。
 
BASICの制限
このシンプルなプログラムにはいくつかの制限があります。
- 手動での変数管理:
- 変数 xを手動で管理し、更新しています。プログラムの制御フローに依存しており、エラーが発生しやすいです。
 
- 変数 
- 再利用性の欠如:
- コードは特定のタスクに対して固定されており、再利用が難しいです。例えば、もう一つキャラクターを追加するには、同様のコードをもう一度書く必要があります。
 
- メンテナンスの難しさ:
- プログラムが大きくなると、どの変数がどの機能を持つかを追跡するのが難しくなり、メンテナンスが困難です。
 
このように、BASICのプログラムはシンプルで直接的ですが、大規模なアプリケーションや複雑なロジックを扱うには適していません。オブジェクト指向プログラミングはこれらの制限を克服し、より整理された、拡張可能でメンテナンスしやすいコードを書くための強力な方法を提供します。
オブジェクト指向の例
次に、同じ動作をオブジェクト指向を使ってUnityで実装してみましょう。以下はC#でキャラクタークラスを定義し、その位置を更新する方法です。
using UnityEngine;
public class Character
{
    public float x;
    public Character()
    {
        x = 0;
    }
    public void UpdatePosition()
    {
        x++;
        if (x > 10) x = 0;
    }
    public void PrintPosition()
    {
        Debug.Log("Character X Position: " + x);
    }
}
public class Game : MonoBehaviour
{
    private Character character;
    void Start()
    {
        character = new Character();
    }
    void Update()
    {
        character.UpdatePosition();
        character.PrintPosition();
    }
}オブジェクト指向のメリット
- データと機能の統合:
- BASICではデータとその処理が分離しており、手動で変数を更新する必要があります。
- オブジェクト指向では、データ(プロパティ)とその操作(メソッド)が一つのオブジェクトに統合され、カプセル化されています。これにより、コードの管理と理解が容易になります。
 
- 再利用性:
- BASICのコードは特定のタスクに直接結びついており、再利用が難しいです。
- オブジェクト指向では、クラスを定義しておくことで、複数のインスタンスを作成し、同じクラスを異なるコンテキストで再利用できます。
 
- 拡張性:
- BASICのコードを拡張するには、新しい変数やコードの追加が必要です。
- オブジェクト指向では、クラスを継承したり、メソッドを追加することで容易に拡張できます。
 
- メンテナンス性:
- BASICのコードは規模が大きくなると管理が困難になります。
- オブジェクト指向では、クラスやオブジェクト単位でコードを整理できるため、メンテナンスが容易です。
 
このように、BASICとオブジェクト指向の違いを具体的な例を通じてみていくことで、オブジェクト指向の利点を理解しやすくなります。
おまけ
Basicのサンプルコードのリファクタリング
10 GOSUB 1000 ' Initialize
20 GOSUB 2000 ' Print Position
30 GOSUB 3000 ' Update Position
40 GOTO 20 ' Repeat
1000 ' Initialize Subroutine
1010 LET x = 0
1020 RETURN
2000 ' Print Position Subroutine
2010 PRINT "Character X Position: "; x
2020 RETURN
3000 ' Update Position Subroutine
3010 LET x = x + 1
3020 IF x > 10 THEN LET x = 0
3030 RETURN改善点の説明
- サブルーチンの導入:
- 各機能(初期化、位置の表示、位置の更新)をサブルーチンとして分離し、コードの再利用性と可読性を向上させました。
 
- コメントの追加:
- 各サブルーチンの目的をコメントで説明し、コードの理解を容易にしました。
 
- 明確な制御フロー:
- メインループで各サブルーチンを順次呼び出すことで、プログラムの制御フローを明確にし、ループ構造を簡潔にしました。
 
リファクタリング後の各部分の詳細
メインループ:
10 GOSUB 1000 ' Initialize
20 GOSUB 2000 ' Print Position
30 GOSUB 3000 ' Update Position
40 GOTO 20 ' Repeat初期化、位置の表示、位置の更新を順次呼び出し、これらをループさせます
初期化サブルーチン:
1000 ' Initialize Subroutine
1010 LET x = 0
1020 RETURN変数 x を初期化します。
位置表示サブルーチン:
2000 ' Print Position Subroutine
2010 PRINT "Character X Position: "; x
2020 RETURN変数 x の現在の値を表示します。
位置更新サブルーチン:
3000 ' Update Position Subroutine
3010 LET x = x + 1
3020 IF x > 10 THEN LET x = 0
3030 RETURN変数 x の値を更新し、必要に応じてリセットします。
このようにサブルーチンを使用することで、コードの再利用性と可読性を向上させることができます。






ディスカッション
コメント一覧
まだ、コメントがありません