オブジェクト指向について、調べれば調べるほど疑問が募ります。低レベルで粗末な疑問かも知れませんが、ご教授願いたいです。
・データと振る舞いをまとめる?
まとめると何か良いことあるの?
ファイルあるいはモジュールにはまとまってるよね?
丁度いい単位があるのに、何故わざわざオブジェクトという概念を導入するの?
(Javaには1ファイル1クラスという文化あるらしいけど)
・カプセル化?
モジュールのimport, exportでも実現出来るよね?
(構造体などへのアクセスを制限できれば)
・ポリモーフィズム?
別にデータと振る舞いをまとめなくても実現出来るよね?
・モノのように扱いたい?
モノとして扱いたいときに扱えば良くない? なんでわざわざ全てをオブジェクトにするの?
探検
オブジェクト指向を教えてくれ!
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2021/03/16(火) 17:06:02.41ID:VhqTt8972デフォルトの名無しさん
2021/03/16(火) 17:14:31.50ID:mcRR7cz/ オブジェクトはクラスのことだとわかるけど
モジュールはなんだろ、パッケージのこと?
モジュールはなんだろ、パッケージのこと?
2021/03/16(火) 17:17:49.88ID:mbk3cz74
> ・データと振る舞いをまとめる?
> まとめると何か良いことあるの?
データが複数ある場合に、データごと振る舞いが
決まっているということが明確になります。
> ファイルあるいはモジュールにはまとまってるよね?
データと振る舞いがまとまっていません
> (構造体などへのアクセスを制限できれば)
それができないから、オブジェクト指向があります
> 別にデータと振る舞いをまとめなくても実現出来るよね?
データごとに振る舞いが変わるということが明確に表現できます。
> モノとして扱いたいときに扱えば良くない? なんでわざわざ全てをオブジェクトにするの?
関数もモノとして扱えば、モノに対して関数を割り当てることが出来ます。
> まとめると何か良いことあるの?
データが複数ある場合に、データごと振る舞いが
決まっているということが明確になります。
> ファイルあるいはモジュールにはまとまってるよね?
データと振る舞いがまとまっていません
> (構造体などへのアクセスを制限できれば)
それができないから、オブジェクト指向があります
> 別にデータと振る舞いをまとめなくても実現出来るよね?
データごとに振る舞いが変わるということが明確に表現できます。
> モノとして扱いたいときに扱えば良くない? なんでわざわざ全てをオブジェクトにするの?
関数もモノとして扱えば、モノに対して関数を割り当てることが出来ます。
2021/03/16(火) 17:20:32.30ID:vDQQ/7BC
用語に振り回されてプログラムできなくなるアホの典型例
2021/03/16(火) 17:22:59.10ID:mbk3cz74
たとえば 4980012345678901 という値は VISAのクレジットカード番号ですが、
これがただの文字列であれば、クレジットカード番号とした正しいかをチェックする
validate() メソッドがあるわけがないことがわかります。
4980012345678901 という値に対してクレジットカード番号というクラスを割り当てると
この値に対する validate() メソッド が存在することが容易に推測できます。
これがただの文字列であれば、クレジットカード番号とした正しいかをチェックする
validate() メソッドがあるわけがないことがわかります。
4980012345678901 という値に対してクレジットカード番号というクラスを割り当てると
この値に対する validate() メソッド が存在することが容易に推測できます。
6デフォルトの名無しさん
2021/03/16(火) 17:24:31.39ID:VhqTt897 >>2
オブジェクトとクラスごっちゃにして説明してすみません。
モジュールは大雑把にいうとファイルのことを指して言いました。Pythonでいうとfile, Rustでいうとmod module_name { }のことです。node.jsではfileです
オブジェクトとクラスごっちゃにして説明してすみません。
モジュールは大雑把にいうとファイルのことを指して言いました。Pythonでいうとfile, Rustでいうとmod module_name { }のことです。node.jsではfileです
7デフォルトの名無しさん
2021/03/16(火) 17:47:22.67ID:kqeQk11d >> 3
回答ありがとうございます。
> データと振る舞いがまとまっていません
では、何をまとめたものなのでしょうか?
> それができないから、オブジェクト指向があります
構造体へのアクセスを制限する機能があれば、メソッドをまとめなくとも十分なのでは?という意味です
> 関数もモノとして扱えば、モノに対して関数を割り当てることが出来ます。
曖昧な表現で申し訳ないです。モノというのは値のことではなく、メソッドを生やしたオブジェクトである必要があるのか?という意味です。
この疑問の答えは「データが複数ある場合に、データごと振る舞いが決まっているということが明確になります。」という回答に含まれると思いますが。
回答ありがとうございます。
> データと振る舞いがまとまっていません
では、何をまとめたものなのでしょうか?
> それができないから、オブジェクト指向があります
構造体へのアクセスを制限する機能があれば、メソッドをまとめなくとも十分なのでは?という意味です
> 関数もモノとして扱えば、モノに対して関数を割り当てることが出来ます。
曖昧な表現で申し訳ないです。モノというのは値のことではなく、メソッドを生やしたオブジェクトである必要があるのか?という意味です。
この疑問の答えは「データが複数ある場合に、データごと振る舞いが決まっているということが明確になります。」という回答に含まれると思いますが。
2021/03/16(火) 17:50:10.18ID:mbk3cz74
> では、何をまとめたものなのでしょうか?
データと振る舞い
> 構造体へのアクセスを制限する機能があれば、メソッドをまとめなくとも十分なのでは?という意味です
構造体へのアクセスを制限するには、データと振る舞いをまとめないと無理
> 曖昧な表現で申し訳ないです。モノというのは値のことではなく、メソッドを生やしたオブジェクトである必要があるのか?という意味です。
関数には名前という属性があります。どのような引数を渡せるかという情報を持っています。
明らかに関数以外の情報を持ったモノです
データと振る舞い
> 構造体へのアクセスを制限する機能があれば、メソッドをまとめなくとも十分なのでは?という意味です
構造体へのアクセスを制限するには、データと振る舞いをまとめないと無理
> 曖昧な表現で申し訳ないです。モノというのは値のことではなく、メソッドを生やしたオブジェクトである必要があるのか?という意味です。
関数には名前という属性があります。どのような引数を渡せるかという情報を持っています。
明らかに関数以外の情報を持ったモノです
9デフォルトの名無しさん
2021/03/16(火) 17:57:50.12ID:kqeQk11d >>5
回答ありがとうございます。
データに対して、「クレジットカード番号」という型を割り当て、
クレジットカード番号に対して処理できる関数を用意すれば解決なように思えるですが、
わざわざオブジェクトに付属するメソッドという概念を用いるメリットがわかりません。
回答ありがとうございます。
データに対して、「クレジットカード番号」という型を割り当て、
クレジットカード番号に対して処理できる関数を用意すれば解決なように思えるですが、
わざわざオブジェクトに付属するメソッドという概念を用いるメリットがわかりません。
2021/03/16(火) 18:05:30.02ID:Oe0YkKcP
2021/03/16(火) 18:06:43.78ID:Oe0YkKcP
オブジェクト指向はグループ分け
グループに分けないと管理が大変になる
オブジェクト指向はクラスを多数定義できるとも言いかえられるな
グループに分けないと管理が大変になる
オブジェクト指向はクラスを多数定義できるとも言いかえられるな
12デフォルトの名無しさん
2021/03/16(火) 18:12:46.48ID:kqeQk11d >>8
> 構造体へのアクセスを制限するには、データと振る舞いをまとめないと無理
たしかRustではプロパティにpubを修飾で制御できたような気がするんですが。
> 関数には名前という属性があります。どのような引数を渡せるかという情報を持っています。
明らかに関数以外の情報を持ったモノです
なるほど。確かにそのような情報をもってますね。失念してました。
しかし例に挙げられた名前や引数などはプロパティであってメソッドが必要ということにはならないような気がします。
>> では、何をまとめたものなのでしょうか?
>データと振る舞い
クラスにデータと振る舞いがまとまっているということでしょうか?私が聞きたいのは、ファイルやモジュールには何がまとまっているのかです。
> 構造体へのアクセスを制限するには、データと振る舞いをまとめないと無理
たしかRustではプロパティにpubを修飾で制御できたような気がするんですが。
> 関数には名前という属性があります。どのような引数を渡せるかという情報を持っています。
明らかに関数以外の情報を持ったモノです
なるほど。確かにそのような情報をもってますね。失念してました。
しかし例に挙げられた名前や引数などはプロパティであってメソッドが必要ということにはならないような気がします。
>> では、何をまとめたものなのでしょうか?
>データと振る舞い
クラスにデータと振る舞いがまとまっているということでしょうか?私が聞きたいのは、ファイルやモジュールには何がまとまっているのかです。
13デフォルトの名無しさん
2021/03/16(火) 18:15:22.40ID:kqeQk11d14デフォルトの名無しさん
2021/03/16(火) 18:20:05.64ID:kqeQk11d2021/03/16(火) 18:46:21.54ID:qZ3Xge1G
>>1
>・カプセル化?
クラスや構造体の内部要素へのアクセス制御のことを指してカプセル化と言ってるなら
そういう機能があればいいだけなのでオブジェクト指向じゃなくてもできる
>・ポリモーフィズム?
これもオブジェクト指向である必然性はないよ
他のやり方でも実現できる
>・モノのように扱いたい?
オブジェクト指向を使うのにモノのように扱いたいという動機はない
>・カプセル化?
クラスや構造体の内部要素へのアクセス制御のことを指してカプセル化と言ってるなら
そういう機能があればいいだけなのでオブジェクト指向じゃなくてもできる
>・ポリモーフィズム?
これもオブジェクト指向である必然性はないよ
他のやり方でも実現できる
>・モノのように扱いたい?
オブジェクト指向を使うのにモノのように扱いたいという動機はない
16デフォルトの名無しさん
2021/03/16(火) 18:59:52.68ID:kqeQk11d >>15
> クラスや構造体の内部要素へのアクセス制御のことを指してカプセル化と言ってるなら
そういう機能があればいいだけなのでオブジェクト指向じゃなくてもできる
なるほど。カプセル化は「クラスや構造体の内部要素へのアクセス制御」を行い、
それらにはメソッドを介して制限するのがカプセル化と思っていたんですが、そうではないのでしょうか?
(この文脈ではメソッドではなくモジュールから提供される関数を指していますが)
> これもオブジェクト指向である必然性はないよ
他のやり方でも実現できる
オブジェクト指向では、ついでにやってるという感じで良いでしょうか?
> オブジェクト指向を使うのにモノのように扱いたいという動機はない
良くネットにある解説記事ではそのように説明していたので、
何かそういう動機もあるのかと思ってました。少なくともそう考えてない方もいるのですね。
> クラスや構造体の内部要素へのアクセス制御のことを指してカプセル化と言ってるなら
そういう機能があればいいだけなのでオブジェクト指向じゃなくてもできる
なるほど。カプセル化は「クラスや構造体の内部要素へのアクセス制御」を行い、
それらにはメソッドを介して制限するのがカプセル化と思っていたんですが、そうではないのでしょうか?
(この文脈ではメソッドではなくモジュールから提供される関数を指していますが)
> これもオブジェクト指向である必然性はないよ
他のやり方でも実現できる
オブジェクト指向では、ついでにやってるという感じで良いでしょうか?
> オブジェクト指向を使うのにモノのように扱いたいという動機はない
良くネットにある解説記事ではそのように説明していたので、
何かそういう動機もあるのかと思ってました。少なくともそう考えてない方もいるのですね。
2021/03/16(火) 19:00:47.10ID:Oe0YkKcP
オブジェクト指向じゃなくても他のやり方で出来る
→他のやり方でやってる言語は?
→ない、なぜなら他のやり方でできるが、それは冗長で使いにくいから
→つまりやりたいことをやる場合に、オブジェクト指向言語が一番スマートな構文を持っている
→他のやり方でやってる言語は?
→ない、なぜなら他のやり方でできるが、それは冗長で使いにくいから
→つまりやりたいことをやる場合に、オブジェクト指向言語が一番スマートな構文を持っている
2021/03/16(火) 19:01:37.10ID:Oe0YkKcP
C言語を使う理由は?アセンブラでも出来るのでは?
みたいな話
頑張るぐらいなら、オブジェクト指向を使う
みたいな話
頑張るぐらいなら、オブジェクト指向を使う
2021/03/16(火) 20:21:18.73ID:ZppluVpF
全部スタティックなメソッドで作ることを考えてみると少しは分かるかな?
20デフォルトの名無しさん
2021/03/16(火) 20:25:15.38ID:sABqeeBA21デフォルトの名無しさん
2021/03/16(火) 20:26:53.20ID:sABqeeBA >>19
メソッドにすることで名前空間を汚染しないよね?ということですか?
メソッドにすることで名前空間を汚染しないよね?ということですか?
22デフォルトの名無しさん
2021/03/16(火) 20:27:46.73ID:sABqeeBA >>21
い
い
23デフォルトの名無しさん
2021/03/16(火) 20:30:01.10ID:sABqeeBA >>21
あ、staticメソッドなら全然違うか。
あ、staticメソッドなら全然違うか。
2021/03/16(火) 20:36:56.64ID:VN15UowM
"It is better to have 100 functions operate on one data structure than to have 10 functions operate on 10 data structures." - Alan J. Perlis
25デフォルトの名無しさん
2021/03/16(火) 20:54:13.16ID:sABqeeBA >>24
どういう意図でこの投稿したんですか?
どういう意図でこの投稿したんですか?
2021/03/16(火) 20:57:53.35ID:qZ3Xge1G
>>16
内部要素へのアクセス制御を指してカプセル化という人もいれば
データと振る舞いをオブジェクト等の1つの言語要素にまとめることをカプセル化という人もいる
https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)
ポリモーフィズム自体はオブジェクト指向で書く場合でもそうでない場合でもほぼ必須の機能
オブジェクト指向の場合はいろいろあるポリモーフィズムのやり方のうちSubtypingを多く使うというだけ
内部要素へのアクセス制御を指してカプセル化という人もいれば
データと振る舞いをオブジェクト等の1つの言語要素にまとめることをカプセル化という人もいる
https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)
ポリモーフィズム自体はオブジェクト指向で書く場合でもそうでない場合でもほぼ必須の機能
オブジェクト指向の場合はいろいろあるポリモーフィズムのやり方のうちSubtypingを多く使うというだけ
2021/03/16(火) 21:08:00.17ID:A0PxCKQ0
データとそのデータの処理をひとまとめにしたのがオブジェクト指向
この方法論を使うと大規模プログラミングがよりよくなるという強い信仰がある
宗教に近いかもな
他に変わる方法もないし
なんとなく大規模プログラミングを書くと破綻することはよく知られている
万能ではないけど
いくらでもうまくいかない例は挙げられている
この方法論を使うと大規模プログラミングがよりよくなるという強い信仰がある
宗教に近いかもな
他に変わる方法もないし
なんとなく大規模プログラミングを書くと破綻することはよく知られている
万能ではないけど
いくらでもうまくいかない例は挙げられている
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 東京の自販機そばに金塊4200万円分、何者かに持ち去られる…札幌の50代が8000万円振り込んだ後に上京して被害 [どどん★]
- 山田邦子 ひょうきん族時代の年収は12億円「ただ税金が80%」 [muffin★]
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★7 [ぐれ★]
- 【東京】「家族で話題にして」 “世田谷一家殺害から25年 警視庁が呼びかけ [煮卵★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- 【鹿児島】容疑者は大学生。国道3号を横断中の母娘を車ではねる――「太陽がまぶしくて見えなかった」。20歳女を現行犯逮捕 日置署 [ぐれ★]
- 小野田紀美、同党議員の熱愛報道に「不潔...」と嫌悪感を漏らす... [856698234]
- 高市早苗「定数削減とかすると思ってたの???笑」漢一匹吉村「ざっけんな」反旗を翻す [245325974]
- ソーラー発電所の地下に大量の産廃、事業者「工事会社に任せているので、わからない」…この国はこんなのばっかや [668970678]
- ルーナイト第1条!誰よりルーナ(・o・🍬)が好きな人~🙋🏡
- とんかつ作りたいけどめんどくさい
- 高市「たまたま私が支部長だった。高市早苗に対する献金ではない」→自分の公式サイトで、ガッツリ寄付を呼びかけていた事が判明 [594040874]
