【オブジェクト指向】言語学習が先?概念学習が先? at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
04/01/10 14:56
VisualBasicやCといった手続き型言語をずっとやってきた人が、
C#やJavaといったオブジェクト指向言語をマスターする場合
オブジェクト指向の概念・概論を学ぶのが先がいいのか、
それとも、C#やJavaの言語を学ぶのが先がいいのか、
どっちがいいと思われますか。


2:1
04/01/10 14:57
実は私が今そうで、ずっとVBをやっていたのですが、
時代の流れもあって、C#を勉強を始めました。
C#の言語を勉強していると、
「オブジェクト指向とはどういうものかを知らないと効率悪いよな」と思い
憂鬱なプログラマのためのオブジェクト指向開発講座って本を読み始めたら
「やっぱ、言語を知らないと効率悪いよな」って思うようになって
鶏が先か、卵が先か状態になってしまいました。
皆さまは、どのようにマスターされました?

3:デフォルトの名無しさん
04/01/10 15:03
単発スレにマジレス。

概念、言語仕様を学ぼうとするのはどちらが先でも結構だが、
結局一番重要なのは実践であってそれは本では学べない。

よって、さっさとそのC#とやらを使え

4:デフォルトの名無しさん
04/01/10 15:08
漏れも単発スレにマジレス。

>>3
> 結局一番重要なのは実践であってそれは本では学べない。

あと、いい先生に逢うこと。
実践から得られた経験を整理して理解する時間と、
それを助けてくれる先生を得ることが大切。


5:デフォルトの名無しさん
04/01/10 15:46
>>1
習うより慣れろ。阿都市ね。

6:デフォルトの名無しさん
04/01/10 16:59
概念だけ覚えてもプログラムは作れない
言語だけでも、プログラムにはなる

7:デフォルトの名無しさん
04/01/10 17:05
じゃーオブジェクト指向言語を学ぶ必要は無いな

8:デフォルトの名無しさん
04/01/10 19:20
>>4

プログラミングは独学でも学べるぞ

9:デフォルトの名無しさん
04/01/10 19:28
OOの何が難しいのかが俺には分からない。
手続き型言語と基本的には同じだと思うんだが。


10:デフォルトの名無しさん
04/01/10 19:48
>>9
> 俺には分からない。
分かるように努力していない奴には
一生分からない。

11:デフォルトの名無しさん
04/01/10 20:04
>>10
少なくともお前よりは出来るし分かる。

12:デフォルトの名無しさん
04/01/10 20:09
>>11
ぷぷぷ。出来ない奴の気持ちがお前にはわからないってことだよw

13:1
04/01/10 20:14
>>3 >>4

実践の場ですか?
実業務は、まだVisualBasicを使っているので、
(近いうちにC#に移行という話は出ている。
話が出ているだけで、誰もやろうとはしない・・・)
仕事としてはありませんが、
フリーウェアでソフトを作るなりして
実践の場を、作っていこうと思っています。

先生は当然いません。
周りでC#もJavaもつかっている人がいないから


14:デフォルトの名無しさん
04/01/10 21:27
>>13
VB使えるならデータ中心的なプログラムスタイルは分かってるだろう。
後はただの言語仕様のお遊びだ。気負うことはまったくないと思われ。

スレ立てる暇あったらJDKインストールして適当な入門書買ってこいと。

15:デフォルトの名無しさん
04/01/10 21:34
うるせえ、いいから書いてコンパイルして走らせろ。
話はそれからだ

16:デフォルトの名無しさん
04/01/12 21:13
OO(OOAとか含まれる)じゃなくて、OOPするなら、
OO概念とプログラミング両方書いてある入門書で両方学べ。両方だ。
あと、先生がいないなら、JAVAのよいソースを読め。つか、先生なんてふつういるか?
あと結城のデザパタ盆とか呼んで実践してみるのもOOセンスつくかもな。
そしてOOの考え方やOOでの書き方で疑問がわいたらここでもどっかでもスレに書け。
運がよければよい叩きをしてくれる椰子が現れるだろう。

17:デフォルトの名無しさん
04/01/12 21:14
>>16
本厨か・・・

18:デフォルトの名無しさん
04/01/12 21:19
本中って何?

19:影
04/01/12 22:23
動くようにgotoでバシバシ飛ばしちゃえば、gosubなんていらねーんだよ。
うへへ、俺は天才だぁー。

20:デフォルトの名無しさん
04/01/12 22:25
>>19
まぁ、ある意味事実だ。

21:つぐみ
04/01/12 22:39
スパゲッティは自分のだけにしてよね。シッシッ。

22:デフォルトの名無しさん
04/01/12 22:50
必要になってから身につければ良いのでは?<OO手法
必要になってから身につけたのでは遅いかも。<言語

23:デフォルトの名無しさん
04/01/12 22:54
OO手法ってOOAとか?
つかOO手法が必要になる時ってどういうとき?
>>19 は事実だよ?

24:デフォルトの名無しさん
04/01/12 23:03
人とオブジェクトを共有する手法<OO手法

25:デフォルトの名無しさん
04/01/12 23:39
> 1
どっちがいいと思われますか。

smalltalk(VisualWorks or Squak)を勉強すれば、両方習得
できると思うけど。


26:デフォルトの名無しさん
04/01/12 23:42
プログラミングをはじめてやるという奴にはSquakはいいんだけどね・・・

27:貧乏紙
04/01/12 23:53
「憂鬱なプログラマのためのオブジェクト指向開発講座」
すごい名前の本!!!

28:デフォルトの名無しさん
04/01/12 23:56
Squakから始めるとギャグみたいなコード書くようになってSquakから抜けられないと読んだことがある俺は小咄未経験。


29:デフォルトの名無しさん
04/01/13 00:05
Smalltalk, Squeak ね。言語より概念より、実装から入った方が良いんじゃね?

30:デフォルトの名無しさん
04/01/13 00:09
>27

いや、それめっさ定番の本なんだが...。
興味を持ったあなたは運がいい。ぜひ一読をおすすめします。

...とマジレスしてみる。

31:デフォルトの名無しさん
04/01/13 00:11
結論:

実装⇔概念
のスパイラルで。

