2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

なぜ「staticおじさん」は叩かれたのか?

1 :デフォルトの名無しさん:2019/02/08(金) 15:18:48.58 ID:pS5scTjj.net
staticおじさん(読み:すたてぃっくおじさん)とは、2010年に@ITに「実はオブジェクト指向ってしっくりこないんです![1]」
と投稿して炎上したおじさんのことである。

staticおじさんが爆誕した2010年ごろのIT土方界隈ではJavaを中心としたオブジェクト指向が主流であり
「なんでもかんでもオブジェクト指向」という風潮があった。

このためstaticおじさんは多勢に無勢でボロクソに叩かれる結果となり、さらにはプログラミングそのものの
話を飛び出してオブジェクト指向推進派による学歴差別などに発展したすえに無事炎上した。

それからわずか数年後、staticおじさんの主張に「極力static変数は使わない」「関数ポインタを多用する」
というコーディング規約を加えた「関数型プログラミング」がJavaScript界隈を中心に爆発的に流行し、
その流れに乗るかたちでこれら規約を半ば強制する仕様の「関数型プログラミング言語」も多数登場するなど
世界的に一大ブームになった。

ちなみにstaticおじさんの主張と非常に酷似したものが、staticおじさんの登場より遥か昔、インターネットを
支える中核技術である「IP」のRFC(仕様書)にも「階層化の有害性」として書かれていたりする。
また、海外でも同様の主張を面白おかしく書いた「Bjarne Stroustrup インタビュー」なる怪文書が出回り、
こちらも大炎上した。

https://monobook.org/wiki/%E3%82%B9%E3%82%BF%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%81%8A%E3%81%98%E3%81%95%E3%82%93

336 :デフォルトの名無しさん:2021/08/08(日) 19:41:10 ID:ZzxWVxwD.net
DTOはO/Rマッパー等を使う時に利用するデザインパターンだが、ドメインモデル貧血症はアンチパターン。

まぁ、さっき示した具体的なコードがDTOと言えばそうなんだけど...用途の間違えたDTO。

337 :デフォルトの名無しさん:2021/08/08(日) 19:42:27 ID:9M/UErff.net
DTOをモデルという名前で呼ぶからドメインモデルとごっちゃになるのかもわからんね
DTOはDTO
ドメインモデルはDTOとは違うよ

ドメインモデル貧血症はこんなところかな

class Calc {
  int calc(Person p) {
    return p.Sarary * 2;
  }
}

338 :デフォルトの名無しさん:2021/08/08(日) 19:47:56 ID:9M/UErff.net
君は具体的にどういう経験をしてドメインモデル貧血症がよくないと思ったのか教えてくれる?

僕はないんだよね、Calcというモデルで計算がしやすくなることもあるし
ドメインモデル貧血症はただのレッテル貼りにしか思えない

339 :デフォルトの名無しさん:2021/08/08(日) 19:52:43 ID:ZzxWVxwD.net
>>337
ドメインモデルとデータが違うのはその通り。

悪かった。真面目にコードを書く。

class Box {
public int Height { get; set; }
public int Width { get; set; }
}
これがドメインモデル貧血症

class Box {
public int Height { get; }
public int Width { get; }
public Box(int height, int width) {
if (height <= 0) {
throw new ArgumentOutOfRangeException(nameof(height));
}
if (width <= 0) {
throw new ArgumentOutOfRangeException(nameof(width));
}
Height = height;
Width = width;
} public int Area() {
return Height * Width;
}
}
これがオブジェクト指向

スマホのお陰で改行が狂ってるかもだが。

340 :デフォルトの名無しさん:2021/08/08(日) 20:00:06 ID:ZzxWVxwD.net
>>338
レッテル貼りじゃなくて、本気で困ったことあるから安心しな。

せっかく例を書いてもらって悪いが、ドメインモデル貧血症の例は>>339を見てくれ。

