オブジェクト指向について、調べれば調べるほど疑問が募ります。低レベルで粗末な疑問かも知れませんが、ご教授願いたいです。
・データと振る舞いをまとめる?
まとめると何か良いことあるの?
ファイルあるいはモジュールにはまとまってるよね?
丁度いい単位があるのに、何故わざわざオブジェクトという概念を導入するの?
(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
どういう意図でこの投稿したんですか?
どういう意図でこの投稿したんですか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 尖閣周辺に中国船、10日連続 いずれも機関砲搭載 [蚤の市★]
- (社説)国旗損壊罪の新設案 窮屈な社会が待っていないか:朝日新聞 ★2 [少考さん★]
- 【宅急便】ヤマト運輸がベトナム人ドライバー500人採用…不安視される「運転技術」「コミュニケーション」「助成金」 [シャチ★]
- 「日本は安い」海外客は“歴史的円安”で大奮発 節約日本人は“クマなし県”に殺到 [ぐれ★]
- (社説)国旗損壊罪の新設案 窮屈な社会が待っていないか:朝日新聞 ★3 [少考さん★]
- こども食堂、全国で1万か所超す「誰もが立ち寄れる地域のインフラに」…物価高「涙を流す人もいて深刻」 [煮卵★]
- 福島競馬3回6日目
- NFL 2025/26 week12 part 2
- @@@令和七年大相撲九州場所 vol.13@@@
- 競輪実況★1608
- こいせん 全レス転載禁止 SHAKARIKI
- 東京競馬5回5日目月曜日
- 【高市インフラ速報】 沖縄。 全 域 断 水 😭😱😨 [485983549]
- んなぁ…🍬おはようなのら…✋🍬🏡
- 【悲報】外国人「フリーレンを黒人にしてみたよ!」→日本人さん、ブチギレwwwwwwwwwwwwwwwwwww [839150984]
- 外国人「えっ!?日本ってなんでこんな感じで広々外で飯食える店がほぼないの?世界では常識なのに!薄暗い室内でモソモソきもい」 [271912485]
- タニシちょっとコイや
- 【悲報】日本国民、受験シーズンにコンサートを開く嵐に謝罪とコンサート中止を要求wwwwwwwwwwwwwwwwwwww [802034645]