32:デフォルトの名無しさん
04/01/13 00:21
よくSmalltalkを勧めるヤシがいるが、Smalltalk系のOOがC++/Java系のOO以上に
広まることがあるだろうか。実用を考えればやっぱり後者では?
URLリンク(sumim.no-ip.com:8080)
マイナーな世界で純粋を遊びたいなら、Smalltalkなぞ汚くてやってられん、という人も多いし。
スレリンク(tech板)

33:デフォルトの名無しさん
04/01/13 00:35
Smalltalk を勧めるのはデザインパターンとかのからみもあるのでは。

34:デフォルトの名無しさん
04/01/13 00:36
>>31
激同。概念だけだと、犬が「ワン」猫が「ニャー」の話で終わる。

そう思って憂鬱本と同じアプローチで社内研修をやってみた。
コードはJava用とVB.NET用と両方用意、VBしか知らない人のためのコードの説明も加えた。

…生粋のCOBOLerから「わからん」と苦情がきますた…

35:デフォルトの名無しさん
04/01/13 01:11
>>33
GoFならJavaでも++でも出来んじゃん。って事ではなくて?

36:デフォルトの名無しさん
04/01/13 02:15
欧米のOOコミュニティではSmalltalkは現役だから。
プロトタイピングしやすいし、概念やデザインの説明に Smalltalk 使われたりするし。

37:デフォルトの名無しさん
04/01/13 04:59
>>36
ソースプリーズ。
つか、OOコミュニティって何よ?小咄コミュニティとか言う落ちじゃ?

38:デフォルトの名無しさん
04/01/13 05:36
oopsla とかに出かけていく奴らじゃねぇの?

それより、C++ と Java を一括りにして、Smalltalk と線引きしている基準が分からん。
>Smalltalk系のOOがC++/Java系のOO以上に


39:デフォルトの名無しさん
04/01/13 05:52
Kent Beck とか Ward Cunningham は Smalltalker だよね。

40:デフォルトの名無しさん
04/01/13 09:48
GoF本のRalph JohnsonもSmalltalkerだし
サンプルコードにも結構Smalltalkのが入ってるな。


41:デフォルトの名無しさん
04/01/13 11:02
36って恥ずかしい

42:デフォルトの名無しさん
04/01/13 22:55
ANSI 準拠の言語で、もっとも早くオブジェクト思考の機能を言語使用に
盛り込んだのはCommon Lisp。
よってLispをしなさい。

43:デフォルトの名無しさん
04/01/13 22:57
>>42
ANSIって言語機能の標準とか規定してたの?CLRみたいだな。

44:自分で整理できてないが
04/01/15 19:54
>>38
C++,Java データ型が思考のベース。
小噺   なにはなくともオブジェクトとメッセージ送信ありき。
前者は、問題対象がオブジェクトの世界。後者は問題記述空間が(も?)オブジェクトの世界。
で、後者が半端だという人達は、スレリンク(tech板) へ。


45:名無しさん@Linuxザウルス
04/02/18 21:02
こんな感じで概念が学べるなら楽しそうでいいんだが



[190]名無しさん@Linuxザウルス<>
04/02/16 21:49
>>184
妹クラスを作って12人の妹を派生させて

