はてなキーワード: メソッドとは
馬鹿に継承を扱わせると、仕事している感を醸し出すために継承を活用せざるを得ない。だから、継承はクソに見える。よって、増田の言いたいことはわかる。
しかし、冒頭で書いたとおり、多態を適切に扱うために継承は必要なのだ。これ以上は書けない。これからもクラスベースの 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 自体に罪はない。
これを継承、というか多態にあてはめてみよう。多態がないとどうなるか想像してくれ。とてもしんどいことになる。なぜなら...
(作者は眠たくなりました。続きが読みたかったら反応ください。)
半分同感。
おっしゃる通りFW上で開発してる限り意識すべきはオブジェクト指向ではない。
オブジェクト指向を勉強すると小さなクラスをnewして〜メッセージをやり取りして〜継承して〜ってなるが、クラスとはユーザーが定義する単なる「型」。継承は親からの差分。これだけで良い。
現場において向き合うべきはいかに最小限の変数やコード量で実現するかが重要ってこと。
付け焼き刃の知識でオブジェクト指向が〜というヤツに限って、無駄なクラスを作りまくったり無駄なメソッドや変数が多い。
コピペプログラマはOOPとか余計なこと考えずに素直にFWの恩恵に乗っかっていれば良い。
完全に正しい多段継承でテンプレートパターン使いすぎて使い勝手最悪のライブラリを見たことがあるのでリスコフが全てだとは思わないかな。
> AをラップしたクラスA'を作り、A'とBに同じインタフェースを実装する
なんで罵倒だけついて誰も教えてくれないんだ
クラス間でメソッドを共通化したいが、継承のように「置換可能性」を考慮したくない、というときのためにMixinやTraitがあるんじゃないのか
違うとしたらMixinやTraitは何のための機能なんだ
よし、お前の熱い気持ちしかと受け止めた。バズるのは時間帯が悪かったと思うので、次に投稿するときには夜ご飯ぐらいがいいよ。それでは添削してやろう。
継承はだめ、という主張はわかるぜ。継承のネストが深くなるとメンテナンス性が落ちるし、習い初めのバカは勝手にクラスを使うからな。これは同意する。
そう、昨今の業務では継承とか使わない方が良い。何故か?フレームワーク上でビジネスロジックを記載する時代だからだろ?でもな、そのフレームワーク自体はテンプレート・パターンといったパターンが満載で、アスペクト指向を介してログを排出しているのよね。まぁ、素人に継承を使わせるのはキチガイに刃物なのは事実だが、今という時代はフレームワークで刃物をラップできている時代だと思えば、悪くないと思うよ。うん。
リスコフの置換原則は、継承したメソッドは上下で型の変化を無くせ、というだけだろ?それは、ちょっと能力検定には弱いよね?SOLIDの原則について調べてみよう。
AにBを持たせる
class A { private B b; // 実装 }
interface IB { // Bのメソッド } class AWrapper implements IB { private A a; // 実装 } class B implements IB { // 実装 }
キチガイに刃物、ゴミプログラマに継承。危険なものは取り上げるべきだ。
オブジェクト指向プログラミングにおける継承は強力な手法であるが、これを正しく使えるプログラマは残念なことに極めて少ない。たいていの場合、継承を使うことで却ってプログラムの保守を困難にしてしまう。継承のアンチパターンの最たるものは、単なるメソッドやメンバ変数の共有のために継承を使うパターンだ。これを行うとデータが密結合になってバグの原因になり、プログラムを把握することも極めて困難になる。
そもそも、熟達したプログラマの感覚では、業務で書くアプリケーションの実装に継承を使うべき局面などほとんど無い。ライブラリ等のより低レベルな処理で仕様が確定しているものについては、継承が効果的となる場合もあるが、複雑なアプリケーションのロジックに継承を使うのはほとんどの場合、時期尚早な抽象化となる。
また、凡庸なプログラマが継承で実現したいと思うことは、ほとんどの言語でより適切な手段が存在する。
継承を誤って用いるプログラマが多いにも関わらず、実は継承の使い時ははっきりしている。以下は、一定水準のプログラマならば、誰でも答えられる質問である。これに答えられないプログラマは不勉強を恥じるべきである。
答えられない人、自分の答えが正解の内容と一致しているか即座に判断できない人は、継承を使うべきではない。医学知識ゼロの素人が外科手術をするようなものであり、非常識極まりない。
リスコフの置換原則は、オブジェクト指向の文脈で言えば、以下のようになる。
「Baseを基底クラス、DerivedをBaseの任意の派生クラスとするとき、Base型として生成されたオブジェクトをDerived型のオブジェクトに置き換えても問題なく振る舞うようにしなければならない」
ゴミプログラマが継承を使いたがる理由の99%は、以下である。
宿題を終わらせられない子供に「宿題は!」と怒鳴るだけってのは、親側に教育メソッドがないことが問題だと思っちゃうなぁ。
小2は大人じゃないんだから、理性で刺激から興味をそらして本来やるべきことに集中するほどの集中力なんてなくて当たり前だと思う。
大人だって隣でガンガンテレビの音してたら仕事の効率滅茶苦茶下がるでしょ。
まずはどうして宿題ができないのかを、叱るのではなく子供に寄り添ってヒアリングし、環境も含めコンサルティングして改善すべき。
親の方も仕事と家事で毎日疲れきっているのだからそういうことをする余裕なんかないよ、というのもわかるけど、子供にベターな家庭環境で育ってほしいならもう少し努力すべきだと思う。
このメソッドの良いところは内容に不満点があっても、なんでや阪神関係ないやろとか33-4と絡めておちゃらけたりとかできて殺伐としにくい点である。
近年、ブロガーが本を出版したのを境に言動や行動が変化することが多くなってる気がする。
何というか、発言が自己啓発臭くなり、本の内容を軸として露出が多くなる。
本を売りたいのだから仕方ない...というのは分かるけど、それでは説明が付かない変わり方というか、みんな1つの『型』にハマろうとする傾向があるように見える。
邪推すると、出版社にはブロガーをその気にさせる何らかの定番サクセスストーリーを持っていて、それにハマると出版社が用意した売れる本のメソッドに思想が最適化されてしまうのではないだろうか。
いま本業でお金に困ってなくても、文筆一本で飯を食う生き方に憧れるのは分かる。ブログとして成立する文書が必ずしも売れる書籍として成立する訳ではなく、何らかの最適化が必要な事もわかる。
でもそれは本当に自分の意思なのか、自分の意思だと出版社に信じ込まされ、書く内容に自ら制約をかけているんじゃないかと問いたい。
とある化粧品会社のTwitterを見ていたら「全国の眉メイク難民の方〜😂」という発信をしているのを見かけた。
確かにネット上では、好みのものや場所にめぐりあえないでいる人を「○○難民」と表現することは普通に行われてるし、表現として広く普及してるとは思う。
でも本来難民って、人権的に相当苦しい立場にいる人を指す言葉なはず。過去には難民の虐殺も発生しているし、言葉が指す意味は相当深刻なものだと思っている。そんな言葉を、曲がりなりにも多様性やらコンプライアンスやら言ってる大手企業がカジュアルに発信するってどうなんだろう、という気持ちになった。
「〇〇気違い」という表現をつかう企業が最早ありえないように、「〇〇難民」という言葉を企業がカジュアルに使うってのもありえないと思ってしまうんだけど、この気持ちって繊細チンピラなんだろうか。
同じように感じた人もいたらしくツイートで直接指摘してる人もいたのだけれど、企業側は「不快に思われたことを謝罪」というよく見るメソッドで逃げるだけで、ツイートの取り消しも行わないでいる。私には「気違い(基地外)」がNGで「難民」がOKな理由がよく分からないでいる。
もはや「ご飯論法」は単体では語れない感があるなぁ。権力者自身は「ご指摘は当たらない」「丁寧に説明していく」と逃げ回っている間に、メディアや SNS を通じて支持者達に真偽の不明な「疑惑」を代弁させて「敵が悪いのだから叩いて当然だ」「どっちもどっち」という世論を醸成して有耶無耶にする、という勝ちパターンが完全に確立している。
このメソッドが優れているのは、権力者自身は一切手を汚さずに政敵を叩き潰せるところだ。
これだけ同じパターンが何度も起きるということは、これは狙ってやっていると考えるべきだろう。代弁者たちの背後関係を洗いたいところだが、そう簡単に尻尾を出すようなやり方もしてないだろうしなぁ。