@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

オブジェクト指向の理解度を測るためには?

投稿者投稿内容
はゆる
ぬし
会議室デビュー日: 2004/02/16
投稿数: 1008
お住まい・勤務地: 首都圏をウロウロと
投稿日時: 2004-06-11 03:10
寝てしまおうかと思いましたが、やはり気になったので少しだけ…。
(非難を浴びる覚悟で…)

私は 「オブジェクト指向」 の本質は 「実装」、つまりプログラミングにあるのだと学びましたし、そう思ってきました。
また、私が Java に携わっていたころは、たとえば UML なんて聞いたこともありませんでした(笑 ←5年半前かな?世間に疎かっただけかもしれませんが…)。UML については雑誌などで多少見聞きする程度ですが、「見えないモノを多角的に ”表現” する技術」 だと思っています。

「分かりやすさ」 という点では、プログラミングも UML も一緒でしょうが、それらで語られている 「オブジェクト指向」 は、似ていますが同じではない気がするんです。
そこを一括りにして 「オブジェクト指向」 と言ってしまうから混乱する気がするのですが…
# なんかうまく言えないのですが…


私が Java をやっていた頃に買った本に書いてあること: ←引っぱり出してきました
<オブジェクト指向手法>
目的別に分散させた独立固体(すなわちオブジェクト)を作り、各オブジェクト間での相互協力によって問題を解決する手法。

…でも、これだけだと 「へぇ〜」 で終わってしまいます(苦笑)。
# ちなみに、私が一番最初に心ときめいたのはココです。VIVA 地方自治!
mso さんは 「人材を育てなければならない」 のですよね?
「理解度を測るには?」 だけでなく 「どういうことが ”できる(分かる)” ようになってほしいのか?」 から攻めていくのも手かなぁと思った次第です。
「オブジェクト指向」 と一口に言っても、範囲が広すぎるような気がします。

# ちょびっと Java やっただけの人間なのに、偉そうに見えたらすいません…
# 大変なお仕事だから、参考になればと思って…
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-06-11 11:47
引用:

るぱんさんの書き込み (2004-06-10 18:27) より:



はにまるの書き込み (2004-06-10 18:08) で言っている生産性は
「プログラミング」自体に対する生産性で「システム開発」の生産性とは別です。
噛み砕けば、ソース量に対し「定義するオブジェクト」の数を増やせば生産性が上がる訳では
無い事を話しています。

引用:

きちんと切り分けて、餅は餅屋にやらせるとすれば、
生産性は劇的に上がると思います。


その「生産性が劇的に上がる」切分け方の「存在」を御存知なのですか?
もし存在するならば、「オブジェクト指向」なんて目でありません。
tak3
ベテラン
会議室デビュー日: 2004/04/15
投稿数: 80
お住まい・勤務地: 菜の花・銀杏
投稿日時: 2004-06-11 13:09
反則的?なツッコミです。

引用:

# 例:
# 「性別」の情報が存在し、その内訳内容として「男」と「女」を考える場合
# 「男」自体、「女」自体は、オブジェクトに成り得ます。しかし実際には、
# これをオブジェクトでは無く、「1」や「2」の区分値で表現管理します。
# これはシステム上、男や女をオブジェクト定義して管理する意味が無く、
# 値レベルの再利用は有り得無い為です。
# こう記述するとDBの正規化と話が似ていますね。



値をオブジェクトとして定義することがあり得ます。
「1」「2」などの区分で定義した場合、性別情報に「3」とか「4」とか想定外の数値を設定することが可能です。

コーディング的には
コード:
太郎君.性別 = 定数クラス.性別_男(内部的には数値の1)


とコーディングしてほしいのに
コード:
太郎君.性別 = 1
太郎君.性別 = 定数クラス.色を表す定数(数値)
太郎君.性別 = 99999


などコーディングしてしまい実行、またはソースレビューするまで気づかないバグがあります。

性別を型として定義し性別情報には「数値」でなく「性別オブジェクト」を設定する仕様にすることでコンパイル時にエラーを出すことで防げます。
(詳しくは、書籍:リファクタリング)