まず、1つ目のクラスは、セッターとゲッターしか定義されてないだろ?
これって実質、ただのC言語構造体と一緒。
ビジネスロジックが書かれてなく、こんなの渡されたクラス利用者は困るわけだ。
なぜって?
だって、何もしてくれないじゃん。できることはパラメータのセット・ゲットだけで、データベースに何かを保存してくれる訳でもなければ、計算をしてくれるわけでもない。実質ただの変数。

341 :デフォルトの名無しさん:2021/08/08(日) 20:00:12 ID:9M/UErff.net
どちらもオブジェクト指向だよね

BoxにAreaメソッドがあるか否かの違いしかないので
あった方が便利なら追加すれば良いと思うけど

やはりドメインモデル貧血症がダメだとは思えない

342 :デフォルトの名無しさん:2021/08/08(日) 20:03:30 ID:ZzxWVxwD.net
>>340
次は2個目のクラスだ。
まぁ、できる事は少ないが、これはクラスを利用する意義はある。

値をセットするだけではなく、Box(箱)クラスの名に恥じない機能、面積取得機能が備わってるから。
つまり、これだけでBoxクラスを使う価値が出てくるわけだ。


...という話なんだ。うん、それだけ。

343 :デフォルトの名無しさん:2021/08/08(日) 20:03:44 ID:9M/UErff.net
>>340
Boxクラスはデータを表してるってことでしょ
なら何もしなくて正解だし何かしてくれる方が扱いづらい

Boxクラスの計算するクラスを作ればいい
どういう計算が必要かはドメインによって変わってくるでしょ
そうして作られたクラスが本当のドメインモデルだよ

344 :デフォルトの名無しさん:2021/08/08(日) 20:06:41 ID:ZzxWVxwD.net
>>341
じゃ聞くけど、貴方は前者のBoxクラス渡されても困らないの?
何もできないよ?

俺!Boxクラスのロジック実装します!あなたはBoxを使う処理を書いて!と分業したとき、俺があなたに前者Boxクラスを渡して、面積計算や座標変換(回転等)計算などの処理はそっちでやってください!とか言われたらどうです?

345 :デフォルトの名無しさん:2021/08/08(日) 20:07:10 ID:9M/UErff.net
>>342
面積が必要なかったら無駄なクラスだしなあ
どうして面積を得るのかがわからないと価値があるかどうかはわからないよ
面積を使って何をするのっていう情報がないからドメインモデルではなくて
ただのデータだと思った

346 :デフォルトの名無しさん:2021/08/08(日) 20:09:16 ID:9M/UErff.net
>>344
すごく困るBoxクラスが欲しいと僕は言ってるわけじゃないから
そういうの渡されてもすごく困ると思う
え、なんで? って思う

> 俺!Boxクラスのロジック実装します!あなたはBoxを使う処理を書いて!と分業したとき、
> 俺があなたに前者Boxクラスを渡して、面積計算や座標変換(回転等)計算などの処理は
> そっちでやってください!とか言われたらどうです?

頭おかしいのかなって思う

347 :デフォルトの名無しさん:2021/08/08(日) 20:11:49 ID:ZzxWVxwD.net
>>344
あと、リアルプログラミングってまじで分業するからな。
俺がBoxクラスを使わせるのは貴方だけではない。他の開発者も使う。
そんな最中、getter.setterしかなかったら、皆、どんな反応すると思う?

こういうライブラリレベルで使い勝手の良いコードを隅々まで書くのが俺の開発現場。

348 :デフォルトの名無しさん:2021/08/08(日) 20:12:15 ID:9M/UErff.net
あ、でも面積計算クラスや座標変換クラスでまとめるのは場合によってはありかもね
僕はそういうドメインモデル貧血症は良いと思ってる立場だから、それはありですね

349 :デフォルトの名無しさん:2021/08/08(日) 20:12:43 ID:ZzxWVxwD.net
>>346
へぇ。じゃ、前者のテストコード書いてよ。

