2020-10-23

anond:20201022005749

継承必要だよ。継承がないと多態が表せないから。

馬鹿継承を扱わせると、仕事している感を醸し出すために継承活用せざるを得ない。だから継承はクソに見える。よって、増田の言いたいことはわかる。

しかし、冒頭で書いたとおり、多態を適切に扱うために継承必要なのだ。これ以上は書けない。これからクラスベースOOP は消えることないであろう。それを書くすべを私は持ち得ていないので、null が消えない事実を例にして語ろうと思う。

21世紀プログラミング言語チャレンジの1つはなにか、と言ったら「null 撲滅」であろう。関数型言語は null を排除することに努めたし、Swift 言語は Optional という null がはいっていないことを保証する仕組みを作ったり、Haskell圏論という数学概念で応対しようとし、Ruby 言語は &. という「null をスルーするメソッド」を開発した。でも、null は撲滅出来ないままである

そもそも null とは何か?C言語では、ポインタが指すとそこでお終いだし、Java だとヌルポ(例外)の要因だし、Ruby だと NilClass のインスタンスだし、SQL言語だと「3値論理」では未来のことを記述するためのものだし、言語によって null はバラバラである。つまり、null 自体には特に意味はないのだ。逆に null があると便利だと思わないかC言語ではポインタに死んでもらえるし、Java だとヌルポがあったら例外にできるし、Ruby だと nil があったらなにかの理由があるからだし、SQL言語だと未来のことは不明記述できるし。そうなのだ、null はプログラミング必要なのだ。null をちゃんと扱うのが難しいだけで、null 自体に罪はない。

これを継承、というか多態にあてはめてみよう。多態がないとどうなるか想像してくれ。とてもしんどいことになる。なぜなら...

(作者は眠たくなりました。続きが読みたかったら反応ください。)

