【技術勉強】オブジェクト指向でなぜつくるのか

三大要素

クラス(カプセル化

「クラス」とは種類
インスタンス」とは具体的なモノ


クラスの仕組み

クラスの特徴には、「まとめる」「隠す」「たくさん作る」がある

まとめる

そのままの意味

隠す

クラスに定義した変数とメソッドを、他のクラスから隠すことができる

たくさん作る

一度クラスとして定義すると、実行時にそこから幾つでもインスタンスを作ることができる


それぞれの変数の特徴

インスタンス変数の特徴

  1. 別のクラスのメソッドからアクセスできないように隠すことができる

  2. 一旦インスタンスが作られた後は、必要がなくなるまでメモリ上に残される

グローバル変数の特徴

  1. プログラムのどこからでもアクセスできてしまう

  2. プログラムの最初から最後まで存在しているため、メソッドの実行範囲を超えて管理したい情報を保持することができる

ローカル変数の特徴

  1. 特定のメソッドからしかアクセスできない

  2. メソッドの実行期間中にだけ存在する一時的な情報しか時保持できない

インスタンス変数は、影響範囲を局所化できるローカル変数と、存在期間の長いグローバル変数のいいとこどりをしたもの



ポリモーフィズム

ポリモーフィズムとは「いろいろな形に変わる」という意味
相手が具体的にそのクラスのインスタンスであるかを意識せずにメッセージを送れる仕組み
(メソッドを呼び出す側のロジッックを一本化する仕組み)



継承

モノの種類の共通点と相違点を体系的に整理する仕組み
クラスの共通部分を別クラスにまとめて、それによってコードの重複を排除する仕組み



メモリの仕組み

CPUはマルチスレッド?

CPUが一時点で実行できる処理は1つだけ
CPUは複数のスレッドの処理を少しずつ順繰りに実行していて、
あるスレッドの処理を実行するとき、決められた非常に短い時間だけ実行する
その時間が来たら、中途半端で会っても一旦中断して、次のスレッドに移る仕組みになっている

CPUは処理速度が非常に速いため、人間からすると複数の仕事を同時に行なっているように感じる



メモリ領域は3つに分けて管理

静的領域

プログラム開始時に確保され、行こうプログラムが終了するまで配置が固定される領域
ex. グローバル領域、コード情報


ヒープ領域

プログラムの実行時にどう時に確保するためのメモリ領域
プログラム実行中にアプリケーションから必要なサイズを要求することで割り当てを行い、不要になれば元に戻す


スタック領域

スレッドの制御のために使うメモリ領域
ヒープ領域は複数のスレッドから共有されるが、スタック領域はスレッドに1つずつ用意される
メソッド呼び出し制御のために使われるメモリ領域で、メソッドの引数やローカル変数、戻り先などの情報を格納する



OOPのメモリの使い方

メソッドに書かれたコード情報は1クラスに1つだけロードされる
インスタンスを生成するたびにヒープ領域が使われる

OOPで書いたプログラムは有限のメモリ領域であるヒープ領域を大量に使って動く

変数にはインスタンスの「ポインタ」が格納される
ポインタとは、メモリ領域の場所を示す情報



再利用

クラスライブラリ

汎用的な機能を持つクラスをたくさん集めたもの


フレームワーク

包括的なアプリケーション基盤


コンポーネント

  • OOPのクラスよりも粒度が大きい
  • ソースコード形式ではなく、バイナリ形式で提供される
  • コンポーネントの定義情報を含めて提供される
  • 昨日の独立性が高く、内部詳細を知らなくても利用できる


デザインパターン

設計パターン



UML(ユーエムエル)

1. OOPのプログラム構造や動作を表現する

  • クラス図で構造を表現する
  • シーケンス図・コミュニケーション図で動きを表現する


2. 汎用の整理術としての成果物を表現する


3. オブジェクト指向では表現できない情報を表現する

ユースケース図でコンピュータに任せる仕事を表現



オブジェクト指向設計の基本

1. 重複を排除する


2. 部品の独立性を高める

凝集度]

それぞれの部品の機能のまとまり度合い
「強い」方がいい設計


結合度

部品間の結びつき度合い
「弱い」方がいい設計


凝集度を強くするコツ

  • 一言で表現できる名前をつける
  • クラスやメソッドを小さく作る


3. 依存関係を循環させない