350 :デフォルトの名無しさん:2021/08/08(日) 20:14:56 ID:9M/UErff.net
>>347
そうなの? Boxクラスが出てくるあたりゲームプログラマの人?
僕はBtoBの業務アプリが主だけど、分業するときってクラス単位じゃなくて
アクターとか機能とか大きな単位で分けるから、何言ってるのかよくわからない

351 :デフォルトの名無しさん:2021/08/08(日) 20:29:21 ID:ZzxWVxwD.net
>>348
> 僕はそういうドメインモデル貧血症は良いと思ってる立場だから、それはありですね

分かってくれてありがとう。
でも、年のために言うと、ドメインモデル貧血症は前者の例ね。

まぁ、言葉の定義より、どんなコードの書き方が役に立つかの方が重要なんだけど...どうしても、staticおじさん論争になると言葉の定義は外せないのが辛いところ...。

352 :デフォルトの名無しさん:2021/08/08(日) 20:38:17 ID:ZzxWVxwD.net
あと、ごめんなさい。>>349は無視してください。

353 :デフォルトの名無しさん:2021/08/08(日) 20:43:52 ID:I3k2xDDQ.net
世に出ているservlet, jsp, spring とかの本では
APIとしてはオブジェクト指向が登場するけど
プログラムを書く側はオブジェクト指向を意識して書いてないぞ

354 :デフォルトの名無しさん:2021/08/08(日) 20:52:42 ID:9M/UErff.net
>>351
なんか誤解してるような気がするんだけど
Boxに面積の計算を持たせない前者の例で、面積の計算を面積計算クラスにまとめると
ドメインモデル貧血症になるけどそれはありだよねっていうのが僕が言いたかったことだよ

計算は僕が携わっているドメインだと結構変わるのよ、顧客満足のためだったり
法律のためだったり世の中の情勢に配慮したりとかで、その場合は個々のデータに
計算をもたせるよりも計算だけを行うようモデリングしたほうが都合がよかったりする
ドメインモデル貧血症にはなるけどシステムとしてはそちらの方が適切だからそうすることもある

君は分業することを例にドメインモデル貧血症がダメだといったけど、それは
コミュニケーションの問題だと思うんだよね、自分は面積の計算を実装してもらいたくて
相手は面積の計算を実装しなくて良いと思ってたというコミュニケーションミスだと思うんだよね
そういうコミュニケーションで解決するべき問題をオブジェクト指向の問題にするべきではないと思うよ

355 :デフォルトの名無しさん:2021/08/08(日) 21:03:19 ID:hJWAYL03.net
ドメインモデル貧血症ってアンチパターンでしょ

356 :デフォルトの名無しさん:2021/08/08(日) 21:07:42 ID:hJWAYL03.net
初めて聞いた言葉だから自信ないけど、

オブジェクト指向設計のアンチパターン

貧血ドメインモデル(英語版)ビジネスロジックが欠けたドメインモデル。オブジェクトは属性と振る舞いを持たなければならないので、オブジェクト指向プログラミングではない

ってwikiに書いてあった
(よく意味を理解していない)

357 :デフォルトの名無しさん:2021/08/08(日) 21:10:07 ID:9M/UErff.net
>>353
ドメインモデルが必要なほど複雑な要件は入門書では扱われないからね・・・
現実は要件がころころ変わることに対応しないといけなかったりで
オブジェクト指向をきちんと理解して実践してると助かることはままある

リクエストごとに処理をごりごり書いたトランザクションスクリプトで十分なことは多いし
フレームワークが提供してるライブラリで処理を完結できるほどフレームワークの機能が
充実してきてることもあるんじゃないかな

358 :デフォルトの名無しさん:2021/08/08(日) 21:14:34 ID:9M/UErff.net
>>355
ドメインモデル貧血症はマーチン・ファウラーという猥褻顔のおっさんがアンチパターンと言ってて
そのおっさんが言うんならそうなんだろと思考停止で鵜呑みにしてる人がほとんどで
実際にプログラム書いてみるとドメインモデル貧血症はそんなに悪くない
スリムドメインモデルと言い換えて風評被害をなくしたい、ご協力よろしくお願いします

