Raspberry Pi & Python 開発ブログ ☆彡

Raspberry PiとPythonの基本的な使い方をわかりやすく解説。初心者、入門者必見!!

オブジェクト指向の勉強

今日はプログラミング技術のオブジェクト指向について記載しようと思います。RaspberryPiをプログラミングの教材として使用している方もいるのではないでしょうか。この記事がプログラミングやオブジェクト指向勉強中という方の助けになれば幸いです。

本を読んでもオブジェクト指向は理解しづらい

私がオブジェクト指向の勉強を始めた時、本を読んでもなかなか理解ができませんでした。どの本を読んでも、3大要素のカプセル化、継承、多様性についての説明と構文が書いてあるのですが、なんとなく消化不良でした。

 

なぜ、消化不良かと言えば、構文や書き方が難しいというより、カプセル化、継承、多様性の必要性がイメージできなかったからだと思います。手段や方法ではなく、まずなぜそれが必要か?という説明がないと人間はごくりと飲み込めないのだと思います。

なぜオブジェクト指向が必要か?

これは私の個人的な考え方ですが、オブジェクト指向はコードを整理して、適切に管理するためにある、と思っています。

 

ソフトウェアは規模が大きくなるにつれ、複雑になり管理が難しくなります。これにより予期せぬバグが発生してしまいます。少し前までは構造化手法で対応できていましたが、近年コード量が増大し構造化手法では管理ができなくなり、オブジェクト指向で開発するようになったのだと思います。

 

 カブセル化

ソフトウェアの規模が大きくなると、いつの間にか変数や関数が複雑に絡み合って、変数がいつ書き換わるのか、どこからどのタイミングで関数がコールされるのかわからなくなります。特に複数人で開発していると変数や関数が予期せぬ使われ方をしており、しまった...と思う時が多々あります。

 

これを解決するための手法がカプセル化です。機能やオブジェクトごとに変数や関数をまとめて(クラス)、他の関数に依存しないようする、また依存関係を明確にします。機能やオブジェクトごとにまとめてクラスを作成するので、管理しやすくなります。また、そのクラスだけ切り出して開発することができるので分業もしやすくなります。

 継承

本を読むと親クラスの機能を引き継いで...と書いてあります。これもコードを複雑にしないための手法です。

 

関数Aがあるとします、仕様追加で関数Aに少しだけ機能を追加したいと思ったとき、関数Aをいじり、IF文等を駆使して、機能を追加することがあると思いますが、だんだんコードが肥大化し、最終的には他人では解読不能なコードになってしまいます。

これを回避するのが継承という機能です。既存のコードに少しだけ機能を追加したい、少しだけ機能を置き換えたい時に、継承という機能が力を発揮します。

継承を使えば、元のコードも残せますし、機能追加したコードも管理がしやすいです。

 

多様性

多様性は本当に本を読んだだけでは理解できませんね。そもそも多様性という日本語が理解しずらい。。

フラグとIF文やCASE文を使い、この時はこの処理、この時はこの処理とコードをつらつらと書くときがありますが、複雑なIF文、CASE文はコードが読みにくく、嫌なものです。

多様性の機能を使えば、多様な機能からひとつを選択して、処理を実行するコードをすっきり書くことができます。IF文やCASE文を無くしたり、すっきりと書くことができ、またクラスごとに処理を分けれるためコードもわかりやすく書くことができます。

 

まとめ

これまで説明したように、オブジェクト使用はコードをすっきりとわかりやすく管理するための手法です。規模が小さいうちは必要性を感じないかもしれませんが、規模が大きくなるとオブジェクト指向は便利だと感じるはずです。