テクノロジー

オブジェクト指向のサンプルプログラムがだいたいヒドい理由 - きしだのHatena

1: nakag0711 2025/07/13 01:38

Webのサーバー側だと実質的なプロセスの寿命が短いからI/O以外に使い所がないという話になるけど、デスクトップアプリではそうでないという差はある

2: casm 2025/07/13 02:03

「王様とか勇者とかはキャラクタの属性にするべきで、クラスとして表現するものではないです。」天皇人間説だ。

3: kyukyunyorituryo 2025/07/13 02:04

GUIにオブジェクト指向が必要と合ったけどだいたいラムダ式に置き換えていった

4: Fluss_kawa 2025/07/13 02:12

オブジェクト指向ってプログミングの手法なんだけどどちらかというと設計の手法なんだよなぁとおもう。

5: yarumato 2025/07/13 02:36

“実際にどこで使う? オブジェクト指向とは状態管理技術なので、状態のあるところ。ただ状態のあるのはアプリの出入り口の入出力部分で、アプリの中では状態を持たずステートレスのため、いいサンプルができない”

6: wwolf 2025/07/13 02:46

抽象クラス/インターフェイスによる柔軟性の確保は関数オブジェクトが概ね解決したところはある

7: torum 2025/07/13 05:14

非ウェブ系のGUIにおいてはオブジェクト抜きでは語れないのでは・・・と思ったら誰かが書いてた。ボタンにしろ何しろコントロールは「Object」から派生してたりするし、画面に表示されるのはオブジェクトのプロパティ

8: mk173 2025/07/13 05:17

動物→ヒト→勇者/、動物→モンスター→中ボスみたいなら状態管理の例になる?

9: deztecjp 2025/07/13 05:29

説明のためのサンプルなので、別にひどくない可能性。英語の教科書に出てくる例文が非現実的、とかの難癖と同じに見える。リアルな用例を使うと別の説明が追加で必要になり学習の流れを阻害する、なんてことは多い。

10: hogetax 2025/07/13 05:48

そもそもの話、設計と実装がごっちゃになってる説明が多すぎる。同じ「オブジェクト指向」でも全然別モノなんだから分けて解説しろ!

11: cj3029412 2025/07/13 05:56

御意。オブジェクトは「もの」「対象」(部品)であり「目的」(典型的にはアプリケーション)の掛詞ですからね。現状の入門者用の多くは本末転倒ですよね。

12: newforms 2025/07/13 05:58

アプリケーションといっても受発注のような事務寄りのものから、それこそ物理シミュレーターのようなものやゲームもあるだろうから、この指摘はピンときませんでした。

13: objectiveworker 2025/07/13 06:16

モバイルアプリもオブジェクトモデリングがいるのってほとんどない。

14: nakamura-kenichi 2025/07/13 06:31

マジか?さすがにそんなサンプル見たこと無いでw。現場にはゴロゴロおるけどなw。昔々、パラメータ値を追加するだけに継承クラス作るやつおって言い合いになったなあ。

15: jintrick 2025/07/13 06:58

だいたいヒドい理由どこ

16: agano 2025/07/13 07:08

oopが活かせるのはフレームワークを作る様な場合で、通常のビジネスロジックではそこまで頑張らなくても良いからだと思ってる。素直にoracle/mysql/postgres/mongodb辺りに同一I/Fで接続するクラスの解説がわかりやすいのでは。

17: kakei-akihiko 2025/07/13 07:12

抽象型や継承はオブジェクト指向をやりやすくするための言語機能であってオブジェクト指向そのものではないんだが、オブジェクト指向否定派は言語機能を使わなくていいからとオブジェクト指向自体を否定したがる。

18: prograti 2025/07/13 07:28

決済とか通知とかはオブジェクト指向で作ることが多いかな。業務固有のものは抽象化しづらいからあんまりないかも

19: mohno 2025/07/13 07:41