359 :デフォルトの名無しさん:2021/08/08(日) 21:19:34 ID:9M/UErff.net
これまでの話をまとめると、staticおじさん良いよねってこと

360 :デフォルトの名無しさん:2021/08/08(日) 21:32:38 ID:pp984S8L.net
スレタイさん「なんでstaticおじさんは叩かれたの?」

361 :デフォルトの名無しさん:2021/08/08(日) 21:38:00 ID:9M/UErff.net
叩いた人がアホだったんだと思う
とくにAC/DCって人はstaticおじさんが悪くなるように物事を解釈して
議論をダメにしてると思った

362 :デフォルトの名無しさん:2021/08/08(日) 21:40:51 ID:+ND78RnS.net
>>359
> これまでの話をまとめると、staticおじさん良いよねってこと

嘘だゾ
さっき、ドメインモデル貧血症はオブジェクト指向ではないvsオブジェクト指向だ、で衝突しているのを見てたゾ

どこにも、staticおじさんを褒めてる要素がなかったゾ
しかも、オブジェクト指向でも何でもないプログラムをオブジェクト指向のアンチパターンとして紹介して論破されてるところ見たゾ

363 :デフォルトの名無しさん:2021/08/08(日) 21:44:29 ID:9M/UErff.net
>>362
落ち着きなよ、全部君の気のせいだよ、はい論破

364 :デフォルトの名無しさん:2021/08/08(日) 21:47:48 ID:+ND78RnS.net
>>363
ひょ?

365 :デフォルトの名無しさん:2021/08/08(日) 21:56:01 ID:pp984S8L.net
>>360
知ったか知識で誤ったクラスの使い方を説明したから
更に、コメ欄で学歴差別発言をみながわけんじがしたから

366 :デフォルトの名無しさん:2021/08/08(日) 21:56:21 ID:pp984S8L.net
ではないか?

367 :デフォルトの名無しさん:2021/08/08(日) 22:21:42 ID:9M/UErff.net
揚げ足取りばかりのコメントに東工大の圧力で対抗するのは適切だよ

368 :デフォルトの名無しさん:2021/08/08(日) 22:24:05 ID:9M/UErff.net
東北大学で情報工学学んで東工大の大学院に入ったとしたらすごい経歴だな

369 :デフォルトの名無しさん:2021/08/08(日) 22:24:34 ID:9M/UErff.net
うらやましいただただうらやましい

370 :デフォルトの名無しさん:2021/08/09(月) 17:36:30 ID:jzl3UTNH.net
東京工業大学の汚点になるから、こんなボケたジジイを持ち上げるのやめて欲しい。

371 :デフォルトの名無しさん:2021/08/09(月) 17:41:06 ID:vbsnYimc.net
staticおじさんはSIerに仕事発注する立場でありながら自分でシステム構築もしてるようだな
エンジニアの理想じゃん

372 :デフォルトの名無しさん:2021/08/26(木) 23:21:57 ID:Engbmk1d.net
アラン・ケイがオブジェクト指向という言葉を作って
オブジェクト指向のプログラミング言語Smalltalkを作った

日本IBMはSmalltalkのスペシャリストを集めてSmalltalkを使って
オブジェクト指向のシステムを作ろうとしたけど失敗した
長野オリンピックや九州医大病院のシステムだ
結局それらはVBで作られた

最強の組織、最強の言語、最強のオブジェクト指向を使っても
できなかったことがVBならできた

このことから僕たちは学ばないといけないよね

373 :デフォルトの名無しさん:2021/08/26(木) 23:23:09 ID:Engbmk1d.net
過剰なオブジェクト指向は破綻を招くのじゃなかろうかと

374 :デフォルトの名無しさん:2021/08/27(金) 12:18:26 ID:+wfLaYar.net
>>373
過剰なオブジェクト指向かどうかはさておき
それよりも先に単にクラス設計の時点でカンタンに間違うと思う
OOPやOOPLそのものの問題より先に、クラス設計というところで単に間違うと思う

