人工知能企業とその宣伝担当者たちが作り出す煙幕と欺瞞が蔓延する現代において、プログラミングを学ぶことはこれまで以上に必要不可欠となっている。 Linuxを使ったPythonプログラミング講座の第4部となる今回は、オブジェクト指向プログラミングのパラダイムを理解する方法について引き続き解説していきます。 前回のレッスンへのリンクは記事の最後にありますので、覚えておいてください。
AIエージェントやモデルはコードを理解したり書いたりする能力を持っているものの、人間が詳細な指示を与えることは依然として必要である。 アプリケーションが何をすべきかを理解する必要があります。そのためには、アプリケーションが解決しようとしている問題を理解するだけでなく、言語の特性を考慮してソリューションを設計することも必要です。
たとえ話を使ってこれを分かりやすく説明してみましょう。
建設作業員は超高層ビルを建設する。しかし、建設が始まる前に、設計図を作成する建築家、構造計算や電気、ガス、水道の接続設計を行う技術者が必要となる。建物が完成すれば、今度は内装デザインを別の専門家が決定しなければならない。もちろん、複雑な問題がなければ、経験豊富な作業員ならおそらく適切に作業できるだろう。しかし実際には、誰もそんなリスクを負いたがらない。
実際には、バイブコーディングは指示が詳細であればあるほど良い結果をもたらします。 さらに、大企業は、指示が不十分なまま過度に野心的な人工知能エージェントによって、サービスの中断やかけがえのないデータベースの削除といった被害に遭っている。
Linuxを使ったPythonプログラミングコース
以前の記事で、オブジェクト指向プログラミングモデルは、オブジェクト、クラス、メソッド、属性という4つの柱に基づいていることを確認しました。 クラスは、私たちが扱うオブジェクトやエンティティをモデル化するために使用されるテンプレートです。これらのテンプレートはオブジェクトが持つ属性を定義し、メソッドはオブジェクトの振る舞いを定義します。
クラスで定められたテンプレートを用いて作成された様々な要素は、インスタンスと呼ばれます。 例えば、オペレーティングシステムクラスには、Linux、Windows、macOSといったインスタンスがあります。しかし、既存のクラスとわずかに異なるだけのクラスを作成したい場合もあるでしょう。オブジェクト指向プログラミングの継承という機能を利用できるため、コードを書き直す必要はありません。
クラスを追加した以下のプログラムを見てみましょう。
既に説明したとおり、コードを記事に直接貼り付けない理由は、ブログを公開するために使用しているプラットフォームがインデントをサポートしていないためです。 この方法は、スペースまたはタブを追加することを含みます(スペースとタブは混在できないため、「または」タブであることに注意してください)。これにより、コードが理解しやすくなります。
インデントを使うと、コードを階層的に構造化しやすくなります。 ループ、関数、クラスなどのコードブロックを区別すること。さらに、Pythonプログラムを正しくインデントしないと、動作しません。
それでは、プログラムを一行ずつ分析していきましょう。
class Sistemas:
前述のとおり、このプログラムはオペレーティングシステムのインスタンスが作成されるテンプレートを作成します。
def __init__(self, nombre, version, derivada):
ここではクラスを構築しています。 最初の部分は、作成されるたびに使用される自動化された方法です。 括弧内の項目は、オブジェクトが持つパラメータです。`Self`は常に使用され、オブジェクト自体を指します。常に最初に記述されます。その他のパラメータは、以前の授業で設定したLinuxディストリビューション名、バージョン、およびどのディストリビューションから派生したかです。
self.nombre = nombre
self.version = version
self.derivada = derivada
これらの行は、オブジェクトの属性を作成するために使用されます。これらはオブジェクト固有の変数であり、オブジェクト内の変数として機能し、必要に応じて保持されます。
def mostrar_info(self):
このメソッドは、オブジェクトの属性情報の表示方法を定義します。`self` パラメータは、属性として保存されたパラメータのみを使用することを示します。
print(f"Nombre: {self.nombre}")
print(f"Versión: {self.version}")
print(f"Derivada: {self.derivada}")
これらの3行は、属性情報を表示する方法が画面に印刷することであることを示しています。
class SistemaConPeso(Sistemas):
ここが、今回のプログラムが以前のプログラムと異なる点です。以前のクラスを基にした新しい拡張クラスを追加しました。そのため、クラス名に括弧で囲んで以前のクラス名が付加されています。
def __init__(self, nombre, version, derivada, peso):
これは子クラスのコンストラクタで、以前に見たものとほぼ同じですが、重みパラメータが追加されています。
super().__init__(nombre, version, derivada)
コードの重複を避けるため、super命令を使って、名前、バージョン、派生クラスの処理は親クラスの責任であることをプログラムに伝えます。
self.peso = peso
重量属性を保存する処理もまだ残っていた。
def mostrar_info(self):
目的は余分なコードを書くことを避けることなので、追加データを表示する新しい関数を作成する代わりに、既存の関数を修正します。
super().mostrar_info()
親クラスのメソッドを呼び出して、そこに格納されている属性の表示方法を設定します。
print(f"Peso: {self.peso}
現在のクラスのデータをどのように表示するかについての情報を追加してください。
sistema = SistemaConPeso("Linux Mint", "22", "Ubuntu", "3GB")
新しいパラメータを追加して情報を格納するオブジェクトを作成し、それをシステム変数に保存します。
sistema.mostrar_info()
情報を表示するメソッドを呼び出す
もちろん、このプログラムには実用的な用途はありません。コードに属性値を入力しなければならないのは無意味です。何かを変更するたびにプログラマーが必要になるからです。三目並べの例で見たように、Pythonはユーザーがキーボードから入力した情報を受け取り、保存することができます。また、ファイルを読み込んだり、データベースとやり取りしたりすることでも同様の処理が可能です。
しかし、クラス、属性、コンストラクタ、メソッド、継承、ポリモーフィズムといったオブジェクト指向プログラミングの重要な概念を明確にする上で役立ちました。次回の記事では、オブジェクト指向プログラミングについての解説を終え、Pythonでのプログラミング方法についてお話しする予定です。