こんにちは!
ナビゲータのEVEです。
昨日は、私がよく知っている言語、JavaとJavaScriptを比較し、何ができて、何ができないのか調べました。昨日の段階では、Javaでできることは、JavaScriptでもできそうだという印象をもちましたが、実際はどうなのでしょうか?
[オブジェクト指向言語]
JavaScriptもオブジェクト指向の言語の機能が採用されています。それは、以前かららしいのですが、ただ、普通のJavaとかC#とかとは全く異質なものでした。しかし、classキーワードが採用されたため、非常に分かりやすくなったような気がします。但し、Javaとは違い、クラスベースではなくプロトタイプ継承ということらしいです。クラスベース継承はよく理解しているのですが、プロトタイプベース継承はよく知りません。どんな機能をもつモノなのかChatGPTに聞いてみました。
■クラスベースとプロトタイプベースの違い
・クラスベース継承
クラスを基にしてオブジェクトを作成し、クラス間での継承を行います。クラスは設計図として機能し、コードの再利用が容易です。
・プロトタイプ継承
オブジェクトが他のオブジェクトを基にして作成され、プロトタイプチェーンを通じて継承します。オブジェクトが直接継承の基盤となるため、より動的で柔軟な継承が可能です。
■classでプログラミングした場合のJavaScript
・クラス構文は、見た目や使い勝手がクラスベース言語に似ており、オブジェクト指向プログラミングを扱いやすくします。
・しかし、内部的にはプロトタイプベースの継承が使用されており、クラス構文もそのプロトタイプベースの仕組みのラップに過ぎません。
どうも、プロトタイプベースと言っているのは、以前見たことがある何しているのかよくわからないプログラミングを指しているようです。もしかしたら、古いプログラムを見るタイミングがある場合、必要な知識になるかもしれません。
[なんでオブジェクト指向言語]
今まで、経験してきた言語は、すべて手続き型言語に分類されています。Javaも同様に手続き型言語として利用することが可能ですが、基本非手続き型言語に含まれます。非手続型言語は、オブジェクト指向型言語、関数宣言型言語、論理型言語、宣言型言語などがありますが、Javaやこれから製造しようとしている、JavaScriptは、オブジェクト指向型言語に含まれます。私は、従来の手続き型言語から、非手続き型言語のオブジェクト指向型言語に乗り換えようとしていますが、どんなメリットがあって乗り換えようとしているのでしょうか?その特徴について、ChatGPTにまとめてもらいました。
❶再利用性 (Reusability)
コードの再利用: クラスやオブジェクトを作成し、それらを他の部分で再利用することで、同じコードを何度も書かずに済みます。例えば、親クラスで定義したメソッドやプロパティをサブクラスで再利用することができます。
❷拡張性 (Extensibility)
柔軟な拡張: 新しい機能を追加する際に、既存のコードを変更せずに新しいクラスやメソッドを追加できます。これにより、システムの拡張が容易になります。
❸カプセル化 (Encapsulation)
データの隠蔽: データ(フィールド)と操作(メソッド)をクラス内にまとめ、外部から直接アクセスできないようにすることで、データの保護と変更の影響範囲を制限します。これにより、プログラムの保守性が向上します。
❹保守性 (Maintainability)
コードの整理: クラスとオブジェクトを使って関連する機能をまとめることで、コードが整理され、理解しやすくなります。修正やバグ修正が容易になります。
❺多態性 (Polymorphism)
柔軟な振る舞い: 同じメソッド名で異なる実装を持つことができ、異なるオブジェクトが同じメソッドを異なる方法で実装できます。これにより、プログラムの柔軟性と拡張性が向上します。
❻抽象化 (Abstraction)
複雑さの隠蔽: クラスやオブジェクトを使用することで、複雑な実装の詳細を隠し、インターフェースや基本的な機能だけを外部に公開することができます。これにより、システム全体を理解しやすくなります。
❼モジュール化 (Modularity)
コードの分割: プログラムを複数のクラスやモジュールに分割することで、各部分が独立して作成・テスト・修正できるようになります。これにより、協力的な開発が容易になります。
❽テストの容易性 (Testability)
単体テスト: クラスやオブジェクト単位でテストを行うことで、バグを早期に発見しやすくなります。モジュール化されているため、単体テストがしやすいです。
❾シミュレーションとモデル化 (Simulation and Modeling)
現実世界のモデル化: 現実世界の概念やプロセスをオブジェクトやクラスとしてモデル化することで、プログラムの設計が直感的に行えます。ビジネスロジックやデータモデルをそのままプログラムに反映できます。
❿協力的な開発 (Collaborative Development)
チーム開発の支援: OOPの構造により、チーム内での役割分担がしやすく、個々の開発者が担当するクラスやオブジェクトを管理することで、効率的に協力することができます。
以上です。私は、EVEシステムを作ろうとしたとき、Prototype EVEの機能も使用したいと思い、オブジェクト指向言語の機能を利用しましたが、そのとき拡張性とか、再利用性といった部分を感じることができました。
[あとがき]
本日は、オブジェクト指向言語のさわりの部分についてお話ししました。この知識、ときどき、中小企業診断士の試験で見かけます。これから、プログラミングをはじめたい人ばかりではなく、多くの人に役立つ情報になるとうれしいです。
なお、日曜日は、今後セキュリティのことについて書くことにしました。理由等については、明日お話しますが、その関係で、JavaScriptのつづきの話は月曜日になります。月曜日からは、実際のプログラミングに入っていきますので、お楽しみください。
では、また!