オブジェクト指向の難しいところ
習えばわかるんですが、実際に作るとなるとこれが違うんです。
プログラムをしているとオブジェクト指向ということばをよく聞きます。
何かというと、プログラミングをオブジェクト指向という概念で組んでいくのですが、これと反対のプログラミングを手続き型(関数型)といいます。よくプログラムの世界では手続き型はC言語、オブジェクト指向が入ってくるとJava言語といったようなことがあります。実際に私もオブジェクト指向を勉強中の身ですが、いざ自分でプログラミングしろとなると、わからなくなってしまいます。
じゃあオブジェクト指向とは何なのかという話です。
よく言われるのは、オブジェクト(もの)として考えることでプログラミングすると言われます。
これじゃあよくわかりません。
実は、現実世界をモデル化するプログラミング手法のことをオブジェクト指向といいます。
手続き型プログラミングは、言ってみれば、道具箱からドライバやスパナを取り出して作業するといった形のことです。つまり、説明書に書いてあるとおりに作業するといった感じです。
オブジェクト指向は、クラスと呼ばれる設計図があり、それに従ってまずオブジェクト(もの)を作ります。たとえばそれが車の設計図だったとしましょう。設計図どおりに作れば、自動車が完成されます。そうやってできたものをインスタンス(実体)と呼びます。
今度はその自動車を運転します。
自動車はキーを回してエンジンををスタートさせ、アクセルを踏んで速度を出し、ハンドルで方向を決めます。これらはその自動車が、何キロで、どの方向に動いているかを示す状態といえます。オブジェクト指向では、これらの状態をオブジェクト、すなわちインスタンスに持たせることによってさまざまな実行を可能とします。
ここでハンドルやアクセルといったものは値をセットするのでセッター(setter)、速度計やタコメーターなどは値を取得して表示しますので、ゲッター(getter)と呼ばれるものを使用します。
突き詰めればきりがないですが、これがオブジェクト指向の導入部分です。
問題はこれらを設計するときです。オブジェクト指向には「自動車の設計図から自動車も作れるし、パトカーも作れる」という便利な機能があります。それを派生や継承といいますが、これが入ってきたと単に、どこをどうやってクラス化すればいいのかと悩まされます。
実際に今私がそれに直面していますが、こればっかりは学校の授業では教えてもらえなさそうです。そういうカリキュラムじゃないから。確かに授業の内容の応用であると思いますが、何をどうやってクラス化していくのかはまったくもって、今の私には未知であります。
何かというと、プログラミングをオブジェクト指向という概念で組んでいくのですが、これと反対のプログラミングを手続き型(関数型)といいます。よくプログラムの世界では手続き型はC言語、オブジェクト指向が入ってくるとJava言語といったようなことがあります。実際に私もオブジェクト指向を勉強中の身ですが、いざ自分でプログラミングしろとなると、わからなくなってしまいます。
じゃあオブジェクト指向とは何なのかという話です。
よく言われるのは、オブジェクト(もの)として考えることでプログラミングすると言われます。
これじゃあよくわかりません。
実は、現実世界をモデル化するプログラミング手法のことをオブジェクト指向といいます。
手続き型プログラミングは、言ってみれば、道具箱からドライバやスパナを取り出して作業するといった形のことです。つまり、説明書に書いてあるとおりに作業するといった感じです。
オブジェクト指向は、クラスと呼ばれる設計図があり、それに従ってまずオブジェクト(もの)を作ります。たとえばそれが車の設計図だったとしましょう。設計図どおりに作れば、自動車が完成されます。そうやってできたものをインスタンス(実体)と呼びます。
今度はその自動車を運転します。
自動車はキーを回してエンジンををスタートさせ、アクセルを踏んで速度を出し、ハンドルで方向を決めます。これらはその自動車が、何キロで、どの方向に動いているかを示す状態といえます。オブジェクト指向では、これらの状態をオブジェクト、すなわちインスタンスに持たせることによってさまざまな実行を可能とします。
ここでハンドルやアクセルといったものは値をセットするのでセッター(setter)、速度計やタコメーターなどは値を取得して表示しますので、ゲッター(getter)と呼ばれるものを使用します。
突き詰めればきりがないですが、これがオブジェクト指向の導入部分です。
問題はこれらを設計するときです。オブジェクト指向には「自動車の設計図から自動車も作れるし、パトカーも作れる」という便利な機能があります。それを派生や継承といいますが、これが入ってきたと単に、どこをどうやってクラス化すればいいのかと悩まされます。
実際に今私がそれに直面していますが、こればっかりは学校の授業では教えてもらえなさそうです。そういうカリキュラムじゃないから。確かに授業の内容の応用であると思いますが、何をどうやってクラス化していくのかはまったくもって、今の私には未知であります。
コメント