1 :
デフォルトの名無しさん :
04/01/10 14:56 VisualBasicやCといった手続き型言語をずっとやってきた人が、 C#やJavaといったオブジェクト指向言語をマスターする場合 オブジェクト指向の概念・概論を学ぶのが先がいいのか、 それとも、C#やJavaの言語を学ぶのが先がいいのか、 どっちがいいと思われますか。
実は私が今そうで、ずっとVBをやっていたのですが、 時代の流れもあって、C#を勉強を始めました。 C#の言語を勉強していると、 「オブジェクト指向とはどういうものかを知らないと効率悪いよな」と思い 憂鬱なプログラマのためのオブジェクト指向開発講座って本を読み始めたら 「やっぱ、言語を知らないと効率悪いよな」って思うようになって 鶏が先か、卵が先か状態になってしまいました。 皆さまは、どのようにマスターされました?
単発スレにマジレス。 概念、言語仕様を学ぼうとするのはどちらが先でも結構だが、 結局一番重要なのは実践であってそれは本では学べない。 よって、さっさとそのC#とやらを使え
漏れも単発スレにマジレス。
>>3 > 結局一番重要なのは実践であってそれは本では学べない。
あと、いい先生に逢うこと。
実践から得られた経験を整理して理解する時間と、
それを助けてくれる先生を得ることが大切。
5 :
デフォルトの名無しさん :04/01/10 15:46
概念だけ覚えてもプログラムは作れない 言語だけでも、プログラムにはなる
じゃーオブジェクト指向言語を学ぶ必要は無いな
8 :
デフォルトの名無しさん :04/01/10 19:20
OOの何が難しいのかが俺には分からない。 手続き型言語と基本的には同じだと思うんだが。
>>9 > 俺には分からない。
分かるように努力していない奴には
一生分からない。
>>11 ぷぷぷ。出来ない奴の気持ちがお前にはわからないってことだよw
>>3 >>4 実践の場ですか?
実業務は、まだVisualBasicを使っているので、
(近いうちにC#に移行という話は出ている。
話が出ているだけで、誰もやろうとはしない・・・)
仕事としてはありませんが、
フリーウェアでソフトを作るなりして
実践の場を、作っていこうと思っています。
先生は当然いません。
周りでC#もJavaもつかっている人がいないから
>>13 VB使えるならデータ中心的なプログラムスタイルは分かってるだろう。
後はただの言語仕様のお遊びだ。気負うことはまったくないと思われ。
スレ立てる暇あったらJDKインストールして適当な入門書買ってこいと。
15 :
デフォルトの名無しさん :04/01/10 21:34
うるせえ、いいから書いてコンパイルして走らせろ。 話はそれからだ
16 :
デフォルトの名無しさん :04/01/12 21:13
OO(OOAとか含まれる)じゃなくて、OOPするなら、 OO概念とプログラミング両方書いてある入門書で両方学べ。両方だ。 あと、先生がいないなら、JAVAのよいソースを読め。つか、先生なんてふつういるか? あと結城のデザパタ盆とか呼んで実践してみるのもOOセンスつくかもな。 そしてOOの考え方やOOでの書き方で疑問がわいたらここでもどっかでもスレに書け。 運がよければよい叩きをしてくれる椰子が現れるだろう。
18 :
デフォルトの名無しさん :04/01/12 21:19
本中って何?
動くようにgotoでバシバシ飛ばしちゃえば、gosubなんていらねーんだよ。 うへへ、俺は天才だぁー。
スパゲッティは自分のだけにしてよね。シッシッ。
必要になってから身につければ良いのでは?<OO手法 必要になってから身につけたのでは遅いかも。<言語
OO手法ってOOAとか?
つかOO手法が必要になる時ってどういうとき?
>>19 は事実だよ?
人とオブジェクトを共有する手法<OO手法
25 :
デフォルトの名無しさん :04/01/12 23:39
> 1 どっちがいいと思われますか。 smalltalk(VisualWorks or Squak)を勉強すれば、両方習得 できると思うけど。
プログラミングをはじめてやるという奴にはSquakはいいんだけどね・・・
「憂鬱なプログラマのためのオブジェクト指向開発講座」 すごい名前の本!!!
Squakから始めるとギャグみたいなコード書くようになってSquakから抜けられないと読んだことがある俺は小咄未経験。
Smalltalk, Squeak ね。言語より概念より、実装から入った方が良いんじゃね?
>27 いや、それめっさ定番の本なんだが...。 興味を持ったあなたは運がいい。ぜひ一読をおすすめします。 ...とマジレスしてみる。
結論: 実装⇔概念 のスパイラルで。
Smalltalk を勧めるのはデザインパターンとかのからみもあるのでは。
>>31 激同。概念だけだと、犬が「ワン」猫が「ニャー」の話で終わる。
そう思って憂鬱本と同じアプローチで社内研修をやってみた。
コードはJava用とVB.NET用と両方用意、VBしか知らない人のためのコードの説明も加えた。
…生粋のCOBOLerから「わからん」と苦情がきますた…
>>33 GoFならJavaでも++でも出来んじゃん。って事ではなくて?
36 :
デフォルトの名無しさん :04/01/13 02:15
欧米のOOコミュニティではSmalltalkは現役だから。 プロトタイピングしやすいし、概念やデザインの説明に Smalltalk 使われたりするし。
>>36 ソースプリーズ。
つか、OOコミュニティって何よ?小咄コミュニティとか言う落ちじゃ?
oopsla とかに出かけていく奴らじゃねぇの? それより、C++ と Java を一括りにして、Smalltalk と線引きしている基準が分からん。 >Smalltalk系のOOがC++/Java系のOO以上に
Kent Beck とか Ward Cunningham は Smalltalker だよね。
GoF本のRalph JohnsonもSmalltalkerだし サンプルコードにも結構Smalltalkのが入ってるな。
36って恥ずかしい
ANSI 準拠の言語で、もっとも早くオブジェクト思考の機能を言語使用に 盛り込んだのはCommon Lisp。 よってLispをしなさい。
>>42 ANSIって言語機能の標準とか規定してたの?CLRみたいだな。
45 :
名無しさん@Linuxザウルス :04/02/18 21:02
こんな感じで概念が学べるなら楽しそうでいいんだが
[190]名無しさん@Linuxザウルス<>
04/02/16 21:49
>>184 妹クラスを作って12人の妹を派生させて
呼びかけると
お兄い様
お兄いちゃん
お兄いたま
(ry
と応答させて
おお ポリモーフィズム マンセー!!
という感じで理解しろという事かな
>>45 俺ならそんなもんが出た瞬間速攻でPC叩っ壊す。
そして氏んでくれ
28 名前: デフォルトの名無しさん 投稿日: 03/05/21 10:00 フサギコはギコ猫のサブクラスだから、 フサギコクラスを作るときに「フサフサだぞ」メソッドを記述すれば、 ギコ猫から継承したメソッド「逝ってよし」「ゴルァ」が存在し、 (さらに)フサギコ特有のメソッド「フサフサだぞ」が存在するクラスになる。
キモイやつだけがわかるOOのおもしろさを語られてもねぇ。
馬鹿か!! オブジェクト指向ってなんだよわかんねーとか言ってるやつは 明らかに実戦不足なんだよ! 実戦経験が豊富であれば、自然とわかるものなんだよ!!
>>51 そうだな。実践で生半可なOOを振り回すと火傷する。
54 :
デフォルトの名無しさん :04/02/22 01:46
> 51 オブジェクト指向言語て、Cや、Pascal、Fortranのよう な手続き型に 1.構造体のメンバーに対して、アクセス制御ができる。 2.ダウンキャストができる。 3.(引数が違えが)同じ名前の関数を何個定義できる。 を仕様として加えただけだ。 cで書かれた有名なopen sourceソフトを解析すると、 2.3はトリッキーな事をしない限り無理だか、1は、 自主的に制御している。
Javaでオブジェクト指向を学ぶならJavaの基礎的な言語学習から始めた方が わかりいいな。 「独習Java」でもそこそこいけるもんかな。 それから他の本に手を出すという要領で。 C言語経験者ならちょっとだけJavaの基礎をしっておけばすぐにとびつける。
58 :
デフォルトの名無しさん :04/02/22 11:17
ぶっちゃけ、オブジェクト指向を学ぶなら 結城浩の「Java言語で学ぶデザインパターン入門」でも かなりの収穫はあると思うが。
りんごの色=赤い プロパティ。 りんご 投げると放物線を描いて飛んでいく。がメソッドだよ。 このりんごを派生させんのが、ポリもフィズ無だ簡単だ。
>りんご 投げると放物線を描いて飛んでいく。がメソッドだよ。 メソッド名に具体的な挙動まで定めちゃったらポリモルのしようがないと思うのだがどうか?
メッセージとメソッドは別 「投げる」メッセージを受信すると「放物線でとんでく」メソッドを起動するんならいいんじゃない
object '宇宙のリンゴ' implements method '投げる' invokes '直線で飛んでいく'
object: '宇宙のリンゴ' accepts message: '投げる' invokes method: '直線で飛んでいく'
65 :
デフォルトの名無しさん :04/02/24 20:18
66 :
デフォルトの名無しさん :04/05/02 00:43
UML勉強して、GOF本、リファクタリング読んで、 どっちもそれなりに理解していろいろプログラム組んでる んだが、他にOOP関連で勉強しておいた方がいいモンて ある?
OOプログラミングはなぜ使いやすいかって考え出すと非常に難しい ポリモーフィズムによる一貫性が、人間にやさしいと思うんだけどね 真の人間の生理学を知らないと分からないと思う OOプログラミングやると勝手にプログラミング上手くなっていくっていうのは もともと人間に備わっている能力を引き出すからだと思う もともと備わってる能力を知るってのは、こりゃ難しい やってみないとわからないんだから やってみると意外とできてしまうってのは不思議だ
68 :
デフォルトの名無しさん :04/05/02 02:02
んでまぁ、プログラミング覚える一番の早道はOOな言語でOOなライブラリを使ってプログラミングすることだと思うよ 身につけるっていう感覚に近い 数学の解き方覚えるようなもんだ
おもむろに Java、C#、Ruby のどれかでプログラミングをする。 ある程度書いていると「何か違うなぁ」の壁にぶち当たる。 そこでオブジェクト指向の概念本、デザインパターン本を読む。 これが一番近道だと思う。概念から入るのは余りお勧めできない。 「オブジェクト指向のほうが自然で楽だわ」という感覚を体感できないから。
そして速度を求め初めてCやアセンブラに回帰する
>>70 ただの回帰に見えるが実は螺旋の構造になっている。
戻ると1つ上のステージになっているでしょう。
実践が先です。
75 :
デフォルトの名無しさん :04/05/02 21:03
コードを書かずに覚えることはできません。
BASICから始めて、C言語とかそういうパターンでやってた人は カプセル化とか、ポリモーフィズムとか言う概念が言語で実装されてるのみたら すぐに飛びつくと思うんだよね。 なんて言ってもそれで一番苦労するから というわけで概念に一票
78 :
デフォルトの名無しさん :04/11/03 16:35:28
保守
こんな糞スレ保守してな(ry
80 :
デフォルトの名無しさん :04/11/04 01:02:35
>>67 そういう考えは、間違ってはいないが、しかし、それがオブジェクト指向を困難にしていると思う
「オブジェクト指向でなぜ作るのか」を読むと、その敷居をとりさってくれるよ。
81 :
デフォルトの名無しさん :04/11/04 01:17:17
オブジェクト指向とは働き蟻が効率的にモジュール=クラスを利用するための技術なので 概念や哲学は必要ありません。
「オブジェクト指向でなぜ作るのか」って本は大分前に本屋で立ち読みしたんだけど 手続き型のプログラミングではグローバル変数を除去出来ないとかいう ふざけたことが書いてあったんで俺の中では糞本認定されてます。
生まれたときからTVがあったような奴にはラジオの有難味は分からんて
まったく。 グローバルな破壊的代入を制御し隠蔽するためにどれだけの苦労が払われてきたか理解できないのだろうな。
85 :
デフォルトの名無しさん :04/11/07 16:12:17
もうあきた
なんで同じようなことを別スレでなんどもなんども…
学習もスパイラルがいい。作りながら概念も同時に学べ。 どっちかが先とか言う奴は糞ウォーターフォール推奨者。
age
90 :
デフォルトの名無しさん :2005/04/10(日) 02:40:23
自分の意見を言わせていただきます。 『概念学習』を先にしたほうがいいと思います。 自分C言語はできたのですが、学校でJavaを習っていた時全く理解できませんでした。 よく言われるような『どこが分からないのか分からない』状態でした。 でどうしても分からないままでいたくないのでオブジェクト指向の載っている本を2,3冊買いました。(多分悪書の部類の本) 全く理解できませんでした。 長々と説明されているのですが、全く理解できませんでした。 でも日経系の本でオブジェクト指向のことが書かれている記事を見ていたら『あれ?もしかしたらこういうことかな?』と うっすらと分かりかけてきたところを何度も見ていたら理解できるようになりました。 急にわかるようになってくると今までやってきたところがすぐ理解できました。 っていうかね Javaを教える先生が『オブジェクト指向』の概念学習より言語学習を教えることをメインにおいたために、生徒の全員が全く理解できませんでした。 毎回何十個も言語学習をするよりも、半年かかってもいいから概念学習をしっかりさせたほうがいい。 これは多分英語でもいえると思う。 大学に在学していたとき、アメリカ人の先生が 『今学校の方針でこのような学習法(言語学習)をしているけど、正直概念学習のほうがいい。 単語を暗記させるよりも、辞書片手に英語の新聞の翻訳をさせたほうがよっぽどいい勉強になる』 と言った気持ちがオブジェクトをなんとなく分かりかけたときに理解できた。 どこのプログラマーでも困ったら本見るんだからそれでカバーできない概念学習をしっかりしたほうがいいと思う。
オブジェクトって単に関数を要素にとれる構造体でそ?
つるな
93 :
90 :2005/04/19(火) 15:05:07
先生。何かこの教科書、教科書名の後ろにって書いてあるんですが。 しかも重要なところに『上書参考』って・・・・。
94 :
デフォルトの名無しさん :2005/04/19(火) 19:48:34
両方バランス良くやった方がいいって。 概念がわかっても、それが一体何の役に立つのかわからなくてイライラしたやつが 暴動起こして終わると思うな。
95 :
脳内PG :2005/04/19(火) 20:00:19
私は言語が先だと思います 言語をやる内に、オブジェクト指向は理解できると思いますし
OOなんぞが知れ渡る前から、擬似オブジェクト指向Pやってると、 どうしても概念レベルで、実装が頭をよぎっちまわない? 酷いときは妥協のしどころまで考えてたり。
日本語で話せよ。
>>93 与えられた本しか読まない馬鹿にはどんな本を与えても無駄。
99 :
デフォルトの名無しさん :2005/04/23(土) 20:03:38
ぉぃぉい結局どっちなんだよ?始めようと思ったのに出来ねーじゃねーか!もぅCとJava勉強すりゃいいのか?どうなんだよボケがぁぁぁぁぁぁぁぁぁ! 取り敢えず手始めにCでもするかな…
100 :
デフォルトの名無しさん :2005/04/23(土) 21:09:17
どちらが先なんて決めつけないで 糾える縄の如く理解していけばいいし 実際みなそうしている
101 :
デフォルトの名無しさん :2005/04/25(月) 07:53:16
VBなどで経験があるなら、階層化プログラミングはわかっているんだよね。それなら、 「カプセル化」と「継承」は実戦から入ったほうが手っ取り早い。 「多態性オブジェクト」とか「仮想関数」は、概念の勉強を先にしたほうがいいかな。
>>101 継承・仮想関数も全てポリモーフィズムのためにあるわけだから、
どっちが先もクソもないだろ。
「階層化プログラミング」と言う奴の言うことですからw
104 :
デフォルトの名無しさん :2005/04/25(月) 20:03:08
ガイネンガクシュウ 略して ガイガク
105 :
デフォルトの名無しさん :2005/04/26(火) 08:10:22
オブジェクト指向を教えるとき、どの言語がよいでしょうか?
106 :
デフォルトの名無しさん :2005/04/26(火) 08:56:31
smalltalk
107 :
デフォルトの名無しさん :2005/04/26(火) 15:03:01
>>105 メッセージングまんせーなら Smalltalk
クラスまんせーなら Java か C++
ここ数年、オブジェクト指向を覚えるときには、Javaが使われてきました。 Javaを使うのには、いくつかの理由があります。 ・広く知られている ・C を基本とした文法(一般的なスタイルとなりつつあります) ・フリーで高性能な開発環境が利用可能である ・Javaの知識があれば仕事に就ける こういった理由から、私はJavaの使用をやめさせようとはしませんでした (C#にもこういった特徴があり、いずれC#が代わりになるだろうと指摘してはいたんですが)。 ただ、Javaだけに任せようとは思っていません。 Java、C#、C++はいずれも、オブジェクト指向プログラミングのある形を提示してくれていますが、 誰かにオブジェクト指向を紹介するならば、選択肢も紹介してあげるといいでしょう。 選択肢とは、RubyとPythonのことです。 両言語とも、動的型言語です。静的型言語と一緒に使えるようになってれば便利だと思います。 どちらも大変便利な言語です。ちょっとしたスクリプトで自動化して解決するような仕事はたくさんあります。 技術者たるもの、1つくらいはスクリプト言語を隠し持っているべきですね。
110 :
デフォルトの名無しさん :2005/04/26(火) 21:17:07
SmallTalk以外はオブジェクト指向のフレーバーがある偽物といへり
Smalltalkによるプログラミングは、私にとって今でもお気に入りの経験だから、 その気持ちは分かります。 私のようなSmalltalkファンですら、もう何年もSmalltalkの環境(image)を立ち上げていません。
112 :
デフォルトの名無しさん :2005/04/26(火) 21:50:19
個人的には、Rubyが気に入っていますけど。 広く使われている(かつ利用可能な)のはPythonですし、 Rubyはより純粋なオブジェクト指向ですので(学ぶのには最適です) 私にとってみれば、すがすがしい感じがします。 あと、Rubyにはブロック(コード群を簡単にオブジェクトとして扱う機能)がありますね。 ブロックは強力なプログラミングツールで、コードの構造化についての多くの考え方を 学ぶことができます。 他のやり方だと、なかなかこうはいきません。関数型言語の入門用にも良いですね。 スクリプト言語の強みは、プロのプログラマが日常的に使えることなんです。
なあ、オブジェクトとクラスとインスタンスの違いを説明してくんない? オブジェクト指向の本読むと、みんなごっちゃでわけわかんなくなるの・・・
クラスというのは、型情報。 基本的に、プログラム内では一意に決まり、いつ参照しても同じ結果が得られる静的な情報。 インスタンスというのは、クラスという型情報を元に、メモリ上に生成されるデータの実体。これをオブジェクトともいう。 プログラムの処理とともに内部変数を変化させる動的な存在。必要に応じて複数生成されることも多々ある。
>>114 教えてくれてありがと
クラス=型
オブジェクト=インスタンス=メモリ上の実データ
という理解でいいの?
オブジェクトのメンバ関数のメモリ上の実コードはどういう言い方するといんだろ?
クラスのメンバ関数って言った方が正しいのかな?
>>115 おっと、
オブジェクト=クラスのインスタンス
と書いているみたいですね。
メンバ関数には、クラス所属のものと、インスタンス(オブジェクト)所属のものがある。 たとえば class Hoge { void foo(); static void bar(); }; というC++クラスの場合、fooはインスタンス所属で、barはクラス所属。 クラス所属の関数は、インスタンスを作らなくてもコールできる。 こんなふうに Hoge::foo(); 一般にこれをクラスメソッドとか、クラス関数と呼ぶ。 インスタンス所属の関数は、当然インスタンスを作らないとコールできない。 Hoge *hoge = new Hode(); hoge->bar(); あんまりいわないけど、あえて言うならインスタンスメソッド。
オブジェクトとインスタンスはほぼ同じ意味だが、ニュアンスの違いがある。 オブジェクトのほうがより抽象的で、インスタンスのほうが具体的なニュアンスを持つ。 でも、かなり混同もされる。
119 :
117 :2005/04/26(火) 22:30:38
ごめん間違えた。 Hoge::bar(); と、 hoge->foo(); だった
>>118 そう、そのニュアンスの違いが“理屈で”解らない。
ストラゥストラップの「プログラミング言語C++」を読んでると、
ニュアンスの違いがどこにあるのか解らなくなる
ストラ先生は、オブジェクト=クラスという意味で使っているみたい
そしてインスタンスって用語は出てこない。
で、他の本を読むとオブジェクト≒クラス、オブジェクト≒インスタンス
のような意味で使う。
オブジェクト指向を特集している今売りの雑誌でも、
オブジェクト=物だといいつつ、
明確に定義しないまま“クラス”と“インスタンス”という用語を使う
書き手によってさまざま。困ってしまいます。
俺もそのへんが未だによく分からない。 オブジェクトはクラスもインスタンスも含む概念で、 言語や状況によって、インスタンス=オブジェクトと見なせる場合があるのだと 強引に理解しているが、根拠はない。
>>119 static関数と非static関数の違いは理解してるつもり
staticメンバ関数はthisポインタがなく、引数、auto変数/定数を除くと
クラスのstatic変数/定数しか直接参照できない。
非staticメンバ関数は(暗黙の)thisポインタがあり、
上に加えてメンバ変数を参照できる。
Hoge myHoge; //と宣言すると
myHoge.foo(); // static関数と
myHoge.bar(); // 非static関数は同じ呼び出し方になる
>>120 確かに、オブジェクトというのは微妙な言葉だな。
場合によってはクラスを表現するオブジェクトというものもあらわれる。
たとえば、Javaだと、クラス情報をランタイムに参照できるようにメモリ上にクラス情報を置いてくれる。これはつまり「クラス情報のオブジェクト(インスタンス)」といえる。
このランタイムクラス情報は、あくまでもクラスについての情報を保持する別のオブジェクトであって、クラスそのものではない。
というあたりが自分のもっているイメージ。
あと、
オブジェクト指向は、「分析」と「設計」で分けて語られる。
「分析」は対象領域を抽象的に分類、整理する手段としてのオブジェクト指向で、
「設計」は実際にプログラムに落とすためのオブジェクト指向。
どっちの話をしているのか意識しないとすぐ混乱する。
分析レベルだと、あんまりインスタンスという言葉は使われない。
設計レベルではやたらと増える。
そういう意味でもインスタンスは具体的なニュアンスを与える。
124 :
デフォルトの名無しさん :2005/04/26(火) 23:04:49
object classがすべてのclassの親で、その子のmetaclass classがすべてのmetaclassのclassで、すべてのmetaclassのinstanceがclassで、という親子関係はすべてのObjectOriented言語に継承されているのかどうか
>>122 static関数と非static関数が逆転してたす。
必ずしも、親子関係とはいえないような気がする。気がするだけだけど。
>>123 >クラスを表現するオブジェクト
GoF本に、“クラスオブジェクト”という用語がでてきます。
型情報を持ったオブジェクトと理解しています。
具体的には、WindowsのCOMコンポーネントがtypeライブラリ情報をもっているイメージ。
SmallTalkは私のプログラマ・センスでは理解できません。
>「分析」と「設計」で分けて語られる
オブジェクトはアナリスト用語
クラスとインスタンスはプログラマ用語
と使い分けられるといいのに・・・
128 :
デフォルトの名無しさん :2005/04/26(火) 23:12:55
集合論で解釈してはどうか 要素の集まりが集合 しかし集合を要素とする集合も考える ある集合の要素を作ろうとするなら 要素としての集合に対して操作をする 操作の対象はあくまで要素というわけ
129 :
デフォルトの名無しさん :2005/04/26(火) 23:14:34
>>126 確かに
親子関係とは集合の包含関係のこと
集合とその要素との関係も親子関係と言ったのは間違い
>>124 >metaclassのinstanceがclass
これは、C++のtemplateを理解しようとする時に出てくる概念の壁(^^)
template関連以外ではこういう言い方は成り立たないのでは?
というか、templateのパラメータとしてのクラスと
オブジェクトの型であるクラスを混同してしまい、
最後にはちゃぶ台をひっくり返すケースだと思いますけど
131 :
デフォルトの名無しさん :2005/04/26(火) 23:26:11
すべてはobject instanceとはclassに所属しているobjectであることを強調したもの
>>131 オブジェクト≡クラスのインスタンス
というのが、おおかたの書籍にでてくる理解で
インスタンス≡クラスのオブジェクト
という理解は、そもそも不要で混乱のもとだと思います
133 :
デフォルトの名無しさん :2005/04/26(火) 23:49:02
>>132 なぜかね?
classによって産み出されるobjectのことをそのclassのinstanceと呼ぶのだが
つまりinstanceとはclassという概念に従属していることを強調する用語
134 :
デフォルトの名無しさん :2005/04/26(火) 23:50:54
>>124 に関して、
相撲流遠く (綴り、Smalltalkだっつーの)では
・クラス継承関係
・インスタンス関係
の他に
・メタクラス関係
があるのが興味深いんだ。
C++みたいな静的言語では、おもいっくそネグっちゃってるが、
JavaやC#では、リフレクションとかメタデータって名前で復活してる。
ちなみに相撲流遠くのクラス階層は、およそこんな感じ。
Object
△├−−−−−−−−┬−−−(略)
├|−−−−−−−┐|
|↓instance |↓ instance
MetaClass Class
△ superclass △ superclass
| |
FooMetaClass ←−− FooClass
metaclass |
|instance
↓
aFooInstance
【Class変数/メソッド担当】【Instance変数/メソッド担当】
135 :
デフォルトの名無しさん :2005/04/26(火) 23:53:19
136 :
134 :2005/04/27(水) 00:05:33
ぁ、
>>134 の最終行。。。とりあえず無視しといてね(はぁーと
137 :
デフォルトの名無しさん :2005/04/27(水) 00:22:15
>>134 のMetaClass, FooMetaClass, Class, FooClassの状況は若干修正が必要だろう
MetaClassはFooMetaclassのclass(FooMetaclassはMetaClassのinstance)
FooClassはFooMetaclassのinstance(FooMetaclassはFooClassのclass)
ClassがFooMetaclassのsuperclass(FooClassはClassのinstanceとしての性格を継承)
138 :
デフォルトの名無しさん :2005/04/27(水) 00:36:12
139 :
デフォルトの名無しさん :2005/04/27(水) 00:43:43
僕は、オブジェクト指向の概念をまず学習すべきだと思うな。 もちろん、目指すゴールによって一概には言えないけど。 クラス使うと便利な面が多々あるし、 しらなきゃその恩恵を受けられないわけだし。 確か、ドラクエのモンスターを題材として オブジェクト指向を説明しているいい本があったな。あれですぐ飲み込めた。 なんていう本かは忘れた。
オブジェクト指向を教えるのに、言語を使ったほうが良いかどうか? 言語を使わない案というのは、原則について議論するということになるでしょうね。 おそらくはUMLを描くとか、そんな感じでしょうか。 私は、まずは言語を使って、何かできるようになるほうが断然いいと思いますね。 私にとってソフトウェア設計とは、数学みたいなものなんです。 読んだり聞いたりするだけでは、なかなか理解が深まりません。 実際にやってみないと理解なんかできません。 だから、本当にオブジェクト指向を理解したいのなら、実際に何かを作ってみるべきです。
141 :
デフォルトの名無しさん :2005/04/27(水) 08:44:48
僕は私。
00ってなに?
クラスオブジェクトインスタンス と クラスインスタンスオブジェクト は異なるわけか。
Objectって、目的というか対象というか、そっちの(英語の)意味で考えると個人的にはしっくりきたり。 (下手に訳すのがいけないのかも。)
this じゃなくて self な文化だと、物って訳した方が自然に感じるよ
146 :
デフォルトの名無しさん :2005/04/28(木) 00:32:03
目的物
148 :
デフォルトの名無しさん :2005/04/28(木) 08:58:19
俺も見た記憶があるなぁ 何気にRPGとかだとクラスの有効利用をカンタンに理解できそうなきガス
>>143 > クラスオブジェクトインスタンス
new Point(1,2)
> クラスインスタンスオブジェクト
Point
かな?
151 :
デフォルトの名無しさん :2005/04/28(木) 13:56:31
実際オブジェクト指向を勉強して それをどうプログラミングしていくかというところで、ぽかーん という状態です。
152 :
OO太郎 :2005/04/28(木) 15:22:59
プログラミングの初心者の俺が教えてやろう。オマエラよく聞け。 オブジェクト指向というのは、プログラミングのスタイルだ。JavaやC++は オブジェクト指向言語だといわれるけど、非オブジェクト指向的な プログラミングをしようと思ったら出来る。オブジェクトなんて使わなくても 同じように動くプログラムは作れる。 だから、プログラミングスタイルとしてオブジェクト指向をしっかり覚えないと いつまでたってもオブジェクト指向のプログラミングは出来るようにならない。 俺みたいにBASICで育った者は特にそうだ。
153 :
OO太郎 :2005/04/28(木) 15:40:00
オブジェクト指向がなんでこんなにもてはやされているかというと、 いまの、ウインドウズを中心としたいわゆるGUIのプログラミングに ぴったりな概念だからだ。 オブジェクトはそれほど大騒ぎするほど難しい概念じゃない。巷に溢れる 説明の下手な著者の書いた本がくどくど説明するほど抽象的な概念 でもない。オブジェクト=物だ。ウインドウズだったら、それぞれの 窓はオブジェクトだ。あるいは、窓の中にあるボタンの一つ一つが 全てオブジェクトだ。 トランプのゲームだったら、トランプの一枚一枚がオブジェクトだ。 クラスというのは、オブジェクトを作る型みたいなもの。トランプには 必ずマークと数字がある。そういう決まりをまとめたものがクラスだ。 トランプクラスからトランプの一枚一枚を作り出すと、それがオブジェクト になる。例えば Trampu tramp1 = new Trampu (ハート、A); Trampu tramp2 = new Trampu (ハート、2); ・・・・・・・・・ Trampu tramp52 = new Trampu (クローバー、K); という感じにトランプオブジェクトが52個作れる。それぞれが トランプクラスのインスタンスになるわけだ。
154 :
OO太郎 :2005/04/28(木) 15:52:20
あと、オブジェクトの面白いのは、トランプの例のようにマークと 数というようなデータだけじゃなくて、いわゆるサブルーチンのような 機能(これがメソッドだ)も一まとめにしてしまうことが出来るってこと。 例えば、トランプゲームだったら、「持ち札」なんてクラスが定義できる カも知れない。プレーヤーが4人いたら、それぞれ持ち札があるわけ だから、持ち札1、持ち札2、持ち札3、持ち札4というような オブジェクトが作れる。例えば「持ち札1」には、ハートの3、 スペードの4、クローバーのA、ダイヤの7がある。それはみんな インスタンス変数になる。で、メソッドとして、「カードを引く」 「カードを捨てる」「カードの枚数を得る」「同じマークを捜す」 「同じ数を捜す」などなどいろいろなメソッドが考えられる。 それらを全てクラスで定義しておいて、実際に「持ち札1」にたいして そういうメソッドを呼ぶことによって、「持ち札1」の内容を変更 したり、内容を見たりすることが出来る。
155 :
OO太郎 :2005/04/28(木) 16:06:15
トランプゲームだったら、もう一つ、真ん中においておく「カードの山」 なんて、クラス考えてもいいかもしれない。そこから作られる、 インスタンスとしての「カードの山」オブジェクトはインスタンス変数 として、カードの数、カードの種類などをもっていて。メソッドとして は、「カードを出す」、「カードを切る」など考えられるかもしれない。
156 :
OO太郎 :2005/04/28(木) 16:21:57
あと、もう一つGUIプログラミングのもう一つの特徴は、イベント指向 ということだ。昔のプログラミングみたいに、一行目から始まって、 順々にコンパイラでもインタープリターでも読んでいって、順次実行 していく、いわゆる手続きがたのプログラミングとは違う。 プログラムは、キーボートや、マウスといった入力装置からの割り込み あるいはメッセージを待っていて、マウスがクリックされたというと、 それを処理するルーチンがある、マウスがドラッグされた、というと それを処理するルーチン、というように、そういう各々のイベント 処理を中心にプログラムが構築されていく。 で、そういう処理が、アル程度OSに任されてしまっているので、 プログラマーにはコントロールできない部分がある。例えば、描画 にしても、自分が、「描け」と命令するというよりも、絵を特定の 机の上に置いておくと、システムが定期的に来て、それを持っていって 画面に貼り付けてくれる、というようなイメージだ。絵を変化させ たいばあいは、別の絵を描いといて、それをまた特定の机の 上に置いておいて、システムが持っていくのを待つ。 こういった思考パターンによるプログラム作りにがつまり、 オブジェクト指向のプログラミングということだろうと、 素人の俺は思うんだが。
157 :
131 :2005/04/28(木) 16:22:19
>>133 すいません、寝ちまいましたm(_ _)m
オブジェクト指向プラグミングする際に
1. まず、プログラミング対象を分析した結果としてオブジェクトを抽出する
2. 次に、オブジェクトの設計・実装の結果としてメンバ変数とメンバ関数による
オブジェクトの定義であるクラスを導出する
3. 最後に、プログラムの実行の結果としてクラスのインスタンスがメモリ上に
割り振られる
この場合、オブジェクトという用語に必要な概念は、
プログラミング対象を分析した結果としてオブジェクトという用語であって、
それ以外の、
インスタンス≡クラスのオブジェクト
の“オブジェクト”の用語の使い方は、 “一般概念としてのオブジェクト”という用語の適用を
オブジェクト指向プラグミングというコンテキストに持ち込むことになるからです。
つまり、オブジェクト指向プラグミングというコンテキストでの“オブジェクト”の用語の
因果関係、つまり順序性の意味を無視しているということです。
「色即是空・空即是色」という禅問答は、アカデミック(学術)的な思考の中では
成立するのかもしれませんが、エンジニアリング(技術)的な思考の中では、
「色即是空」であるか、さもなければ、「空即是色」のどちらかでなければ、
未知の技術に対する理解は混乱するだけなのです
インスタンスって、英語で「事例」とか「実例」という意味で、 クラスに具体的なデータを与えて作ったインスタンスつまり 「具体例」がオブジェクトなんでしょ? クラスは基本的に、オブジェクトを作るための枠組みであって、トランプ でいったら、白紙でマークや数字が印刷される前の状態だと思う。
初心者に教えてもらいたくない
160 :
デフォルトの名無しさん :2005/04/28(木) 19:05:35
オブジェクト指向自体はわかったんだけど、大規模なシステムのソースを理解するのが大変なんだよね。 こういうのってどうやってるんだろ・・・。 継承されまくりでどこにメソッドがあるのかもよくわからないし・・・。
>>160 とりあえずdoxygen通してみるとか。
162 :
160 :2005/04/28(木) 20:50:27
>>160 なるほど、よさげですね。
ためしてみます。アドバイスありがとうm(_ _)m
163 :
デフォルトの名無しさん :2005/04/28(木) 21:09:51
>152-156 素人の説明って結局わからん、ってのはよくわかった、
俺は、C-magazine創刊号に載ってたトランプゲームによるOO説明(ソース付き) 思い出しちまったよ。 OOトランプの役者としては、 ・トランプの各カード ・カードの山 の他に、 ・ゲーム (トランプがルール知ってる訳じゃなくて、ゲームにルールがある) ・プレイヤー (一人(占い等)または複数) ・ゲームの場 (占いの内容とか、ゲームが何回戦目かとか) も要るな。
165 :
デフォルトの名無しさん :2005/04/28(木) 21:34:09
>>163 そうかね?よく理解していると思ったが
>>158 Integerクラスのインスタンスが1,2,3などの整数
Integerクラスを任意の整数と捉えることも可能だが
任意の整数の全体と捉えることの方をおすすめしておこう
166 :
デフォルトの名無しさん :2005/04/28(木) 21:36:55
素人(アル中)が素人に説教するインターネッツ
167 :
デフォルトの名無しさん :2005/04/28(木) 21:39:15
おまいの議論って、
結局 Smalltalkのクラス階層として結晶した概念を、
後付で説明しようともがいているだけだな。
>>165 >Integerクラスのインスタンスが1,2,3などの整数
>Integerクラスを任意の整数と捉えることも可能だが
>任意の整数の全体と捉えることの方をおすすめしておこう
誰もそんな事、話題にしてないしw
168 :
デフォルトの名無しさん :2005/04/28(木) 22:04:12
結局概念だけで説明しようとするとかえって分かりにくくなるような気がする。。 概念→実装ほどかけ離れてるもんはない。
169 :
デフォルトの名無しさん :2005/04/28(木) 22:06:37
Smalltalkのクラス階層として結晶した=Smalltalkで実装された話 つう事。 概念 ↓ 実装 ↓ 実装を概念として騙ってる ←このスレ
170 :
デフォルトの名無しさん :2005/04/28(木) 22:26:45
Smalltalk以外のオブジェクト指向言語は
オブジェクト指向の風味がある偽物
偽物の腐った概念であれ
>>152 -の理解は正しい
171 :
デフォルトの名無しさん :2005/04/28(木) 22:30:37
>>165 の一行目に基づき、
「整数」を「インスタンス」と置き換えてみよう。
二行目「クラスを任意のインスタンスと捉える」
というような荒唐無稽な話は、(
>>165 と
>>171 以外)誰も言っていない。
三行目「クラスはインスタンスの全体と捉える」
これは、クラスを集合と捉える考え方だね。
>>172 荒唐無稽と言うほどでもない
クラスの概念は集合と似ているが同じではない
集合を任意要素として表現することもあり
オブジェクトとクラスの関係を理解する一つの方法として
>>158 の捉え方もあながち捨てたものではない
なお
>>158 をよく理解していると褒めてはいない
>>152-の例が例としてよくまとまっていると褒めた
集合論ではsetと同じような意味でclassという単語が使われる ことがあるけど、オブジェクト指向のクラスも元々はそこからとった 言葉じゃないのかなと俺は思う。
176 :
デフォルトの名無しさん :2005/04/28(木) 23:30:05
>>175 正しいかもしれないがたとえ集合論と関連させたものだったとしても似た用語を援用しただけであろう
なぜならば集合論におけるクラスは他のクラスの要素にならないからだ
Smalltalkのクラスはメタクラスのインスタンスでありその点が大いに異なる
また集合論では許されない無限降下列も存在している
MetaClassのメタクラスはMetaClassのインスタンスである
177 :
デフォルトの名無しさん :2005/04/29(金) 05:11:02
>>174-176 20分おきに連投ご苦労。で、結論出た?
セットとクラスの違い、
数学基礎論でいうクラスと、OO言語のクラスの違い
タイプ理論、
まで説明が終わったら、起こしてくれ。それまで一休みw
178 :
デフォルトの名無しさん :2005/04/29(金) 07:45:21
179 :
デフォルトの名無しさん :2005/04/29(金) 08:09:08
>>157 忘れていた
あまりよい理解ではないが
インスタンス=クラスのオブジェクト
で理解しても構わない
ここで言うオブジェクトももちろんオブジェクト指向言語におけるオブジェクト
すべてはオブジェクトでありクラスに従属していることを強調する場合はインスタンスという用語を使う
selfに入っているものはオブジェクトでありそれは何らかのクラスのインスタンス
180 :
デフォルトの名無しさん :2005/04/29(金) 08:21:05
蛇足ながら 集合論ではすべては集合(無定義概念) 何らかの集合に所属している場合は要素と呼ぶ さらに蛇足ながら クラス概念のある集合論の場合 すべてはクラス(無定義概念) 何らかのクラスの要素である場合は集合
181 :
131 :2005/04/29(金) 11:13:10
>>179 慣用的に、"すべてはオブジェクト”という理解があることは承知しています。
ですが、157で述べたとおり、クラスを導出する“オブジェクト”という言葉と、
クラスから導出される“オブジェクト”という言葉は、その導出の順序性と
目的において異なる意味を持っています。
"すべてはオブジェクトである”とい論理は、じつは、ふたつの“オブジェクト”
という言葉が、それぞれ異なる意味を持った言葉でありながら、言葉の
形式的音韻的な同一性に拠ってのみ成立している論理だと思うのです。
そして、このような“オブジェクト”という技術用語の本来の意味をあいまいな
方向に誘導する学術系の論理は、オブジェクト志向プログラミングへの理解
を初手から阻害している重要な原因の一つだと考えているのです。
182 :
デフォルトの名無しさん :2005/04/29(金) 11:15:25
クラスとセットのちがい クラスの定義を説明する例として、「国連」が例示されることが多い。 すなわち、 o 国連のメンバーは国々であり、 o 国のメンバーは、例えば、日本国なら日本人だが、 x 日本人は国連のメンバーではない、 という説明がされる。 しかし、セットの観点からすれば x 日本人の集合は、いくら日本人を加わえても、 日本人の集合であって、日本国にはならない。 つまり、「男」と「女」を使った例で言えば、「男」と「女」の集合を起点にして、 「個人 」あるいは「法人」というクラスを形成するためには、 タイプ(N−1)とタイプN の間には、「概念の飛躍(抽象化)」が起こっているのである。 概念の一般化は論理和ではない。
183 :
デフォルトの名無しさん :2005/04/29(金) 11:24:35
>>181 そこに書かれた「二つのオブジェクト」とは
君の言うプログラム設計手法としての「クラスを導出するオブジェクト」と
書かれたプログラム・実際に動く際の「クラスに導出されるオブジェクト」という意味か?
そのような違いを念頭に書いたことはないし実際気にする必要があるとも思えない
タイプ理論 20世紀初頭、集合論を使って数学の基礎を再構築する試みが開始された。 数学基礎論の源流には、以下の3つの流派があった。 (1)論理主義 (ラッセルに代表される考え方) (2)形式主義 (ヒルベルトに代表される考え方) (3)直観主義 (ブラウワーに代表される考え方) ラッセルの提示したや り方が「タイプ(type)理論」(the theory of types)である (ラッセルの提示したタイプ理論は「分岐タイプ理論」と云うが、 ラムゼー(Ramsey F.P.)は、それを簡素化して、単純タイプ理論にした)。 ラッセルの導入したタイプ理論を要約すれば、以下の2点が主張 である。 (1)モノは、(以下に記述するように)いくつもの階層(=型)から構成されている (これを、 「高階」の構成という)。 タイプ0:個体{a, b, c,...} タイプ1:個体の性質 f(x) [つまり、「関数」] タイプ2:個体の性質の性質 g(f(x))[ つまり、「関数の関数」のこと ] : タイプ(N−1) タイプN (2)代入規則:タイプNの 関数は、タイプ(N−1)の対象を代入項とする。 したがって、「W∈W」(同じレベルの代入)は無意味となる(「タイプ理論」ではW∈{W}が正しい扱いとなる)。 ちなみに、W={W}が成立することもある。これを「不動点」という。 数学者たちが、モノを「高次に(高階に)構成された構築物」と観る原点が、ここにある。 モノは「無定義語」であって、「関係 (関数)」のなかで扱われるパラメータ(項)に過ぎない。
185 :
デフォルトの名無しさん :2005/04/29(金) 12:23:27
素朴な集合論は様々な矛盾を誘発し現在は公理化されている そこでは通常はW∈WおよびW={W}なるものは拒否されている 揚げ足取りのつもりないが気になったので指摘させて頂くが 関数の関数を書く場合はg(f)(x)とした方がよいだろう もっと正確には(g(f))(x)であろうか g(f(x))は通常は関数の合成の意味を持たせているからだ
いつの間にか蛆虫が沸いている。
187 :
デフォルトの名無しさん :2005/04/29(金) 12:26:50
188 :
デフォルトの名無しさん :2005/04/29(金) 12:45:31
枝葉の指摘ご苦労。 じゃ素朴な集合論の話はここまでにして、 次は ZF公理に基づくプログラミングを騙ってくれ。 よろしく
189 :
デフォルトの名無しさん :2005/04/29(金) 13:10:50
いや、きっと
>>185 は、
公理的集合論、例えばZF公理系に基づいて
オブジェクト指向を説明してくれる事と思う。
191 :
デフォルトの名無しさん :2005/04/29(金) 13:29:04
192 :
デフォルトの名無しさん :2005/04/29(金) 13:32:57
あ、そ。 なんだ、自分の頭で考える事ができる人かと思ったら、 受け売りをくどくど書いてるだけの人か。 つまんね
>>192 無駄なことはしない
>>185 を書いたのは
>>184 に紹介さえていることが現代的ではなかったことと記法が気になったことだ
特にそれ以上の意図はない
194 :
デフォルトの名無しさん :2005/04/29(金) 13:39:52
うんだから、 その現代的でない理論でオブジェクト指向が成り立っているのか、 あるいは、もっと現代的な説明が可能なのか? >無駄なことはしない。 そのあたりをちゃんと説明しろってこと。
オブジェクト指向は集合論に基づいているわけではない 以前から似ているが違うと書いているのだが?
196 :
デフォルトの名無しさん :2005/04/29(金) 13:44:41
ラッセルの型理論つのは、型付プログラミング言語に関する 一番最初の説明として、有効だと考える。 で、おまいさんが現代的ではないとおっしゃるのだから、 じゃそれを現代的にして下さい、って事。
現代的な型理論としては、 MartinLofの型理論 なんつうのもあるな
199 :
デフォルトの名無しさん :2005/04/29(金) 14:00:11
揚足鶏だらけのインターネッツですねw
初心者相手のゆるい説明に、 いちいちピラニアみたいに食いついてくるのが、 ちゃねらーですから。
んなのばっかだと初心者はどん引きして、 近寄ってこないと思うよw
その方が初心者にとっても身のためだったりしてw
荒しが活躍し過ぎると、一般人はどん引きして、 2ちゃねらー離れが加速するだけだと思うよw
204 :
デフォルトの名無しさん :2005/04/29(金) 14:18:06
今度から俺も、間違えて荒しちまった後で 「他意はない」って言い訳しよ。 それでも突っ込まれて、ほとほと己の無力さ加減に絶望したら、 「期待には添いかねる」 とレスを返す事にしよう。
ゆるい説明をくどくどする奴に限って、 ゆるゆる議論のほころびの一つに突っ込むと、 猛反発をしてくるの法則
211 :
デフォルトの名無しさん :2005/04/29(金) 17:24:52
Animal <-Dog <-Cat こんな継承することは現実のプログラミングの現場ではありえない 実装してみて、インターフェースが共通化できそうなら継承木をつくるのであって 概念としてひとくくりにできるから継承やってると泥沼にはまる だいたいそれでうまくいくんならデザインパターンなんていらないわけで オブジェクト指向は手段、言語や実装無しに概念としての価値はあまりない
213 :
211 :2005/04/29(金) 17:43:08
> Animal > <-Dog > <-Cat > > こんな継承することは現実のプログラミングの現場ではありえない 補足します ゲームやシミュレーションの世界ではこういう書き方もするが、 言語自体の記述力の限界もあって、 概念をそのまま記述することにとらわれると足かせになりがち 煮え切らない文章すまそ
214 :
211 :2005/04/29(金) 17:50:49
>>212 オブジェクト指向という言葉しかつかっていませんが、
オブジェクトを型、インスタンスのどちらでとらえるかで
意味が変わりますかね
オブジェクト指向言語を実現する方法として、C++型とsmalltalk型と二つの方法があるってことか?
どっかで似たような話を聞いたな。
このスレでも
>>157 がそういうようなことを言っているけど。
216 :
131 :2005/04/29(金) 18:19:04
>>211 > Animal
> <-Dog
> <-Cat
これはPROTOTYPEパターンだね
217 :
131 :2005/04/29(金) 18:28:36
>>215 C++は静的なオブジェクト指向プログラミングを実現する仕組みで
コンパイラでできること仕組みの多くを実現している一方の究極。
動的なオブジェクト指向プログラミングを実現する仕組みの究極は、
Perlだと思う。型変換も実行時に簡単にできるし、同一ベースクラスの
サブクラスの多重継承を(現状がいいかは別問題として)矛盾なく
サポートできる。どちらも、静的なコンパイラ言語であるC++では困難
Smalltalkは理解不能ゆえ、私には論評できません。
219 :
デフォルトの名無しさん :2005/04/29(金) 18:33:03
>>216 > Animal
> <-Dog
> <-Cat
これ見て
>これはPROTOTYPEパターンだね
とは、あんたエスパーかw
まず "<-"演算子の意味を定義しろってw
221 :
デフォルトの名無しさん :2005/04/29(金) 18:35:19
>>219 俺も最初、
Class Animal {}
Class Dog extends Animal {}
Class Cat extends Animal {}
て話かと思った。
Cat extends Dog {}
なんてアフォな話題を誰が持ち込んだんだw
型がオブジェクトと言われることって・・・・?
>>220 佐藤さんだけじゃなくて、
外国の超大物も書いてるみたいだよ、このスレ。
ああ、ブリキの人ね。 彼も日本語が上手くなったなぁ
>>220 で、現代的な型理論と
公理的集合論の話の続きは?
ProjectBuilderってOOとしてどう?
いや佐藤さん本人ではないだろう。 無断借用じゃないの。
229 :
デフォルトの名無しさん :2005/04/29(金) 21:30:01
>>211 デザインパターンなんていらないんじゃないの?
>>229 再利用とかメンテとかがいらなければ、いらないねっ。
【オブジェクト指向】言語学習が先?概念学習が先? 1 名前: デフォルトの名無しさん 投稿日: 04/01/10 14:56 VisualBasicやCといった手続き型言語をずっとやってきた人が、 C#やJavaといったオブジェクト指向言語をマスターする場合 オブジェクト指向の概念・概論を学ぶのが先がいいのか、 それとも、C#やJavaの言語を学ぶのが先がいいのか、 どっちがいいと思われますか。
>>231 C#やJavaでオブジェクト指向プログラミングしなくても
ぜんぜんに構わない
オブジェクト指向プログラミングにC#やJavaを使わなくても
ぜんぜん構わない
C#やJavaでOOしないのはかえって大変 非OO言語でOOするのはストレスたまりまくりんぐ
234 :
デフォルトの名無しさん :2005/04/30(土) 00:07:05
>>120 >ストラ先生は、オブジェクト=クラスという意味で使っているみたい
って誤読だろ?明らかに
236 :
デフォルトの名無しさん :2005/04/30(土) 01:00:16
オブジェクト=物 って説明すると 初心者は日本語で言うところの「物」を創造してしまい 「動作・ふるまい」を物とは考えることが出来なくなる 物ありきで、その物に対して「動作・ふるまい」をメソッドとして実装することしか頭に浮かばなくなる
クラスライブラリの体系をおぼえるのが ものすごく、めんどくさい。
オブジェクトはキャラクターです パラディンクラスはナイトクラスを継承します 新たに技を追加できます オーバーライドすることで既存の技を強化することも可能です
オブジェクトは職業・技能です とか?
クラスは役割、役です はどう?
くらすが個別にインスタンシエーションがつまりmalloc()の コンストラクタがごごごと動いて どうも、オブジェクトです、 クラスのインスタンスです、ご用件をどうぞ free(); または、もしもし五味屋さんはやくきてよ のような、認識。 今年中によむ、本(予定)。 * 結城本 * エッケルのThinking in Java * GOF本
>>237 マトモに設計されたライブラリなら一部を覚えればあとは類推で何とかなると思うが。
244 :
デフォルトの名無しさん :2005/04/30(土) 04:27:33
オブジェクトを汎化したものがクラスです。
245 :
デフォルトの名無しさん :2005/04/30(土) 04:32:08
>>123 > 分析レベルだと、あんまりインスタンスという言葉は使われない。
おいおい、ユースケースのをインスタンス、とか言うだろ?
使われないのはオブジェクトという意味の「クラスインスタンス」だろ?
246 :
デフォルトの名無しさん :2005/04/30(土) 11:29:38
インヘリタンス
247 :
デフォルトの名無しさん :2005/04/30(土) 12:41:43
混濁箪笥
248 :
デフォルトの名無しさん :2005/04/30(土) 13:23:24
オブジェクト指向ってつまるところ 「そういう仕様」だと思うよ、 現実を表現しやすく、管理しやすい仕様ではあるが 現実に無理して当てはめてわかった気になっても 習熟していくと騙されたと気づくんじゃないかな?
249 :
デフォルトの名無しさん :2005/04/30(土) 13:32:57
騙されたって気にはならないなあ 用意周到なクラスライブラリを理解していくに連れて なるほどという気持ちになる あでもそういう汎用クラスライブラリを作る側は大変だろうな 習熟して騙された気になるってそういうレベル?
アルゴリズムと一緒で あーこういう組み方するのか〜うまいね〜ってな感じ しかし、それほどデザインパータンに執着は無い クラスの関係図を書くと何階層にもなってしまうので 新規作成時はいいんだけど、後から入ってきた人が もしそれほど知識無いとしたら修正お願いしてもわかりませんので
「現実に無理して当てはめた説明」に騙されたって言ってるんだけど デザインパターンは現実の構造を示してるんじゃなくて、 工学的な定石に名前をつけたもんでしょ 現実ってリアルワールドね
習熟してくるとその辺の神話のうそがわかってくるって いいたいんですよ
その「神話」とやらを教えてる方の人間も、 理解を助けるための方便として言ってる場合だけじゃなく 自分も本気で信じてる場合もあるから たちが悪い。
結局プライドの戦いと言うわけになるのだな
255 :
デフォルトの名無しさん :2005/04/30(土) 17:22:36
アプリケーション、ツール、フレームワーク、クラスライブラリ、クラス設計に関して、 自分で実際にそれらを作ってみると、設計の妥当性/妥協点がわかる、という事実がある。 もちろん、自分でそーゆーのを作れない泡沫エンジニアへのセールスポイントや使いやすさ も提供するわけだがw 大枠や細かな所は、「現実的な作りやすさ」で決まってくるもんなんだよね。 だから、オープンソースで自分で中見て改善する練習をする事が重要なんだ。。。 Smalltalkしかり、Linuxしかり
256 :
デフォルトの名無しさん :2005/04/30(土) 18:00:34
制御系でOOPってどれぐらい浸透している? ナビ開発をやっているんだけど、現行の手続きOnlyなやり方だと分り難くないかな。
騙される方が悪いのか騙す方が悪いのか信じる者は掬われる?
88 名前: 番組の途中ですが名無しです 投稿日: 2005/04/29(金) 14:21:36 ID:HlHAQf7m0 まぁ、オブジェクト指向隆盛の現在、 Viewを客受けの良いものにchangeしたのは正しい決断だな。
260 :
デフォルトの名無しさん :2005/05/01(日) 07:24:28
C++の設計者はなんで shout << なわけねーだろ! にしなかったんだろ…
orz << "入れてよし"
プリプロセッサで文法変更すりゃ終了。
じゃあ、言語学習と概念学習は同時にやっていくってことで終了でいいですか
265 :
デフォルトの名無しさん :2005/05/08(日) 12:32:01
===============来了==================
266 :
デフォルトの名無しさん :2005/05/11(水) 00:24:46
いがぴょんが痛すぎるんだけど、マゾかなんかですか?
逝け沼さん、こんにちは
>>263 orz=3=3=3=3 ブブッブリブリビチビチブブブ
269 :
デフォルトの名無しさん :2005/05/15(日) 11:01:52
いつの間にかクダスレになっとるわい
>>196 型付きの手続き型言語の理論としては、
型付λ計算が広く受け入れられている。
ただし、オブジェクト指向言語では
「オブジェクト指向」の本質といったものを明確にするのは難しいので、
広く受け入れられた理論というのは、まだない。
271 :
デフォルトの名無しさん :2005/05/15(日) 15:14:43
どういった単位でクラスを作っていけばいいんですか? 趣味程度で自分しか使わないコードを書く人間としては、 ついというか癖でだらだらと関数を山ほどForm1のなかに書いてしまうのですが…
本当にフカキョン似だね
>>271 いくら使い捨てコードといっても、一発で動いて後は永遠にメンテ不要なんてケースはまずないわけで。
自分で書いたコード読んでイライラしない?
>>271 >どういった単位でクラスを作っていけばいいんですか?
殴り書きでいいのだが、
見つけたオブジェクトを見つける
見つけたオブジェクトの単位でクラス図を書く
クラス図にメンバ変数を追加する
クラス間のメンバ関数を時系列にそってシーケンス図として書く
メンバ関数をクラス図に追加する
これらの手順を納得できるまで繰り返す
収まりがついたらコーデングする
動作としてはこうなんだが、
それぞれの段階で知識や経験が入り込む
>>274 ×見つけたオブジェクトを見つける
○オブジェクトを見つける
C の struct をベースに、データ構造を基準にすると分かりやすい どれだけの物を1つにまとめ、どれとどれを分けるかの判断は経験則
>>274 コーダー乙。
分析レベルのOOを認識できてないあたりが、
机上の勉強だけの糞コーダ臭いな
どうでも良いが、わざわざ 『分析レベル』 と 『実装レベル』 を分けて考える必要性が分からん
第一の山は、 概念レベルのオブジェクトをいかに抽出し、 現実世界のモデルを作るか? 第二の山は、 ユーザ要求なり機能要求を、 分析レベルでいかに取り込んでいくか 第三の山は、 1で作った概念モデルと 2で作った機能要求モデルを いかに整合させていくか 第四の山は、 1、2、3で作ったモデルの実装方法の検討。 ここらへんがアーキテクトの仕事。 このあたりまでやって、ようやく開発レベルのOOになる もちろん、対象分野の開発に慣れていて、 なおかつ新しい設計をしないならば、 1〜4は楽勝だけどな。実際はそれをOOに不慣れな人間がやる事が多いから、 下流の人は大変みたいだ。 機能分割とDB設計から割り出したクラス図を受け取って、あとはウォータフォールとかw
>>278 > わざわざ 『分析レベル』 と 『実装レベル』 を分けて考える
もし設計/実装レベルのみに着目してソフトウェア開発を行うと、
開発者の関心と努力は、実装可能な事/実装が難しい事に集中してしまい、
結果として下記のような問題が発生します。
(1) 本来の要求(やりたかった事)の実現が、
おざなりになったり、歪んだ形になってしまう事。
(結果として、プログラミング技術は素晴らしいが、
使う人にとっては判りにくい、使いにくいものになってしまいがちです)
(2) 拡張や機能追加に耐えないクラス設計になってしまう事。
(拡張や機能追加に耐えるしっかりした構造を持たせるには、
普遍的な概念モデルや、プログラム対象分野の知識体系に基づく、
抽象的なレイヤーが必要です。
この抽象的なレイヤーは、汎化クラス抽出の方法でもある程度得られますが、
ボトムアップに実装から抽出する方法では、充分な汎用性をえられません。)
(3) プラットフォームや実装技術と、コアなアルゴリズムの切り分けが不充分になる。
もし、実装技術やプラットフォームに基づいて、アプリケーションの設計を行ったら、
それは将来のOS/環境のバージョンアップ時に、大きな変更作業が必要になるでしょう。
OS/環境依存部、プログラム対象分野の知識体系、アプリケーション、を分けるには、
レイヤー・パターンが有効ですが、そのレイヤーを切り分けるためにも、
OO分析の作業が重要なのです。
他にも書くべき事があるのですが、とりあえずここで筆を置きます。
282 :
278 :2005/05/15(日) 22:20:01
>>281 >もし設計/実装レベルのみに着目してソフトウェア開発を行うと、
いやいや、最終的に両方ともやらなければいけないのは分かっているんだけど、
ある程度のフィードバックが、実装レベルから分析レベルに伝播するから、
わざわざ分けずに一言で纏めちゃっても良いんじゃないかって言う勝手な話
分析レベルで抽出されるオブジェクトと、 設計レベルで抽出され、実装に反映されるオブジェクトは、 かなり距離感がある これが、二つのプロセスを分離している理由です。 もちろん、シェアウェアとか個人でプログラムを作成されている方の中には、 実装技術ベッタリで素晴らしいアプリを作成されている方も多いようですし、 貴方の信じる道を行けば良い、と思います。
284 :
278 :2005/05/15(日) 22:50:32
ああ、なんとなく雰囲気が掴めました 目的から作成するオブジェクトと、実装技術から発生させるオブジェクト…… ……これらを最終的に一致させるように、今まで考えていたのですが、これじゃダメなんでしょうか (ひとつになった最終形を眺めて、278 を考えていたです) っていうか経験不足です 企業に入ってそこそこのプロジェクトに参加するようになったら、改めて考えてみますです
なんだろ。目的と実装を一致させるのではなく、実装を目的でラップするとか、そういう意味合いで
・・・・・・。
287 :
デフォルトの名無しさん :2005/05/16(月) 20:38:55
うむ。わざわざ別の用語にするほどのこととは思えないな。
>>284 のような「設計方針」「心構え」で申し分ない。
288 :
デフォルトの名無しさん :2005/05/16(月) 20:41:57
いや、だから個人で勝手にやる分には全然構わないけど、 内容的には大きな差があるんだって。 >>分析モデルと設計モデルの間の深い溝。 俺はこの分野に入ってすぐ、気付いたけどなぁ〜
289 :
デフォルトの名無しさん :2005/05/17(火) 08:50:54
具体的に
いや、そーゆーのは仕事で覚えるものだから、 素人グラマーに意見するつもりはない。
だいたい趣味がプログラムの
>>289 は、
朝っぱらからこんな所でなにやってんの?
292 :
デフォルトの名無しさん :2005/05/17(火) 09:14:29
結局具体例もないわけね
餓鬼と判定。以降スルー
294 :
デフォルトの名無しさん :2005/05/17(火) 09:24:49
自演臭い
295 :
デフォルトの名無しさん :2005/05/17(火) 09:26:12
俺の思いを分かるのは俺だけ!プ
VIP板に(・∀・)カエレ
297 :
デフォルトの名無しさん :2005/05/17(火) 20:38:12
ジサクジエンイクナイ
>>282 そういう思考が肥満児クラスを産む、
なんてな。
299 :
デフォルトの名無しさん :2005/05/18(水) 23:29:45
良い設計モデルの作り方(前編)
http://www.atmarkit.co.jp/farc/rensai/goodmodel01/goodmodel01.html ◇ 目指すべき分析モデルの形
分析モデルの作成方法については、多くの設計者や方法論者がさまざまな方法を主張しています。
ここでは詳細には述べませんが、例えば、
・ワード・カニンガム(Ward Cunningham)による「CRC分析法(ブレーンストーミング)」(注1)や
「名詞・動詞分析法」(注2)、
・ピーター・コード(Peter Coad)により『Java Modeling in Color with UML』(Prentice Hall刊)の中で紹介されている設計手法(注3)
などがあります。
注1: CRC分析法(ブレーンストーミング)
クラス(Class)、債務(Responsibility)、協調(Collaboration)に分けられたCRCカードを用いて分析していく方法です。
詳細は『Object Design: Roles, Responsibilities, and Collaborations』(Rebecca Wirfs-Brock/Alan McKean著、Addison-Wesley刊)
をご参照ください。
注2: 名詞・動詞分析法
ユースケースや用語集から、名詞、名詞句を探し出して、クラスの候補とし、動詞、動詞句を探し出して、メソッドの候補として作成していく方法。
注3: 『Java Modeling in Color with UML』(Prentice Hal刊)の中で紹介されている設計手法
4つのアーキタイプ、瞬間―時間間隔、役割、パーティ/場所/物、説明に分類し、色分けして、パターンに当てはめて分析していく方法。
特に分析モデルに限ったものではありませんが、最初のモデルを作成する場合の強力な手法となっています。
300 :
デフォルトの名無しさん :2005/05/18(水) 23:30:12
◇ 設計モデルの理想 設計モデルの段階における理想的なモデルとはどんなモデルでしょうか。設計段階のモデルに従って実装が行われ、 その結果システムが出来上がるわけなので、生産性が高く、保守性や拡張性が考慮されていなければなりません。 そのうえで、実装担当者にとって理解しやすいモデルが「良い設計モデル」ということになります。 最近のアジャイル系開発プロセスでは、モデリングを分析段階と設計段階に分けず、 モデリング=設計(Design)と考えたり、XPのように、コーディング作業にモデリング作業を含んでしまうプロセスもありますが、 本稿では、分析と設計の考え方の違いを解説するために、あえて分析モデルと設計モデルを分けて表現しています。
301 :
デフォルトの名無しさん :2005/05/18(水) 23:57:53
なんかPascal臭い感じだな(意味分かる?)
しらねぇよ屑
てめえは御託並べる前に、構造化プログラミングとデータ中心アプローチくらい覚えろよw
304 :
デフォルトの名無しさん :2005/05/19(木) 08:27:55
なんか初心者にはスレッショルドの高いスレになっちまったな
>>299-300 のボーランド@IT記事がいいと思うよ。
匿名掲示板で数文字でノウハウ聞き出そうとするアンタは、ギブアンドテイクつう言葉がわからんヒッキーだろ
また電波とばす。受信したい奴だけ受信してくれ。 C# だと、オブジェクトの派生になるが C と同じような構造体が扱える 宣言は 『 struct Struct1 { 〜 } 』 でインスタンス生成は 『 new Struct1() 』 それに対し、オブジェクトの宣言は 『 class Class1 { 〜 } 』 でインスタンス生成は 『 new Class1() 』 なんだけど、 これ、宣言が 『 object Object1 { 〜 } 』 の方が分かりやすくないか?って電波だ。 struct の宣言では、定義してあるのが 『構造体』 で、作成されるのが 『構造体のインスタンス=構造体』 だからまあ良い。 だけど class の下りは、定義してあるのが 『クラス』 で、作成されるのが 『クラスのインスタンス=オブジェクト』 だから 定義された物と作成される物が異なっていて気持ち悪いかもしれないと言うこと。 異なっていて気持ち悪いのならば、いっそのこと 『 object Object1 { 〜 } 』 にしてしまえば……ってコトです。 もちろん、object の宣言を行っていても 『これはクラス Class1 のインスタンス』 という表現は行える筈。 クラスって言葉は、『部門』 とかの分類を表す意味があるから。レベルとかと同じ意味で。 C# では、構造体のインスタンスもオブジェクトと言っているから、まあ気にし過ぎかもしれないけど、 C から入った俺は、なんとなく 『構造体の定義から生まれたモノ=構造体』 にしたくて。 ……って、なんとなくクラスとインスタンスの区別がついてないっぽいな。すまぬ。
===== 電磁シールド ===== シンタックス・シュガー作っても本質は変わらない。 クラスと構造体を同一視するのなら、サルもミジンコも同じ。 クラスとオブジェクトの違いもわからずに、 そんなに細かいところをあれこれ弄る必要ナッシング。
308 :
デフォルトの名無しさん :2005/05/19(木) 21:41:58
structで定義しているのは構造体の構造 実際に作成する時作成されるのは構造体 この違いがクラスとオブジェクトの違い
309 :
デフォルトの名無しさん :2005/05/19(木) 21:44:36
けれどクラスという概念をなくしてしまってもいい オブジェクトの構造・仕組みという抽象的なもので コード上は現れないようにしても問題ないだろうよ
なんか変なのが居ついてるな
>>309 そういう道を進んでいる言語もある。
プロトタイプベースと呼ばれているようだが。
今頃プロトタイプ・ベースを語るとは・・・クオリティテラ高杉
プログラムもろくに書けない負け犬は、 古臭い脳内知識で妄想勝利するしかやる事がないんだな プロトタイプベース言語が提供する インスタンスに対する属性/メソッドの付加は、 Composit, Decoration, Delegation, Factoryあたりで実現できる。 プロトタイプベース言語は、それらの機能を言語仕様に取り込んでいるだけw
Composite, Decorator, Prototype パターン + Delegation (委譲による処理) な
クラスベース =オブジェクト間にメタ関係を設け、 メタ関係上位にあるオブジェクト(クラス)に、オブジェクト生成や継承の仕組みを任せて、 メタ関係下位にあるオブジェクト(インスタンス)の内部実装の簡略化を図ったもの プロトタイプベース=全てのオブジェクトに、オブジェクト生成や継承の仕組みを提供するもの。 概念は単純になるが、言語実装技術やプログラミング技術のハードルは高くなる。 (静的型付けやLiskov置換則による安全性を、言語レベルで提供しにくくなる) 概念学習への初期投資を惜しむような人間が、プロトタイプベースを選択するのはナンセンス。 プログラム書かない人が見栄知識でアレコレ言うだけなら、チラシの裏に書いてろ。
>>315 いい比較だと思うが、それだとクラスがファーストクラスな存在に読めるかも。
またファーストクラス厨房か。 Smalltalkでクラス・ベースのオブジェクト指向が確立した後で、 あらためて Self等でプロトタイプ・ベースのオブジェクト指向言語が研究されたのだから、 クラス-オブジェクト関係 (メタ関係 あるいは インスタンス関係) の方が広く受け入れられてる概念だと思うよ。 Abadi & Cardellaの本もまずクラスベース言語、次にオブジェクトベース言語という展開だし。
あ、もっとレベル低い人か。 Smalltalk等、クラスをファーストクラスなオブジェクトとして扱うのが第一世代、 CLOS等、手続き型の延長線上にクラスレスなOOを定義したのが第二世代、 C++等、クラスをオブジェクトが共有する構造体として扱うのは邪道な第三世代、 Java等、クラスをリフレクション等駆使して、実行時に参照可能なオブジェクトとして扱えるようにしたのが第四世代 だよん。(てきとー
319 :
いやん :2005/05/20(金) 18:40:57
× Cardella → ○ Cardelli
Selfとか、プロトタイプ・ベースの言語が研究されるようになったのは、C++とJavaの中間くらいからかな。第3.5世代・・・新しい開拓地
>>318 プログラム書かない人が見栄知識でアレコレ言うだけなら、チラシの裏に書いてろ。
322 :
デフォルトの名無しさん :2005/05/20(金) 19:29:24
おまえの事だよ
323 :
デフォルトの名無しさん :2005/05/20(金) 21:19:08
プログラム書かない・・・情報処理言語の研究者なのかも
豆な人?
325 :
306 :2005/05/21(土) 14:42:19
やっぱり混乱の元になったか……
クラスベースについて疑問を思っているんじゃなくて、ただ単に 『表記法』 について疑問に思っただけだったんだけどな
クラスベースとかインスタンスベースとか、正直どうだって良いんだけど
>>308 >structで定義しているのは構造体の構造
同様に、class で定義しているのはオブジェクトの構造つまりクラス
それは分かる。struct および class が 『定義そのもの』 を指すのか 『定義した生成物』 を指すのかの違いのような。
気分的には、生成物を指したい
いろんな「何を」や「何は」が抜けていて、「何に」ついて言いたいのかさっぱりわからない。
頭おかしい人だから、放置しとけ
>>325 君が誤解している(もしくは不完全な理解をしている)のは、
クラスやオブジェクト等のOOの概念ではなくて、型という概念だ。
Cardelliでも読んで、型とは何か、型を宣言するとはどういうことか、
じっくり考えてみたらいい。
329 :
306 :2005/05/21(土) 15:05:19
頭おかしいって言われちまったい ^_^;
んじゃ書き直す
======
C# の表記法について、
class では 『定義そのもの』 を指していることは明確であるが、
struct は 『定義そのもの』 と 『定義によって生み出される生産物』 の、どちらを指すのか分かり難いと俺は思う
言いたい事はこれだけ
======
>>307 C# ではクラスと構造体が同一になっちゃってるから困っているんです
>>308 構造体の構造を定義するのならば、キーワードは 『struct_struct』 であるべきという気もします
『struct』 単体ならば、それは 『定義に代って生み出される生産物』 を指すのでは?
国語の問題な気がしてきた。
331 :
306 :2005/05/21(土) 15:12:37
>>328 了解……出来るように頑張ります
Pascal の 『レコード型』 とか、C の 『構造体型』 とかと同じように考えると、class では 『クラス型』 を定義している筈。
しかし生成物の方は 『レコード型のレコード』 『構造体型の構造体』 とは異なり 『クラス型のインスタンス』 だから、
前2者に揃える場合、これを 『オブジェクト型のオブジェクト』 にしたほうが簡潔ではないかと思いまして。
ドーナツの穴について話す時、 「ドーナツ」という単語が付いていると、あたかも「ドーナツ」が存在しているかのように感じる。 だから、「穴の穴」というのが正しいぃぃぃぃーーーーーーーーーーーーーー
「ドーナツの穴」って、まるで穴の部分にドーナツがみっちり詰まってるみたいで、誇大広告だよな(ピーヒャラ
人間という単語と、その実体を考えるとき、 実体は単なる人なのに、 単語に「間」という漢字がついているのが、直感に反する。 これからは、「人間」という単語を使うのはやめよう
>>306 そのobjectってVBでいうところのモジュールだよな?
classと違うだろ。
338 :
デフォルトの名無しさん :2005/05/24(火) 06:19:22
おれはstructで構造体の構造が定義されてるって自然に感じるけどな んでその構造を持つ変数を同時に生成することもできると
339 :
デフォルトの名無しさん :2005/05/24(火) 09:52:10
>>331 PascalやCのほうを『レコード型のオブジェクト』、『構造体型のオブジェク
ト』って思ってみては?
オブジェクトとインスタンスは、まぁ、同義ということで。
340 :
306 :2005/05/24(火) 17:24:00
色々とすまなかった。整理したら間違いに気付いたよ。
こんな馬鹿をやったのは久しぶりだ。今は後悔している OTL
【正しいこと】
・C# の 《クラス》 には 『クラス』 『インタフェイス』 『構造体』 の3種類が存在する
・『インタフェイス』 と 『構造体』 は、Object クラスを継承している
【俺が間違っていたこと】
・《クラス》 と 『クラス』 を混同し、宣言時のキーワード 「class」 が主に 《クラス》 を指す物と考えてしまった
・『クラス←構造体』 に代表される 「言語系外での継承」 が、一般の継承と完全に同じであると信じて疑わなかった
その結果、俺は 「class」 と 「struct」 が同一レベルの概念ではないと錯覚した
そして、「class」 と 「struct」 のレベルを同じにしようと思い、「class」 を 《クラス》 から 『クラス』 にするために
「《クラス》 には 『オブジェクト』 『インタフェイス』 『構造体』 の3種類が存在する、と言い換えたらどうか」
と提案した (
>>306 )
(実際は 「class」 は 『クラス』 であり、単なる言葉遊びだった orz)
全く意味わからんなw 【正しいこと】に書いてある内容が正しくない。
だからまず国語を勉強するべきだって。 つまり言語学習を先にするべき。
343 :
306 :2005/05/25(水) 13:28:06
>>342 悪い。相変わらず間違えてたみたい。
=====
「C# の 《クラス》 には 『クラス』 『インタフェイス』 『構造体』 の3種類が存在する」 ってのは、
「Java の 《クラス》 には 『クラス』 『インタフェイス』 の2種類が存在する」 っていうどっかの本の台詞のパクリだった
この 《クラス》 は、Smalltalk のメタクラスに該当するんかな。よく分からんけど
それはともかく、構造体はクラス階層の中に含まれているから、よく考えたらこの中に入れちゃいけないのかもしれない
=====
インタフェイスは対応するクラスが無いから、Object から派生しているとは言えないでした
(ただし、インタフェイスを実装したクラスのインスタンスは Object であることは確定なので、Object として扱える)
ここのところは訂正しておきます
344 :
306 :2005/05/25(水) 13:38:42
結局、まだ理解できていないことは 実質 「class StructA: System.Struct { 〜 }」 なクラスを 「struct StructA { 〜 }」 と記述させる C# において、 キーワード 「class」 と 「struct」 を同列に置くことが果たして妥当なのかどうか つまり System.Struct からの実際の継承は、神の領域において行われる (ソースとして記述できない) が、 神の領域において、結局はクラスである構造体が、クラスと同じレベルまで昇進しているのかどうか ……自分でも未だ混乱していることがありありと分かりますな あとで Smalltalk でも勉強しよう……
間違った前提知識からは(正しい推論をしたとしても)間違った結論しか得られんぞw 実質〜の部分が既に間違ってますがなw MSDN読め
太陽が西から昇るなら、このレスは346である
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vcrefStructTypes.asp 解説
struct 型は、Point、Rectangle、Color などの軽量のオブジェクトを表すのに
適しています。点はクラスで表現できますが、一部の事例では構造体の方が
より効果的です。たとえば、1,000 個の Point オブジェクトから成る配列を
宣言する場合は、各オブジェクトの参照用に新たにメモリが割り当てられます。
この場合は、構造体を使用した方がリソースを使用しません。
構造体に対して既定の (パラメータなしの) コンストラクタを宣言するとエラー
になります。構造体メンバを既定値に初期化する既定のコンストラクタが常備
されています。
構造体のインスタンス フィールドを初期化するとエラーになります。
new 演算子を使用して struct オブジェクトを作成すると、オブジェクトが作成
されて適切なコンストラクタが呼び出されます。クラスとは異なり、構造体は
new 演算子を使用せずにインスタンスを作成できます。new を使用しなかった
場合、各フィールドは未割り当てのままになり、すべてのフィールドが初期化
されるまでオブジェクトを使用できません。
クラスには継承がありますが、構造体には継承がありません。構造体は、
他の構造体やクラスから継承できず、基本クラスになれません。
ただし、構造体は、基本クラス Object から継承します。
構造体は、クラスの場合とまったく同じ方法でインターフェイスを実装できます。
C++ とは異なり、キーワード struct を使用してクラスを宣言できません。
C# では、クラスと構造体は、意味が異なります。構造体は値型ですが、
クラスは参照型です。
値型の機能の詳細については、「値型」を参照してください。
348 :
306 :2005/05/25(水) 21:23:41
>>347 あ、もしかして struct って System.Struct の継承じゃない……のか?
でもインスタンスを作成しているわけじゃないし……なんなんだろう。
=====
それはともかく、え〜っと……アロエリーナに聞いたらヒントを教えてくれました。
>キーワード 「class」 と 「struct」 を同列に置くことが果たして妥当なのかどうか
「妥当じゃないです」
>クラスである構造体が、クラスと同じレベルまで昇進しているのかどうか
「そんなわけないです。クラスと構造体は別物」
>じゃあ、クラスと構造体はどうして同じような構文になっているの?
「それが利便性ってもんです」
……俺、この時点で納得しちゃって良い?
「クラス定義と構造体定義は別物だけど、分かりやすいように同じ構文になっている」 で OTL
350 :
306 :2005/05/25(水) 21:43:54
…… System.Struct なんて無いじゃん orz 昼間俺が見てたのは幻か〜 orz え〜っと……ってことは、struct は実質 System.ValueType の継承……じゃなくて…… 「struct で定義した構造体は、オブジェクト指向の世界からは System.ValueType を継承したオブジェクトのように見える」 ……で良いんか?
構造体はオブジェクト指向の外に属するのん?
352 :
デフォルトの名無しさん :2005/05/26(木) 00:49:27
なにこの素人?
ちょっとありえないバカだな。 知識がないだけなら調べることで補えるが、 知識がないことに自覚がない上に無根拠な自信に満ち溢れて混乱した言葉を垂れ流すレベルになると 矯正はかなり困難。
構ってクンのつまらんネタだな
考えるな、推測するな、勝手に言葉を定義するな。仕様書を読め。
>>1 まあ、その問題は、エロ本によるオナニーがさきか、それとも
実戦のセックスが先か、みてーなもんだ。どっちにも固有の良さはある。
でも、いつまでもオナニーに留まってるわけにはいかない。
そーゆーもんだ。
>>1 > VisualBasicやCといった手続き型言語をずっとやってきた人が、
> C#やJavaといったオブジェクト指向言語をマスターする場合
> オブジェクト指向の概念・概論を学ぶのが先がいいのか、
> それとも、C#やJavaの言語を学ぶのが先がいいのか、
> どっちがいいと思われますか。
1. オブジェクト指向の概念・概論を学ぶ
2. その概念を、ずっとやってきたVisualBasicやCで実現してみる
3. 次にC#やJavaの言語を学び、2でやっていたことが言語のprimitiveとして
存在することの良し悪しを考察する
4. VB5ってある意味オブジェクト指向の塊だよなあと感慨にふける
359 :
306 :2005/05/26(木) 20:13:05
>>352-355 おお、なんか世界の裏まで知り尽くしているっぽい発言ですな
恐れ入ります
で、結局 「C# の構造体」 って何者なんでしょね
360 :
306 :2005/05/26(木) 20:22:49
>>353 >>355 『使うだけ』 ならば仕様書を読めば事足りる
細部まで理解したいのならば、それだけじゃ全然足りない
……って素直に思った
最低だな俺 OTL
っていうかそれ以前に仕様書をマトモに読めよって OTL
どうする?NG登録したければコテ付けるけど、それとも 306 のままで良い?
306でおっけーです。NG登録しときました。
362 :
306 :2005/05/26(木) 20:27:33
去るってのも選択肢の1つか……って、そういやもうネタ無いじゃないか メモ帳にしちまって正直すまんかった OTL もうちょっと精進できるよう頑張ってみるよ
NG登録完了
でも、
>>360 にはとりあえず同意しておく
「全然足りない」ときに「自己流の解釈をする」ってのは方法として間違っていると思うが
364 :
306 :2005/05/26(木) 21:37:10
306じゃないけど これ入れとけば 誰にも見つからないってわけか 3060でもいいのかな?
0306=198 0x306=774
童貞ですがなにか?
おねぇさんのマンコ貸してあげようか?
368 :
偽306 :2005/05/27(金) 05:32:30
言語学習する前に概念をさらっと学ぶ必要はあるよな
そしてその実例を言語学習で学ぶと概念が身に付く
車の両輪を右から作るか左から作るか悩むようなもので
あまり意味のある質問とは言えませんよ
>>1
0b306: Syntax Error
▂ ▂ ▄ ▄ ▄ ▄ ◢░ ▄▀ ▀▄ ░◣ ▌▐▄▀ ▌▐▄▀ ▐░:: ░▍ ▐▓░:: ▄ ░▍ ▐▓░░::░:: ▀▀▀▀▀▀▀▀ ░▓▍▅ ▅ ▄▄▄▄ ▐▓▓░░░::░::: :::░::░▓▍ ▊ ▋ ▐▓▓▓░░░::░::░::::: :: :: ::::░::░░░░░░▓▓▍ ▐▄▌ ▀█▓▓▓░▓░░::░:::░:::::::░::░░░░░▓░▓▓▓▌ ▄▅▀
371 :
デフォルトの名無しさん :2005/05/27(金) 14:43:02
372 :
デフォルトの名無しさん :2005/06/05(日) 21:47:37
カプセル化と継承ってオブジェクト指向の機能だけど ポリモーフィズムは機能じゃないよね? 継承を利用したデザインパターンだと思うんだけど 識者の意見をお聞きしたい。
>>372 ・カプセル化はオブジェクト指向の機能ではない
・継承はオブジェクト指向の機能だが、必須ではない
・ポリモーフィズムには多数の種類がある。
貴方が遅延バインディングについて言いたいのだと推測すると、それはオブジェクト指向の機能
・遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う
ん? 2行目と3行目は矛盾している気がするが、とりあえず継承有りのオブジェクト指向を考えてくれ
375 :
デフォルトの名無しさん :2005/06/05(日) 22:05:53
>遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う まぁ、じっくり騙ってくれ、その概念を
▂ ▂ ▄ ▄ ▄ ▄ ◢░ ▄▀ ▀▄ ░◣ ▌▐▄▀ ▌▐▄▀ ▐░:: ░▍ ▐▓░:: ▄ ░▍ ▐▓░░::░:: ▀▀▀▀▀▀▀▀ ░▓▍▅ ▅ ▄▄▄▄ ▐▓▓░░░::░::: :::░::░▓▍ ▊ ▋ ▐▓▓▓░░░::░::░::::: :: :: ::::░::░░░░░░▓▓▍ ▐▄▌ ▀█▓▓▓░▓░░::░:::░:::::::░::░░░░░▓░▓▓▓▌ ▄▅▀
378 :
372 :2005/06/05(日) 22:51:30
>>373 遅延バインディングという概念は分かりませんが、
Javaで例えるとカプセル化の為にprivateという修飾子があり、
継承にはextendsという機能がありますよね?
でもポリモーフィズムには言語の機能としては何もなく
継承を利用したデザインパターン(ストラテジー?)じゃないかと
思うのです。
>ポリモーフィズムには多数の種類がある。
これは詳しい解説キボンヌです。
>>378 > でもポリモーフィズムには言語の機能としては何もなく
>>373 はそれがlazy bindingだという話だろ?
>>378 > >ポリモーフィズムには多数の種類がある。
> これは詳しい解説キボンヌです。
adhoc polymorphism, inclusion polymorphism, parametric polymorphismの3つは
理解しておいたほうがいい。
381 :
デフォルトの名無しさん :2005/06/05(日) 23:53:07
>遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う まぁ、じっくり騙ってくれよ
382 :
デフォルトの名無しさん :2005/06/06(月) 02:41:09
プログラムがオブジェクト指向たる条件ってなに?
383 :
デフォルトの名無しさん :2005/06/06(月) 02:48:32
>>382 本質的には、クラスという設計図をもとに、インスタンス(オブジェクト)を生成して使う仕組み。
カプセル化とかポリモーフィズムとかは、どちらかと言うとオマケ的な機能だ罠。
・クラスを重視するのは、むしろクラス指向なのでは? ・それだと、モジュール指向や抽象データ型とあまり区別がなくなるのでは?
385 :
382 :2005/06/06(月) 02:59:55
思うに、 ・対象をデータ構造に抽象化・カプセル化し、カプセル化されたデータの関数であるメソッドを持つ。 →データそのものであり、またデータを操作する主体である。 ・抽象されたものの集合の内包⇔外延関係が、派生という方法によって積極的に表現されている。 ということではないかと思うんだけど。どうでしょう?
386 :
382 :2005/06/06(月) 03:10:17
カプセル化と書いてしまったけど、
>>383 が書いている通り、
確かにカプセル化はオブジェクト指向の本質ではないと思うんです。
しかし、ポリモーフィズムに関しては、例えば自然言語というのは、
「抽象されたものの集合の内包⇔外延関係(例:犬⇔コギー)」によって構成・表現されている。
その自然言語の構造を踏襲するならば、この関係を積極的に表現する
派生という方法をOOPが持つのは、極自然に感じます。
>>378-379 adhoc: interfaceのimplements
inclusion: class, interfaceのextends
parametric: C++のtemplateか
>>387 adhocはC++のfunction overloadingが典型例。
C++のtemplateはparametricとは言い切れない。型的に。
…えーと、よく解らないんだけど 「カプセル化されてないオブジェクト」って 有り得るの?想像付かない…
struct point { int x, y}; とかじゃないか
いつの間にか、話がムチャクチャな素人にかき回されてるな。 ブログラムもロクに書けない素人が平日昼間からシャシャリ出るな、と。
>>387 adhoc polymorphismは、overloadingとcoersion (i.e. int < float)
inclusion polymorphismは、例えばinheritanceの事。
parametric polymorphismは・・・C++ templateがお気に召さないなら、OcamlかJava Genericsでどうよ。
上記二つをまとめて universal polymorphismと呼ぶ。
>>373 下記の発言は一体どういう文脈の話なのか、ちゃんと説明しろよ
> ・ポリモーフィズムには多数の種類がある。
> 貴方が遅延バインディングについて言いたいのだと推測すると、それはオブジェクト指向の機能
> ・遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う
int < float つうと型パラメータみたいだな。 int number < float numberという比較演算子は、coersionとして実装される事が多い、と。
>>392 >下記の発言は一体どういう文脈の話なのか、ちゃんと説明しろよ
>> ・ポリモーフィズムには多数の種類がある。
ん? 「ポリモーフィズムは……」って聞かれたんでランタイムポリモーフィズムを想像したけど、
ランタイムじゃないポリモーフィズムももちろんあるって忠告したかっただけ
テンプレートだとかメソッドのオーバーロードだとか、#if 〜 #endif でさえ 『ポリモーフィズム=多様』 で括れるし
って言うか数レス前で既に出た話ですねスマヌ orz
なんだ、やっぱ変な人が妄想騙ってただけか
>>396 自分が理解できないからって変人扱いすることは筋違いだとか、
そもそも勉強中の人を変人扱いすることは筋違いだとか思った
いや、俺もオーバーロードがポリモーフィズムの一種だと聞いたときには「ハァ?」だったわけだが
398 :
392 :2005/06/09(木) 21:14:58
はぁ? >遅延バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う これをまともに解釈するのは無理ってもんじゃないか?(hahaha
399 :
デフォルトの名無しさん :2005/06/09(木) 21:17:42
400 :
デフォルトの名無しさん :2005/06/09(木) 21:18:34
401 :
373 :2005/06/09(木) 21:20:38
悪い。普通に 「遅延」 って言ったが 「動的」 の間違いだった罠 (´・ω・`) あたま超混乱してます現時点で。 ……けど、「それを〜」 以降を訂正する気は全く無い。
402 :
デフォルトの名無しさん :2005/06/09(木) 21:26:07
はぁ? >動的バインディングは継承を利用しているが、それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う これもまともに解釈するのは無理じゃないか?(pupupu
403 :
373 :2005/06/09(木) 21:27:36
間違っているのがどこだか分からん 俺の頭か (^_^;
えぇ〜と、
勉強中の人が「〜と理解しましたが、どうでしょう」と書くのは普通だが、
元々ろくすっぽ勉強する気もない荒らしが、掲示板で聞きかじった断片知識を
>>373 のように書いてしまうのは、なかなか痛い行為だと思った。
405 :
373 :2005/06/09(木) 21:35:54
いや、断片知識のほとんどが書籍からやわ
406 :
373 :2005/06/09(木) 21:56:43
……謙虚に成りたい
言語はCさえ理解してれば十分 他の言語の文法は必要になったら覚えろ オブジェクト指向でも構造化でも、3日後に自分で理解できるコード書いてくれればなんでもいいよ……
>>409 程度の低いところにお勤めですな(w
経験上、今時Cだけ知っててC++を知らない人は、実はCを良く理解していない
ことが多い
Cのあの糞ったれな宣言シンタクスを難なく読みこなせる程度でないと、
C++は無理だな
>>407-408 基本的に
>>392 と同じ。リファレンス [Cardelli & Wegner '85]って、もう20年も前の話か。
10年前のOOには、Genericsに代表されるような柔軟な型システムや
関数型言語(HOPE〜SML, Haskell)の型推論とか
ほとんど取り入れられていなくて、知恵遅れの村に来た感じがして嫌だった。
普及型のOO言語は、ようやく20年前の水準に追いついたわけね。
412 :
411 :2005/06/09(木) 23:48:07
えぇ〜とぉ、
>>373 相変わらず概念と単語が混乱しているようだが、あんたが言いたかった前半は、
(
>>372 が「ポリモーフィズムはオブジェクト指向の機能ではないと言ったが)
Subtype polymorphiscm (継承による多態)は継承によるものである。
といったところか。で、後半部分
> それをわざわざもったいぶって「デザインパターン」と呼ぶのもどうかと思う
は相変わらず前半とつながんねぇな。
>>412 単なるポリモーフィズムを「これはデザインパターンだ!」と言いたくは無い
って言いたかったんや……
414 :
デフォルトの名無しさん :2005/06/10(金) 00:02:02
だから何それ?意味わかんねぇよ、あんたの文章は
一丁前にプログラム言語なんか勉強する前に、先ずは日本語を勉強しとけってことか。
416 :
デフォルトの名無しさん :2005/06/10(金) 00:07:20
「単なるポリモーフィズムを、デザインパターンだ!」と主張するような奴は、普通の所には居ない。 上でさんざんあんたがやってきたように、相変わらず単語や概念が無茶苦茶なまま理解して、 それを匿名掲示板に書き殴ってるだけじゃねぇの?
417 :
373 :2005/06/10(金) 00:12:59
>>416 >「単なるポリモーフィズムを、デザインパターンだ!」と主張するような奴は、普通の所には居ない
俺は 372 がこのことを主張したいように感じ取った。そして↑と同じ考えを書きなぐった。
ただそれだけなんだ…… orz
>相変わらず単語や概念が無茶苦茶なまま理解して そうか……端から見ればそう見えるのか。っていうか8年も Java の本めくってて何も身についてないですか orz 市にてぇ……
文法はCさえ知っていれば3日で覚えらえっる 概念にかんしてはオブジェクト指向の概念というより もっと一般的なことを認識してほしい
>>417 確かに元の質問
>>372 は得体が知れないな。
Garbage In , Garbage Out の典型だな
421 :
デフォルトの名無しさん :2005/06/11(土) 16:03:50
CとJavaとC#を勉強しているのですが、C++だけやってません。 やはりC++はやったほうがよいでしょうかね? C#できればいらない?
>>421 CとC#とjavaができるならC++の習得も(たぶん)容易だからやっとけば?
templateの強力さに感動せよ。
>>421 必要になったときで間に合うと思う
簡単なサンプルコードがC++で書いてあっても
ならJavaとC#ができれば概略はつかめるし
>>422 templateの真髄に突っ込むと火傷するよ…… 感動するのは同意
>>421 つうか、templeteのエラーメッセージの難解さに挫折すんなよ
いまや、C++は標準ライブラリでtempleteつかってからな
単発質問厨房:無意味な質問をして、レスが伸びるように誘導するだけの厨房。 相手にするだけ時間の無駄。つうか大抵自作自演でスレの話題を断ち切るだけの荒らし。
400超えのスレで何言ってんだよ
427 :
デフォルトの名無しさん :2006/01/13(金) 18:55:39
初心者なの レベル高すぎなの 頭パンパンなの
概念学習が先です C++使ってるくせにC以下のプログラム多すぎ
429 :
デフォルトの名無しさん :2006/01/17(火) 03:19:50
>>428 すまん。ホントスマン。
実は、あんまりCも分かってないんで、勘弁してくれ、
できればお勧めのCとC++の参考書を教えてくれ。
両方同時でしょ。 野球選手に体力と技術どっちが先に必要かって言ってるようなもんだ。
431 :
デフォルトの名無しさん :2006/01/17(火) 06:00:40
英語力も大事だね ちゃんとしたプログラマのコードは英文として読めるけど 英語がダメなやつのコードは分けわかんねえ
メリケンの書いた糞コードは無視ですか
433 :
デフォルトの名無しさん :2006/01/17(火) 14:03:31
>>427 自分の理解能力を超えてやっても頭に入らない
これは学習スピードなども含んでいる
少しずつでも良いので理解を進めていけ
仕事で即時性を求められているなら理解しないでも作業を遂行できる能力を身に付けろ
まぁ、そういう事を考える前に、勉強なり手を動かすのが先だな。
435 :
デフォルトの名無しさん :2006/01/17(火) 18:58:49
オブジェクト指向の概念は「もの」指向だろ・・・。 その「もの」指向をどのように実現するかを言語を通して学ぶ。 概念が解っていなければ本当の意味で良い物は作れないし、 作るためには言語を理解していなければならない。 どっちが先ってもんでもないと思うが・・・。 これにて終了でどうでしょう。
オブジェクト指向なんてプログラミングをする上での考え方に過ぎない 馬鹿万能崇拝者がいるけど、あんなの本末転倒ですよ;)
オブジェクトにこだわるとC++なんて糞言語使ってられなくなるのが普通
>>438 そこまでは言わないにしても、言語を使いながら学習していく場合には
適さないと思います<C++
もっと素直で筋のよさそうな言語から始めるのがよいかと。
本命はやはりSmalltalkなんですかねぇ、でも今だとOOをサポートした
スクリプト言語を使うのがよさそうな気がします。
スクリプトなら余計なお約束はほとんど考えずにちょっと書いて
ちょっと試すことができるし、静的型が無い場合が多いと思うので
必然的にC++のvirtualみたいな歪んだものを扱わなくてよいし。
440 :
デフォルトの名無しさん :2006/01/18(水) 13:00:31
>>439 オブジェクト指向系のスクリプト言語はちょっとした試行を行う際には良いが
システムの構築と言った要件には使うべきではない
442 :
439 :2006/01/18(水) 16:05:31
>>440 あくまで学習目的のつもりで書きました。
そういう用途であれば素直に書ける言語が良いかなぁと。
規模が大きくなった場合にどうなるかはやったことがないので何とも。
「硬さ」が足りない部分を、十分なUnitTestで補えれば化けそうな気もするのですが……
443 :
デフォルトの名無しさん :2006/01/18(水) 19:12:46
スクリプト言語の弱点はスケーラビリティにあるんじゃない?
言語の仕様による話だが、スクリプト言語によってはスケーラビリティを考慮した アーキテクチャを取れないものがあると思う。 東証のプログラムとか銀行の基幹系システムをGroovy、Ruby、PHPで作れると思うかい?
>>445 メインフレームのバッチ処理という話であれば無理。
しかしながらそれは言語仕様によるものではない。
そもそもと金融システムでここ数年で出しゃばってきた手法を採用することはまずない。
なのでどうも実感がわかない。
もうちょい答えやすい例を挙げてくれるとうれしいです。
もしくはあなたが用意している答えを聞きたいです。
googleではpythonが広範囲で使われてるらしいやね どの程度の規模なんだろうな
> そもそもと金融システムでここ数年で出しゃばってきた手法を採用することはまずない。 なぜ金融システムは保守的なのか? その答えの一つにスケーラビリティ重視があるからではないだろうか? スクリプト言語もチューリングマシンを標榜する以上、JavaやC++と同じ事は実現できる。 しかし、システム構築は言語だけで行われるものではなく、動作環境、フレームワーク、 ライブラリといったものに強く依存する。 言語仕様、環境、ツールといったものが渾然一体となり、文化が形成され、その文化の中で 設計思想というものが生まれるのだ。 つまり、同じシステムを構築しようとしてもスクリプト言語を使う場合とJavaやC++を使う場合で 設計は自ずと異なってくるのだ。 そして設計が異なると、その長所、短所も異なってくる。 結局のところ適用分野の住み分けが 起こってくるのは当たり前のことだと考えている。
>>448 保守的・・・私が思いつくのはCOBOLやCでごりごり書いたものを実績があるからと言う理由で後生大事に流用してると言う状況です。
全銀手順で2400bpsみたいな。
能書きはいいからちゃっちゃとまともに動かせや。と言う分野だと認識しています。
>言語の仕様による話だが、スクリプト言語によってはスケーラビリティを考慮した
>>448 さんは言語仕様ではなくソフトウェア資産の差が問題であるという認識なのですね。
PerlにはCPANがありますし、CLIな言語では垣根がなくなって来ていますから、状況は変わってくるかもしれませんね。
450 :
デフォルトの名無しさん :2006/01/19(木) 06:39:26
Perlは論外では?
やはり静的な型チェックを行う型づけの強い言語の方が大きいシステムには 向いていると思う。 ソースの意図が見て分かりやすいし、コンパイラが静的にチェックできる 意味は非常にデカい。 スクリプト言語は簡単な仕事を簡単に片付けることを重視して作られている から、一人で片付けるようなちょっとした仕事には非常に向いているが、 それで大規模なシステムを構築しようという気にはならん。 Perlはなあ。暗黙のグローバル変数の乱用、シンタックスの汚さ、それらによる コードの読みにくさ。マルチスレッド非対応。 まあ論外だろ。
>>451 書き方を気をつければいいという話ですね。
>>452 「気をつければいい」でバグがなくなるかボケ
言語仕様として一部のバグの発生をありえなくすることのほうが
よっぽど大事
お前一人が頑張っても無駄。一人で作るわけじゃねーんだぞ
大規模開発の場合うるさいくらいの規約が当たり前だけど 納期前だとんなもん軽く吹っ飛ぶからなw あっと言う間にワンライナーの出来上がりだぜ!
456 :
デフォルトの名無しさん :2006/01/19(木) 20:12:17
なんだってさ さあみんな大規模開発でPerlを使おう!!
Perlは論外
>>457 おまえは雇わないので何の心配もいりません。
>>458 お前ごときが人を雇用することはありえませんので何の心配もいりません。
まあ、PHPも作り捨てなら有りってレベルだな
うっかりPHPを選択してしまって今大変なことになってます。
PHPは言語じゃないからなぁ
>>452 いや、一人で閉じてる世界なら「書き方を気をつければいい」で済むんだけどな。
あんた、仕事で大規模開発をやったこと、無いでしょ。
大規模開発においては、その種の事を決める人間はコードを書かないw
>>464 いい加減上流の仕事もできるようになりましょうね。
もう遅すぎる
467 :
デフォルトの名無しさん :2006/03/02(木) 19:59:15
いい本を見つけました。 「勝者のシステム 敗者のシステム」坂口英弘著 この本では、オブジェクト指向の考え方や、具体的なシステム設計の ノウハウが紹介されています。これまでのオブジェクト指向の解説書 には無い実戦的な内容です。ただし、前半はビジネス書っぽい内容です。 特に、アプリケーションの階層化や開発体制とオブジェクト指向の関連 を明確に示している点は新鮮でした。 無能PMの批判など(イラスト見てワロタ)もあり、面白い本なので オススメです。
オブジェクト指向なんて高校生だってマスターできる
>>468 ケイの(流れの。Smalltalkとかがサポートする)はそうかもね。
もともと子供向けだし。なんでもメッセージングだし。難しいのは「メタ」という
概念を体得することか。もっとも、ステレオタイプなオトナより子供のほうが得意?
http://tinyurl.com/jpyu5 ... The big idea is "messaging" -- that is what the kernal of Smalltalk/Squeak
is all about (and it's something that was never quite completed in our
Xerox PARC phase). The Japanese have a small word -- ma -- for "that which
is in between" -- perhaps the nearest English equivalent is "interstitial".
The key in making great and growable systems is much more to design how its
modules communicate rather than what their internal properties and
behaviors should be.
http://www.purl.org/stefan_ram/pub/doc_kay_oop_en ...OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding...
ストラウストラップの(流れの。C++やEiffel、Javaとかがサポートする)はどうかな…。
データ型とは何かについて理解できていないと難しいと思う。
加えて、抽象データ型はなにかとか、最近ではインターフェイスとか。
http://public.research.att.com/~bs/whatis.pdf ... Object-oriented programming is programming using inheritance. Data
abstraction is programming using user-defined types. With few exceptions,
object-oriented programming can and ought to be a superset of data
abstraction...
ということで「概念学習が先」に一票。
470 :
デフォルトの名無しさん :2006/03/03(金) 14:39:03
学生で独学でjava(たまに先生にも教わる)やってるけど、 いきなりオブジェクト指向をたいして勉強しないで言語から 始めたから苦労したかも ただ、間違えまくっていくうちに、オブジェクト指向についても結構おぼえていった希ガス
471 :
デフォルトの名無しさん :2006/03/03(金) 14:58:43
オブジェクト指向を覚えるなら デザインパターンを理解することが近道だよ はっきりいって
472 :
デフォルトの名無しさん :2006/03/03(金) 19:21:16
>>471 オブジェクト指向とデザインパターンに直接の関係性はない
473 :
デフォルトの名無しさん :2006/03/03(金) 20:02:40
>>472 デザインパターンがオブジェクト指向原則を理解する上での例題に
なり得る点を考えると、
>>471 の言うこともまんざら間違っていない。
覚えるなら実践 理解するならデザパタやリファクタリングなど
EclipseのようなIDEや UMLを覚えてUMLツールを使いこなせれば オブジェクト指向に対する理解が早まるかもしれないな
>473 うん,そう思う >471は,オブジェクト指向とデザインパターンが関連してると言ってるんじゃないし >472みたいな脊髄反射をよく見るけど,なんだかなぁって思う
>>472 は「直接の関係はない」といってるから「間接の関係はある」と認めてるんだよ、多分
Java、Ruby等のいろんな言語の文法を片っ端から覚えて
各言語の機能を比較していくのが早いんじゃないかなと思ってる
デザパタもいいよね
オブジェクト指向必要ないよ? と思ってる人に、良さを知ってもらうのに役立つ
SmallTalk とか、出始めの C++ とかちょっといじったころは、 「便利だけど、クラスとかメソッドとか一杯出来すぎて管理しきれねー」 と思って手出し控えてた時期があった。 Java を平気で使い出したのは、Eclipse を使い出してから。 IDE の存在は結構大きい、というか必須では。
>>478 Smalltalk も Browser がないと絶対使い物にならなかったと思います。
そう言う意味で IDE は確かに偉大ですな。
あと Smalltalk の t は小文字で書くのが正しいっす。
ちゃんとした文献ではすべて t が小文字になってます。。
(ただ、開発者の一人であるアラン・ケイはどっちでもいいと言っていたと思いますが。)
無料のEclipseがあるのにオブジェクト指向が学べないやつは真性アフォ
481 :
デフォルトの名無しさん :2006/03/08(水) 21:54:45
Eclipseとオブジェクト指向は関係ないだろ。 Eclipse使って、プロセス中心のプログラム書いてるやつもいるよ。 これまで見てきた中で、ツール依存のやつは、例外なくアフォ。 分かってるやつなら、Notepad使ったって立派なオブジェクト指向の コードを書くよ。
書けるやつはC言語でオブジェクト指向らしいものも書ける
VB厨でしたが、「フォームにカスタム プロパティを追加する」あたりから 入ってじわじわ分かり出しました。 その後C♯を始めるまでに、VBで実践出来る範囲のこと(インスタンスとか インターフェースとか委譲とか)を使っていたので、結構スムーズに 移行できました。 会社の中には、VB6の仕事がなくなるまで「グローバルの関数と構造体」で シコシコやってきた人たちもいますが、彼らは現在、途方に暮れつつも public staticなメソッドとインスタンス変数でなんとかやっています。
public staticしか作れないなんて最悪だな C言語厨と同類じゃないか
馬鹿に巨大なクラスを書いてOOPした気になってるVB/DEL厨は最悪だ。 巨大クラスのクラスフィールドはグローバル変数と変わらん!
C言語で書かれたオブジェクト指向設計のソースは とてもじゃないが生産性が高いとは思えない
>>481 もちろん、直接は関係ないよ。
IDEを使えば自然とオブジェクト指向になるわけでも、
使わなければオブジェクト指向ができないわけでもない。
ただ、管理しなければならない要素(クラス名、フィールド名、継承関係)
が増えるから、IDE のサポートがあったほうが楽、というか、無いとしんどいということ。
逆に言うと、IDE の恩恵を受けやすいともいえる。
変数のクラスから、メソッド名などが(継承されたものも含め)コード補完されるといった機能の恩恵は
例えば C言語などではあまり無い。
(構造体からメンバ名がコード補完されるだけではあんまりうれしくない)。
>>482 Motif のサブクラス書いてて厭になった。
是非一度お試し下さい。
490 :
デフォルトの名無しさん :2006/03/09(木) 19:22:15
>>488 >もちろん、直接は関係ないよ。
>IDEを使えば自然とオブジェクト指向になるわけでも、
>使わなければオブジェクト指向ができないわけでもない。
だったら、そう書いてね。
EclipseだのAjaxだの言ってるやつに限って、仕事できないのが
多くて困ってるんだ。趣味でやってるのか、プロジェクトに使え
るのか全く気にしてない。つまり、ヲタな奴が多い。
>>490 会社で嫌なことがあったかと言って、
勝手な偏見を持ち出されてもなあ。
Ajaxが今のところオブジェクト指向の勉強に役立つとは
とても思えないが、
Eclipseはかなり役立つ機能が揃っているのは
俺もたしかにそう思う。
設定で警告メッセージ項目を徹底的に増やして
FindBugs, CheckStyleなどを組み合わせて、
リファクタリング機能を使いこなすと
そのことがよくわかる感じだ。
>>491 >Ajaxが今のところオブジェクト指向の勉強に役立つとは
>とても思えないが
そもそも、その両者に何かの関係があるとも思えないが。
IDEとOOにしてもそうだが、無関係の何かを
関連付けるのが流行ってるのか?
493 :
デフォルトの名無しさん :2006/03/10(金) 17:34:24
Eclipseを否定するやつにかぎって仕事ができないのが多いんだ オブジェクト指向と聞くと逃げ出すようなダメグラマ
Eclipseを否定するとかしないとか、そういう議論する余地ってまだあるの?
496 :
デフォルトの名無しさん :2006/03/11(土) 15:41:17
継承はわかったが、結婚ってないのか?
497 :
デフォルトの名無しさん :2006/03/11(土) 18:36:39
Eclipseを苦々しく見ている気持ちは分かるよ。 OOの思想を理解しないで、カタチから入ってしまう人が 多いからね。そういう人が実に多い。 要するに、Eclipseを否定しているのではなく、そういう ツールとかに興味が行ってしまう開発者の問題なんでしょ?
>>496 結婚は近親相姦の問題(共通の親を持つ兄妹は同一の形質を持つ
この兄妹が子供を儲けると遺伝形質に曖昧さが発生する)があるか
ら、Javaでは採用を見送られた。
しかし結婚がないからといって悲観する事はない。
そもそも、嫁萌えより妹萌えだろ?
養子縁組を利用すれば相手を問わず妹萌えできる。
結婚なんてそもそも不要なんだよ。
>>497 Eclipseは数多くプラグインがでているから
それを使って楽しみたいと思っている香具師が多く、
結果的にEclipse自体が重たくなって使いにくくなるって
いうことならある。
けど、オブジェクト指向プログラミングの真価を
発揮しやすいIDEであることには変わりないな。
500 :
デフォルトの名無しさん :2006/03/11(土) 22:06:45
501 :
デフォルトの名無しさん :2006/03/12(日) 05:24:31
Javaは子孫を残す対象を厳しく選んでしまうという喩えか。 まあそうかもしれない。ちょっとしたことですぐコンパイルエラー出すし。 厳しすぎるのも無理もない。 だらしない男を許さない女みたいな
>>502 そういう意味ではJBuilder3は最強だな
継承関係の途中のclassファイルが無くてもコンパイルが出来る
Eclipseが使えるなんて当然だろ。できないやつは逝ってよし!
505 :
デフォルトの名無しさん :2006/03/13(月) 23:25:23
Eclipseばっかだけど、VisualStudio.NET 2005 ってどうよ。 MSは、Eclipseより生産性ずっと高いって言ってたよ。 チーム開発の機能が売りみたいだったな。
>>505 Teamなんたらじゃないときついな
家でちょろっと遊ぶ程度ならExpressやStandardでも良いんだけど
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
>>505 VS.NET 2005のチーム開発がEclipseよりも
売り? まさかVisual Source Safeをバンドルしただけで
売りだなんて言わないよな。
VSSはSubversionには非常に劣るし
509 :
デフォルトの名無しさん :2006/03/19(日) 11:33:21
>>508 確かに最近、MSはパッとしないね。
マンネリというか、売る気が無いというか、2000年頃は
期待も高かったんだが...今はLinux/Javaにやられっぱなしだ。
もうだめぽ?
510 :
デフォルトの名無しさん :2006/03/19(日) 12:09:04
Eclipseの大人気に 焦ってVS.NET 2005 Expressを無料で配布してるくらいだ。 しかもC#やVB.NETの仕事もろくにないし。 PHPとJavaの仕事ばっかで今ドトネトはかなり窮地に立たされているともいえる。
511 :
デフォルトの名無しさん :2006/03/19(日) 12:43:30
JAVAってあまり使ったことないんだけど、 Eclipseって個人だけじゃなくて、実務でも普通に使われてるものなの?
512 :
デフォルトの名無しさん :2006/03/19(日) 12:52:52
ニート卒業するのが先
>>511 普通に使われてるよ。
Linuxと同じで、既存のディストリビューションを購入して使ってるところから
自社で独自にパッケージングして使ってるところまで色々だけど、結局Eclipse
である事に変わりはない。
Eclipseを個人で使うほうがびっくりだ。
Eclipseなら大学の研究室で使ってるよ
516 :
デフォルトの名無しさん :2006/03/19(日) 14:29:02
>>513 そうなんですかー
使いもしない数十万のパッケージなんて会社では
買ってもらえないので、実務に耐えられるJAVAの勉強
どうやってやろうか困ってたんです(;´Д`)
>>514 でもJAVAの開発関連を検索したらIDEではEclipseぐらいしか
見当たりません
個人ではIDEなんて使わないんですか?(;´Д`)
>>516 EclipseかNetbeansでいいじゃん 俺はNetbeansをお勧めするけど
まあこのスレよりもっと適切なスレがあると思うので詳しくはそっちへ
>>516 >>個人ではIDEなんて使わないんですか?
そんなこともないけどさ。
なんというか、個人で使うには機能が立派すぎる。
言い方を変えれば「重すぎる」んだよねえ。。。
学生なんで個人で使ってるが、あれは一度使うと手放せないな…
>>514 Eclipseは個人で使った方が楽しめるぞ。
ゲームだってできるし
株価チェックだってできるし、
そういうプラグインを作る楽しみがある。
プラグインバリバリ入れたい放題ってのがいいねえ
2ちゃんも見られる・・・・・・・が、開発には害になるw
Javaで仕事ったらほとんどサーバーサイドで、MSはサーバーサイドでは押されてるが、 クラサバや単なるクライアントアプリでは、問題なくねぇ? この先、WebアプリはUIが貧弱で、結局、流れはスマートクライアントとかなるかもしれんし。
>>521 monalipseなどでEclipse上で見られるが、
有益になる情報も手に入ったりする。
monalipseは使い勝手が悪いので
Jane Doe Styleを使っているがw
>>522 どうだろうねえ。
クライアントサイドでもJavaに押されてる気がする。
NetBeans勢力拡大とSwing APIのめまぐるしい性能機能向上
がC#やVB.NETを圧倒している。
525 :
デフォルトの名無しさん :2006/04/16(日) 14:18:32
object is poormans closer!!!!!!!!!!!!
closer ってなんだ?ww closure って書きたかったのボク?
くろーざーといったらミセリだろ
ミセリねぇ、、、よく燃えてたよねぇ。 って懐かスィ。。。
意味が分からない
なんとなく覚えたのはいいけど オブジェクトのよさがまだいまいちわからない… 関数とあまりかわらないんじゃないかとか いまいちよくわかってないので、疑問が出てくる まあ色々と違うんだろうけどアセンブラだって普通のCだって 普通は部分部分でまとめてやるだろうから 同じなんじゃなかろうかとか 隔離して部品として纏められるのがいいんだろうか 他に影響が出づらいとか安全に纏められて管理がしやすいとかだろうか
>532 勿論必ずしも必要じゃないがOOPLの方が書き易い処理もいくつかある 1. 構造体や関数をひと纏めにしてグローバルな名前を減らせる 2. 型不定な引数や型ごった煮リストに対応する処理 3. this/selfの存在は何気に大きいと思う 4. 元々OOの発祥である物と物の関係を表す処理 5. GUIライブラリとの相性
>>533 なるほどまだあまりよくわかってないけど
無くても出来ることは出来るけど一纏めに出来てミスも防ぎやすいって
ことなんかな
確かにきっちり別れてるからいいっぽい気はするし
ライブラリによってはってのもなんとなくそんな気がする
どんどん使っていけばわかってくるんだろうか
>>534 オブジェクト指向を用いたコードと、それを用いずに書いたコードを
具体的に出して比較してみると利点・欠点がわかるかも
>534 > 無くても出来ることは出来るけど一纏めに出来てミスも防ぎやすいって > ことなんかな プログラミング言語の進化はそれこそが目的だと思う
537 :
デフォルトの名無しさん :2006/06/27(火) 20:27:24
オブジェクト指向のよさがわからない人は 大規模開発したことないんだろうなー
まあ、そもそも、オブジェクト指向の本質ってなんなのか、 って話があるような気がする。 「オブジェクト指向」「オブジェクト指向」って題目のように唱えて、 「自動車がオブジェクトで、ハンドルやアクセルが操作で・・」 みたいな話を性懲りも無く繰り返してるだけの奴と、 たとえば、Java の文法を熟知して、Abstruct Class や Interface を 適切に追懐こなしてる奴とどっちが「使えるのか」。 後者の奴に、「なぜフィールドをprivate にして、アクセッサでアクセスしてるのか?」と聞けば、 「こうしたほうが、外部からの参照や変更が限定できていろいろと都合がいいからだよ、 だいたい、setter や getter に必ずしも対応するフィールドがあるとは限らないし」 といったことを答えるだろう。そもそも、Cの時代から構造体のメンバにはなるべく直接代入 しないようにしていたことの延長をやってるだけなのだ。 Abstruct や Interface をなぜ使うのかと聞かれれば、「便利だから」 「Cでやりたいと思ってできなかったことができるようになっているから」 といった答えが返ってくるだろう。 手続き型言語で十分な経験を積んだ開発者なら、Java のような言語を与えられれば、 自然とそういうことができるものなのだ。 「題目を唱えること」と、「実際に優れたコードを書くこと」はどちらが大切なのか? 結局、「オブジェクト指向の大切さ」云々を言っている人の大半は、 「題目を唱えること」を「実際に優れたコードを書くこと」よりも優先してるだけのように思えてならない。
自分は、オプジェクト指向を理解できないままこれを書いているが…まで読んだ。
『アクセッサ』 という表現を耳にしたのは初めてだったり。 微妙に異なる話だけど、オブジェクト指向の定義が1つじゃないのは問題のような気がした。 ケイかストラウストラップか、あるいは……みたいな。
まあ正直、最近オブジェクト指向って騒ぎはじめた連中は、 アラン・ケイもSmalltalk(!)も知らないと思われ。
543 :
デフォルトの名無しさん :2006/06/27(火) 22:58:58
>>538 そうですね。
オブジェクト指向を、「それらしく」使える人は、プロセス中心の
プログラム開発でいやと言うほど無駄なコード書いてきた人や、トラブル
を経験してきた人ですね。危険回避のために自然とオブジェクト指向の
考えを導入したくなります。コードの最適化を行おうとすれば、自然とOOP
になりますね。
何にでも向き不向きがあるから、自然とOOPになったのなら
勘違いでなければ、元々OOP向きだったか、OOPでも破綻
しないものだったに過ぎん。
過信論者にはなるなよ
>>543
向き不向きは人じゃなくて対象分野のほうが大きいとおもうな。 (まあ、人にも多少はあるだろうけど。) C言語で、 struct window w; window_open( w ); window_setsize( w, 100, 100 ); とかやってた人間は、 Window w = new Windows(); w.setSize( 100, 100 ); ってかけるようになったら「やっとなるべき形になった」としか思わないんじゃないかな。 「window_setsize( w, 100, 100 ); のほうがいい」と思う人は少ないと思う。
546 :
544 :2006/06/28(水) 00:10:45
>>545 まさか、おいらが「人」の話をしていたと勘違いしますたか?
もちろん、作る「物」の話ですよ。
>>541 > オブジェクト指向の定義が1つじゃないのは問題
しかしそれが実際ですからねぇ…。それらを混同して(あるいは勝手に組み合わせた俺定義を
ふりかざして)トラブルになるケースは多いですし。逆に、誰の「オブジェクト指向」かを
明らかにするよう心がければ、議論の入り口でのありがちなループを回避できるのもまた確かなことです。
とにかく、教科書レベルの記述で混乱に拍車をかけるような書き方は避けて欲しいです。
あえて問題があるとすれば、オブジェクトが本質じゃないものに「オブジェクト指向」と名付けたケイか、
すでにケイのオブジェクト指向があるのに、あえて“抽象データ型のスーパーセット”あるいは
“クラス(継承)によるプログラミング”という別の切り口に同じ「オブジェクト指向」と
名付けてしまったストラウストラップが諸悪の根源か…。まあ、どっちもどっちかなと。
>>547 「オブジェクトを如何にして使用するか」 なケイと、
「オブジェクトを如何にして定義するか」 なストラウストラップの対立のような気が。
>>545 その例は、あまり魅力的な差に見えないね。
もうちょっと派手で、いかにもOOがよろしげに見える例を出せないの?
>>549 >その例は、あまり魅力的な差に見えないね。
それは、(君が現場の苦労を知らない)
坊やだからさ。
ありゃ、煽られちゃったよ…
しかし、現場の苦労はどうでもいいから、もうちょっとマシなの
おながいしまつ
>>550
>>551 現場の苦労がどうでもいいなら、そんなのなくてもどうでもいいじゃん?
なんか言い逃れぽい返しばかりだなあ…
漫才したい訳じゃないんで、もうちょっとマシなの
おながいしまつ
>>552
>>554 (535?)
ストラウストラップのオブジェクト指向の例でいいならば、複素数の計算とかは?
複素数という新しい型を定義せずに、複素数演算を自然に記述するのは難しいと思う。
オブジェクト指向ってプログラムのしやすさより設計のしやすさじゃない? オブジェクト指向言語は設計>コードの変換の手間が少なくて使いやすいと思う
テストのしやすさもあるよ。単純な話じゃない。
自分は一部のソースに変更があっても、他への影響が少ないぐらいしか利点が分からない。
>>557 C(non oop)版はアンチが書いてくれ。
class complex {
double re, im;
public:
complex(double r, double i) { re=r; im=i; }
complex(double r) { re=r; im=0; } // float->complex conversion
friend complex operator+(complex, complex);
friend complex operator-(complex, complex); // binary minus
friend complex operator-(complex); // unary minus
friend complex operator*(complex, complex);
friend complex operator/(complex, complex);
// ...
};
complex operator+(complex a1, complex a2)
{
return complex(a1.re+a2.re,a1.im+a2.im);
}
// ...
complex a = 2.3;
complex b = 1/a;
complex c = a+b*complex(1,2.3);
// ...
c = -(a/b)+2;
>>554 「現場の苦労はどうでもいい」なんて言ってる人間にとって、
「魅力的」なコードなんて、とりあえず俺には何の意味も無い。
プログラミングは座敷芸じゃない。
>>561 新しい型を自然に記述するのは、新しい型の振る舞いと定義が可能で、
元の言語仕様と同様に、新しい型を取り扱える処理系であれば可能な
事だと思います。
それは処理系依存の問題でoopとは関係ないような気がしますが、それ
とも、新しい型の振る舞いと定義が可能で、元の言語仕様と同様に、新
しい型を取り扱える事こそがoopだと言う事ですか?
>>562 ここは、マ板じゃなくてム板なんだから、そゆのもありじゃね?
>>564 ありだろうけど、逆にいうとそれに付き合う義理もないんじゃね?
とりあえず、
>>545 は「そういう意味で」「魅力的」と主張してる
わけじゃないから、それは別の話題の話題として話せばいい。
擬似コードで恐縮だけど、例えば C ライクなコードで [オブジェクト生成] obj01 = window_new(); obj02 = button_new(); obj03 = checkbox_new(); obj04 = listbox_new(); [表示] window_show(obj01); button_show(obj02); checkbox_show(obj03); listbox_show(obj04); とかやってた人間は、 [オブジェクト生成] obj01 = new window(); obj02 = new button(); obj03 = new checkbox(); obj04 = new listbox(); [表示] obj01->show(); obj02->show(); obj03->show(); obj04->show(); になる。
>>563 ストラウスストラップのオブジェクト指向の文脈では、そう。
より正しくは、それに継承を加えたもの。
別の言い方をすると、抽象データ型(ユーザーが新しい型と振る舞いを…)を
Simulaのクラスを使ってやる、というのが彼の(そして´90年代以降主流の、
今でいう、カプセル化・多態性・統承の)オブジェクト指向。
念のため書き添えると、この文脈では「メッセージ」(ケイのオブジェクト指向の
キー・コンセプト)は関係ない。
>>567 統承× → 継承〇 スマン。手書きなもんで…。
手書き?w
そう。手書き入力。
>>567 ありがとう、やっと、自分の理解していた事が、言葉と結びつきました。
>>571 何かのお役にたてたのでしたら、さいわいです。
オブジェクト指向そのものは意見が分かれるが、「オブジェクト指向言語は 便利だ」でOK?
>>573 使いどころによって便利か不便かが決まる。
別にOOPLだからって がんじ絡めにOOPしなくても良いんだから不便ってこたぁないだろ それが自分のせいであれ、会社のせいであれ OOPLが不便って思う人はOOPLに振り回されてると思う 大きなコードになるとOOPの方が良いが 小さなコードで無理してOOPすると余計に混乱するぞ
>>573 もっと謙虚に、プログラミングにおける支配的パラダイムだ、でいいと思う。
「支配的パラダイム」カッコイイー。スゲー。感動して涙出てきた。
ニュートン力学は物理学における支配的パラダイムだった。相対性理論の発表までは。 相対性理論は物理学における支配的パラダイムだった。量子力学の誕生までは。 いや 端的に「支配的パラダイムは歴史と共に変遷する」と表現した方がわかりやすいか? そして パラダイムのシフトは旧来のパラダイムを支持する人間が死滅するまで完了しない という歴史的な事実も書いておこう
その考えは面白いかもしれない。 ニュートン力学も相対性理論も量子力学も、世界の一部分を切り取った姿を提示しているだけだから、 これをプログラミングに直すと 『ひとつの方法』 を提示しているってことになるな。
2500年程前に孔子がいいことを言っている。 「学びて思わざれば則ちくらし、思うて学ばざれば則ちあやうし」 これにてこのスレ終了。
理系馬鹿で文系センスがない人はオブジェクト指向がわからない
という貧弱脳の文系が言い出した都市伝説
583 :
デフォルトの名無しさん :2006/07/15(土) 15:32:30
文系>>>>>>理系
文系か理系かなんてのは瑣末な属性にすぎない。 大事なのは振る舞いだ。
大盤振る舞い
わお、584が振舞ってくれるヨ!
俺、最近思うんだ。 勉強すればするほど馬鹿になってるんじゃないかって。
理系馬鹿はそうだね
589 :
デフォルトの名無しさん :2006/07/15(土) 21:05:10
人生、楽しい事は多くは無いけど、勉強は辛さをちょっとガマンすれば楽しくなれる近道だと二十年来の劣等生の俺は思う。
辛いと思っているなら負け組み。
>590の言葉が沁みる
592 :
デフォルトの名無しさん :2006/08/21(月) 11:04:09
大学は概念しかないから、せいぜいおもちゃシステムをこねくりまわして 能書き垂れてる。 やはり、言語学習で慣れるのが先では? でも言語学習だけで終わると薄っぺらな人生と同じで虚しい。 1の質問に対しては「両方とも必要」という穏当かつ中途半端な 回答しかないと思う
恐レスだけど、鬱本はさすがに内容が古すぎるよ。 オブジェクト指向設計技術はここから何度も刷新されている。 今から購入するんなら、 「デザインパターンとともに学ぶオブジェクト指向のこころ」を お勧めしたい。
594 :
デフォルトの名無しさん :2006/08/27(日) 21:21:10
仮説だが、プログラミングの「プ」も知らない人に教える方法として、 上から下に処理が実行されることを教えた後ですぐに 継承とかインターフェースとか教えて、 デザインパターンのいくつか、例えばテンプレートメソッドとかを覚えさせて、 その後で、繰り返し文とか配列とか教えたら、 なかなか面白いことになるのではなかろうか。 誰か新人に試してみれ。
日本語の学習が先。横文字を使って得意がるようになったらオシマイ。
>>595 確かに横文字で得意がるタイプは居るな
しかし敢えて
>>595 の言う横文字が
何処までを指すのか知りたい
少なくともここ一週間のこのスレのログには
得意がる程の横文字は見当たらないんだが…
598 :
デフォルトの名無しさん :2006/09/30(土) 17:35:03
>598 それ糞だから
600 :
デフォルトの名無しさん :2006/09/30(土) 20:28:44
オブジェクトだけに、先に実践してからの結果として学ぶ(=分かる)でエエんやないか?
Is some of the design pattern , for instance, the method of the template made to teach succession or the interface at once after processing is taught to be executed on below as a method of teaching to the person who doesn't know "P" of the programming though it is a hypothesis, and to be remembered, and if the for statement or the array is taught afterwards, it not interesting? easily It is tried by the new figure.
アプローチの違う複数の言語、たとえばSmalltalkでもclosでもC++でも通用する オブジェクト指向の概念、ちゅーのは、果たしてありうるんだろうか?
>>602 “オブジェクト指向的な設計”と“オブジェクト指向言語の使い方”を混同してるだけにしか見えない
設計から実装にいたる間は幾つかの層に分けられるのだから、より抽象的な所では同じでも良いが実装に近づくにつれ分化していくって所
604 :
デフォルトの名無しさん :2006/10/01(日) 22:38:55
言語によるオブジェクト感覚の違い C++ と Smalltalk
> オブジェクト感覚 > オブジェクト感覚 > オブジェクト感覚 > オブジェクト感覚 > オブジェクト感覚 > オブジェクト感覚 > オブジェクト感覚 「新たな感覚 ・・・ それはオブジェクト感覚だ!」 の巻〜
>>603 チミが本気でそう思うなら、チミの「オブジェクト指向」は漠然としすぎていて
童話のようなお話だってことだ。
たとえばアランとビアルネのオブジェクト指向は、根本から明らかに違う。
>>606 チミが本気でそう思うなら、チミの「オブジェクト指向」は漠然としすぎていて
童話のようなお話だってことだ。
以下ループ
オブジェクト指向なんて簡単なモノすらわからないやつって・・・
オブジェクト指向の簡単な部分だしか知ないうちは、オブジェクト指向が簡単だと感じる。 統一した概念として説明しようとすると、共通のキーワードを抜き出して、大雑把に 説明するくらいしか出来ないけど、それはオブジェクト指向についての説明にぜんぜんならない。 ネコクラスが哺乳類クラスを継承するような説明は、こういう勘違いから始まるんだろう。
オブジェクト指向の簡単な部分だしか オブジェクト指向の簡単な部分だしか だ・し・か
誤字脱字するやつってイージーミス多いヘボグラマだろうな・・・・
612 :
デフォルトの名無しさん :2006/10/04(水) 16:52:17
誤字脱字をいちいち指摘する奴って、完ぺき主義者なんだろ? 神経質とも言うか・・・
そこに突っ込むしか無いのか?
>>612 この神経質はこの板によく出てくるん奴だろう。
どこに行っても友達少ないんだし、ほっとけよ。
リアルでも避けられて、こいつはもう既にうつ病が始まってるんだからさ。
>>614 ああそうだな。
うつ病の奴って、迷惑だから早く自殺して欲しいよな…
616 :
デフォルトの名無しさん :2006/10/04(水) 21:50:36
>>612 他人の小さなミスをネチネチ言う奴いるよね
そんな奴って、だいたい嫌な香具師で、スネ夫みたいな感じの香具師
オマイラ暇すぎなんだな とりあえず一片真で濃い
誤字脱字の指摘なら、せめて 誤字の部分示してコンパイルエラーと書けば良いのに 単なる指摘しか出来ない奴の頭の構造ってどうなってだろな
>>618 何が書いてあるのか読めないのだが?
もう一度書き直してくれ。
情報処理技術者試験の問題集にこんなのあったんですが[f]の回答が納得いきません。 問題集の回答には「ヒープ」って書いてあったんですが、 この問題文から読み取れる情報から回答するとすれば「処理系依存」だと思うんですが皆様的にはどうでしょう? オブジェクト指向プログラミングに関する次の記述中の[a]〜[g]に入れる適切な字句を答えよ。 オブジェクト指向プログラミングでは、[a]化の概念を用いて[b]を介してデータを扱う。 これによって、オブジェクト内部の[c]構造に変更があっても、 呼び出し側のプログラムを変更する必要がなく、保守性の向上が期待できる。 スーパークラスで定義した操作をサブクラスで再定義することもできる。これを[d]という。 操作の再定義によって、同じ名前でも違った実装をもつことになる。 実装が異なっても、それを呼び出すプログラムが違いを意識しなくても良いことを[e]という。 プログラムによって生成されるオブジェクトの実体は、[f]領域に確保される。 使用されなくなったオブジェクトの管理をプログラムで行うのは困難なので、 [g]によって領域内の不必要なオブジェクトの整理を行い、領域の再利用を図る言語処理系がある。
>>620 過去問から出題したのかなぁ
もし[b]がメンバ関数ならすごくC++臭くて鼻つままないと近寄れねーです
カプセル、メソッド、データ、オーバーライド(メルトダウンを起こすやつではない)、 多態、f、ガベージコレクション、かな? fはスタックの場合もあるよね。
Javaはスタックマシンだっけ?
JVMならスタックマシンだ。
625 :
デフォルトの名無しさん :2006/10/07(土) 16:38:54
実装の仕方によってヒープ、スタックのどちらもあるうるなら、 それらのスーパークラスであるメモリを答えにすればいいのでは?
>>625 実装にばかり気をとられてそこまで気がつかきませんでした。
「プログラムによって生成されるオブジェクトの実体は、[メモリ]領域に確保される。 」
なに当たり前のことを言ってるの?的な部分もありますが、
同じ文章が試験に出題されたらこれでいきます。
メモリ領域かぁ、なんか収まり悪いな。 コード領域の対してのデータ領域とかはどう?
ヒープ だろ
629 :
デフォルトの名無しさん :2006/10/08(日) 10:08:52
C++でTestClassという名前のクラスが定義されているとして foo(){ TestClass class; TestClass *p_class = new TestClass; } 前者はスタック、後者はヒープに領域が取られるんじゃなかったっけ? 規格書で動作まで規定されてるかわからんけど。
初めてスタックとヒープという言葉を覚えて嬉しくてしょうない厨かな。
君はいろんなスレでなんとか厨といい続けてるよな もう何年にもなるんじゃないか コテハンを厨厨にすればいいじゃないかな
ちゅうちゅうねずみさん^^
厨厨たこかいなでどう?(なにが?)
634 :
デフォルトの名無しさん :2006/10/09(月) 03:57:23
漏れはてっきり ヒープ ⊃ スタック だと思ってたよ
かいな様はどうだろう?(なにが?)
>>594 それ、オレの大学のコンピュータサイエンスTのクラスでまさにやってるとこだよ。
ベーシックしか知らなかった友人Cは今クラッシュして苦しんでる。
概念学習より言語学習が先だとおもう
637 :
デフォルトの名無しさん :2006/10/21(土) 20:09:11
だがそういう奴が仕事ができる。
638 :
デフォルトの名無しさん :2006/10/22(日) 04:05:03
>>1 言語を習得したらその言語で書かれたサンプルを読みまくり、自分でもコードを書いてみる。
そうすればオブジェクト指向の考え方も自然と身に付く。
オブジェクト指向の概念本はやたら話の内容を大きくしてるだけの糞本が多いので要注意。
問題はオブジェクト指向を使えるかどうかよりも でかいプロジェクトを自分で設計出来るかどうか、
>>639 でかいプロジェクトを設計出来る
・OOは心強い武器になる
・近頃はOO分析とか言われてる
→OO使える
> 問題はオブジェクト指向を使えるかどうかよりも
少なくとも、オブジェクト指向は使えなきゃ困る
/*
…てかOOなんて”指向”だから、思想と同じ意味だよ!
そんなに神聖化する必要なんて無いんだよ!
って言いたかっただけです
*/
自分もずっとVB厨だったけどC#に初めて入ったときは感動した。 ソースの可読性がよく、とてもこざっぱりしていて。 もともとVBやってたときも、exe開発はせず、ほとんどdll開発。 データ取得クラスを作って、 普通にvb5.0のときから、そのクラスをnewして、プロパティをセットして get()メソッドでデータ取得。 みたいなことをしていた。 おそらくそれ作ったのがC上がりの人だったのかもしれないが。 今思うとサーバにdllを配置して、各画面のexeをクリックしたと同時に サーバのdllとクライアントのdllのバージョンを比較し、新しくなっていたら、サーバから取り直す、という 処理も入れていた。 そんなことを3年間やって客先とか出向いたりいろいろしていて、いざ次にVBやりましょう、と他のプロジェクトに入ったとき 非常にわかりづらかった。 その後javaをへてC#に入ったけど、実は今とってもピッタンコと思える言語をみつけてうれしくなってる。
>>641 そういう奴なら暇が出来たら関数型言語とか弄ってみな
すげえおもしれえよ
643 :
デフォルトの名無しさん :2006/10/26(木) 13:13:33
C#なんてウンコだからJavaをやってみなよ。感動する。
Javaなぁ・・ あれはもうダメだ。
Javaは言語仕様よりも、周辺のクラスライブラリが評価の対象になってるからなぁ 言語仕様事態はとくに面白くもなく、醜いわけでもなく・・・
>>645 とすると、C#も話がだいぶ近いが、C#はどう思う?
647 :
デフォルトの名無しさん :2006/10/26(木) 23:06:54
>>646 横レスするけど、Java と違って野良フレームワークがあまり無いから
楽なような気がする。あとMSが勝手にガンガン突っ走るんでJavaより
ダイナミックで面白いよね。2.0 だの 3.0 だの。
>>647 Javaは携帯やサーバー用途に広がったけど、
C#はいくら面白くてもWindows関係だけでは?
突っ走っていてもMSやC#は一体何がしたいんだろう?
そこが明確じゃないからC#よりJavaに流れるのかもしれない。
Windows のデスクトップアプリを作ってね!
Java最高!
まぁそうなんだけどその「Windowsだけ」の部分もかなりのボリュームがあるわけで。 (漏れはPC用のソフト作る会社で働いてるから、かなりバイアスがかかってる)
>>645 Javaの言語仕様をじっくりみていくとその奇怪さがよくわかるよ
>>651 具体的に言えば、Windowsのさらに.Netのところのみってこと。
いまだに世界は狭いよね。
結果は同じだし、それよりもJavaの方に目が向いてしまうもんじゃないか。
並行にという概念がないのんかこの>1は なんでどっちかが先に生まれないいかんねん。同時に生んだらええねん
とりたててJavaが変なんじゃなくて、 プログラミング言語って人が普通に生活する感覚からは大きく外れてるよね って感じな。
659 :
デフォルトの名無しさん :2006/10/27(金) 08:08:48
>>657 もしC++で同じような本があったら10倍くらいの厚さになるだろうなw
>>657 BASICは5〜6倍でC言語でも3倍位の厚さになるな。
その位Javaはシンプル
Windowsの特定のバージョンのC言語だけやってると気が付かないと思うけど
良い意味でMSに囲いこまれてるってだけ
>>660 > BASICは5〜6倍でC言語でも3倍位の厚さになるな。
納得できる定義ではない
よって
> その位Javaはシンプル
の帰結は論理的ではない
と言ってみる
Schemeなんかは、M式無くした事で多少変なところも出てきたけど、おおむねきれいなんじゃない?
>>660 古典言語を引き合いにだしたら、そりゃ変なところもあるでしょうよ。
C#は変態的キモヲタ専用言語か。Javaは爽やかな一般人用で。
C#のどこがキモイの?
#って表記からしてキモイ #って何#って
MSにネーミングセンスをもとめちゃいかんよ 彼らはわざわざ検索しにくい言葉を使うのが習性らしい .Net、Word、.doc....実に迷惑千万だろ
#=++ ++
#=ちょっとしか進化してないという感じがしてキモい、というか情けない。
半音上がる程度ですから、
おまえら、#ごときで何を盛り上がって・・
使う人間が♭、それがC#。
>667 「COM」を追加。
675 :
デフォルトの名無しさん :2006/10/29(日) 21:30:21
拡張子.doc はどうよ
Rっていう統計ソフトには勝てまい
679 :
デフォルトの名無しさん :2006/12/25(月) 07:17:48
あげ
S でゲーム作ってた使途がいたなぁ
681 :
デフォルトの名無しさん :2006/12/26(火) 05:55:05
>>664 Javaのどこにさわやかなイメージがあるんだ?
携帯アプリ製作現場しか思い浮かばんぞ?
NetScape
683 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/12/26(火) 19:36:21
オブジェクト指向逝ってよし
何でこんなところにココ電がww
685 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/12/31(日) 11:46:12
昔は逝ってよしの1というコテだった。 話は変わるが、会社でオブジェクト指向信者がサーバーに負担かけまくって しばしばDB飛ばしてたのがいたが、首になったらしい。
686 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2006/12/31(日) 11:48:53
たまんねえぜ。 こっちがチューニングで爪に火を灯すようにサーバーの負荷減らしてるのによお。 ドッカーンと、こっちがチューニングで減らした量の100倍くらいの負荷作っちゃうからな。 示威行為なんだよな。 まったく信者ってやつは。
とりあえずNG登録まで読んだ
688 :
デフォルトの名無しさん :2007/01/19(金) 23:06:21
まず オブジェクト指向における再利用と、関数による再利用 の違いを教えてくれ。
無い
オブジェクト指向のオブジェクトの概念は型理論で説明できる。
それは無い
関数もオブジェクト
オブジェクトも関数
「哺乳類を継承して犬と猫を作り、『鳴く』というメッセージを送ると犬なら『わん』、猫なら『にゃあ』と鳴く」 これがオブジェクト指向か?
698 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2007/01/20(土) 09:42:36
「わん」とか「にゃあ」の音はモノじゃないのでオブジェクト指向で扱えませんね
は?
>698 class 音
>>698 わんクラス
class 犬 interface 吠えるく{
鳴き声 bark(){
return new わん();
}
}
>>698 オブジェクト指向で表現できないものは無いw
あほちゃうかw
まあ、オブジェクトは貧乏人のクロージャだしね。
704 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2007/01/20(土) 12:26:51
インターフェイスもオブジェクトにできませんねえ
視野が狭い
706 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2007/01/20(土) 12:51:10
犬とか猫はあつかえても高度な抽象的概念はあつかえませんね。 ハングルが世界最高の言語だって言ってる連中と同列ですね。
707 :
ココ電球(∩T∀T) ◆tIS/.aX84. :2007/01/20(土) 12:51:35
犬とか猫はあつかえても高度な抽象的概念はあつかえませんね。 ハングルが世界最高の言語だって言ってる連中と同列ですね。
マトモな頭を持った人間なら、Cなどの構造化言語をある程度使い こなせるようになったら、OOP的なアプローチでロジックを組めば 綺麗に効率よくコーディングできることに気が付くはずだ。 (たとえそれがOOPとして既に広く周知されたものだと知らなくても) そこでC++などを勉強すれば、綺麗で効率の良いスタイルのコードを 自然に書けて、さらに補強する機能があることは自然と受け入れら れるはず。 要するに、概念学習なんて自然と思いついて然るべきもので、 わざわざ他人から教えられるようなものではない。 概念学習で苦労しているのは低脳。つーかマ向きの人間じゃない。
>702 流石に「表現」するには厳しいモノも無くはないだろう。OOが万能とは思わない。 それまでのプログラミングより表現の幅は大きいと思うけど。
710 :
デフォルトの名無しさん :2007/01/20(土) 13:23:45
オブジェクト指向狂詩曲って本で大体は理解した。
711 :
デフォルトの名無しさん :2007/01/20(土) 13:53:50
>>708 >要するに、概念学習なんて自然と思いついて然るべきもので、
>わざわざ他人から教えられるようなものではない。
どちらが効率的かということだろ。既に他人が知っていることを
わざわざ自分で再発見する必要はないと思うけどね。他人が考え
てくれたものはありがたくさっさと学んだ方がよほど効率的で
いいと思わないか?
最近まで、オブジェクト指向言語の メリットが見出せなかった。 使えないとか、理解できないとかではなくて 非手続き型で十分じゃね?って感じで でも.netやらJAVA系のエディタは便利だな まあ、オブジェクト指向開発は ツールありきってことかな
まあ、言いたい事はアレだ ソースのインデント萌え〜ってことよ。
>>706 扱えないと思うヤツには扱えない
オブジェクト指向は難しいと思うヤツには難しい
これはバイナリデータである、という抽象化すら出来ない奴がいるから困る。 データ毎に処理を分けるなよと思ったところで、がちがちの密結合でThe END
>>708 クラス=構造化された単位
だったらそうなるがそれじゃただの機能分割だw
クラスが共通関数のまとめ役って言う考えはOO的ではない
>>716 クラス=関連の強いデータと関数の塊と言うのは十分OO的
OOと言うのは結局、効率的な機能分割法にすぎない。
>>717 初期のOOの考え方に近いか
ただ、クラス=役割だ
概念的はなっそうが出来てないと単なる機能分割で終わってしまって クラスが単なる空間定義に終わってしまっているという良い例だなぁw クラスは空間定義ではあるが、OO的というにはそれだけではたりない。
>>719 ×概念的はなっそう
○概念的なアプローチ
>>719 それでは、その足りない部分を具体的に述べてくれ。
>>722 分割時に当然、役割、意味単位で分けるが
それじゃ駄目なん?
役割は機能的な役割という意味ではない。 実社会における役割と等価。 意味論も機能的な意味論ではない。 実社会における意味論と等価。 構造化アプローチで設計していくとソコは必ずしも一致しない。 ただ、構造化=役割の細分化という意味なら同意できるなぁ。
実社会という言葉は少々極端ではあるが。
>>724 すまんが、機能的な意味と役割と
実社会における意味と役割とが
解離してる。例をあげてくれないか?
>>726 実社会という言葉は適切ではなかったw
要するに、手続きからクラスを定義するのと
要件からクラスを定義するのでは、クラスの作られ方が違ってくるってこと。
ただそれもレベルの問題で、旨くできる人はそれでもうまくクラスが作れているから
厳密な違いは無いと思うけど、旨くない人が手続きからクラスを導出していくと
クラスのインターフェイスが違ってくる。
例)ある業務のシステムを作っています。
【手続き型の構造化手法】
手続きAからクラスBを導出しました。
その場合、クラスBは多かれ少なかれ手続きBに特化する。
後から手続きCでもクラスBが持つデータを使うことがわかりました。
でも、クラスBのインターフェイスは手続きBようなので、手続きC用のインターフェイスを
作りました。
【OO的手法】
業務の役割や意味からクラスBを導出しました。
クラスBには、業務を実行するインターフェイスDがありました。
業務の手続きA、CはクラスBのインターフェイスDを使うように実装する事にしました。
>>727 ありがとう、なんとなくわかった、しかし
そういう話なら、もっと以前の構造化プログラムの
モジュールでも同じだと思うけど、モジュールBが手続きA、C
どちらでも、そのまま使えるような設計が構造化でも
良い設計のはず。
まさかここまで引っ張ってきておいて 構造化がオブジェクト指向特有の手法だと思ってたとかいうオチじゃないよね・・・?
構造化でもクラスを作ることは出来る だがそれだけでOOとはいえない
>>729 抽象化すれば、問題ないの?
なら、機能分割時に、役割に応じて
共通部分を親抽象クラスなりインターフェイス(Javaなもんで)
なり抽出して作成すればOK?
733 :
デフォルトの名無しさん :2007/01/20(土) 19:10:50
すまん。わんとかにゃあで説明してくれ。
>>732 手っ取り早くはデザインパターンとかを勉強してみるといいんじゃない?
>>734 デザパタは、実務で使ってるよ。
TemplateMethodとかVisitorとかFactoriyMeyhodとか、
良く使う。
ぶっちゃけ、デザパタとかクラスの動きとか、 実務レベルの話は、それなりにわかるんだが その上のOO道みたいな、哲学的な部分がさっぱりわからん。
>>736 変に構えなくても良いんじゃね?
しょせん継承・カプセル化・情報隠蔽が出来てりゃ C++ では OO なんだし。
>>737 やっぱり、構えなくて良いんかね。
でも、OO的で無いとか観念的なアプローチをしろとか
言われたんで気になってね。
ファイルから/データを読み込んで/パースして/溜めておいて/次の日になったら/配信する File Input Parse Queue Timer Output 言葉と実装とでE-Rが変わらないようにすると管理しやすいんだよね。 OOに慣れると疎結合を意識しだす嬉しい恩恵も得られる。 C言語使ってるときでもOOは意識するもんだけどね。
>>741 構造化手法からオブジェクトを導出するならこんな感じになるのかなってのを
想像して図にしてみただけだよ。
その矢印はデータの流れを表してると考えてくれ。
なんで構造化手法からOOで言うところのオブジェクトを導出しようとするのかがわからん
>>727 の問題点は、本来1つですむインターフェイスが手続きごとに複数実装しなければならんて事。
共通的に使われるものが、個別の要件に応じてインターフェイスを変更するのはおかしいんでは?
データが同じなら1つのクラスでメソッドで処理を分けるのがオブジェクト指向的にも
普通の設計だと思うけど、
>>727 の説明は何が言いたいのか理解しづらい。
>>744 >データが同じなら1つのクラスでメソッドで処理を分けるのがオブジェクト指向的にも・・・
データとは?
この時点でOOではない
そういうのがわからないから概念から学ぶべきだといっている
ただ、判らないからといって実務で直接的に問題になるか?っと言われれば、状況による。
どんなに生産性が悪くても、それで成り立ってれば問題はないのでは?
ただ概念から・・・っといっても、実際には何らかの言語を通さない事には把握しにくいのも事実 両方同時に がいいのでは?
>>745 IntegerやStringから、List、HttpRequest、Bitmap、Window、、、、。
世の中にはデータみたいなオブジェクトが腐るほど溢れてるけど、これらはOOじゃないのか?
いいからオブジェクト指向とは?から勉強しなさいな
>>748 分からないから説明してよ。あなた自身の言葉で。
データは全てオブジェクト。オブジェクトじゃないものなど存在しない。 intもオブジェクト、言語仕様に振り回されるな。
違う。オブジェクトであると定義した時点で、はじめて『それ』はオブジェクトになる。
ならintはオブジェクトだろ?
int をオブジェクトと定義すれば int はオブジェクト オブジェクトではないと定義すれば int はオブジェクトではない
オブジェクト指向は人を選ぶから、無理にわかろうとする必要は無い
言葉遊びに酔ってるだけの馬鹿だったか、邪魔したな。
自明なことすら分かってもらえないのか……( ´ー`)y-~~
intはオブジェクトではないと定義したオブジェクトの参照をintは持つわけだ。
やはり言語から入ると、言語で表現できる範囲でしか物を考えられなくなるから オブジェクト指向の学習としては概念中心に行うべきか?
観念論が役に立たないのは、 ここの、やりとりを見れば自明かと。 大体明確な解すらないのだから、 学者が研究でやれば良いレベル初心者には、まったく必要ない
モダン言語はプリミティブ型にもclassがある。 Javaですらint.classが存在する。ちなみにInteger.classとは別物。
>>759 そうそう
で、そういう奴らは指示されたようにコーディングだけしてれば良いのだw
概念論が役に立たない奴には元から概念がないだけというオチ。 OOは文系のための言語という考えがあるが、あながち間違っていない。
763 :
デフォルトの名無しさん :2007/01/20(土) 22:33:45
その前に日本語をきちんと学ぶこと。 プログラムが書けない奴は日本語もダメ。 もちろん、日本人の話なw
764 :
740 :2007/01/20(土) 22:48:38
オレはC言語やCOBOLしかやったことの無いメンバーしかいないチームで、 C++やJavaの開発を一緒にやったりする経験が多くあるが、オブジェクト 指向に背を向けている人は最後まで理解する事はできなかったね 結局その人たちは元の古巣へもどって逝ったよ。
>>765 それは、やる気や適正の問題で観念学習をしてないからじゃ
無いでしょう?俺の経験では言語学習だけで、使いものになる人は
いても、観念学習だけでまともな設計ができる様になった人は
見たことないな。
>>766 ちがう
言語は覚えようとしていた
だが概念を覚えようとはしなかった
だから結局何がなんだかわからなくて挫折した
概念がわからない状態でOOPL使って作ったプログラムは
ただの手続き型プログラムだろ
Javaを使ってC言語や、COBOLを書こうとしているだけ
何らかのプログラムを書けるようになるためには概念はイラン 期限付きで結果を出さなきゃならないような状況では、 形はともかく動くものが出来ればいいからな ただそれはオブジェクト指向技術を使って開発したプログラムではない
>>767 継承も、カプセル化・隠蔽もきちんと使ってたぜ
どのあたりがOOじゃ無いのか、さっぱりわからないんだが
OOの条件を書いてもらえないか?
>>769 >継承も、カプセル化・隠蔽もきちんと使ってたぜ
っていうかその人は概念を持っているんじゃないの?
>>769 っていうか、オレが見た人をおまいが知ってるんかよw
大体において、物事に理解度には個人差があるからなぁ 概念を特別に勉強しなくたって自然と習得できる人もいるだろうし、 そうでない人もいるだろうねぇ 特定の人間が出来るからって万人が出来るとは限らん。
>>770 コードを書く上での観念だけだよ。
OOの哲学なんてのは、まったく教えてない。
不必要な情報は出さない。同じ役割の物は、
抽象クラスを作ってインターフェイスを同じにする。
書き方が違うだけで、構造化でも同じだと言ってたよ。
例えば俺はポインタの概念に戸惑いなどまったくなかったが 同じくC言語に熟練した同僚と違いOOPにも戸惑わなかった。 何に違いがあるのか考えてみると、 俺は普段からそういう思考で過ごしているからだという結論に落ち着いた。 言語適正=生活習慣。これだね。
>>773 オレもCとかCOBOLしかやったことの無い人にはそう教えるよ
つい極論に走ってしまったが、 言語学習と言うか実際にコード書かせて学習させるのが 一番だと思う。良いコードを見せてこうやったほうが安全とか 便利とか、実例で学ばせてゆく、英語とかでも文法いくらやっても 話せる様にはならないじゃん
大体、手続き型の言語しかやったことの無い人が、すんなりJavaとか出来るようになるか? そんなの見たこと無いけどな。
>>776 なぜソコでクラスを分ける必要があるのか?とか
そういう素朴な疑問にはどうやって答えるの?
概念の説明無しで
クラスとは物凄く小さな単位のライブラリ。 最初はこれくらいで教えておくのが楽。
>>777 Cやってた人は、早い場合は異様に早いよ
3日もしない内に、実務で使ってみたいから、
適当な仕事無い?とか聞いてくる
まぁ、それで頼んだ結果をみると、
Cのヘッダみたいな定数クラスがあったり
ツッコミ何処それなりにあったりするけど。
動くことはキチンと動く
言語仕様だけならテンプレートまでで1週間で覚えられるんじゃね?
それでオブジェクト指向が理解できるの? プログラムが書けるようになるだけなのでは?
このスレの趣旨って、オブジェクト指向を学習するにはどうすべきか?っていうことでしょ?w プログラムが書けるようになることがゴールじゃないだろw スレ違いもいいところw
>>782 オブジェクト指向が理解できてると言える条件を
教えてもらわないと、なんとも言えない。
>>784 が言いたい事は、
>>784 自信はオブジェクト指向が理解できてて、
それはプログラムが書けさえすれば達成できるものだ、
という理解でいいの?
>>785 微妙に違う、オブジェクト指向の理解できてるかどうか
なんかは誰にもわからない。ので実質、
保守性の生産性が高い設計、及び、プログラムが書ける事のみが
重要と言いたい
>>784 基準といえるか判らんが、
デザインパターンの知識が無くて設計しても、デザインパターンにマッチした設計が出来るようなら
割とオブジェクト指向を理解しているといえるのでは?
>>786 だがそれはスレの趣旨とあってないだろ?
構造体があるクラスのメンバの参照をもったりしなければおおむねOOPは成功してる。
そういうもんだいじゃないんじゃ・・・・
>>787 デザパタ=OOなのか?
それこそ実装よりの技術でOOの概念とは違う気がするが
それはともかく教えれば、適切に使う様になる
場合が多いけど、教えずに使ってるのは、無いかも
TemplateとかVisitorとかは、継承の説明で教えちゃうしなぁ
これは、実装の話だから、設計だとどうだろうな、
実装おしえてから設計教えるからわからん。
あと、オブジェクト指向の理解度を測る基準としては、メトリクスも使えるか? 1クラスはpublicメソッド数が10個以内 1メソッドのコード行数が100行以内 1クラスの行数が200行以内 この条件でプログラムを作れるかどうか?
>>791 デザインパターンは役割の関係の雛形
これに近い適切な役割の関係が導出できるかどうかが問題
それには役割自体が適切に割り当てられているか?っという事も含まれてる
>>792 本当にそんな実装よりの評価で良いのか。
しかも、その条件で、たぶんOO的で無い
クラスを幾らでも作れるし、設計できるよ。
>>793 デザパタが自然に使えてるかと言えば使えてるな。
だいたいデザパタって機能レベルの関係でもつかえるから
このスレ的には、OOとあまり関係ないんじゃないか?
>>794 ある側面からの機械的な評価でしかない。
でも、OO的な考えを持ってない人はこの基準に収まる、”意味のあるプログラム”はかけないと思うね。
>>796 そんな事はないぞ、メソッドの長さは、Cでも短い方が良いし
モジュールもそうだから、極論すればCのモジュールを
そのままクラスにしたような物でもとおるよ。
それは意味のあるプログラムになるの?
ここでいってる”意味”とは、何でそういうクラス構成にしたか?って言う問いに対する答えで、 メトリクスをクリアするため、ってのは問題外w
まぁ要するに、オブジェクト指向を理解する=OOPLを理解するってことではないってことは はっきりしたんじゃないw
>1クラスの行数が200行以内 こんなもんJDKのクラスライブラリだけ見ても該当しないコードだらけやん
>>798 モジュールをそのままクラスにしたのだから
機械的にモジュール分割を行わなっていなければ
当然、例えば、ネットアクセスモジュールとか
意味はあるだろう。
>>799 たとえば、上の例だと
ネットアクセスする関数郡って意味はあるよね。
>>802 class NetAccessMethods1
class NetAccessMethods2
class NetAccessMethods3
とか作ってそれぞれメソッド10個ずつ?w
>>803 それは、機械的な訳かただから違う
NetAccessToA_Machine
NeTAccessToB_Machine
NetAccessCommon
Aマシンへの、アクセス用
Bマシンへの、アクセス用
上記の共通部分
って感じのモジュール
>>804 w
class Connection
class Protocol
class Message
見たいなクラスくらい作って欲しいもんだ
あと、Adressもいるかw
>>804 このクラス設計を見て、オブジェクト指向を理解しているとはお世辞にもいえんなw
申し訳ないけどw
ゴメン、 理解しているとはいっていなかったね
もう寝るぜw おやすみー
>>805 だから
>>804 みたいな明らかに駄目なクラス分けでも
メトリックス通ってしまうよって例だから
>>807 日本語ができない人だったのか。
気付かなかったよ。
>>810 あそっかw
ゴメンよw
ホイじゃホントにおやすみー
>>812 こちらこそ、眠いとこ煽って悪った
おやすみ
なんだこのgdgd?
816 :
デフォルトの名無しさん :2007/01/22(月) 01:13:23
オブジェクト指向言語は、数学で言う集合論の応用といえると思う。 そしてそこから、集合に属するオブジェクト、インスタンスという考え方で 実体を形成してそれらを「扱う」体系を言語化した。 それらに、継承や抽象化などの性質を浮き彫りにして強調することで 「オブジェクト指向」という概念を改めて定義した、ということではない でしょうか。
817 :
デフォルトの名無しさん :2007/01/22(月) 01:18:25
そういう指向からすると、Staticあるいはsharedなど静的、共有という Globalメンバー(変数、関数)の方が特異な存在になっていると思う。 それらは型、集合に属するというものの、インスタンスではないから スーパーな存在、実物存在に対する、神、あるいは法則、あるいは イデア的な存在となっているため、 「オブジェクト指向」のなかでも「オブジェクト的でない」存在が結局 このStaticでsharedな存在ではないかと。
っていうか、言語学習と概念学習のどっちが先か?を考えるスレじゃハゲ
神とかイデアとかじゃなくって便利だからだお staticなものをいちいちインスタンスにするのがバカバカしいからだお バカは概念にこだわる かしこいやつは目的を失わず、「言語」を学習する
バカは2chの煽りにこだわる かしこいやつは目的を失わず、「成果」を持ち帰る
オブジェクト指向的にトランプの「七並べ」を作るなら どのようにクラスを定義しますか? 「カード」クラスにはどんなメソッドを定義しますか? カードを置く時、それはその場所に置けるのか否かの判定を どのクラスのどのメソッドで行いますか? 表示するカード絵はどのクラスが保持しますか?
カードはクラスにしない
823 :
デフォルトの名無しさん :2007/01/22(月) 12:07:08
オブジェクト指向原理主義者なら、まず作る予定もない花札ゲームのための拡張性を考えて カードクラスをインターフェースにするところから始めるよ。
>>821 自分のもっている本を見ると、Cardクラスは
int getNumber();
int getSuit();
String toString();
の3つ。
ルールクラスがあって、
Card[] findCandidate(Hand hand, Table table);
で置ける場所の候補(トランプのスートとナンバー)を探すようになっている。
もしよろしければDで書いていただけませんか?
>>823 カードクラスを純粋クラスとしてカードの操作メソッドを定義。
カード絵クラスでカードの絵柄1枚と縦横サイズ等を保持。絵柄の読み込みもこのクラスにさせる。
トランプカードクラスはカードクラスを継承しコピーコンストラクタで裏のカード絵と表のカード絵の2個のカード絵オブジェクトをスートとナンバーと一緒に入力してそれが何のカードかを決める。
トランプカードクラスは入力されたカード絵オブジェクトを実体ではなく参照で保持する(つまりポインタで保持する)。
トランプカード集合クラスでトランプカードの裏の絵と54枚の表の絵計55個のカード絵オブジェクトを生成した後54個のトランプカードオブジェクトを生成する。
七並べゲームクラスはトランプカード集合オブジェクトを保持する。
ってどうよ?
花札は大袈裟な気もするが トランプゲーム詰め合わせへの路線変更や 絵柄切替機能付けろって仕様追加はありそうだな
花札云々は皮肉だろ
>>825 D言語は知らない。
オブジェクト指向を習いたいならJavaからした方がいいと思う。
オブジェクト指向系の書籍は、Javaで例を挙げているのが多いから。
自分もRubyを習おうと思って始めたけど、結局Javaの方を先に習得していたし。
>>827 なぜかそのトランプゲーム詰め合わせ仕様書にはトランプタワーが入っていたり
さあ物理エンジンを作ろうw
831 :
デフォルトの名無しさん :2007/01/22(月) 19:45:05
ム板にしては進みが早いな。 やぱ分け分かんなくなってる奴が多いのか?
俺ならトランプカードクラスを派生して 七並べ用トランプカードクラスも作る
833 :
デフォルトの名無しさん :2007/01/22(月) 20:50:46
>>823 標準クラスにも
使い道の分からないのはあるぞ?
ISOにカードクラスの標準化を提唱する
いきなり実装っぽい考えをしてるところがあかんな ちゃんとモデリングセーや
>>835 そう思うならモデリング例を上げれや。
批判だけなら猿でもできる。
>>823 より YAGNI 感を醸すために、トランプと花札を同じコンテナに格納できないように template にするべきだと思う
>>819 >神とかイデアとかじゃなくって便利だからだお
>staticなものをいちいちインスタンスにするのがバカバカしいからだお
便利といって何でもご都合主義で入れていけばいいならそもそも
オブジェクト指向でなくてもいいということにもなるが
オブジェクト指向であるのにオブジェクト的ならぬ存在に支えてもらわないと、
実際に本当には便利にならない、、
という現実があるのだ、という風にとらえないと、物事の限界や長所と短所
という考え方の意味がなくなる
イデアや普遍法則があっていつでも自由に適用できるようになってないと
不便な現物世界になる、つまり現物は機能的に不全だといえるかもしれない
どうでもいいよ
840 :
デフォルトの名無しさん :2007/01/25(木) 21:07:55
C言語でも、関数ポインターと構造体を使えば、クラスを作れるよね?
>>840 それがクラスなら、お前がクラスと呼ぶものは全てクラスだよ。
842 :
デフォルトの名無しさん :2007/01/25(木) 21:22:02
>>840 継承どうするんですか?まクラス使いたいのなら、すなおにC#に汁
ところで、住人様方
VBやVC#でさくさくプログラミングしようかなーと思ってるんですが
オブジェクト指向理解してないと、やっぱりプログラミングむりぽですか?
844 :
デフォルトの名無しさん :2007/01/25(木) 22:38:11
>>841 .> それがクラスなら、お前がクラスと呼ぶものは全てクラスだよ。
それがクラスなら、プログラムと呼ばれるもの全てクラスだよ。
こっちの方がいいよ。
関数ポインターと構造体を使ったものが継承できたらクラスなのか?
C++ のクラスのバイナリ構造の事をいってるんだろ?
847 :
デフォルトの名無しさん :2007/01/25(木) 23:31:24
C言語を用いてクラスは実装できる オブジェクト指向言語はC言語で開発できる C言語 is King of プログラム言語s だ!
で?
>847 その理論だとアセンブラ最強な件
ほんたまがでてきそう
よーわからんのだけど奇介護っつーのはオブジェクト指向でかけるのかい?
あたりまえじゃん
機械語でかけない物は PCで実行できんからな。
>>844 いや、>840 は一応 vtable くらいは用意するつもりなんだろうから。
構造化最強
オブジェクト指向は、ソース書いてる内に、ほぼ勝手に身に付いていくものでしょw 参考書によってはそうでもないけど。
だな
861 :
デフォルトの名無しさん :2007/01/26(金) 22:36:24
ほんとかよ。 4000行あるようなクラス書いてないか? やたらif分がネストしてないか?
それでもイーンダヨー
863 :
デフォルトの名無しさん :2007/01/26(金) 22:56:24
>>861 プログラムは内部が糞であっても、要求を満たしてれば合格
逆に内部がどんなに素晴らしくても、要求を満たしていなければ不合格
よって、
4000行あるようなクラスで、且つ、やたらif分がネストしてたとしても
要求を満足していればOK
最低だ
>>863 こういうセリフはよく職業プログラマが使うが
職業プログラマほど使ってはいけない言葉
866 :
デフォルトの名無しさん :2007/01/26(金) 23:00:44
>>863 そして保守・運用作業が困難な事が目に見えているため、転職。
867 :
デフォルトの名無しさん :2007/01/26(金) 23:07:07
いいや、顧客から言われた。 ついでに、要求を満たしてない物に金は払えない、とも言われた
マトモに動くもの作れないくせに給料もらってんじゃねーw
870 :
デフォルトの名無しさん :2007/01/26(金) 23:11:13
言語がコボルからjavaに変っただけで同じ書き方してる奴多いよなぁ。 クラス名がDF000001とか(w
871 :
デフォルトの名無しさん :2007/01/26(金) 23:19:16
プログラムは要求通りに動いてはいたんだが、なまじっか、慣れてないオブジェクト指向使ったら納期が遅れちまって...
>>863 ,
>>867 を言われたってわけよ、納期も大事な要求事項だからな
>>871 それは単にお前がオブジェクト指向に慣れていないのが原因なだけでは
だいたい、その時になってから勉強を始めようって姿勢がいかんのじゃ
>>870 移植作業なんてものはそういうものだ。
読みやすくするのはリファクタリング作業。
>>874 構造化設計のままリファクタリングなどできない。
そりゃリビルディングの方がいいだろ
構造を変更するのはリストラクチャリングっていうんじゃなかったっけ?
それがでてこなかったw
どっちも同じ事だよ。 リストラクチャリングはリファクタリングの部分集合。
リストラクチャリングを検索したら政治用語としての方がよく使われるみたいだが、ソフトウェアの世界でも一般的に使うのか? あまり聞かないねぇ。こういう事はリファクタリングというんだよ。おぼえとけ
>>880 要するに、Martin Fowlerは、リファクタリングの粒度の事で言い方を変えたいだけじゃないの?
そんな短絡的な趣味に付き合いたくもない。
>>882 まあ、この手の連中は用語作って商売するからな
構造化指向からオブジェクト指向に移った方が一番大変そう。 ある意味SUNの陰謀だw
構造化にもオブジェクト指向言語の機能は有効だと思うが
構造化って簡単に言うと、 1.条件分岐と反復文のみを用い、基本的に上から下へと制御が進む 2.類似した処理は関数としてまとめる だよね?
構造化でも、とりあえずDIPさえ満たしていればリファクタリングは可能かな。
すまん、俺はオブジェクト指向が確立してからプログラミングはじめたから 実は、構造化指向は参考書の中で聞いたことがあるだけで実際には あんまり知らない。ただ構造化指向が染み付いた人はオブジェクト指向に脳みそ 切り替えるのは厳しいかな。と
>>889 「構造化志向」って何?
いや、
そんな細かな書き間違いの話なんかよりも、
むしろ
>>889 の言う「志向」が、
何を指すのかを聞きたいな。
・・・いやいや、
そんな細かな書き間違いの話なんかよりも、
むしろ
>>889 の言おうとしたであろう「指向」が、
何を指すのかを聞きたいな。
例えば、「オブジェクト指向」でいう「指向」とは何なのか?
とかさ。
正直、オブジェクト指向は 「デザインパターン」の一種だと思う。
>>891 デザインパターンはオブジェクト指向のサブセットだろ
893 :
887 :2007/01/27(土) 12:12:48
だから、オブジェクト指向においても、メソッドは、(2.の関数)の考えに近く、実際の処理 の記述は、(1.制御の流れ)に相当するよね? オブジェクト指向は主に全体を見通しての設計技法であり、構造化は実際の制御文を書く ときの技術って感じで、別に相反するものでもないと思うんだけど。 で、構造化しか知らない人は、全体の設計も構造化(制御中心)でしてしまうと。
>>892 いや、逆だと思う。
要するに「デサインパターン has-a オブジェクト指向」。
GoF に「オブジェクト・パターン」なんてのが載っていても
全然おかしくないような気がする。
>>895 勘違いしないでほしいが、俺は別に「デサインパターン」が凄い!
なんて思っていない。
あれはプログラミング上で頻出する、枯れたイディオムを羅列したものだ
(ただし形式上、「OOP による」という条件付、だがね)。
OOP も所詮は「プログラミング上のイディオム」だよ。
っていうか、ほとんどスレの趣旨にあっていない書き込みばかりじゃねーかw
オブジェクト指向の話だから、合ってない事もない
>>893 よくいるんだが、構造化定理と構造化技法がごっちゃになってる。
構造化技法ってのは、特定のパラダイムというよりは、いろんな宣教師が各人勝手なことを吠えてただけに近い(これはオブジェクト指向○○も一緒だけど)。
シンプルな設計をするためのイディオム集みたいなかんじ。
データフローグラムなんてのもあったりして、データ中心の分析設計も構造化時代からあった。
データ + アルゴリズム = プログラム なんてのも構造化時代からのものだし。
モジュール化の話題では、pimpl に似た技法を使っての実装隠蔽の話などもあった。
OOが設計で構造化がコーディングと断絶したものではない。
OOは方針の違う構造化のスーパーセットみたいなもんだ。
どうやら、ソフトウェア工学をまともに研究した経験がある人間は俺以外いないようだ。
>>901 ああ、そうだな。
それと、現代において
まともなソフトウエア工学なんてものがあると
思っているのもお前だけだよ。
(;^ω^)
>>1 答えを言ってやろう
電子工学の基礎→ディジタル回路→チューリングマシン→コンピュータの仕組み→機械語→アセンブラ→C言語→構造化設計→Pascal→C++→オブジェクト指向設計技法→Java→Lispと平行してラムダ計算を勉強→MLと平行してコンパイラを設計→Haskell
工学というよりは数学に近い。 つきつめれば最も実践的な宗教かな。 一つの世界観を創造してしかもそれを実装しているんだから。
要するにオブジェクト指向についていけていないコボラーが オブジェクト指向=構造化にしたいってことを言いたいスレに変ったって事か
>>904 算数→数学→物理→量子→電気→電子工学の基礎→ …
908 :
デフォルトの名無しさん :2007/01/27(土) 18:19:34
→情報理論→.......→宗教論→カルト宗教に入信→
>>887 構造主義って哲学が大流行した時代があって、哲学以外の分野でも新しい概念や
手法の頭に「構造化〜」って言葉をとりあえず付けるのが流行ってたってだけで、
お前さんのいうダイクストラの構造化プログラミングとはまったく関係ないよ。
ダイクストラは 「類似した処理は関数としてまとめる 」 なんてことは言っていない。 あえて換言すれば 「全論理を構造化する」 かと
ほにゃああ へっけんろぴゅろぴゅ〜 あわ〜 へっけんあわ〜
↑鬼才現る
おまえのせいじゃないから 原文を当たった方がいいよ 引用者が日本語を扱うのが下手だとしか思えん ↓ 抽象データ型が「型」による抽象化なのに対して、 オブジェクト指向は「手続き」によりそれを行なう対極の手法 (つまり“2”のオブジェクト指向の言うところとは違い、 両者はサブセット/スーパーセットの関係にはない)と位置づけていて興味深いです。 この文脈においては、もし“オブジェクト指向”したいと思うならば、 けっして this(や、self)の型を見て条件分岐をするような仮想関数 (や、メソッド)を書いてはいけない…ということが、よりはっきりと認識できるはずです。
>>913 >>914 の言うように論文を当たるのがベストだけれど、端的には…
データの「型」を見て、相応しい「手続き」をするよう条件分岐みたいな処理をする
関数を書かないといけないのが、「型」による抽象化(クックの言う抽象データ型)。
「型」ごとに同名の関数を定義できて、それぞれその「型」に相応しい「手続き」を
記述するだけでいいのが、「手続き」による抽象化(クックの言うオブジェクト指向)。
前者だと、既存の「型」にかかわる「手続き」を新たに追加するときに、新しい
関数をひとつ定義すればよく、既存の関数にはいっさい手を加える必要がないので有利。
この場合、後者では、各「型」に追加した「手続き」に対応する関数を追加しないといけない。
逆に、既存の「型」と同じインターフェイスを備えた新しい「型」を追加したいとき、
後者が有利。前者では、すべての既存の関数に新しい「型」に対してどのような
「手続き」をするのかの判断を追加しないといけないから。
説明しようとすると、けっこう難しいな。w
手続き”の”抽象化、という解釈でいいなら非常に自分のスタイルとあっててシックリ来る考え方だなー オブジェクト指向の”オブジェクト”=状態って言うのは、いまひとつ手狭な感じがして仕方が無い
”オブジェクト”≠状態ではなくて、 それだけではない、という意味
抽象データ云々はモウ秋田
やれやれ
もはやオブジェクト指向なんて言葉すら青カビ臭いし・・・
921 :
デフォルトの名無しさん :2007/04/17(火) 23:49:25
ウホッ
>>920 そうだな。たしかにいい感じに熟してきた頃合。
でも、これは材料としてであって、まだまだ料理の工夫が必要だろうけど。
枯れてきたからこそ身につける価値が出てくると言うもの
たしかに踏みならされた道のほうが楽でいいよな 開拓者は開拓者の道を歩んでもらわなきゃ困るけど
自称開拓者の中には自分の手を動かさず左から右へ物を動かすだけの偽者も紛れ込んでいるけどな。
それで名誉が手にはいるなら楽勝やん
偽者は早く消えろ
日本の思想を否定するな
世阿弥と義満の間で川の字になって寝られるぜ
930 :
デフォルトの名無しさん :2007/04/25(水) 06:08:56
>>920 最近ではマルチエージェント指向なんて呼ばれているらしいけど。
934 :
デフォルトの名無しさん :2007/07/08(日) 08:46:32
最近の奴らはオブジェクト指向プログラミングや 構造化プログラミング以前に、 入力-->処理-->出力 という古典的プログラムの概念すら無いから困る。
935 :
デフォルトの名無しさん :2007/07/08(日) 09:06:39
オブジェクト指向はそもそも理論的なバックグラウンドすら持たない 軽薄で内容の無いバブル的なスローガンだったな。
936 :
デフォルトの名無しさん :2007/07/08(日) 09:07:06
↑24時間粘着体制の引き篭もりトレーダ乙
937 :
デフォルトの名無しさん :2007/07/08(日) 09:11:49
おっ、なんだこの反応の速さw このスレには初めて書き込むんだがな。 低脳なオブジェクト指向信者が監視してるのか、ご苦労さんw
938 :
デフォルトの名無しさん :2007/07/08(日) 09:47:19
「オブジェクト指向?」 「カプセル化による隠蔽、スレッドとの親和性によって、結果的に逐次的プログラミングのパラダイムを駆逐したんだよね」 「関数型言語の理想を部分的にであれ実用化したという点は評価に値するね」 「そうそう。安易に構造化プログラミングと対比するのは、情報処理の変化の本質を見ていないよ」 「まさに木を見て森を見ず!」 「コードの見た目だけに拘って議論するのは、悪しき唯物史観というべきだね」 「とはいえ、人間の貧弱なインターフェイスでは、階層的名前空間による隠蔽や静的型チェックの強化がもたらした即物的な影響も甚大なのでは?」 「タイプ数の減少はプログラマの限られた思考能力をより抽象的なレベルに振り向けるからね」 「じゃあ次はエージェント指向だ!」 「どうかな? スレッドさえ満足に扱えない人間に、協調的プログラミングのパラダイムが理解できるんだろうか」 「しばらくはオブジェクト指向のレベルにとどまるのかもしれないなぁ」
939 :
デフォルトの名無しさん :2007/07/08(日) 10:03:11
所詮手続き型言語
940 :
デフォルトの名無しさん :2007/07/08(日) 10:44:18
俺指向
>>934 そうそう。そうなんだ。
基礎がなくても、開発環境のお陰で、なんとなくプログラムが動くもんだから
それで満足してるみたい。
不具合は原因が突き止められないので、フラグ増やしてフタして終わり。
もう勘弁してほしい。
ループを知らずに コピペ+マジックナンバー書き換えしまくり っつーソースを見た時はびっくりした
馬鹿は伝染るということ
>>913 通りすがりデスが、3クックの〜はC/C++の関数のポインタの様な事の気がする。
>>944 そのblogで紹介されているPDFを適当に読むに、
関数ポインタではなく、Lisp(CLOS)の方が適切みたいだが。
まとめにCLOSはこのくくりでは分類不能って書いてないか? ま、どっちも言いたいことは分かるしたぶん間違っていないとも思う。