見出し画像

【本・開発】オブジェクト指向でなぜつくるのか -知っておきたいOOP、設計、アジャイル開発の基礎知識-

はじめに

2022年に購入して積読だった「オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識」を最近読んだので、まとめ記載。

プログラミング言語の歴史の部分が、とてもわかりやすかった。


プログラミング言語の歴史:機械語→アセンブリ言語→高級言語→構造化プログラミング

機械語

  • コンピュータは2進数で書いた機械語しか解釈できない。

# 機械語によるプログラム例
A10010
8B160210
01D0
A10410

アセンブリ言語

  • 機械語を人間がわかりやすい記号に置き換えて表現したもの。

  • アセンブラと呼ばれる別のプログラムに読み込ませて、アセンブリ言語から機械語を生成する

# アセンブリ言語によるプログラム(Z=X+Y)例
MOV   AX, X
MOV   DX, Y
ADD   AX, DX
MOV   Z, AX

高級言語

  • コンピューターが理解する命令を1つ1つ記述するのではなく、より人間にわかりやすい「高級な」形式で表現したもの

  • FORTRAN(1957年)・COBOL(1960年)

# FORTRANによるプログラム例
Z = X+Y

構造化プログラミング:GOTO文の廃止・サブルーチンの独立性強化


1)GOTO文(プログラム内の任意のラベルに無条件で分岐する命令)を廃止

  • GOTOレスプログラミング。具体的には、ロジックを基本3構造のみ使用:順次進行・条件分岐(if/case)・繰り返し(for/while)

2)サブルーチンの独立性の強化

  • ローカル変数と値渡しの仕組みを導入して、グローバル変数の使用を最小限にした。しかし、ローカル変数はサブルーチン呼び出しが終わると消えてしまう一時的な変数。サブルーチンの実行期間を超えて保存する必要のある情報はサブルーチンの外側、つまりグローバル変数として保持せざるを得ない課題

OOP(オブジェクト指向プログラミング)

  • 3つの要素(クラス・ポリモーフィズム・継承)を導入

  • プログラムの無駄を省いて整理整頓する仕組み

クラス:まとめて、隠して、たくさん作る

まとめる:サブルーチンとグローバル変数をクラス内にまとめる

  • メソッド:クラスにまとめたサブルーチン

  • インスタンス変数(属性、フィールド):クラスにまとめたグローバル変数。仲間内だけのグローバル変数

Java

// 構造化プログラミングによるファイルアクセス処理
// アクセス中のファイル番号を格納するグローバル変数
int fileNum;

// ファイルをオープンするサブルーチン
// 引数にパス名を受け取る
void openFile(String pathName) {/* ロジックは省略 */}

// ファイルをクローズするサブルーチン
void closeFile {/* ロジックは省略 */}

//ファイルから1文字を読み込むサブルーチン
char readFile() {/* ロジックは省略 */}

Java

// クラスを使ってまとめる
class TextFileReader {
	// アクセス中のファイル番号を格納するグローバル変数
	int fileNum;
	
	// ファイルをオープンするサブルーチン
	// 引数にパス名を受け取る
	void open(String pathName) {/* ロジックは省略 */}
	
	// ファイルをクローズするサブルーチン
	void close() {/* ロジックは省略 */}
	
	//ファイルから1文字を読み込むサブルーチン
	char read() {/* ロジックは省略 */}
}

隠す:private/public

  • クラスやメソッド、インスタンス変数の宣言部にprivate/publicを指定することで、アクセスをクラス内部だけに限定したり、他のアプリケーションからも呼び出すなどを柔軟に設定できる

Java

// インスタンス変数を隠す
// クラスとメソッドを公開する
public class TextFileReader {
	// アクセス中のファイル番号を格納するグローバル変数
	private int fileNum;
	
	// ファイルをオープンするサブルーチン
	// 引数にパス名を受け取る
	public void open(String pathName) {/* ロジックは省略 */}
	
	// ファイルをクローズするサブルーチン
	public void close() {/* ロジックは省略 */}
	
	//ファイルから1文字を読み込むサブルーチン
	public char read() {/* ロジックは省略 */}
}

たくさん作る

  • インスタンス:クラスで定義したインスタンス変数が確保されるメモリ領域

  • 従来のサブルーチン呼び出しの場合は、単に呼び出すサブルーチン名を指定するだけだった。しかし、OOPの場合は、、、、

続きは、こちらで記載しています。


この記事が参加している募集

仕事について話そう

よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費に使わせていただきます!