プログラミングをチームで効率よく開発するためには、担当領域を決めたり、似たようなコードが作らないようにするなどの工夫が必要となります。
プログラムを役割や機能に応じて分割することをモジュール分割と言ったりしますが、その際に必要となる概念がクラスです。
適切なクラス分割を行うことで、無駄がなくて読みやすく、メンテナンスのしやすいプログラムにすることができます。
プログラミング初心者にとっては、理解が難しい分野ではありますが、チームで開発するプログラマとなるためには必須の知識となります。
本ブログではこれまでに、JavaScript、Python、Java、Ruby、Goのクラスと継承について解説してきました。
本記事では、クラスと継承の各項目ごとに各言語の実装状況や特徴についてまとめます。
言語による違いが分かったり、忘れてしまったときの復習用として役立つ内容になっていますので、ぜひ最後までご覧いただければと思います。
最後に各言語のソースコードを含む詳細内容を確認できる関連ページへのリンクも用意しておきますので、気になる方はチェックしてみてください。
プログラミング言語のクラスと継承まとめ
クラスと継承に関する項目として、以下の内容を採り上げます。
なお、Goについてはクラスと継承の概念がないので、近しい機能として代替できる構造体とインタフェースに置き換えて説明します。
- クラスの定義方法
- コンストラクタ
- インスタンス化
- メソッド
- 変数
- アクセッサ
- 継承
クラスの定義方法
言語 | クラスの定義方法 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
クラスの定義方法は、どの言語でもほぼ同じで、classキーワードによって宣言します。
どの言語もクラス名の先頭は大文字にするパスカルケース(アッパーキャメルケース)が慣習となっています。
コンストラクタ
言語 | コンストラクタ |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
コンストラクタの定義は、どの言語とも一定の決まりがあります。
Goについては明示的なコンストラクタという概念はないですが、構造体を作成する関数として作成する慣習があります。
インスタンス化
言語 | インスタンス化 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
JavaScript、Java、Rubyはnew演算子またはnewメソッドによって作成します。
Pythonには __new__ メソッドはありますが、インスタンス生成を行うにはクラス名だけで作成できます。
メソッド
言語 | メソッド |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
JavaScript、Java、Rubyは、呼び方は違えどインスタンス化して利用するメソッドと、インスタンス化しなくても利用できるメソッドの2種類があります。
Pythonは3種類のメソッドがあります。クラスメソッドと静的メソッドはほぼ同じで、クラスメソッドで両方の役割を満たせるかと思うので、静的メソッドはあまり使う機会はないかもしれません。
変数
言語 | 変数 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
変数定義も言語によって種類があり、大きくインスタンス化してアクセスする変数とインスタンス化しなくてもアクセスできる変数に大別されます。
インスタンス化しなくてもアクセスできる変数は、値を書き換えるとすでに作成したインスタンスにも影響を及ぼすので、基本的には書き換えることのない定数などに用いるのが良いと思います。
変数のスコープの話はここでは割愛していますが、実際にはローカル変数も加え、スコープを最小限にする工夫をしながら各変数を使っていくことをおすすめします。
アクセッサ
言語 | アクセッサ |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
言語によってアクセッサの作り方が決まっているものもあります。
アクセッサは変数のスコープや値チェック等と併せて、作るのかどうかや作り方を決定していくと良いです。
継承
言語 | 継承 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
クラスの継承は各言語ともに親クラスのメソッドや変数をそのまま引き継ぎ、必要なところをオーバーライドして書き換えることができます。
子クラスから親クラスが持つメソッドや変数をアクセスできる範囲は、言語によって多少異なるので注意が必要です。
今回は割愛していますが、mixinやインタフェースなどを使うことで、さらに高度なクラス設計ができるようになります。
良いプログラマになるにはクラス設計が重要
プログラマは単にプログラミングするだけではなく、設計ができることも重要です。
チームで効率よく開発を進めるには、どんなクラス設計、継承関係、クラス間連携とするのかは重要な要素です。
クラス分割をしたり、オブジェクト指向でプログラミングするのは難しいかもしれませんが、普段から目に見えるものがどんな関係があるか、どんな振る舞いを持っているのかを考えてみると良い訓練になると思います。
良い設計ができるプログラマを目指して行きましょう。
今回はクラスと継承の各項目ごとに各言語の実装状況や特徴についてまとめてみました。
以下にソースコードも含めた各言語の詳細を記述した関連ページヘのリンクをまとめておくので、気になる方はチェックしてみてください。
以上、参考になれば幸いです。
コメント