オブジェクト指向 ・ Chapter 1

オブジェクト指向とは何か

記事 ・ 冒頭を無料公開中

この講座のテーマはオブジェクト指向(Object-Oriented Programming、略してOOP)です。プログラミングを学んでいると必ず出会う言葉です。それなのに、「で、結局何なの?」に答えられる人は意外と少ない。

この章では、コードを書きながらオブジェクト指向が解決しようとした困りごとを先に体験します。解決策だけ暗記しても使えるようにならないからです。困りごとが分かれば、オブジェクト指向は「暗記する専門用語」から「なるほど、それは欲しい」に変わります。

この講座のコードはすべてTypeScriptです。実行ブロックで予想→実行しながら進んでください。

出発点: オブジェクトと関数で書いてみる

銀行口座を管理するプログラムを書くとします。自然に書くとこうなります。

▶︎実行してみよう

実行すると 1500、1300 と表示されます。ちゃんと動いていますし、この規模なら何の問題もありません。データ(オブジェクト)と処理(関数)を別々に作って、組み合わせて使う。 今まで書いてきたプログラムは、だいたいこの形だったはずです。

では、このプログラムが育っていくとどうなるか。困りごとを2つ、実際に起こしてみます。

困りごと1: データを壊す操作を、誰も止められない

withdraw には本来「残高が足りないなら引き出せない」というルールが要ります。関数に if を足せば済む話に見えますが、そもそも、関数を通らずにデータを直接いじれてしまうのです。次のコードで何が表示されるか、予想してから実行してください。

-999999。残高がマイナス100万円という、現実にはありえない状態のできあがりです。エラーは一切出ません。

「そんな代入、わざと書かなければいいだけでは?」と思うかもしれません。一人で書く100行のコードならその通りです。しかし実務のコードは数万行あり、チームの誰かが半年後に触ります。「balance を直接書き換えてはいけない。必ず "withdraw" を通す」というルールは、コードのどこにも書かれていない暗黙の約束でしかありません。暗黙の約束は、規模が大きくなると必ず破られます。

欲しいのは「気をつける」ではなく、不正な操作をそもそもできなくする仕組みです。

困りごと2: データと処理の対応が、どこにも書かれていない

プログラムが育つと、オブジェクトも関数も増えます。口座のほかに「商品」と「ユーザー」が増えた世界を想像してください。

このチャプターの続きは受講生限定です

本文の残り、図解・実行できるコードブロック・演習はプラン加入後に読めます。

料金プランを見る