オブジェクト指向の概念
オブジェクト指向
オブジェクト指向 ↔︎ 手続き型
*これらはしばしば、対となる関係として取り上げられている
オブジェクト指向とは?
オブジェクト指向型(Object-oriented)言語は個々のプログラムをオブジェクト単位で記述する。
そしてオブジェクトが相互連携することで、プログラムを処理していくプログラミングパラダイムです。
オブジェクト指向とは「モノの機能や性質」を、共通して使うための概念と覚える。
手続き型とは?
料理のレシピのように、複数の処理手順が順番に並んでいて、取り扱うデータは共通の場所に置いてあり、どのモジュールからでも参照が可能な記述方式。一回毎に丹精込めて作る、切り方とかにも拘ったレシピみたいなもの。
モジュールとは?
パッケージを束ねるための単位。
モジュールを利用すると、モジュール配下のパッケージに対するアクセス権限をより細かに設定できるようになる。
具体的には、
現在のモジュールの中でだけpublic
特定のモジュールに対してだけpublic
すべてのモジュールに対してpublic
のような権限をパッケージで設定できる。
パッケージとは?
パッケージとはJavaのクラスをまとめて分類するための仕組み。
クラス数が大量にある場合、それらを機能などで分類してまとめておくとクラスの管理が容易になります。
「フランチャイズの飲食店の店舗運営ノウハウ」みたいなもの。
「すかいらーくグループ」の中の「ガスト」「バーミヤン」「ジョナサン」のようなもの。
クラスとは?
「クラス」とは「インスタンスを生成する際に用いられる設計図」の役割を持つものであり、フィールド(設計するものの属性)とメソッド(設計するものの操作)を定義している。
「これからプログラム処理を開始します」と宣言することです。どんなプログラムを開始するのか、その種類を宣言するためにクラスを用いる。
プログラムを家の建築で例えると設計図にあたるのが「クラス」
例えば「main」というクラスは、Javaを実行する際に、最初に実行するオブジェクトという意味です。
[クラスに書かれていること]
主に「フィールド」と「メソッド」の二つを定義している。
フィールド(=メンバ変数)とは?
設計するものの属性。オブジェクトが持つパラメーターを定義したもの。
例えば、パソコンにおけるメモリや容量、OSなどの情報。
intやdoubleなどのデータ型の種類やクラス型、配列型などの変数を宣言することも含まれる。
メソッドとは?
オブジェクトに関する操作の定義。
メソッドとは、オブジェクトがアクションを起こす際の処理のことで、「バイク」というオブジェクトがあるとすれば「走る」「ブレーキをかける」「クラクションを鳴らす」といった機能がメソッドにあたる。
こうした特定の処理をひとまとまりにするためのプログラム。
インスタンスとは?
クラスを実体化したもの。ロボットの設計図がクラスなら、作られたロボットがすなわちインスタンス。
設計図を実体化させたものがインスタンス。インスタンスになって、はじめて「家」が目の前に現れる。
Javaでメソッドを定義する時の形式
Javaでオブジェクトを作成するにあたっては、変数と型の名前を定義する「宣言」を行う。
このときに定義するのが「クラス」「プロパティ」「メソッド」の要素だ。
コンストラクタの役割
コンストラクタとは、インスタンスを生成する際に、自動で実行されるメソッドのこと。クラスを構成するメンバ変数(=フィールド)を初期化するために用いられる。これにより、初期化されていないオブジェクトの出現を防いでいる。クッキー工場で使う整形のための「押し型」をデフォルトに戻して、前に作っていたクッキーの影響が出ないようにする状況に当てはめられる。
オブジェクト指向のメリット
「共通のモノを使い回せる」という点。「家」や「車」などのモノを1度定義してしまえば、作業者が変わっても同じモノの概念を使い回すことができる。また、プログラムの細部までパーツ化されているのもオブジェクト指向と言える。飲食店で共通の食材を上手く使って料理レパートリーを回すみたいなイメージ。
オブジェクト化にちなんだ関連用語
カプセル化:
オブジェクトが持つデータや処理絵、別のオブジェクトから利用されないものを切り離すこと。
オブジェクトを作る場合、カプセル化することは頻繁に行う。
継承:
特定のオブジェクトのクラスやフィールドなどを別のオブジェクトに引き継ぐこと。カレーを作るために用意した材料を「肉じゃが」に転用するようなもの。
ポリモーフィズム:
同一のメソッドを使い、異なる処理を実行すること。 映画のジャッキーチェンに出てくる老師が「生活上の基本動作」で敵をやっつけるようなもの。
【参考】
手続き型言語とは?オブジェクト指向言語と比較しわかりやすく解説!メリットやPythonにおすすめの型を紹介!
【Java】モジュールについて - 未来エンジニア養成所Blog
module-info.javaを何に使うか?→パッケージの中の権限を設定する
【Java】モジュール - Qiita
Javaにおけるクラスとは。用語の意味や書き方を初心者向けに紹介
Javaのインスタンス化とは?クラスとの関係や生成方法をわかりやすく解説 | プログラミングを学ぶならトレノキャンプ(TRAINOCAMP)
Discussion