Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。

学生の頃オブジェクト指向にハマって継承を繰り返していた後輩が泣きついてきた時にあの人が現れて解決した話

レベル高い
134
垂木いすゞ @Isuzu_T

このアカウントは誰向きでもありません。発言を読んだことに起因する不快感に関して当アカウントは責任を負いかねます。フォロー・リムーブ・リプライもご自由に。挨拶不要。反応するかは気分次第です。このアカウントはエロ、愚痴、政治、アニメ実況、不謹慎ジョーク、唯一の主なる神への罵倒、その他一切の言動を自重しません。うんこ。

垂木いすゞ @Isuzu_T

学生の頃の話だ。 当時、僕が所属していたプログラミングサークルの後輩が、オブジェクト指向にはまっていた。僕はオブジェクト指向がなんなのかよくわからず、構造体に毛の生えたような使い方しかしていなかったのだが、後輩は継承にドハマリし、あらゆるコードで継承を使っていた。

2021-02-23 17:07:05
垂木いすゞ @Isuzu_T

「継承って使いすぎると良くないって聞くけどね」 僕はそう言ったが、聞き齧りなので理由は説明できなかった。なので後輩も当然納得せず、継承を駆使したコードをひたすらに追求していた。 たしかに、そのコードは短かった。

2021-02-23 17:08:44
垂木いすゞ @Isuzu_T

だが、ある日その後輩の進捗がぴたりと止まってしまった。どうしたのかと尋ねると、ちょっと変更を入れたら動かなくなった、という。 えてして、そう言う時は本人だけがうっかり気づけなかったつまらないことが原因なものだ。そう思い、コードを見せてもらった僕は仰天した。

2021-02-23 17:14:26
垂木いすゞ @Isuzu_T

からまりあう継承は、もはや木構造ではなく、網だった。 ひとつのメソッドを呼び出すだけでどれだけの親クラスを参照するのかわからない。 苦労して挙動を解析しても、今度は変更していいのかわからない。 クラスは網の中にがっちりと組み込まれ、いずこともしれない場所から呼び出されているからだ。

2021-02-23 17:20:33
垂木いすゞ @Isuzu_T

こんな状態では確かに少しの変更が全体の破綻を招くだろう。継承を乱用してはいけないというのはこういうことだったのか。僕はそう思ったが、すでに遅かった。 「せんぱああああああい。助けてくださあああああい、せんぱああああああい」 この世のものとは思えない悲鳴に、僕は死を覚悟した

2021-02-23 17:22:17
垂木いすゞ @Isuzu_T

「破あ!」 突然、声とともに、青白い光弾が後輩とコードに叩きつけられる! 後輩は吹っ飛んで倒れ、コードは継承を多用しない形にリファクタリングされた。寺生まれで霊感の強いTさんだった。

2021-02-23 17:25:41
垂木いすゞ @Isuzu_T

「継承に取り憑かれていたようだな。危ないところだった。単に字面上似てるコードを片っ端から共通化しなかったか? 自分が対象をどうモデル化しているか、モデルにはどんな変更がありうるか、どんな変更があっても必ず同じ動きになっていてほしいところはどこか、それを考えて使わなきゃだめだぜ」

2021-02-23 17:26:36
垂木いすゞ @Isuzu_T

Tさんは文字通りつきものが落ちたらしい後輩にそう言うと帰っていった。 寺生まれってすごい。改めてそう思った。

2021-02-23 17:27:19

さすが寺生まれのTさん

村ショウ @murasyoublog

@Isuzu_T ITにも強い寺生まれのTさん…

2021-02-24 07:31:24
4473 @44KLK

@Isuzu_T 寺生まれのTさんまたこうして出会えるなんて

2021-02-24 10:57:36
ポロロッカ @pororocca3776

@Isuzu_T 寺生まれのTさんにこのITの時代にまた会えるとは

2021-02-24 12:53:42
rero @rero_carnelian

@bisisats @Isuzu_T 文脈から判断すると、寺のTだと解釈するのが妥当なんやな。

2021-02-24 12:59:14

プログラミング的な話

モナ坊 @pythonism_

@Isuzu_T LSPの原則にそってなかったのですかね… その結果、Open closed principle にも逆らうような感じになったのも要因なのですかね… Tさん…

2021-02-24 12:28:50
残りを読む(7)

コメント