#脱線
#リファクタリングはリファクタリングの手順よりも
#設計そのものについての記述のほうが得るものが多いと思いますので
#未読の方は、是非読んでみては?

開発規模が大きくなるほど、どんなコードを書くプログラマーがでてくるのか、わからないので
なるべく不自由なコーディングをさせるのが品質を上げるコツだと考えます。
フレームワークが流行ってるのもそれが要因の1つですよね?

再利用で生産性上げるというが最も効果が見えやすいので、よく言われますが
バグが出難い設計をすることで、デバッグ工程を減らし結果的に生産性をあげるという考え方もあります。

オブジェクト指向と関係ない話になってしまいました・・・
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-06-11 13:38
Mickyでございます。
いろいろと考えてみました…

自販機の様に、現実世界でなんかうまい例はないものか?と…
よく、オブジェクト指向の本なんかに出てくるのは、
「乗り物」系ですよね?(^^;
「乗り物」から自動車やらを継承するみたいなヤツ…


自分としては、どうしても、継承を理解しているか?あたりは
確認できた方がいいかな?と思ったのでこの辺りも含んだ
なにかいい例えを探したんですが、どうにもこうにも
物理的な現実世界での例はなかなかうまいのがないんですよ。

そこで、ここは一気にアプリの世界に行ってしまってのはどうでしょうか?

考えたのが、図形エディタです。
問題自体を一般的な設問から、アプリ寄り、オブジェクト指向寄りにしてみました。

○簡易図形エディタの設計をする事になりました。
描画できる図形は「四角形」「円」「星」「三角形」の4種類で
描画する位置を指定できるものとします。大きさの変更はできません。
これをUMLを使って設計してください。
以下のクラスとメソッドが必要です。

「図形生成クラス」
メソッド−DrawShape( 図形の種類 ):指定された図形を生成し描画する

「各図形クラス」(4種類の図形それぞれを表すクラス)
メソッド−Draw( 座標 X, 座標 y):描画する

ユーザーインターフェースや図形を描画する方法については考えません
DrawShapeメソッドが最初に呼ばれ、選択された図形クラスのDrawメソッドが
呼ばれる所までの流れを考えてください。



見所は…
「まずクラスとしての認識ができているか?」
「図形クラスがメンバーとして、サイズを持っているか?」
これで基本をクリアしてるかわかるように思います。
最低でも、五つのクラスができる事になると思います。

「各図形クラスの基底クラスを作ることが出来るか?」
これで継承を使えるかわかりますよね?

「基底クラスにabstructが指定してある」
ここまでこだわっていれば、ポリモルフィズムもわかっていそうです。

さらに、プログラムも書いてもらえるなら、
生成した各図形オブジェクトを、基底クラスの変数に入れて、
基底クラスの変数からDrawメソッドを起動するようになっていれば
ポリモルフィズムは判っていると判断できますよね。

最後に、この問題について、一言コメントを書いてもらうのはどうでしょう?
「何がわからなかったのか?」等を書いてもらうと更に理解度がわかるような
気がします。

ただ、自分で考えてたので第三者から見てわかりにくいかも?と言う
不安は残ります。みなさんの感想、意見が欲しい所ですね(^^;

今回の設問的にはNGだったとしても、自分も同じような事を
しなければならなくなった時(対象が一人とかでしょうが…)
使えるかなぁ??とも思ったものですから…
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-06-11 15:35
引用:

tak3さんの書き込み (2004-06-11 13:09) より:


私とtak3さんの言っている意味は一緒と思います。

引用:

値をオブジェクトとして定義することがあり得ます。


の同一意見が↓これです。
# 「男」自体、「女」自体は、オブジェクトに成り得ます。

ただ違う点として、
「値をオブジェクトとして定義」では無く、私は逆で
「オブジェクトを値として定義」と考えていました。

実務で考えれば、どちらかが不正解と言う訳で無く、
両方の流れが可能である事を知っておくと便利ですね。


引用:

Mickyさんの書き込み (2004-06-11 13:38) より:


簡単なのが良いと思います。ただ気になる点としては経過を指摘していない事です。

「四角形」「円」「星」「三角形」4つのクラスと抽象化した
「図形」クラスが継承で結ばれると直ぐに想像出来ると思うのですが

問題なのは「直ぐに想像」してしまう事と考えます。

1.「4つの図をクラス(オブジェクト)として捉えた事」を自覚する事が大切です。
2.「4つのオブジェクトが同種と捉えた事」を自覚する事が大切です。
3.「4つの同種から似た点と異なる点を捉えた事」を自覚する事が大切です。
4.「3番の結果から、親のクラスを捉えた事」を自覚する事が大切です。

私は、この自覚症状の無い連想/想像/発想がオブジェクト指向の天敵と
思うのですが、如何でしょうか?

「オブジェクト指向」自体を考えれば、どれをオブジェクトして捉えたかでは無く、
どうして、そう思ったのか?が重要と思います。つまり過程を訓練させる事が
大切だと思うのです。

また、その後「図って単なる点の集まりじゃね〜かよ!」と気付けば、
それからまた話が広がると思います。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-06-11 15:57
引用:

はにまるさんの書き込み (2004-06-11 15:35) より:
引用:

tak3さんの書き込み (2004-06-11 13:09) より:


私とtak3さんの言っている意味は一緒と思います。

引用:

値をオブジェクトとして定義することがあり得ます。


の同一意見が↓これです。
# 「男」自体、「女」自体は、オブジェクトに成り得ます。

ただ違う点として、
「値をオブジェクトとして定義」では無く、私は逆で
「オブジェクトを値として定義」と考えていました。

実務で考えれば、どちらかが不正解と言う訳で無く、
両方の流れが可能である事を知っておくと便利ですね。




NAL-6295です。

傍観者から見ると、tak3さんとはにまるさんの言ってる事、全然違うと思うのですが。

tak3さんは、ステータスを値で持つと、不正な値を代入しても、コンパイルエラーにならないからバグになりやすく危険だけど、ステータスをオブジェクト(型)で持つと、存在しない型はコンパイルエラーになるから、安全ですよって言ってると思うのですが・・・。
どっちでも実現できるけど、こっちのほうが安全ですよと・・・。

#ちなみに、書籍:リファクタリングは2年前くらいに読みましたが、かなり為になりました。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-06-11 16:15
引用:

NAL-6295さんの書き込み (2004-06-11 15:57) より:


ご指摘ありがとうございます。貴重な御意見を見逃す所でした。

それで、「反則的?なツッコミです。」だったんですね。
どちらにしろ、後半の文書をキチンと読んでいなかった事に変りはありませんが...

こう考えるとオブジェクトの「値(区分/コード)化」とは、
受けて依存(処理プログラム)になる為、バグの発生タイミングである事を
認識しておかないと行けないですね。

で気になるその「リファクタリング」とはこの事でしょうか?
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-06-11 17:29
Mickyでございます。

引用:

はにまるさんの書き込み (2004-06-11 15:35) より:

問題なのは「直ぐに想像」してしまう事と考えます。
「オブジェクト指向」自体を考えれば、どれをオブジェクトして捉えたかでは無く、
どうして、そう思ったのか?が重要と思います。つまり過程を訓練させる事が
大切だと思うのです。




そうですね。前にも書きましたが「オブジェクト指向」ってのは
考え方だと思っているので、思考の過程ってのは大事だと思います。

ただ、講習とかだとそこが大事な部分ではあると思うのですが、
サブジェクトどおり「オブジェクト指向の理解度を測るためには? 」
って事で、今回はレベルを知る設問という形で考えてみました。

なので、容易に想像できる人はそれなりのレベルだし、
それさえも想像できない人は又違ったレベルに分けられるでしょうし、
「なんだこんな問題…ふふん…」っと、もちょっと上の事を始める人は
その痕跡を残すでしょうし、レベルを知るにはいいかな?
と思った次第であります。(^^;

スキルアップ/キャリアアップ(JOB@IT)