「開発現場指向でのオブジェクト指向を考える」というタイトルにしましたが、私自身は「オブジェクト指向」に多少うんざりしています。そういった私のような開発現場で実際にプログラム開発を行っている立場でこういった考え方もあるのではという内容について書きます。
オブジェクト指向でうんざりしている
なぜうんざりしているかというと、いろいろとあると思いますが、例えばプログラム未経験の方や若手の方がよく「オブジェクト指向が分からないからだめだ」みたいなことを言います。そもそも「オブジェクト指向」はパラダイムシフトとしてより良いシステム開発のために普及したはずなのに「分からない」となるのはどうかと思います。
大前提ですが、オブジェクト指向自体を否定するつもりは一切ありません。今現在私自身は毎日のようにC#でのプログラム開発を行っていて実際に稼働しています。それだけでもオブジェクト指向の恩恵を受けています。しかしながらオブジェクト指向に関しての学術的な理論、正解を全て理解している訳でもないです。
とにかく以下、難しいと思ってしまう内容です。
「オブジェクト」とは何だ
現実世界との関係とはどいうことだ
オブジェクト指向で出てくる訳の分からん単語は何だ
リレーショナルデータベースとの関係はどうなるのだ
UMLの書き方が分からん
・・・などなど。
もちろんこれらに対して学術的な正解と言えるものがあると思いますが、それはそれとして開発実務の点から以下のように学習とか実習とか出来ないかなと思います。
実際にどう進めるか
構造化プログラミングから
このサイトで何回か書いていますが、オブジェクト指向以前は構造化プログラミング(設計も含めて)が主流だったのでまずはここから始める。実際にプログラムを書いて、ブロック化や階層化の設計もやってみる。
パラダイムシフトとしてどのようにシフトしたか考えるためにも構造化プログラミングから始めることは大事かと思います。
オブジェクトとは何かとか現実世界とか考えない
真偽は知らないですが「オブジェクト指向」という命名が失敗だったと創設者の方が言ったという説を読んだことがあります。何だよそれはと言いたくなります。
そうすると「オブジェクトとは何か」とかあまり考えないで、開発実務的にはシステムやプログラムで扱う必要があり、実際にクラスとして定義出来る範囲の対象物(もの)ぐらいでもいいのかなと思います。
よくオブジェクト指向の説明で出てくる動物のたとえは分かりやすいようですけど、動物としての「命」は少なくとも今はプログラムで作れないので単純なクラス分けぐらいに思えばいいと思います。現実世界をコンピュータの世界にそのまま移行するとか考えないほうがいいでしょう。
プログラムの再利用やフレームワークの利点から考える
オブジェクト指向で出てくる概念(訳が分からんとなる単語)ですが、概念から入るのではなくて「プログラムの再利用」や「フレームワーク」の利点や利用方法を実際のプログラムで考えるところから入って、その有効な方法がオブジェクト指向の概念となっているという進め方もあるかなと思います。
リレーショナルデータベースは全く別と考える
リレーショナルデータベースはオブジェクト指向とは別の概念で成り立っています。そのためオブジェクト指向とはミスマッチとなります。これをインピーダンス・ミスマッチと呼んでいるようです。(※インピーダンスは元々は電気工学の分野の用語です。)
つまり、リレーショナルデータベースに取り組んでいる時はリレーショナルデータベースだけのことを考えればいいです。しっかりとテーブル設計(正規化)やSQL文関連を覚えることに集中すればいいと思います。
その上でこのミスマッチを解消するためのO/Rマッピングの設計を考えればいいと思います。実際にはO/Rマッピングの方法もだいだい決まっていると思います。
UMLの書き方
私自身も真面目に書いたことがないので何とも言えません。つまり、それ程重要でもないかなと思います。
それでも納品物等で必要となる場合もあるのでクラス図ぐらいから書いてみればいいと思います。また開発環境で実際のクラスからクラス図を生成出来る場合もあるのでそれを利用してもいいと思います。
関連リンク
以下関連リンクです。(※リンク切れになった際はご了承下さい。)
15分でわかる かんたんオブジェクト指向
新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡
構造化プログラミング的オブジェクト指向のすすめ
オブジェクト指向と10年戦ってわかったこと
オブジェクト指向は禁止するべき
オブジェクト指向プログラミングの教え方?
オブジェクト指向とSQLの親和性の悪さについて…は既に語りつくされていた
[雑記] O/R インピーダンスミスマッチ
オブジェクト指向の他にも考える必要があること
ほとんどの利用者はオブジェクト指向など知らない
開発者向けではない普通のシステムやアプリの利用者を考えるとオブジェクト指向を知っている人の割合の方が少ないと思います。また知っていたとしてそれがオブジェクト指向で出来ているとかどうかは関係ないでしょう。
つまり、利用者にとってはそのシステムやアプリが有益かどうかだけです。いや、開発側にとってはオブジェクト指向が出来ていれば、バージョンアップ、保守などに大きなメリットがあるとなるでしょうが、利用されないものにそのような必要はないです。
トレンドも変化する
オブジェクト指向が普及して注目された頃の記憶では、学生時代にオブジェクト指向とJavaを勉強したという若手は「天下を取った」ような様子でした。最近ではそれだけでは「天下は取れない」です。
昨今の注目キーワードはもっと多岐に渡っています。それはいい意味で考えればいろいろな仕事があり機会があるということです。
その中でトレンドはともかくとして何をしたいかしたくないか自分自身で考えればいいと思います。
今回は以上です。