すいか @pear00234 2021年2月24日
稀によくあるやつ。 こうなるとC言語レベルのstaticおじさんコードのほうが、まだ改修も安全で分かりやすかったりもするね。
3
Monk Leroy @monkemil 2021年2月24日
JAPANweb_SRPG Tさんは寺西さんの事だった...?
5
うの @uniquis 2021年2月24日
俺もコードをリファクタリングする光弾撃ちたい
76
かわいいこねこ @pilimykingdam 2021年2月24日
必殺技のあるスポーツ漫画だったら、絶対強キャラだろ和尚ww
0
佐渡災炎 @sadscient 2021年2月24日
モダンなオブジェクト指向言語なら網のようにがんじがらめになるような設計にする方が割と難しそうな気がするが。
1
NO ROU @wgn_fog 2021年2月24日
師匠シリーズかとおもったらTさんだった
1
rads @rads36218612 2021年2月25日
Tさんジェネリクスに強そう
1
伍長 @gotyou_H 2021年2月25日
余計なマネさえしなければ「参考になる話」で終わったのに。
2
Ikunao Sugiyama @Dursan 2021年2月25日
またまたペタなネタを、、、
2
辻豚 @tatoo_pig 2021年2月25日
TLで話題だった「イップマン(継承)」を借りるつもりが、うっかり「ヘレディタリー(継承)」を間違って借りてしまい視聴後2日くらい寝込んだ
6
nekosencho @Neko_Sencho 2021年2月25日
テラドライブで育ったに違いない
1
ゆうへい @35dieyuhei 2021年2月25日
もしかしてそのTさんって寺沢さんじゃ…
0
ヘリオドール @heliodor_ruby 2021年2月25日
オブジェクト指向はおおまかな概念だけ教わった程度なので、ツイ主同様に構造体に毛の生えたような感じで、各種処理は役割毎にきっちり関数を分割してツリー構造化、各処理(モジュール)毎にメンテナンスや使い回しがしやすいようにする程度だった。ソースコードは短くなるどころか長くなった記憶。まぁ、継承を使いこなせなかった自分にはそれでよかったんだけど。
0
ヘリオドール @heliodor_ruby 2021年2月25日
前の職場(家電設計で組み込みソフトを担当)では、コード環境上はC++だったけどベテランから新人までコードに触れる都合上、全員が見て分かるようにC言語の範囲内で書け、ポインタは原則使うな、再帰関数禁止、変数名は一目で分かる名前を、1処理1関数で細かく分けてツリー構造化しコメントと資料残せというのを教え込まれた記憶ある。ソースコードは長かったが読みやすかったなぁ…。
0
じ〜げん〜 @jigen357mgnm 2021年2月25日
中学のクラスメートだった日蓮宗某寺の御子息のT君は、「精子ってポコって出るんだよね?」との素朴な質問を真顔でしてきて、みんなを引かせてたやでw
0
Earwax @Earwax97409510 2021年2月25日
「木構造じゃなくて網」にできたということはC++かPythonかな。深さ優先探索とか罠よなあ…
0
Shin Saito @shinsa82 2021年2月25日
あの人っていうからTさんかと思ったらTさんじゃねえか
0
ばしにぃ @hiro_orso_viola 2021年2月25日
カプセル化とか結合の疎と密とかってオブジェクト指向じゃなかったっけ…?
0
aqp1 @aqp114 2021年2月25日
heliodor_ruby ポインタ禁止だけは全く納得いかない。
4
ゴロニャーゴ @nukopoint 2021年2月25日
heliodor_ruby コーディング時間が3倍くらいかかりそう。
0
しろうと @sirouto 2021年2月25日
「深い(多重)継承は、避けよ」「継承より委譲」というプラクティスが一般的(メイヤーは違う意見だが……)。ではなぜ、「深い継承」は問題を起こすのか? 1.継承は密結合。 2.そのため、仕様変更に弱い。もし、継承ツリーに変更があると、修正の影響範囲が広がる。 3.識別する種類が多いと、組み合わせ爆発を起こし、継承ツリーが大規模化する。そして、1&2がより深刻化する。では、どうすればいいのか? とくに3の場合、識別する属性を(タイプ)オブジェクト化し、継承ではなくコンポジションで表現するのが定石。
1
ヘリオドール @heliodor_ruby 2021年2月25日
aqp114 nukopoint 正直効率は良くなかったです。ポインタ原則禁止で不便もあった(メモリ内の画像データ参照とかでポインタ使わないとダメなとこ除く)。 ただ、コード触るのが新人でプログラミングの初歩だけ知ってる人とか色々混ざって数十人で人海戦術、人事の都合で人がちょくちょく入れ替わるという事情があって色々不具合が生じたんです。
0
ヘリオドール @heliodor_ruby 2021年2月25日
aqp114 (続き) 普通は可読性上げてソースコード共有するだけなら、ポインタ禁止とかしないですよね…。 ポインタになれてない段階の人間を、事前教育期間もなく人手足りないからって現場の手数に放り込んだり、来週から担当者交代します! って引き継ぎ不十分なまま派遣の人が入れ替わることがあった人材管理がダメダメ過ぎる職場での、新人がフリーズしないための苦肉の策だったと思います。なのでこれは悪い例ですね、可読性と同列に並べるルールじゃなかったです。
0
Denullpo S. Hammerson @denullpo 2021年2月26日
C++でclassの中にclass書いてincludeが網になってんのは多々見かけるが、継承で構造的に網って想像を絶する話である。とりあえず、設計できない輩はどんな手段で書かせてもぐっちゃぐちゃになる現実。
0
Denullpo S. Hammerson @denullpo 2021年2月26日
あとポインタ禁止っちうか、 malloc~free new~delete の濫用を避けることで安定性を向上できるんだが、参照渡しと適切なconst設定が必須なわけで、よりグレードの高いコーディングが要求されるのでありました。てゆっかC++じゃなくてCでポインタ禁止って、ごっつい構造全部コピーで渡してるん?
0