呼びかけると
お兄い様
お兄いちゃん
お兄いたま
(ry

と応答させて
おお ポリモーフィズム マンセー!!

という感じで理解しろという事かな


46:デフォルトの名無しさん
04/02/18 21:24
>>45
俺ならそんなもんが出た瞬間速攻でPC叩っ壊す。

そして氏んでくれ

47:最凶VB厨房
04/02/18 21:36
>>45
お前の発想はキモイ。

48:デフォルトの名無しさん
04/02/18 23:44
28 名前: デフォルトの名無しさん 投稿日: 03/05/21 10:00

フサギコはギコ猫のサブクラスだから、
フサギコクラスを作るときに「フサフサだぞ」メソッドを記述すれば、
ギコ猫から継承したメソッド「逝ってよし」「ゴルァ」が存在し、
(さらに)フサギコ特有のメソッド「フサフサだぞ」が存在するクラスになる。

49:デフォルトの名無しさん
04/02/18 23:49
>>48は基礎。>>45に到達して初めてOOのおもしろさが分かる。

50:最凶VB厨房
04/02/19 00:07
キモイやつだけがわかるOOのおもしろさを語られてもねぇ。

51:デフォルトの名無しさん
04/02/19 18:52
馬鹿か!!
オブジェクト指向ってなんだよわかんねーとか言ってるやつは
明らかに実戦不足なんだよ!
実戦経験が豊富であれば、自然とわかるものなんだよ!!

52:デフォルトの名無しさん
04/02/19 23:01
>>51
そうだな。実践で生半可なOOを振り回すと火傷する。

53:デフォルトの名無しさん
04/02/21 15:09
>>51>>52は反対のことを言ってる気がするんだが。
どちらかというと>>52に同意

54:デフォルトの名無しさん
04/02/22 01:46
> 51
オブジェクト指向言語て、Cや、Pascal、Fortranのよう
な手続き型に
1.構造体のメンバーに対して、アクセス制御ができる。
2.ダウンキャストができる。
3.(引数が違えが)同じ名前の関数を何個定義できる。
を仕様として加えただけだ。

cで書かれた有名なopen sourceソフトを解析すると、
2.3はトリッキーな事をしない限り無理だか、1は、
自主的に制御している。


55:デフォルトの名無しさん
04/02/22 01:47
>>54
オーバーロードとOOって関係あるのか?

56:デフォルトの名無しさん
04/02/22 01:58
て言うか、>>54>>52 が指摘してるタイプの奴だと思う。

57:デフォルトの名無しさん
04/02/22 10:57
Javaでオブジェクト指向を学ぶならJavaの基礎的な言語学習から始めた方が
わかりいいな。
「独習Java」でもそこそこいけるもんかな。
それから他の本に手を出すという要領で。

C言語経験者ならちょっとだけJavaの基礎をしっておけばすぐにとびつける。

58:デフォルトの名無しさん
04/02/22 11:17
ぶっちゃけ、オブジェクト指向を学ぶなら
結城浩の「Java言語で学ぶデザインパターン入門」でも
かなりの収穫はあると思うが。


59:830
04/02/22 11:23
りんごの色=赤い プロパティ。
りんご 投げると放物線を描いて飛んでいく。がメソッドだよ。

このりんごを派生させんのが、ポリもフィズ無だ簡単だ。

60:デフォルトの名無しさん
04/02/22 12:54
>りんご 投げると放物線を描いて飛んでいく。がメソッドだよ。
メソッド名に具体的な挙動まで定めちゃったらポリモルのしようがないと思うのだがどうか?

61:デフォルトの名無しさん
04/02/22 17:32
メッセージとメソッドは別
「投げる」メッセージを受信すると「放物線でとんでく」メソッドを起動するんならいいんじゃない

62:デフォルトの名無しさん
04/02/22 17:35
>>61
それなら良いんだが>>59からそれが感じられないんで

63:デフォルトの名無しさん
04/02/22 17:40
object '宇宙のリンゴ' implements method '投げる' invokes '直線で飛んでいく'

64:デフォルトの名無しさん
04/02/22 17:44
object: '宇宙のリンゴ' accepts message: '投げる' invokes method: '直線で飛んでいく'

65:デフォルトの名無しさん
04/02/24 20:18
>>45
よかったな、おまえ向きの連載がはじまったぞw
スレリンク(tech板:205-番)

66:デフォルトの名無しさん
04/05/02 00:43
UML勉強して、GOF本、リファクタリング読んで、
どっちもそれなりに理解していろいろプログラム組んでる
んだが、他にOOP関連で勉強しておいた方がいいモンて
ある?

67:デフォルトの名無しさん
04/05/02 02:00
OOプログラミングはなぜ使いやすいかって考え出すと非常に難しい

ポリモーフィズムによる一貫性が、人間にやさしいと思うんだけどね

真の人間の生理学を知らないと分からないと思う

OOプログラミングやると勝手にプログラミング上手くなっていくっていうのは
もともと人間に備わっている能力を引き出すからだと思う

もともと備わってる能力を知るってのは、こりゃ難しい やってみないとわからないんだから
やってみると意外とできてしまうってのは不思議だ

68:デフォルトの名無しさん
04/05/02 02:02
んでまぁ、プログラミング覚える一番の早道はOOな言語でOOなライブラリを使ってプログラミングすることだと思うよ

身につけるっていう感覚に近い 数学の解き方覚えるようなもんだ

69:デフォルトの名無しさん
04/05/02 02:09
おもむろに Java、C#、Ruby のどれかでプログラミングをする。
ある程度書いていると「何か違うなぁ」の壁にぶち当たる。
そこでオブジェクト指向の概念本、デザインパターン本を読む。

これが一番近道だと思う。概念から入るのは余りお勧めできない。
「オブジェクト指向のほうが自然で楽だわ」という感覚を体感できないから。

70:デフォルトの名無しさん
04/05/02 03:03
そして速度を求め初めてCやアセンブラに回帰する

71:デフォルトの名無しさん
04/05/02 03:35
>>70
ただの回帰に見えるが実は螺旋の構造になっている。
戻ると1つ上のステージになっているでしょう。

72:デフォルトの名無しさん
04/05/02 04:47
>>67-71
未消化丸出し

73:デフォルトの名無しさん
04/05/02 11:36
>>72

消化できてる香具師なんているのか

74:デフォルトの名無しさん
04/05/02 20:47
実践が先です。

75:デフォルトの名無しさん
04/05/02 21:03
コードを書かずに覚えることはできません。

76:デフォルトの名無しさん
04/05/03 01:01
続きはこちらで

スレリンク(tech板)

77:デフォルトの名無しさん
04/08/21 08:17
BASICから始めて、C言語とかそういうパターンでやってた人は
カプセル化とか、ポリモーフィズムとか言う概念が言語で実装されてるのみたら
すぐに飛びつくと思うんだよね。

なんて言ってもそれで一番苦労するから
というわけで概念に一票

78:デフォルトの名無しさん
04/11/03 16:35:28
保守

79:デフォルトの名無しさん
04/11/03 17:35:21
こんな糞スレ保守してな(ry

80:デフォルトの名無しさん
04/11/04 01:02:35
>>67

そういう考えは、間違ってはいないが、しかし、それがオブジェクト指向を困難にしていると思う
「オブジェクト指向でなぜ作るのか」を読むと、その敷居をとりさってくれるよ。

81:デフォルトの名無しさん
04/11/04 01:17:17
オブジェクト指向とは働き蟻が効率的にモジュール=クラスを利用するための技術なので
概念や哲学は必要ありません。

82:デフォルトの名無しさん
04/11/04 01:24:51
「オブジェクト指向でなぜ作るのか」って本は大分前に本屋で立ち読みしたんだけど
手続き型のプログラミングではグローバル変数を除去出来ないとかいう
ふざけたことが書いてあったんで俺の中では糞本認定されてます。

83:デフォルトの名無しさん
04/11/04 06:28:11
生まれたときからTVがあったような奴にはラジオの有難味は分からんて

84:デフォルトの名無しさん
04/11/04 06:50:22
まったく。
グローバルな破壊的代入を制御し隠蔽するためにどれだけの苦労が払われてきたか理解できないのだろうな。

85:デフォルトの名無しさん
04/11/07 16:12:17
>>1
きみ自身が
「手続き型言語をずっとやってきた人が、
C#やJavaといったオブジェクト指向言語をマスターする場合」
なんて事を前提にしているんだから、
オブジェクト指向の概念・概論を学ぶのが先がいいに決まってる。

さもないとこういうマヌケなことになる。
スレリンク(tech板:83-85番)


86:デフォルトの名無しさん
04/11/07 18:49:36
もうあきた

87:デフォルトの名無しさん
04/11/07 18:50:11
なんで同じようなことを別スレでなんどもなんども…

88:デフォルトの名無しさん
04/12/11 00:25:56
学習もスパイラルがいい。作りながら概念も同時に学べ。
どっちかが先とか言う奴は糞ウォーターフォール推奨者。

89:デフォルトの名無しさん
05/02/05 10:31:17
age

90:デフォルトの名無しさん
05/04/10 02:40:23
自分の意見を言わせていただきます。
『概念学習』を先にしたほうがいいと思います。

自分C言語はできたのですが、学校でJavaを習っていた時全く理解できませんでした。
よく言われるような『どこが分からないのか分からない』状態でした。

でどうしても分からないままでいたくないのでオブジェクト指向の載っている本を2,3冊買いました。(多分悪書の部類の本)
全く理解できませんでした。
長々と説明されているのですが、全く理解できませんでした。

でも日経系の本でオブジェクト指向のことが書かれている記事を見ていたら『あれ?もしかしたらこういうことかな?』と
うっすらと分かりかけてきたところを何度も見ていたら理解できるようになりました。
急にわかるようになってくると今までやってきたところがすぐ理解できました。
っていうかね
Javaを教える先生が『オブジェクト指向』の概念学習より言語学習を教えることをメインにおいたために、生徒の全員が全く理解できませんでした。

毎回何十個も言語学習をするよりも、半年かかってもいいから概念学習をしっかりさせたほうがいい。

これは多分英語でもいえると思う。
大学に在学していたとき、アメリカ人の先生が
『今学校の方針でこのような学習法(言語学習)をしているけど、正直概念学習のほうがいい。
単語を暗記させるよりも、辞書片手に英語の新聞の翻訳をさせたほうがよっぽどいい勉強になる』
と言った気持ちがオブジェクトをなんとなく分かりかけたときに理解できた。

どこのプログラマーでも困ったら本見るんだからそれでカバーできない概念学習をしっかりしたほうがいいと思う。

91:デフォルトの名無しさん
05/04/12 23:39:23
オブジェクトって単に関数を要素にとれる構造体でそ?

92:デフォルトの名無しさん
05/04/13 13:22:12
つるな

93:90
05/04/19 15:05:07
先生。何かこの教科書、教科書名の後ろにって書いてあるんですが。
しかも重要なところに『上書参考』って・・・・。

94:デフォルトの名無しさん
05/04/19 19:48:34
両方バランス良くやった方がいいって。
概念がわかっても、それが一体何の役に立つのかわからなくてイライラしたやつが
暴動起こして終わると思うな。

95:脳内PG
05/04/19 20:00:19
私は言語が先だと思います

言語をやる内に、オブジェクト指向は理解できると思いますし


96:デフォルトの名無しさん
05/04/19 20:06:42
OOなんぞが知れ渡る前から、擬似オブジェクト指向Pやってると、
どうしても概念レベルで、実装が頭をよぎっちまわない?
酷いときは妥協のしどころまで考えてたり。

97:デフォルトの名無しさん
05/04/19 20:25:33
日本語で話せよ。

98:デフォルトの名無しさん
05/04/20 01:44:48
>>93
与えられた本しか読まない馬鹿にはどんな本を与えても無駄。

99:デフォルトの名無しさん
05/04/23 20:03:38
ぉぃぉい結局どっちなんだよ?始めようと思ったのに出来ねーじゃねーか!もぅCとJava勉強すりゃいいのか?どうなんだよボケがぁぁぁぁぁぁぁぁぁ!
取り敢えず手始めにCでもするかな…

100:デフォルトの名無しさん
05/04/23 21:09:17
どちらが先なんて決めつけないで
糾える縄の如く理解していけばいいし
実際みなそうしている

101:デフォルトの名無しさん
05/04/25 07:53:16
VBなどで経験があるなら、階層化プログラミングはわかっているんだよね。それなら、
「カプセル化」と「継承」は実戦から入ったほうが手っ取り早い。
「多態性オブジェクト」とか「仮想関数」は、概念の勉強を先にしたほうがいいかな。


102:デフォルトの名無しさん
05/04/25 09:18:55
>>101

継承・仮想関数も全てポリモーフィズムのためにあるわけだから、
どっちが先もクソもないだろ。

103:デフォルトの名無しさん
05/04/25 11:46:52
「階層化プログラミング」と言う奴の言うことですからw

104:デフォルトの名無しさん
05/04/25 20:03:08
ガイネンガクシュウ
略して
ガイガク

105:デフォルトの名無しさん
05/04/26 08:10:22
オブジェクト指向を教えるとき、どの言語がよいでしょうか?

106:デフォルトの名無しさん
05/04/26 08:56:31
smalltalk

107:デフォルトの名無しさん
05/04/26 15:03:01
>>105
メッセージングまんせーなら Smalltalk
クラスまんせーなら Java か C++

108:デフォルトの名無しさん
05/04/26 15:04:26
>>105 >>107
オブジェクトまんせーならSelfか。

109:デフォルトの名無しさん
05/04/26 15:25:29
ここ数年、オブジェクト指向を覚えるときには、Javaが使われてきました。
Javaを使うのには、いくつかの理由があります。

・広く知られている
・C を基本とした文法(一般的なスタイルとなりつつあります)
・フリーで高性能な開発環境が利用可能である
・Javaの知識があれば仕事に就ける

こういった理由から、私はJavaの使用をやめさせようとはしませんでした
(C#にもこういった特徴があり、いずれC#が代わりになるだろうと指摘してはいたんですが)。
ただ、Javaだけに任せようとは思っていません。
Java、C#、C++はいずれも、オブジェクト指向プログラミングのある形を提示してくれていますが、
誰かにオブジェクト指向を紹介するならば、選択肢も紹介してあげるといいでしょう。

選択肢とは、RubyとPythonのことです。
両言語とも、動的型言語です。静的型言語と一緒に使えるようになってれば便利だと思います。
どちらも大変便利な言語です。ちょっとしたスクリプトで自動化して解決するような仕事はたくさんあります。
技術者たるもの、1つくらいはスクリプト言語を隠し持っているべきですね。


110:デフォルトの名無しさん
05/04/26 21:17:07
SmallTalk以外はオブジェクト指向のフレーバーがある偽物といへり

111:デフォルトの名無しさん
05/04/26 21:49:16
Smalltalkによるプログラミングは、私にとって今でもお気に入りの経験だから、
その気持ちは分かります。
私のようなSmalltalkファンですら、もう何年もSmalltalkの環境(image)を立ち上げていません。

112:デフォルトの名無しさん
05/04/26 21:50:19
個人的には、Rubyが気に入っていますけど。
広く使われている(かつ利用可能な)のはPythonですし、
Rubyはより純粋なオブジェクト指向ですので(学ぶのには最適です)
私にとってみれば、すがすがしい感じがします。

あと、Rubyにはブロック(コード群を簡単にオブジェクトとして扱う機能)がありますね。
ブロックは強力なプログラミングツールで、コードの構造化についての多くの考え方を
学ぶことができます。
他のやり方だと、なかなかこうはいきません。関数型言語の入門用にも良いですね。

スクリプト言語の強みは、プロのプログラマが日常的に使えることなんです。


113:デフォルトの名無しさん
05/04/26 22:03:54
なあ、オブジェクトとクラスとインスタンスの違いを説明してくんない?

オブジェクト指向の本読むと、みんなごっちゃでわけわかんなくなるの・・・

114:デフォルトの名無しさん
05/04/26 22:10:28
クラスというのは、型情報。
基本的に、プログラム内では一意に決まり、いつ参照しても同じ結果が得られる静的な情報。

インスタンスというのは、クラスという型情報を元に、メモリ上に生成されるデータの実体。これをオブジェクトともいう。
プログラムの処理とともに内部変数を変化させる動的な存在。必要に応じて複数生成されることも多々ある。


115:デフォルトの名無しさん
05/04/26 22:20:11
>>114
教えてくれてありがと

クラス=型
オブジェクト=インスタンス=メモリ上の実データ

という理解でいいの?

オブジェクトのメンバ関数のメモリ上の実コードはどういう言い方するといんだろ?
クラスのメンバ関数って言った方が正しいのかな?


116:デフォルトの名無しさん
05/04/26 22:22:10
>>115
おっと、

オブジェクト=クラスのインスタンス

と書いているみたいですね。

117:デフォルトの名無しさん
05/04/26 22:26:42
メンバ関数には、クラス所属のものと、インスタンス(オブジェクト)所属のものがある。

たとえば

class Hoge
{
void foo();
static void bar();
};

というC++クラスの場合、fooはインスタンス所属で、barはクラス所属。

クラス所属の関数は、インスタンスを作らなくてもコールできる。
こんなふうに
Hoge::foo();
一般にこれをクラスメソッドとか、クラス関数と呼ぶ。

インスタンス所属の関数は、当然インスタンスを作らないとコールできない。
Hoge *hoge = new Hode();
hoge->bar();
あんまりいわないけど、あえて言うならインスタンスメソッド。

118:デフォルトの名無しさん
05/04/26 22:29:02
オブジェクトとインスタンスはほぼ同じ意味だが、ニュアンスの違いがある。
オブジェクトのほうがより抽象的で、インスタンスのほうが具体的なニュアンスを持つ。

でも、かなり混同もされる。

119:117
05/04/26 22:30:38
ごめん間違えた。

Hoge::bar();


と、

hoge->foo();

だった

120:デフォルトの名無しさん
05/04/26 22:48:24
>>118
そう、そのニュアンスの違いが“理屈で”解らない。

ストラゥストラップの「プログラミング言語C++」を読んでると、
ニュアンスの違いがどこにあるのか解らなくなる
ストラ先生は、オブジェクト=クラスという意味で使っているみたい
そしてインスタンスって用語は出てこない。

で、他の本を読むとオブジェクト≒クラス、オブジェクト≒インスタンス
のような意味で使う。

オブジェクト指向を特集している今売りの雑誌でも、
オブジェクト=物だといいつつ、
明確に定義しないまま“クラス”と“インスタンス”という用語を使う

書き手によってさまざま。困ってしまいます。


121:デフォルトの名無しさん
05/04/26 22:53:48
俺もそのへんが未だによく分からない。
オブジェクトはクラスもインスタンスも含む概念で、
言語や状況によって、インスタンス=オブジェクトと見なせる場合があるのだと
強引に理解しているが、根拠はない。

122:デフォルトの名無しさん
05/04/26 22:58:34
>>119
static関数と非static関数の違いは理解してるつもり

staticメンバ関数はthisポインタがなく、引数、auto変数/定数を除くと
クラスのstatic変数/定数しか直接参照できない。

非staticメンバ関数は(暗黙の)thisポインタがあり、
上に加えてメンバ変数を参照できる。

Hoge myHoge; //と宣言すると
myHoge.foo(); // static関数と
myHoge.bar();  // 非static関数は同じ呼び出し方になる

123:デフォルトの名無しさん
05/04/26 23:02:03
>>120
確かに、オブジェクトというのは微妙な言葉だな。
場合によってはクラスを表現するオブジェクトというものもあらわれる。

たとえば、Javaだと、クラス情報をランタイムに参照できるようにメモリ上にクラス情報を置いてくれる。これはつまり「クラス情報のオブジェクト(インスタンス)」といえる。
このランタイムクラス情報は、あくまでもクラスについての情報を保持する別のオブジェクトであって、クラスそのものではない。

というあたりが自分のもっているイメージ。

あと、
オブジェクト指向は、「分析」と「設計」で分けて語られる。
「分析」は対象領域を抽象的に分類、整理する手段としてのオブジェクト指向で、
「設計」は実際にプログラムに落とすためのオブジェクト指向。

どっちの話をしているのか意識しないとすぐ混乱する。
分析レベルだと、あんまりインスタンスという言葉は使われない。
設計レベルではやたらと増える。
そういう意味でもインスタンスは具体的なニュアンスを与える。


124:デフォルトの名無しさん
05/04/26 23:04:49
object classがすべてのclassの親で、その子のmetaclass classがすべてのmetaclassのclassで、すべてのmetaclassのinstanceがclassで、という親子関係はすべてのObjectOriented言語に継承されているのかどうか

125:デフォルトの名無しさん
05/04/26 23:05:23
>>122
static関数と非static関数が逆転してたす。


126:デフォルトの名無しさん
05/04/26 23:06:13
必ずしも、親子関係とはいえないような気がする。気がするだけだけど。

127:デフォルトの名無しさん
05/04/26 23:11:41
>>123
>クラスを表現するオブジェクト

GoF本に、“クラスオブジェクト”という用語がでてきます。
型情報を持ったオブジェクトと理解しています。

具体的には、WindowsのCOMコンポーネントがtypeライブラリ情報をもっているイメージ。
SmallTalkは私のプログラマ・センスでは理解できません。

>「分析」と「設計」で分けて語られる

オブジェクトはアナリスト用語
クラスとインスタンスはプログラマ用語

と使い分けられるといいのに・・・


128:デフォルトの名無しさん
05/04/26 23:12:55
集合論で解釈してはどうか
要素の集まりが集合
しかし集合を要素とする集合も考える
ある集合の要素を作ろうとするなら
要素としての集合に対して操作をする
操作の対象はあくまで要素というわけ


129:デフォルトの名無しさん
05/04/26 23:14:34
>>126
確かに
親子関係とは集合の包含関係のこと
集合とその要素との関係も親子関係と言ったのは間違い

130:デフォルトの名無しさん
05/04/26 23:21:28
>>124

>metaclassのinstanceがclass

これは、C++のtemplateを理解しようとする時に出てくる概念の壁(^^)

template関連以外ではこういう言い方は成り立たないのでは?

というか、templateのパラメータとしてのクラスと
オブジェクトの型であるクラスを混同してしまい、
最後にはちゃぶ台をひっくり返すケースだと思いますけど

131:デフォルトの名無しさん
05/04/26 23:26:11
すべてはobject
instanceとはclassに所属しているobjectであることを強調したもの

132:デフォルトの名無しさん
05/04/26 23:42:19
>>131

オブジェクト≡クラスのインスタンス

というのが、おおかたの書籍にでてくる理解で

インスタンス≡クラスのオブジェクト

という理解は、そもそも不要で混乱のもとだと思います


133:デフォルトの名無しさん
05/04/26 23:49:02
>>132
なぜかね?
classによって産み出されるobjectのことをそのclassのinstanceと呼ぶのだが
つまりinstanceとはclassという概念に従属していることを強調する用語

134:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/04/26 23:53:19
リファレンスは、例えば
 OO広場 Happy Squeaking!の32ページ目あたり
 URLリンク(www.ogis-ri.co.jp)


136:134
05/04/27 00:05:33
ぁ、>>134の最終行。。。とりあえず無視しといてね(はぁーと

137:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/04/27 00:36:12
ああ、すまそ。
うろ覚えで書いちまった。(記憶力の減退か・・・)

正確な所は、
 URLリンク(www.ogis-ri.co.jp) 
見てね(はぁーと

相撲流遠くのクラス階層は
・メタ関係にあるオブジェクト(クラス)がインスタンスを生成する
というルールに基づいてる、と。

139:デフォルトの名無しさん
05/04/27 00:43:43
僕は、オブジェクト指向の概念をまず学習すべきだと思うな。
もちろん、目指すゴールによって一概には言えないけど。
クラス使うと便利な面が多々あるし、
しらなきゃその恩恵を受けられないわけだし。

確か、ドラクエのモンスターを題材として
オブジェクト指向を説明しているいい本があったな。あれですぐ飲み込めた。
なんていう本かは忘れた。

140:デフォルトの名無しさん
05/04/27 00:46:12
オブジェクト指向を教えるのに、言語を使ったほうが良いかどうか?

言語を使わない案というのは、原則について議論するということになるでしょうね。
おそらくはUMLを描くとか、そんな感じでしょうか。

私は、まずは言語を使って、何かできるようになるほうが断然いいと思いますね。
私にとってソフトウェア設計とは、数学みたいなものなんです。
読んだり聞いたりするだけでは、なかなか理解が深まりません。
実際にやってみないと理解なんかできません。

だから、本当にオブジェクト指向を理解したいのなら、実際に何かを作ってみるべきです。

141:デフォルトの名無しさん
05/04/27 08:44:48
僕は私。

142:デフォルトの名無しさん
05/04/27 19:25:42
00ってなに?

143:デフォルトの名無しさん
05/04/27 19:28:45
クラスオブジェクトインスタンス
  と
クラスインスタンスオブジェクト
  は異なるわけか。

144:デフォルトの名無しさん
05/04/28 00:04:45
Objectって、目的というか対象というか、そっちの(英語の)意味で考えると個人的にはしっくりきたり。
(下手に訳すのがいけないのかも。)


145:デフォルトの名無しさん
05/04/28 00:08:58
this じゃなくて self な文化だと、物って訳した方が自然に感じるよ

146:デフォルトの名無しさん
05/04/28 00:32:03
>>145
意味ワカンネ

147:デフォルトの名無しさん
05/04/28 08:56:43
目的物

148:デフォルトの名無しさん
05/04/28 08:58:19
>>143
その二つはなに?

149:デフォルトの名無しさん
05/04/28 10:21:03
俺も見た記憶があるなぁ

何気にRPGとかだとクラスの有効利用をカンタンに理解できそうなきガス


150:デフォルトの名無しさん
05/04/28 11:24:27
>>143
> クラスオブジェクトインスタンス

new Point(1,2)

> クラスインスタンスオブジェクト

Point

かな?

151:デフォルトの名無しさん
05/04/28 13:56:31
実際オブジェクト指向を勉強して
それをどうプログラミングしていくかというところで、ぽかーん
という状態です。


152:OO太郎
05/04/28 15:22:59
プログラミングの初心者の俺が教えてやろう。オマエラよく聞け。

オブジェクト指向というのは、プログラミングのスタイルだ。JavaやC++は
オブジェクト指向言語だといわれるけど、非オブジェクト指向的な
プログラミングをしようと思ったら出来る。オブジェクトなんて使わなくても
同じように動くプログラムは作れる。

だから、プログラミングスタイルとしてオブジェクト指向をしっかり覚えないと
いつまでたってもオブジェクト指向のプログラミングは出来るようにならない。
俺みたいにBASICで育った者は特にそうだ。

153:OO太郎
05/04/28 15:40:00
オブジェクト指向がなんでこんなにもてはやされているかというと、
いまの、ウインドウズを中心としたいわゆるGUIのプログラミングに
ぴったりな概念だからだ。

オブジェクトはそれほど大騒ぎするほど難しい概念じゃない。巷に溢れる
説明の下手な著者の書いた本がくどくど説明するほど抽象的な概念
でもない。オブジェクト=物だ。ウインドウズだったら、それぞれの
窓はオブジェクトだ。あるいは、窓の中にあるボタンの一つ一つが
全てオブジェクトだ。

トランプのゲームだったら、トランプの一枚一枚がオブジェクトだ。

クラスというのは、オブジェクトを作る型みたいなもの。トランプには
必ずマークと数字がある。そういう決まりをまとめたものがクラスだ。
トランプクラスからトランプの一枚一枚を作り出すと、それがオブジェクト
になる。例えば
Trampu tramp1 = new Trampu (ハート、A);
Trampu tramp2 = new Trampu (ハート、2);
・・・・・・・・・
Trampu tramp52 = new Trampu (クローバー、K);
という感じにトランプオブジェクトが52個作れる。それぞれが
トランプクラスのインスタンスになるわけだ。


154:OO太郎
05/04/28 15:52:20
あと、オブジェクトの面白いのは、トランプの例のようにマークと
数というようなデータだけじゃなくて、いわゆるサブルーチンのような
機能(これがメソッドだ)も一まとめにしてしまうことが出来るってこと。

例えば、トランプゲームだったら、「持ち札」なんてクラスが定義できる
カも知れない。プレーヤーが4人いたら、それぞれ持ち札があるわけ
だから、持ち札1、持ち札2、持ち札3、持ち札4というような
オブジェクトが作れる。例えば「持ち札1」には、ハートの3、
スペードの4、クローバーのA、ダイヤの7がある。それはみんな
インスタンス変数になる。で、メソッドとして、「カードを引く」
「カードを捨てる」「カードの枚数を得る」「同じマークを捜す」
「同じ数を捜す」などなどいろいろなメソッドが考えられる。
それらを全てクラスで定義しておいて、実際に「持ち札1」にたいして
そういうメソッドを呼ぶことによって、「持ち札1」の内容を変更
したり、内容を見たりすることが出来る。


155:OO太郎
05/04/28 16:06:15
トランプゲームだったら、もう一つ、真ん中においておく「カードの山」
なんて、クラス考えてもいいかもしれない。そこから作られる、
インスタンスとしての「カードの山」オブジェクトはインスタンス変数
として、カードの数、カードの種類などをもっていて。メソッドとして
は、「カードを出す」、「カードを切る」など考えられるかもしれない。

156:OO太郎
05/04/28 16:21:57
あと、もう一つGUIプログラミングのもう一つの特徴は、イベント指向
ということだ。昔のプログラミングみたいに、一行目から始まって、
順々にコンパイラでもインタープリターでも読んでいって、順次実行
していく、いわゆる手続きがたのプログラミングとは違う。

プログラムは、キーボートや、マウスといった入力装置からの割り込み
あるいはメッセージを待っていて、マウスがクリックされたというと、
それを処理するルーチンがある、マウスがドラッグされた、というと
それを処理するルーチン、というように、そういう各々のイベント
処理を中心にプログラムが構築されていく。

で、そういう処理が、アル程度OSに任されてしまっているので、
プログラマーにはコントロールできない部分がある。例えば、描画
にしても、自分が、「描け」と命令するというよりも、絵を特定の
机の上に置いておくと、システムが定期的に来て、それを持っていって
画面に貼り付けてくれる、というようなイメージだ。絵を変化させ
たいばあいは、別の絵を描いといて、それをまた特定の机の
上に置いておいて、システムが持っていくのを待つ。

こういった思考パターンによるプログラム作りにがつまり、
オブジェクト指向のプログラミングということだろうと、
素人の俺は思うんだが。

157:131
05/04/28 16:22:19
>>133

すいません、寝ちまいましたm(_ _)m

オブジェクト指向プラグミングする際に

1. まず、プログラミング対象を分析した結果としてオブジェクトを抽出する
2. 次に、オブジェクトの設計・実装の結果としてメンバ変数とメンバ関数による
オブジェクトの定義であるクラスを導出する
3. 最後に、プログラムの実行の結果としてクラスのインスタンスがメモリ上に
割り振られる

この場合、オブジェクトという用語に必要な概念は、
プログラミング対象を分析した結果としてオブジェクトという用語であって、

それ以外の、

インスタンス≡クラスのオブジェクト

の“オブジェクト”の用語の使い方は、 “一般概念としてのオブジェクト”という用語の適用を
オブジェクト指向プラグミングというコンテキストに持ち込むことになるからです。

つまり、オブジェクト指向プラグミングというコンテキストでの“オブジェクト”の用語の
因果関係、つまり順序性の意味を無視しているということです。

「色即是空・空即是色」という禅問答は、アカデミック(学術)的な思考の中では
成立するのかもしれませんが、エンジニアリング(技術)的な思考の中では、
「色即是空」であるか、さもなければ、「空即是色」のどちらかでなければ、
未知の技術に対する理解は混乱するだけなのです


158:OO太郎
05/04/28 17:04:55
インスタンスって、英語で「事例」とか「実例」という意味で、
クラスに具体的なデータを与えて作ったインスタンスつまり
「具体例」がオブジェクトなんでしょ?

クラスは基本的に、オブジェクトを作るための枠組みであって、トランプ
でいったら、白紙でマークや数字が印刷される前の状態だと思う。

159:デフォルトの名無しさん
05/04/28 17:38:16
初心者に教えてもらいたくない

160:デフォルトの名無しさん
05/04/28 19:05:35
オブジェクト指向自体はわかったんだけど、大規模なシステムのソースを理解するのが大変なんだよね。
こういうのってどうやってるんだろ・・・。

継承されまくりでどこにメソッドがあるのかもよくわからないし・・・。

161:デフォルトの名無しさん
05/04/28 19:40:53
>>160
とりあえずdoxygen通してみるとか。

162:160
05/04/28 20:50:27
>>160
なるほど、よさげですね。
ためしてみます。アドバイスありがとうm(_ _)m

163:デフォルトの名無しさん
05/04/28 21:09:51
>152-156
素人の説明って結局わからん、ってのはよくわかった、

164:デフォルトの名無しさん
05/04/28 21:29:38
俺は、C-magazine創刊号に載ってたトランプゲームによるOO説明(ソース付き)
思い出しちまったよ。

OOトランプの役者としては、
 ・トランプの各カード
 ・カードの山
の他に、
 ・ゲーム (トランプがルール知ってる訳じゃなくて、ゲームにルールがある)
 ・プレイヤー (一人(占い等)または複数)
 ・ゲームの場 (占いの内容とか、ゲームが何回戦目かとか)
も要るな。



165:デフォルトの名無しさん
05/04/28 21:34:09
>>163
そうかね?よく理解していると思ったが
>>158
Integerクラスのインスタンスが1,2,3などの整数
Integerクラスを任意の整数と捉えることも可能だが
任意の整数の全体と捉えることの方をおすすめしておこう

166:デフォルトの名無しさん
05/04/28 21:36:55
素人(アル中)が素人に説教するインターネッツ

167:デフォルトの名無しさん
05/04/28 21:39:15
おまいの議論って、
結局 Smalltalkのクラス階層として結晶した概念を、
後付で説明しようともがいているだけだな。

>>165
>Integerクラスのインスタンスが1,2,3などの整数
>Integerクラスを任意の整数と捉えることも可能だが
>任意の整数の全体と捉えることの方をおすすめしておこう

誰もそんな事、話題にしてないしw


168:デフォルトの名無しさん
05/04/28 22:04:12
結局概念だけで説明しようとするとかえって分かりにくくなるような気がする。。
概念→実装ほどかけ離れてるもんはない。

169:デフォルトの名無しさん
05/04/28 22:06:37
Smalltalkのクラス階層として結晶した=Smalltalkで実装された話
つう事。

概念
 ↓
実装
 ↓
実装を概念として騙ってる ←このスレ

170:デフォルトの名無しさん
05/04/28 22:26:45
Smalltalk以外のオブジェクト指向言語は
オブジェクト指向の風味がある偽物
偽物の腐った概念であれ>>152-の理解は正しい

171:デフォルトの名無しさん
05/04/28 22:30:37
>>167
なぜかね?
>>158の捉え方も可能だが
任意よりも全体と捉える方をおすすめする

172:デフォルトの名無しさん
05/04/28 22:36:47
>>165 の一行目に基づき、
「整数」を「インスタンス」と置き換えてみよう。

二行目「クラスを任意のインスタンスと捉える」
    というような荒唐無稽な話は、(>>165>>171以外)誰も言っていない。
三行目「クラスはインスタンスの全体と捉える」
    これは、クラスを集合と捉える考え方だね。
    

173:デフォルトの名無しさん
05/04/28 22:51:41
>>170
オブジェクト指向の定義は千差万別人それぞれ。
俺はリフレクションさえあれば何でも良し。C++ 逝ってヨシ!!

URLリンク(www.shiro.dreamhost.com)

174:デフォルトの名無しさん
05/04/28 22:56:20
>>172
荒唐無稽と言うほどでもない
クラスの概念は集合と似ているが同じではない
集合を任意要素として表現することもあり
オブジェクトとクラスの関係を理解する一つの方法として
>>158の捉え方もあながち捨てたものではない
なお>>158をよく理解していると褒めてはいない
>>152-の例が例としてよくまとまっていると褒めた

175:チラシの裏
05/04/28 23:10:28
集合論ではsetと同じような意味でclassという単語が使われる
ことがあるけど、オブジェクト指向のクラスも元々はそこからとった
言葉じゃないのかなと俺は思う。

176:デフォルトの名無しさん
05/04/28 23:30:05
>>175
正しいかもしれないがたとえ集合論と関連させたものだったとしても似た用語を援用しただけであろう
なぜならば集合論におけるクラスは他のクラスの要素にならないからだ
Smalltalkのクラスはメタクラスのインスタンスでありその点が大いに異なる
また集合論では許されない無限降下列も存在している
MetaClassのメタクラスはMetaClassのインスタンスである

177:デフォルトの名無しさん
05/04/29 05:11:02
>>174-176
20分おきに連投ご苦労。で、結論出た?

セットとクラスの違い、
数学基礎論でいうクラスと、OO言語のクラスの違い
タイプ理論、

まで説明が終わったら、起こしてくれ。それまで一休みw



178:デフォルトの名無しさん
05/04/29 07:45:21
>>177
結論とは何かね?

179:デフォルトの名無しさん
05/04/29 08:09:08
>>157
忘れていた
あまりよい理解ではないが
インスタンス=クラスのオブジェクト
で理解しても構わない
ここで言うオブジェクトももちろんオブジェクト指向言語におけるオブジェクト
すべてはオブジェクトでありクラスに従属していることを強調する場合はインスタンスという用語を使う
selfに入っているものはオブジェクトでありそれは何らかのクラスのインスタンス

180:デフォルトの名無しさん
05/04/29 08:21:05
蛇足ながら
集合論ではすべては集合(無定義概念)
何らかの集合に所属している場合は要素と呼ぶ
さらに蛇足ながら
クラス概念のある集合論の場合
すべてはクラス(無定義概念)
何らかのクラスの要素である場合は集合

181:131
05/04/29 11:13:10
>>179
慣用的に、"すべてはオブジェクト”という理解があることは承知しています。

ですが、157で述べたとおり、クラスを導出する“オブジェクト”という言葉と、
クラスから導出される“オブジェクト”という言葉は、その導出の順序性と
目的において異なる意味を持っています。

"すべてはオブジェクトである”とい論理は、じつは、ふたつの“オブジェクト”
という言葉が、それぞれ異なる意味を持った言葉でありながら、言葉の
形式的音韻的な同一性に拠ってのみ成立している論理だと思うのです。

そして、このような“オブジェクト”という技術用語の本来の意味をあいまいな
方向に誘導する学術系の論理は、オブジェクト志向プログラミングへの理解
を初手から阻害している重要な原因の一つだと考えているのです。






次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5364日前に更新/242 KB
担当:undef