オブジェクト指向型プログラミングに関する各種用語の整理を行いました。大部分は、文末に挙げた参考文献に依拠しています。
#手続き型言語
- C, Pascal, BASICなど
- 編成単位が原始的
- データの扱いが大雑把(local, globalの2種類よりも細かく柔軟性のある指定ができない)
- アクセスしてはいけない関数からの不注意なアクセスというプログラミングエラーが頻繁に起きる
- そのデータにアクセする必要な視覚のある関数だけがアクセスできて、ほかからはデータが見えないようにするにはオブジェクト指向型言語が必要
#オブジェクト指向型言語
- OPP : object oriented programming
- 関数と変数の両方をおさめたプログラミング単位:オブジェクト を規定
- C言語の構造体をヒントに拡張した
#オブジェクト
- フィールド:オブジェクトの中の変数
- メソッド:オブジェクトの中の関数
- 無関係なメソッドや行儀の悪いメソッドがあるオブジェクトのフィールドにアクセスができないようになっている。
#クラス
- 形はまったく同じでもメソッドの処理内容やフィールドの内容が少しずつ違うオブジェクトをいくつも作成するのは手間がかかる。
- クラスという概念は、一定の形をしたオブジェクトの仕様書みたいなもの。
#オブジェクトの作成
- クラスの定義を書いただけでは、そのクラスのオブジェクトは作られない
- C言語の構造体でもやはり、構造体の定義をかいただけでは何も変数は作られない
- newというキーワードを使ってオブジェクトを生成
- オブジェクトの生成と同時に、そのオブジェクトの参照を、そのオブジェクトのクラス型指定としてついている変数に収める必要がある
- 実際にクラスからオブジェトを作成することをインスタンス作成(instantiation)という
- オブジェクトのことを「クラスのインスタンス」ということがある。
#オブジェクトのメッソドへのアクセス
- "."を用いてオブジェクトとそのメソッドやフィールを結びつける
例 object.field object.method
#コンストラクタ
- コンストラクタはnewを用いてオブジェクトを作るときに、自動的に呼び出さる。
- コンストラクタの名前は常にクラスの名前と同じ
- コンストラクタの中には、オブジェクトが最初に作られた時の状態や、その時に行われるべき操作などが書かれる。
- コンストラクタがないと、不必要に多いメソッドを作ってしまうことになる
#publicとprivate
- publicとprivateはアクセス指定(access modifier)と呼ばれる
- クラスのメソッドやフィールドに外からアクセスできるか・できないかを指定する
- privateが付いているフィールやメソッドは、そのクラスの中のメソッドからしかアクセスできない
- publicが付いているフィールドやメソッドは、その他のクラスから呼び出すことができる
#クラスのフィールド(つまりデータ)は、通常はprivateにして、メソッドの方をpublicにする
- このようにすることで、他のクラスのメソッドが断り無く勝手にデータを書き換えたりできないので、データが保護される。
- 外部からのクラスのデータにアクセスする必要があったら、必ずそのクラスのメソッドを使うようにすることができる
- 『データは女王蜂のみたいなものです。巣の奥深くに隠しておいて、働き蜂のメソッドたちに世話をさせるのです。』
#継承(inheritance)
- 既存のクラスから派生させたクラスとして、既存のクラスの拡張版のような新しいクラスを作ること
- 元のクラスをスーパークラス(super class)と呼ぶ
- 新たに定義されるクラスをサブクラス(subclass)と呼ぶ
- スーパークラスからサブクラスを作ることは拡張(extend)していることに等しい。そのため、キーワードはextendを使用
- 既存のクラスに新たな特徴を加えることが容易にできるし、元となる1つのクラスを軸として関連クラスの集まりを定義できるので、設計の点で有利である
#多形性(polymorphism)
- 多形性とは、クラスがそれぞれ異なる複数のオブジェクトに対して、同じ取り扱いができる状態のこと
- それらの異なるクラスは、同一のクラスからのサブクラスでなけれbならない
- クラスが異なる複数のオブジェクトに対して、同じ名前のメソッドを呼び呼び出せるが、そのメソッドの処理内容が少しずつ違う状態のことをpolymorphismと呼ぶ
- 柔軟で臨機応変な取り扱いを自動的に行うこと
- 多形性はプログラムの設計とコーディングを単純化し、わかりやすくする
#ソフトウェア工学
- ソフトウェアの全生涯には、仕様決定、設計、審査、コーディング(狭義のプログラミング)、試験、生産、メンテナンスが含まれる
- ソフトウェア工学そのものは抽象的な学問なので、大規模なプロジェクトを実際に体験した人でないと具体的な理解が難しい
【参考文献】
Robert Lafore 著 岩谷 宏訳 『Javaで学ぶアルゴリズムとデータ構造』ソフトバンク 1999 8 - 16 pp