「実際のアプリケーションを見据えるとオブジェクト指向機能の使いどころがない」←?「大規模になったら便利なんです!小さいサンプルじゃわからないんです!」←これはそうでしょ。苦労はクラスを作る側が背負う。

20: absalom 2025/07/13 07:44

一種の宗教戦争だね。

21: kobito19 2025/07/13 07:51

"某Java本" https://x.com/kis/status/1943525897753207133 / 個人的には「良いコード/悪いコードで学ぶ設計入門」も大概。こっちにもRPGの例が出てくる

22: doko 2025/07/13 07:52

自分でそう作るかはともかく、利用するライブラリはそうなってないと困る。互いに値を共有しない正規表現オブジェクトをいくつも作れないと不便だし

23: twotiger 2025/07/13 07:56

ウェブアプリとか業務アプリって、リレーショナルDBにデータを出し入れする処理でほとんどなんで、この人の言ってる通りだと思う。ゲーム開発とかGUIライブラリそのもを作るのは別だろうけど

24: ouj3 2025/07/13 08:03

単にこれ書いている人がオブジェクト指向をきちんと理解してないからなんじゃないか? OOA(分析)とOOD(設計)とOOP(プログラミング)の三階層に分けて書いてくれないと言いたいことがさっぱりわからんちん

25: circled 2025/07/13 08:42

初心者は、1. プログラミングを理解していない、2. オブジェクト指向という概念を理解していない → 理解されてないもの同士を組み合わせてオブジェクト指向プログラミングを説明している → わかるわけねーだろ?よな

26: Wafer 2025/07/13 08:49

初心者向けの情報が求められ続けるのは当たり前です。それを「いつまでたってもなくならない」と言ってる時点でその人の知性レベルが疑われます

27: suka6411144 2025/07/13 09:08

オブジェクト指向否定派ってWEBアプリの話ばかりで複雑な業務アプリとかゲーム開発とかのこと考慮しないよね

28: tettekete37564 2025/07/13 09:21

いまだにオブジェクト思考を受け入れられない人がいるのか。世の中生きづらそうだ

29: otation 2025/07/13 09:35

某Java本アレだろうなと思ったらアレだった。でもアレ以外に何も分からん初心者を挫折させずに解説するのも難しそう。どの場面で有効かまで入れると初心者は絶対混乱する

30: mockmock9876 2025/07/13 09:54

初心者に向けプログラミング教本にオブジェクト指向はテーマが大きすぎると思う。OOA、OOD、OOPと具体化していく過程が必要。

31: toyama_gf 2025/07/13 10:00

"某Java本" ←多分例の、未だにJavaなのに参照渡しとか教えちゃってる本のことだろうな~ …と思ってたらその通りだった

32: m50747 2025/07/13 10:03

シンプルにJavaのクラスライブラリが当然うまくオブジェクト指向になっているよねって思う。アプリケーションに当てはめるとほとんど破堤しているような。手続きが多くなり使い辛い。いい完成品を示されないのが原因

33: hdampty7 2025/07/13 10:11

実践でオブジェクト指向がどうのとかいうような場面はほとんどない。たまに継承で実装するとテストが楽になる時がある。書いてるプログラムの内容によるが、基礎的な処理の上に種々の応用処理を実装するときに使う。

34: toaruR 2025/07/13 10:19

