952 :
名前は開発中のものです。:03/10/25 02:08 ID:gxGaLgtV
>>948 確認。
「オブジェクト志向とは?」に対する俺の答えとしては、
処理の単位をモノ(特に人)に例えて、イメージを掴み易くする考え方。
で合ってるかな?
953 :
名前は開発中のものです。:03/10/25 02:20 ID:J6bPJp+i
>>952 そうだね。俺も同意。
本当にただそれだけのはずなんだけど
なんか難しく話す人がいつもいるよね。
厳密にOOにしたがっているかどうかはともかく、
ゲーム作ってると自然にプログラムがOO的になってくよね。
(というか、OO的にしか作りようが無いというか…)
955 :
名前は開発中のものです。:03/10/25 09:33 ID:tFQvBzvJ
(ソースが読みづらくて)驚くぞー
まとめると、C++は仕様固まってないし複雑極まりないしそんなもんのコンパイラなんて作りようが無い。
そんなのを技術基盤にすると土台からソフトが壊れる。ってなことですな。
まぁ、OOだからってC++で作らなければいけないわけではないsage
>>952-953 OOの「考え方」を簡潔に言葉にすれば、そんなとこに落ち着くだろうね。
そのへんの考え方自体に異論がある人はそんなにはいないと思うよ。
ただ、抽象的に言うとそうなんだけど、じゃあ実際にゲームをプログラムするにあたって、
その考え方をどう当てはめるかというところで、色んな考え方が出てきてしまって紛糾
するんだと思う。
それと、ただその言葉だけを教条的に受け止めてしまうと、「じゃあOOでない組み方の
処理単位は人やモノ単位ではないの?」という話も出てきてしまう。
そのへんの細かい捉え方のズレが、混乱を生んでる気がするよ。
>>959 >それと、ただその言葉だけを教条的に受け止めてしまうと、「じゃあOOでない組み方の
>処理単位は人やモノ単位ではないの?」という話も出てきてしまう。
普通にプログラムを組んでれば、OO的な技法も自然に使えるようになるはずだし、普通に使ってる
はずだ。たとえOOをまったく知らなかったとしてもね(ゲームはそうなりやすい分野だな)。
その行為に「名前を付け」、それにかかわる技法(抽象化、カプセル化、継承、多態性など)をある程度
「形式化」したのがオブジェクト指向。
混乱してるのは、OOを仰々しく考えてる人だけだと思うな。
(OO=C++orJavaとかいうアホもいるしな。)
ソフトウェア「開発技法」全般にいえることだけど、それらは特別なことを言ってるわけじゃなくて、
分かってる人には分かってることを明示的に定義したもの。明示的にすることの利点は分かるよな?
>>960 でもまあ、
>>952の説明でわからない人に何をいっても無駄だけどね。
明示的にしてあっても、技法を覚えても(色々苦労してる人がいるけどこれは無駄かな〜)
まず、
>>952に書いてあることを理解してはじめて役に立つもんだからね。
技術っていう視点でみると意外と珍しい分野だと思うよ。
>まず、
>>952に書いてあることを理解してはじめて役に立つもんだからね。
>技術っていう視点でみると意外と珍しい分野だと思うよ。
いや、少しプログラミングしてれば
>>952みたいなことは、明示的ではないにせよわかってこないかなぁ?
データ指向(カプセル化(と抽象化)のみ、つまり
>>952)をプログラムの一部で利用するくらいは普通だよね?
fopen(), fread(), fwrite(), fclose()シリーズはOOなんだよって言われて、あぁ!と言えないひとは適性ないかも。
963 :
名前は開発中のものです。:03/10/26 11:31 ID:u8Gb4htY
964 :
名前は開発中のものです。:03/10/26 17:57 ID:B+12Xvtr
>>962 「クラスって構造体に関数がついたようなもんなんだね!」
的な次元までならまぁだれでも分かると思う。
その先があるのよ。
965 :
sage:03/10/26 19:28 ID:kUfEcyYU
>962
fopen(), fread(), fwrite(), fclose()では、何(オブジェクト)に対して言っているのか
不明だから、関数では?、こそまでOOを省略するのもどうかと。
aaa.fopen()ならいいんだけど、関数の集合とOOを同じく考えるのは、行き過ぎかと。
FILE* を引数で必ず指定するでしょ。
FILE*関係はオブジェクト指向の概念のほとんどを含んでいるよ。
ユーザーには直接見えないけど、カンのいい奴はすぐわかるはず。
>その先があるのよ。
そしてライブラリの構成に注意を払うだけの力があるなら、
オブジェクト指向を本格的にやる前に「その先」に気づくはずなんだ。
だから、そういう面に関しては、OOを採用するか否かは、OO開発において
UMLを採用するか否かという議論に似てる。
>>965 >aaa.fopen()ならいいんだけど、関数の集合とOOを同じく考えるのは、行き過ぎかと。
これは「C++ or Java = オブジェクト指向」ってやつの典型だね。
>967
>カンのいい奴はすぐわかるはず。
カンがいくないから悩んでるのでは?
そういう奴は適性が無いんだよ。
あきらめるか、必死に勉強するなり、経験をつむなりしれ。
>>960 そうそう、例えばC言語+古いやり方、という感じでプログラムを組んでいる人も、
細かく見ればどこかしらはOOのやり方を取り込んでいるんだよね。下で、FILE構造体
の話をしている人がいるけど、そういう標準ライブラリ自体が提供しているのものもあれば、
組み方としてそうなってしまうところもある。
ただ、そういう細かい話をしはじめると、結局何も言えなくなっちゃうんだよね。
だから、オブジェクト志向の話をする時、「どんなスタイルでもオブジェクトはある」なんて
のは当たり前の話であって、もっと大きな範囲の見方でのOOについて話をしないと、
結局元の位置に戻っちゃう気がするな。
>ただ、そういう細かい話をしはじめると、結局何も言えなくなっちゃうんだよね。
なにが言いたいのかしらんが、いえないんなら言う必要が無いんじゃない?
973 :
sage:03/10/26 23:32 ID:kUfEcyYU
>>966-968 前にあるか、後ろにあるかだけで、同じOOだと、論ずるのは乱暴でしょう
OOを表現するためには、納得できる書式がいると思います。
私にはfopen()の括弧の中にあるのはパラメータです。
Func(a,b,c,d)、の場合a-dのどれが対象のオブジェクトだと言えますか?
仮に、Func(a#b,c,d)でaがオブジェクトで#が識別子ならOKです。
うお、sageが間違ってる・・・ オブジェクトとパラメータの谷間に落ちて(逝ってくる
>973
私の理解では
OOは(プログラムに限らず)考え方の話。(OO=Object Oriented)
OOPはプログラムを書くときの手法の話。(OOP=Object Oriented Programing)
OOPLはプログラミング言語の中のOOしやすいもの。(OOPL=Object Oriented Programing Language)
CでのFunc(a,b,c,d)とC++でのa.func(b,c,d)とが等価になるような規約の下では
非OOPLでもOOPが出来そうだと思いませんか?
(まあ、私は実践したことがなかったりするのだけど)
>>973 ほら、実装と設計をごっちゃにしてる。
表現形式(やメソッドを1箇所にまとめて書くこと)は実装での要件でしょ?
あぁ、実装に関してもCommon Lispのオブジェクト指向拡張であるCLOSみたいな
書き方も有るので、調べてみると良い。
オブジェクト指向を表記法かなんかだと勘違いしている痛い
>>973がいるのは
このヌレですか?
OOA、OODを知っている人
OOP、OOPLしか知らない人
両者の溝は大きいということが分かりましたか?
OOA、OOD、OOP、OOPLって分けるのもどうかなと思うぞ。
そしたらXPとかのAgileな方法論って何ぞや?ってことになるし。
まぁ最近はやりのAgileなんちゃらは、基礎がちゃんとできた人間が
実践するもんだと激しく実感シマスタ まる
でも、OOP、OOPLしか知らない人(そこから入って止まっている人)が、いきなりAgileいくのはまずいだろう。
TestingFrameworkだけ取り入れましたとか言うならともかく。
982 :
951:03/10/29 02:11 ID:xRwANdUo
見事にスルーされてしまった。悲しい。後段はともかく、前段にはツッコミほしかったんだけどな。
誰かかまってかまって
そろそろ次スレの用意をしたほうがよいかもね。
よろしく
>>990 >>982 >>951 ゲームで「分析過程の出る幕があまり無い」のは、単に事前に
分析できないだけでしょう。
特定の業務に特化したソフト(伝票処理とか)ですら、良い物に
しようと思ったら分析過程は困難だというのに、ゲームはそもそも
何が良い物なのか指針(速度とか定量化できるもの)がまったくない。
なもんだから、迅速なプロトタイピングのために、柔軟なフレームワークを
作り上げることに注力すべきで、そのためにはOOは非常に有効かと。
ってここまで書いて自分が951とまったく同じことを言っていることに気が付いた。
柔軟なフレームワーク、つまり良く出来たGameObjectとかEntityとか呼ばれる
仕組みは「すでに十分抽象化されて」いて、分析も何も、って感じな訳だけど、
このことを言っていたのかな?
要するに
「ゲーム(のプログラム)の分析過程」 = 「ゲーム(という商品)のデザインを行う過程」
だね。視点を変えれば、工程の呼び方も変わるということで。
OOでやるかやらないか、というのは有るけど、さぁ作ろうとなったときには、
分析が済んでいるという考え方は、まぁ、普通か。
んで、フレームワークのほうは、プログラムの設計(デザイン)の段階だと
思うんだが?設計はフレームワークを作る/作らないに関わらず、常に
出る幕は有るんじゃないかな。
>>984 ああ、分析=用件分析、だと思ってた。
もちろん設計は必要だと思いまつ
>>983-985 サンクス!
> 「ゲーム(のプログラム)の分析過程」 = 「ゲーム(という商品)のデザインを行う過程」
> フレームワークのほうは、プログラムの設計(デザイン)の段階
> 分析=用件分析、だと思ってた。
私は「分析」という工程を、「要求仕様からオブジェクトを導出する作業」と想定して
話してたんだけど、それは「設計」と言うべきだった。申し訳ない。
> 設計はフレームワークを作る/作らないに関わらず、常に出る幕は有るんじゃないかな。
> もちろん設計は必要だと思いまつ
設計のうち、「要求仕様からオブジェクトを導出する作業」に関しては、あまり必要が
無いんじゃないかなって思って書いたのが
>>951の前段。
だって「駒」にせよ「盤面」にせよ、すでに十分抽象的なんだもんそのままモデリングすりゃ
ええやんってオモタんだけど、この点についての是非が聞きたかったのね。
#「駒と盤面」というレベルじゃ済まないような複雑なゲームでは、設計にもそれなりの工数が
#必要になると思うけど、そこで
>>983のような「柔軟なフレームワーク」を作っておくと良いかも、
#と思って書いたのが
>>951の後段の部分。表現は違うかもしれないけど、コンセプトは
>>983と同じ。
>ままモデリングすりゃ
>ええやんってオモタ
いや、それが設計なんでは?
(古典的なウォータフォールモデルでは基本設計と詳細設計に分かれるみたいだけど。)
>>987 > いや、それが設計なんでは?
うん。そこがゲームをプログラムコードに落とし込んでいく上で肝になる部分だから、
> あまり必要が無いんじゃないか
というのは思いっきり語弊があった。
ゲームにおいては現実のモデルをOOに適応させるための「技巧的な」モデリングを
する場面は少なくて、比較的素直にモデリングできるんじゃないか、さほど高度な概念や
技術を駆使しなくても必要十分なモデリングが可能なんじゃないか、と言いたかった。
つまり、ゲームとOOは親和性が高いんじゃないかということが言いたかったんよ。
とまあ、
>>948の
> 本質的な話というか、「OOとは何か」というところの議論
に対して、ゲームと絡めてネタフリしたのが
>>951だったわけです。
#にしてはお粗末だった(というか無知をさらけ出す結果になった)。スマン。
>962
FILE* はカプセル化と情報隠蔽のサンプルとしては良いかもしれないが
継承や多態性のサンプルにはならないから、OOの例としては不適格では?
>971
家ゲーRPG板に「あの」スレの後継が出来てるので覗きに来てくれると嬉しい。
(叩きがウザイので名無し推奨)
>951
ではw
前段は、ゲームルールとして単純でも例えば思考ルーチンを作る事を考えると分析にも
意味はあると思うっす。検証の意味でも分析が不要ってことは無い、かな。
後段は同意。
↓次スレよろ
FILE*は多態性の格好のサンプルだろ。
991 :
他力本願:03/10/29 22:52 ID:57oXl0ji
>>990 Yes.
そして、次スレよろ。
誰かテンプレうpしる!
用意しました
タイトル
OOとゲームプログラミングNo.2 : 自由に変更してください
本文
OOをどのように用いれば美しいゲームプログラミングを
行うことが出来るか語り合うスレです。
・正直、素人にはお勧めできない
・煽り・荒らしは放置。名無し推奨。
FILE関係は、最初にCライブラリから使うようになった時は、「この関数シリーズはちょっと
異質だな」という違和感があったんだけど、こうしてC++等を使うようになって「OOだ」と
指摘されると、なるほどという感じがしますね。
>>995 乙!
FILE構造体の中をみてみるとあることになっているが、
使った例って見たこと無いし内部で使ってても見えない…
fopen の戻り値と stdin,stdout,stderr が同じに扱えるのは多態性と言えないのですか?
stdin,stdout,stderrはFILE*なグローバル変数じゃない?
そのうえ、それらの多態性は、ファイルデスクリプタ(OSのファイルシステム)の
多態性によるところが大きくて、どう多態してるのかはOSのソースを読まないと
分からないという罠
>>998 実装とインターフェースをごっちゃにしちゃだめですよ。
delete this;
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。