375 :デフォルトの名無しさん:2021/08/27(金) 13:37:11 ID:eJGjxOi5.net
staticおじさんもデザインパターン厨もどっちも嫌なんだよ〜ん

376 :デフォルトの名無しさん:2021/09/02(木) 20:23:52 ID:tjtHyeAD.net
俺は全部日本語で書くおじさんだけど叩かれる?
DDDとかもう古いかな

377 :デフォルトの名無しさん:2021/09/02(木) 21:47:04 ID:IZWicv0z.net
日本固有の業務用語は変数名をローマ字で書いちゃう

378 :デフォルトの名無しさん:2021/09/03(金) 07:24:47 ID:FhIZBaS/.net
ローマ字じゃない
ガチで日本語の業務用語書く

379 :デフォルトの名無しさん:2021/09/03(金) 07:27:46 ID:FhIZBaS/.net
小規模スマホアプリならstaticで良いよね
他のオブジェクトと協調なんてしないから状態の奪い合いなんて起こらない

380 :デフォルトの名無しさん:2021/09/03(金) 08:35:21 ID:6uQ/qiqA.net
Enumを全角の日本語にすることはある
気は進まないが英語やローマ字だと可読性が低すぎてバグに繋がりそうなとき

381 :デフォルトの名無しさん:2022/04/09(土) 07:24:05 ID:BCdBtInS.net
言うほど悪い人じゃなかったよね(´・ω・`)
一理はあったし、かわいそう(´・ω・`)

382 :デフォルトの名無しさん:2022/05/01(日) 09:16:15.43 ID:nmGekSHA.net
一理とは

383 :デフォルトの名無しさん:2022/05/01(日) 13:16:06.40 ID:aS2zfgOp.net
ぱっとしない家系

384 :デフォルトの名無しさん:2023/06/08(木) 21:44:07.44 ID:nNz5ov89.net
メソッドもメンバ変数もstaticにしてインスタンス化を不要にするが何故駄目なのかようやく分かったよ
ホラ吹きプログラマーに流されて擁護したことが恥ずかしくなってきた

385 :デフォルトの名無しさん:2023/09/07(木) 17:52:53.54 ID:8UvoZkVgi
人殺し支援であるGoToなにがした゛の地球破壞支援か゛成功だのほざいてるバカは処刑されるべきテ口リストた゛よな
人が生きる上で全く不必要なクソ航空機を都心まで数珠つなぎで飛ばして無駄に石油燃やしまくってエネ価格から物価にと暴騰させて
莫大な温室効果ガスまき散らして気侯変動させて日本どころか世界中で土砂崩れに洪水、暴風、猛暑、大雪、森林火災にと災害連發
バカチン打ったバカのほうか゛コロナ拡散率が高いにもかかわらず地球破壊支援はバカチン打ったバ力が対象とか分かりやすいか゛
私利私欲のために人を殺してこれでもかと奪い尽くすのが世界最悪の殺人組織公明党国土破壊省の強盗殺人の首魁齊藤鉄夫の正体な
静音が生命線の知的産業まで壊滅させて後進国に陥れてこいつらがまき散らしたコ口ナによって国内だけで何万人も殺害に凄まじい後遺症
IpcСカ゛ン無視て゛テロ国家認定の化石賞連続受賞して非難されなか゛らいまた゛に滑走路にクソ航空機にと倍増させて税金で地球破壊して
他国に核攻撃以上の被害を与えまくってる世界最悪のテロ国家霞が関にもう一発核落として反省させないと腐敗国家日本の暴走が止まらんそ゛
(羽田)ttps://www.call4.jp/info.php?Tуpe=items&id=I0000062 , ttps://haneda-project.jimdofree.Com/
(成田)ttps://n-souonhigaisosyoudan.amebaownd.com/
(テロ組織)ttps://i.imgur.Com/hnli1ga.jpeg

97 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★