分かる(´-`)自転車クラス じゃなくてもうちょい実務にありそうなやつの方が良いよね

35: raamen07 2025/07/13 10:23

言語の説明の話してるサンプルにアプリケーション設計の話をするからでは。

36: dgen 2025/07/13 10:34

例えば自転車レースゲームなら自転車のパーツを購入して強化なんてこともあるからパーツごとのクラスは必要になる。オブジェクト化は目的次第なところはある。という前提で無駄な多段継承はまとめる。

37: aike 2025/07/13 10:38

アクションゲームの敵キャラみたいに画面上の複数のオブジェクトが自律的に動き回るやつだととそれぞれ状態を持っていることやライフサイクルがわかりやすい。継承よりもインタフェースというのはそうだけど。

38: gabill 2025/07/13 11:01

“FileInputStreamやMySQLConnectionなどは世界にひとつだけ実装があればいい” オブジェクト指向は、作って嬉しい場面に遭遇する機会より、使って嬉しい場面に遭遇する機会の方が多い。そういう存在だよなぁ。

39: versatile 2025/07/13 11:03

つまりオブジェクト指向はもう古い。オブジェクト指向はすでに当たり前でありわざわざ言及するような技術ではない。構造化とか正規化が当たり前なように

40: khtno73 2025/07/13 11:06

“結局それは、なんのアプリケーションで使うかという基準がなくやっているので、どうとでも好きにモデリングでき、そしてアプリケーションで使わないから意味がない”

41: FreeCatWork 2025/07/13 11:19

ボクよりヒドいコードがあるなんて、信じられないにゃ!でも、愛で許しちゃうにゃ🐾

42: issyurn 2025/07/13 11:23

実践的で本格的なものになるとそれなりの規模になってきて、サンプルとして扱うには帯に短し襷に長しだし、企業秘密的なものも露呈してしまう可能性が出てくるあたりがその一因かなと。競争力の源泉でもあるので。

43: houyhnhm 2025/07/13 11:31

切り口としてApplication、の主眼は必要と。そうじゃないとクラス設計の方針が決まらず複雑怪奇になる。そもそもRPGというモノをサンプルにするのがかなり向いてなさげ。

44: shoh8 2025/07/13 11:36

“実際にオブジェクト指向がすばらしい例がなかなか見当たらないから”

45: zyzy 2025/07/13 11:53

最後に追記されてる通りでGUI作るのにあまりにも最適化されすぎてブレイクしたけど、それ以外の使い道が大分少ない、ってのはあるよね「オブジェクト指向」と称されるもの。

46: dalmacija 2025/07/13 11:55

いつもなんかおかしい。JSONでやれ、じゃないだろ。JSONやXML自体がオブジェクト指向の記述様式にほかならないじゃん。抽象化という言葉の記号接地が間違ってるんだよ。或いは偏ってる。以上。

47: mrmt 2025/07/13 12:02

"Hello, World!" の「こんにちは世界」に意味が無いと論じているようなお話。意味なくていいのでは。

48: aceraceae 2025/07/13 12:11

オブジェクト指向の考え方自体はいいと思うけど現実のソフトウェアでいちばん大切なことはちゃんと動くことなわけでガチガチな感じでやると底なし沼のようなものになりがち。逆に手法の解説用ならしかたない気も。

49: pakila 2025/07/13 12:17

取っ掛かりなんてそんなもんでいいでしょって思ってる派

50: verda 2025/07/13 12:27

1人でやってるうちはありがたみ感じにくいので 1人で学ぶ用のサンプルがイマイチなのは仕方ないような気がする

51: dorapon2000 2025/07/13 12:37

“実際、抽象データ型に継承を生やしたものがオブジェクト指向なので、メソッド付構造体としてデータ構造の定義に使うのが一番有用ということになります。”

52: radian19831019 2025/07/13 12:54

入門書で継承について説明するだからそんなもんでいいのでは? 設計や実践的な本ならそれは。。。となるだろうけど。

53: smken 2025/07/13 12:58

そもそも論は皆に任せるとして、例示としては「図形の扱い」が良かった。コンストラクタやgetMenseki(面積を求める)メソッドなんかで多角形、四角、平行四辺形、長方形、正方形…がどう変わるか実装されるか

54: srng 2025/07/13 13:20

(仕事や資格のため以外の)初心者が大抵まず作りたいのはGUIアプリなんだから、最初からそこから取り組む入門書があっていいと思う/ゲームはOOPからコンポーネント指向になって今はデータ指向なんだっけ?

55: jabb 2025/07/13 13:27

オブジェクト指向設計が出来ない人がオブジェクト指向言語を使ってはいけない(笑)

56: igni3 2025/07/13 13:36

オブジェクト指向しなくても属性で書けるけど、属性に対するif文が出てくる。オブジェクト指向なら簡単に書けるけど使い方間違えると逆に複雑になる。つまりは一般エンジニアの手に余る。

57: okupro 2025/07/13 13:42

個人的にはゲーム作るのが一番わかりやすいと思う。

58: paradoxparanoic 2025/07/13 13:43

この問題は「オブジェクト指向が酷い」という事実を前提に置くと解きやすい。代数的なデータ型と静的な関数群があればそれでいい

59: rck10 2025/07/13 13:44

追記の通り、GUIに刺さるなら意味はあるし、初心者を前提にするならDBやトランザクションを前提にするWebアプリは煩雑で不適切だし、Webアプリ特有の尖った構造を基準にプログラミングを語られても、という感じ。

60: megumin1 2025/07/13 14:12

このようなイキり記事は通常エンジニアに成りたての2年目に若気の至りで書いてしまい、数年後には黒歴史になるけど、この人、何十年もずっと同じレベルの若気の至り記事を書いていて全く成長していないのがすごい。

61: anonymighty 2025/07/13 14:32

オブジェクト志向のありがたみは、ストラテジーパターンやファクトリーパターンが一番とっつきやすくてわかりやすい。デザインパターンとセットで教えるのが一番良いと思う。

62: EngineerYtr 2025/07/13 14:48

40代以上プログラマーほいほい

63: ene0kcal 2025/07/13 14:49

初期からそんな例題ばかりだった。いまも変わらないのね。実際の応用で使えるような、または一歩手前くらいの例じゃないと初学者は難しいと思うのよね。

64: aox 2025/07/13 15:14

良く分からないのでダンスで表現して欲しいです

65: aiya000 2025/07/13 17:38

そうでないオブジェクト指向の例: https://scrapbox.io/haskell-shoen/objective あとはPascalあたりだったか? オブジェクト指向の出典は、定義に継承を入れておらず、メッセージパッシングに重きを置いてきた気がする(忘れたけど)

66: ichiken7 2025/07/13 19:55

オブジェクト指向芸人

67: fivestech 2025/07/13 21:36

こいつに読ませるべきなのはEffective Javaだな

68: dhrname 2025/07/13 22:39

はて、構造化プログラミングのいわゆるメソッド構文、例えばobj.x()とかを、SMALLTALK-80言語がサポートしていないのですが https://archive.org/details/Structured_Programming__Dahl_Dijkstra_Hoare/page/183/mode/2up?view=theater

69: kei_1010 2025/07/14 00:29

なんか懐かしい匂いがする。懐かしい腐臭が。

70: yuuAn 2025/07/14 02:16

染まってる側からすると、モデリングしたドメイン知識をソースコードに反映していくとき、オブジェクト指向言語は便利だなと感じる。

71: NOV1975 2025/07/14 10:29

批判してる人大丈夫かな…/実際のところ入門書は現実のものを抽象化することを語ろうとしていて言語としての使い所がわかるようにならないのでその言語におけるオブジェクト指向を教えてるように見えないんだよな。

72: Dolpen 2025/07/14 13:18

猫は動物(という振る舞い)を継承して生まれてこないし、役所に出す文書は振る舞わないので、ロジックやデータの在り方を表現するよりは「そうであることとする」責任を設計実装側が持っている側面が強いと思う

73: ShoCoh 2025/07/15 11:40

特定の批判対象があるんだけど明言すると角が立つから、ぼやかして書いてるせいで変に当たり判定が広くなってるエントリとみた

74: soybeancucumber 2025/07/15 14:28

disられまくっててコンテンツとして成立していると思った(本人の意図とは異なるだろうが)

75: s-nanagi 2025/07/15 15:43

一般人にとってOOPはクラスがアクセス制御の単位になってることの方が重要という感触がある。なので継承を特別視せずライブラリっぽいコードで解説ししつつドメイン実装ではあんまり使わないって話にするのがベター?