記事への反応 -
  • キチガイに刃物、ゴミプログラマに継承。危険なものは取り上げるべきだ。 オブジェクト指向プログラミングにおける継承は強力な手法であるが、これを正しく使えるプログラマは残...

    • 継承は必要だよ。継承がないと多態が表せないから。 馬鹿に継承を扱わせると、仕事している感を醸し出すために継承を活用せざるを得ない。だから、継承はクソに見える。よって、...

    • いわゆるBridgeとAdaptorパターン

      • ブリッジパターンよくわからんから、説明してくれ。アダプタパターンは「継承することで、継承元をラップする」ということはわかったので。

        • よくわからんも何もごく当たり前のオブジェクト指向の使い方だが メンバ変数のオブジェクトに処理を委譲する ポリモーフィズムで具体的なオブジェクトごとに処理を切り替える ...

          • あー、なるほど、ってならないが、元増田は多分わかっているんやろね。ところで本は何使って勉強しましたか?

    • AにBを持たせる class A { private B b; // 実装} AをラップしてBと共通のインタフェースを実装する interface IB { // Bのメソッド}class A implements IB { private A a; // 実装}class B implements IB { ...

    • よし、お前の熱い気持ちしかと受け止めた。バズるのは時間帯が悪かったと思うので、次に投稿するときには夜ご飯ぐらいがいいよ。それでは添削してやろう。 継承はだめ、という主...

      • リスコフの置換原則は、継承したメソッドは上下で型の変化を無くせ、というだけだろ? 全然違う件

        • 入れ替えても「他と同じように」動くクラスを作れって話だよな。 もしかすると型の変化を無くせという一節にその意味が込められているのかもしれないがどう考えても伝わってない。

          • 「型」という言葉が、たとえばCoqのような形式証明や、よくあるHaskellの純粋性などを解説する際に用いられるような 「周辺環境すべての情報を含むもの」 という意味でしたら、「型を...

          • そのつもりで書いたが、分かりにくいか... 次から気をつける。

        • リスコフの置換原則は、もとのクラスと継承したクラスとで、引数かレシーバーの型が T だとすると、継承したクラスはもとのクラスと同じ型を返さないといけないという話だよね?違...

    • 要は、継承より委譲しろ、ってことだな?

    • クラス型オブジェクト指向言語の機能は何でも出来すぎるという意味でgoto文に近いと思う。 gotoが機能的に制限された構造化言語構文に進化したように、デザインパターンをもっと整理...

      • シェルスクリプトとLispに回帰すべきなんですよ。 あらゆるオブジェクトは、リスト、マップ、ラムダ式のような汎用的なデータ構造で表される。 プログラムのすべての機能は互い...

        • 上は Ruby が実現している気がする。下はユニゲージってやつか。どうみてもユニゲージは無理があるが。

          • Erlangがそれに近い Erlang https://www.erlang.org/docs https://www.ymotongpoo.com/works/lyse-ja/ Elixir およびErlangをラップした言語であるElixir https://elixir-lang.org/docs.html https://elixirschool.com/ja/

        • プログラムのすべての機能は互いに独立した(仮想的な)プロセスとして並行に実行され、プロセス間のデータのやり取りにはメッセージングとパターンマッチを用いる。

        • いやLispは最強のオブジェクト指向システムを持ってるんですが。 Lisp界ではハッシュテーブルとクロージャーとマクロがあればオブジェクト指向システムいらねというポールグレアムみ...

          • CommonLispは、とか、Lispの種類を区別しなくていいの?

          • こういう知識ひけらかそうとして読解力の無さ露呈してる奴って本当に滑稽だな。

    • pythonにはinterfaceの概念がないので継承を使わざるをえない場面があるので極力関数定義にしてるわ。 ステートレスなデータを扱う場合は状態を表すデータ型用意して関数でこねくり回す...

      • えーっとね そもそもPythonはダックタイピングだからinterfaceは必要ない

        • そんなんわかってるよ。だからinterfaceの概念ないっていってるじゃん。 イディオムとしてABC使ったとしても継承しか振る舞いの定義方法のやり方がないから何も間違ったこと言ってない...

      • Ruby も同じ。

    • ゴミプログラマは2段を超える階層構造を一般に理解できない

      • つまり、メソッドには一つのことをテーマにしろと?

      • これはマジ 実務で5-6建ての継承書かれてもまともに読めないからやめてほしい 移乗で扱ってくれ どのメソッドがどの継承している中のクラスの実装を動かしてるかなんて読めないよ そ...

    • 継承で馬鹿ルールを思い出した 必ず共通空クラスを継承することっていうルール SIer の大好物ルール オレにとっては未だに意味不明 class Base() {なんか実装してある} class Empty() extends Bas...

      • printデバッグとかに使うんすかね 知らんけど

        • そういうことなんか。勉強になった。 Ruby なんかでも、BasicObject が生まれた契機は、こういう「バグとかチェックするのに便利」なやつなんだろうか?

    • Qiitaのポエムより、何か言ってる感がある分ひでぇ

    • 保守困難個所を作れるなら、つまり自分の有利じゃん その重要な部分が周知されていないのも、明らかに意図されているだろう 今後もそうなんだろうな

    • 多くの場合、後者の方法が、もっと言えば 「AをラップしたクラスA'と、BをラップしたクラスB'を作り、A'とB'に共通のインタフェースを実装する」 のがベストプラクティスではないか。

    • コピペで作れるように使い方わかってる奴がサンプル作りゃええやん 待ってるで

    • MixinとかTraitとか、継承によらずに機能を共通化するための仕組みが各言語に用意されてるのに、誰も言及していない…

      • ↑何にも分かってないやつ

      • アホすぎ ネタで言ってるんじゃなけりゃソースコード書くのやめるべき

      • なんで罵倒だけついて誰も教えてくれないんだ クラス間でメソッドを共通化したいが、継承のように「置換可能性」を考慮したくない、というときのためにMixinやTraitがあるんじゃないの...

        • commonとかutil作りそう

        • クラス間でメソッドを共通化したいが、継承のように「置換可能性」を考慮したくない、というときのためにMixinやTraitがあるんじゃないのか mixinもキチガイに刃物だと言いたいんじゃ...

    • こういう過激派がいるプロジェクトは、プログラム的には正しくても事業的には成功しない印象。

    • 完全に正しい多段継承でテンプレートパターン使いすぎて使い勝手最悪のライブラリを見たことがあるのでリスコフが全てだとは思わないかな。 継承より委譲には賛成。 > Aをラップし...

      • なんかわかっている人がきた感じ。 イテレータパターンとオブサーバーパターンは言語に組み込まれた感じがする。Ruby とか見てると。

        • いつの話ししてるんだよお前

          • うーん、2005年ぐらいか? Scala とか出てきたけど、デザインパターンが言語レベルで組み込まれたのは、これぐらいじゃない?Java や Javascript も機能に組み込んだけど。

            • ScalaのTraitは何のためにあるのか教えてくれ

              • さぁ?オレはScala嫌いだから知らんよ。 まぁ、でも多分こんな目的では?という予想はあるよ。 ・もともとは C++ は多重継承ができて、カオスになった。 ・Java が単一継承となり、振...

              • scalaなら関数型ライブラリのcatsにおける型クラス定義がtraitとその多重継承の利用例として良いと思う

    • リスコフの置換原則を満たしていても共通化の仕方が雑だからひどいことになっている継承、というのはいっぱいあるように思う コンポジションのが責務の分割がうまくいくのでコンポ...

      • コンポジット・パターンのことかと思ったけど、委譲のことを言いたいのですね?ぐぐったら、コンポジションを委譲と書いてあったので。

    • 難しく考えなくても、クラスAに毛が生えたクラスA'を作る以外に使っちゃダメでいいよ。 GoFにもそう書いてある。

    • 順位 タイトル ブクマ数 日付 ジャンル 備考 1 意識の低いフリーランスの生存戦略 2260 02/26 テクノロジー 2 ケンタッキー初心者...

    • 順位 タイトル ブクマ数 日付 ジャンル 備考 1 意識の低いフリーランスの生存戦略 2260 02/26 テクノロジー 2 ケンタッキー初心者...

    • トップ700 順位 ブクマ数 タイトル 日付 ジャンル 備考 1 2260 意識の低いフリーランスの生存戦略 02/26 テクノロジー 2 2246 ...

    • トップ700 順位 ブクマ数 タイトル 日付 ジャンル 備考 1 2260 意識の低いフリーランスの生存戦略 02/26 テクノロジー 2 2246 ...

    • 順位 ブクマ数 タイトル 備考 1 2260 意識の低いフリーランスの生存戦略 2 2246 ケンタッキー初心者指南 3 1980 100分de名著シリ...

    • 順位 ブクマ数 タイトル 備考 1 2260 意識の低いフリーランスの生存戦略 2 2246 ケンタッキー初心者指南 3 1980 100分de名著シリ...

    • 順位 ブクマ数 タイトル 日付 備考 1 2260 意識の低いフリーランスの生存戦略 02/26 2 1848 プログラミングスクールなんか行かなくてい...

      • トップ500 順位 ブクマ数 タイトル 日付 備考 1 2260 意識の低いフリーランスの生存戦略 02/26 2 2246 ケンタッキー初心者指南 ...

        • パンティー変はないのか

        • 昨日、M区のクライアントのオフィス行ったんです。クライアントのオフィス。 そしたらなんか知らない人がめちゃくちゃいっぱいいたんです。 で、よく見たらなんか垂れ幕下がってて...

          • 🍛👳🏽‍♀️👳🏽‍♂️🧒🏻ナマステ―!!🍛オイシイヨ

            • それは逆じゃなくてナン、、、 一瞬考えちゃった。

            • はてラボ人間性センターの質問に付き合ってるうちに雑学を色々検索してしまって、ナンのコメントするべきだったか忘れてしまう現象に名前をつけてください。 anond:20210115222013 anond:202...

        • 月刊増田文学賞も創設してくれやで ワイは妖怪寿司女を推す https://anond.hatelabo.jp/20210112213223

        • あとで読む ランク タイトル ブクマ数 日付 カテゴリ 1 あえぎ声を書くバイト 1980 2021/04/08 05:49 おもしろ 2 桃太郎なのに、とっても Apple 1660 2021/04/26 10:18 テ...

          • 開いたことあんの3つしかないんだけど 基準はなんなんだよ?

          • 今年も乙!

          • はてなーなんだかんだ言いながらapple好きなんだな

          • 3つしか見たことのあるやつなかった 全然しらないのばっかりで俺増田やるの向いてないのかも・・・

          • 問題解決を、セクシーに。 気候変動に立ち向かう。すべての声を一つにして。 楽しく、クールに、そしてセクシーに。 問題解決は苦しいだけではありません。 もっと肩の力を抜いて。...

            • 顔と出自はいいんだから官僚の原稿通り喋っときゃいいのになあ

              • 知性と教養がゼロなんだからどうにもならん。出自がいいとか、二世タレントと同じだろ。

            • ホントに進次郎くんは政治家じゃなくて電通とかその周辺に就職すべきだったよお腹痛い

              • あんなF欄卒業していては、高給が保証される民間には入社できん。あ、でも安倍はあのポンコツ頭脳で神戸製鋼に就職したんだっけ?

                • いや進次郎みたいなやつこそ虚業に従事するべきなんだわ 見た目とハッタリとコネだけで生きていける広告業界こそ進次郎の天職でしょ

                  • それを行ったら小池都知事だってカタカナ語多用して聞き手に何か言ってる演出するだけで、実は何も言ってない空虚の塊だしな。 水素水の営業とかいいんじゃないの?進次郎には。

            • 少子化はセックスすれば解決するからセーフ

            • アップル口調だと妙に説得力あるな 30年後の自分とかじっくり考えてしまった

            • 三番煎じでもまだいけるな

            • こんなバカを税金で養っていると思うと本当やりきれない。 日々増税で苦しんでいるのがバカみたいだ。 生活保護党、自民党死ね!!!!!!!!!!!!!!!!!!!!!!!!!...

            • 古谷一行「SEXY、スプリンター!!」 ムッスコ「おぅ親父ぃ、ダチ集めてウチで『古谷一行杯麻雀大会』オールでやるからよぉ、ツラ出してくれや!」

            • クソダサ二番煎じのクソダサ村じゃん キモ 何歳までスベり続けんだよ

            • クドくてあんまり面白くなかったけど 30年後の自分は何歳ですか?はよかった

            • 追記も芸が細かい

          • 今年も楽しませてもらいました 来年もはてながあきれるほどクソマスを産み出していきましょう

          • ノンフィクションだと「動画でたどる生ハムと焼うどん」が良かった anond:20210814104642

          • リンク 【2021年度】  2021匿名ダイアリーTOP200 増田文学 2021年 ランキング 順位 ブクマ タイトル 201 666 美味い素麺なんか食うんじゃなかった 202 665 お前は危険物甲...

        • リンク 2021年度 匿名ダイアリーTOP250 2021年度 匿名ダイアリーTOP251-500 ランキング 順位 ブクマ タイトル 1 2558 当たり屋対策の集合知 2 2336 洪水被害にあったらやる...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん