タグ

オブジェクト指向に関するmohnoのブックマーク (41)

  • オブジェクト指向宗教史

    OOC 2024 の発表資料です。後のフィードバックを参考に、より妥当な文言に改訂してあります。 ※ コンテンツには、一部特定の宗教思想の迫害に言及する表現がございますが、そのような行いを肯定する意図の内容ではございません。

    オブジェクト指向宗教史
    mohno
    mohno 2024/03/25
    なにこれ。あなたのオブジェクト指向はどこから?みたいな話かな(私はC++)/いまさらAlan KayとかSmalltalkとか言われてもその流れはもうないよね。「あーはいはい また宗教な」
  • オブジェクト指向は必要なのか / Is object-oriented needed?

    2024/3/24に開催されたObject-Oriented Conferenceでの登壇資料です。 https://ooc.dev/2024/

    オブジェクト指向は必要なのか / Is object-oriented needed?
    mohno
    mohno 2024/03/25
    だってフレームワーク使うよね、とは思うけど「初心者に「オブジェクト指向」は不要」←それが C# のトップレベルステートメントなんだろうな。VB開発者はイベントハンドラという形で継承を実装していたようなものだし
  • 継承はなんでダメ? - まめめも

    「オブジェクト指向の継承を使うな」という主張が広まっているようです。なんでダメになったんでしょうか。 インターネットで見かけた「継承はダメ」という主張をいくつか眺めて、友人と議論しつつ、考えてみました。 「コードが読みにくくなる」 継承があると、メソッド呼び出しが実際にどのメソッド定義を呼び出すのか字面でわからない。 デバッガを使って、親クラスのメソッドに飛んだり、子クラスに飛んだりするのを追いかけないと行けない。 つらい。という主張。 めっちゃわかる。わかるんですが、これは「高度に共通化されたコードは読みにくい」という一般的な側面がかなり大きいような。 たとえば継承の代わりに高階関数を使うと、関数呼び出しがどのクロージャに飛ぶか字面でわからなくなる。 ひどいとコールバック地獄になって何が何やらになります。 継承がことさらにまずい理由を想像すると、すべてのメソッド呼び出しがポリモーフィック

    継承はなんでダメ? - まめめも
    mohno
    mohno 2024/02/10
    継承というかクラスは使い始めると逃げられなくなるので雑な作りだと全体の品質に影響するけど(だから安易に継承使うな)、よくできたクラスは役に立つし、みんなフレームワーク使ってるよね。
  • 時代がstaticおじさんに追いついてきた(追記あり) - きしだのHatena

    この文章みてください。 オレはもう20年以上システム業界にいるけどな、その長い経験から言うと、オブジェクト指向なんてものは、理論としては面白いけど、およそ実用的とは言い難いものだな。まぁ、例えばGUIのコンポーネントとかはオブジェクト指向に基づいて作られているようだから、そういうツールとかを作る人には必要なものなのかもしれない。しかし君たちがいずれ作ることになる業務アルゴリズムにはまったく無縁のものだと思ってもらって間違いない。どうもこの業界、オブジェクト指向でなければダメ、というような風潮がまかりとおっているけどな、オブジェクト指向なんか当に使っている人はほとんどいないよ。オレも少し勉強してみたけど、カプセル化とかポリ何とかとか、どうにも利点が理解できなかったね。実際、実業務で使ったことなどないしな…… 「またお前、オブジェクト指向の話をしてるのか」と思ったかもしれませんが、2010年

    時代がstaticおじさんに追いついてきた(追記あり) - きしだのHatena
    mohno
    mohno 2024/02/08
    「オブジェクト指向」←なんつーか、フィボナッチ数列には要らんだろうけど(むしろ再帰すら使わん)、業務アプリの開発には必要というか、普通にフレームワーク使うよね。
  • 【C#】SOLID原則を学ぼう - Annulus Games

    今回の記事はオブジェクト指向プログラミングにおける設計の基、「SOLID原則」について。 ある程度プログラミングの文法を知っていれば、動作するコードを書くことは可能です。しかし、より良いコードを書きたいのであれば、文法の知識だけではなく、設計に関する知識も必要になってきます。 特にUnityでは、適当にコードを書いていくと目も当てられないようなスパゲッティーコードが容易に出来上がります。「とりあえずシングルトンにすりゃいいや!」みたいなノリで「何とかManager」クラスを作りまくった結果、「あれ?この処理どこに書いたんだっけ?」という状況になったこと、誰しも一度はありますよね…? 今回は、そんなクソk…良くないコードを書かないための設計原則である「SOLID原則」について紹介します。記事内のコードはC#で記述しますが、言語に関わらずSOLID原則は広く応用の効く考え方なので、是非とも覚

    mohno
    mohno 2023/05/28
    「こんなクソデカクラスは破壊してバラしてしまいましょう」←久々に見たな。「SOLID原則」というのか。たとえC#を使っていても、こういう現場には行きたくない。/Square is a Rectangle が成立しないのも嫌い。
  • Java 20, 21, オブジェクト指向からデータ指向へ / Java20, 21, Object Oriented to Data Oriented

    2023/5/10(水)に開催されたTechFeed Experts Night#18での登壇資料です。 https://techfeed.io/events/techfeed-experts-night-18

    Java 20, 21, オブジェクト指向からデータ指向へ / Java20, 21, Object Oriented to Data Oriented
    mohno
    mohno 2023/05/12
    “オブジェクト指向からデータ指向”←意味が分からなかったが "Java 20" の話らしく、Oracle がそういう表現をしているのかな。/なんか C# で見たような拡張が。/ってか、Javaも積極的に拡張するようになったんだなあ。
  • オブジェクト指向はコードを複雑に読みにくくする - きしだのHatena

    「オブジェクト指向するとプログラムが読めなくなるから禁止」のような話は昔からあって、新しい技術についてこれない人を揶揄するようなニュアンスで使われていましたが、実際にはこれはオブジェクト指向迷路にうんざりした現場での率直な意見だと思います。 オブジェクト指向は、まじめにやるほどプログラムを読みにくくするという性質をもっています。 ※ 使い方次第というコメントついてますが、だからこそちゃんと性質をしっておく必要があると思います。 オブジェクト指向の代表的な指針を3つあげると次のようなものがあります。 オブジェクト同士の連携としてプログラムを組む 単一責務の原則 インタフェースと実装の分離 まず、オブジェクト同士の連携でプログラムを組むと、コードが飛びまくって追いにくくなります。そして単一責務の原則により、小さいクラスが大量に生成されて、追いにくさがさらにあがっていきます。 ダイクストラ先生が

    オブジェクト指向はコードを複雑に読みにくくする - きしだのHatena
    mohno
    mohno 2023/02/25
    “オブジェクト指向を禁止”っていう人、それでどうしろっていうの? 関数ライブラリにしろと言ってるの?/技量もないくせにクラスライブラリを書くな、という話なら分からんでもないが。
  • 2021年の「オブジェクト指向」を考える

    きしださんが先日もたのしいお題を投下されていました。 出遅れましたがこのネタについて少し掘り下げてみます。 念のため個人的なスタンスをあらかじめ表明しておくと、オブジェクト指向に対してはそれなりに好意的ですが、別に時代の最先端だとかソフトウェア開発に必須の知識というほどではない(でも知っておくと便利というか、知らないと不便なこともあるかもしれないのでわざわざ避けるのはおすすめしない)というくらい温度感です。 オブジェクト指向 is 何 そもそも「オブジェクト指向」という言葉自体、座りの悪い言葉です。 意味が明確なのは「オブジェクト指向プログラミング(OOP)」、「オブジェクト指向プログラミング言語(OOPL)」、「オブジェクト指向設計(OOD)」「オブジェクト指向分析(OOA)」といった「オブジェクト指向なんとか」の方で、それらをふわっとまとめた(ような気がする)単語が「オブジェクト指向」

    2021年の「オブジェクト指向」を考える
    mohno
    mohno 2021/10/10
    「Algorithms + Data Structures = Programs」という手続き型言語の時代からやってきてると「Algorithms + Data Structures = Objects」(いわゆるカプセル化)が基本なんよ。それがプログラム間になればサービス指向とかDIとかいう話になる。
  • オブジェクト指向はすでに粒度が時代にあっていない - きしだのHatena

    定期的にオブジェクト指向disを書いてしまってるのだけど。 とりあえずオブジェクト指向の話をすると定義が人によって違いすぎるので、改めてここでの定義を書いておくと 、基的にはOMTの「データ構造と振る舞いが一体となったオブジェクトの集まりとしてソフトウェアを組織化すること」 に従うのですが 「1990年に流行りソフトウェア開発のすべてを飲み込み、いまとなっては人それぞれ定義が違って技術的議論に使えなくなった、主にオブジェクトを基単位としてプログラムを整理するやりかたを指すマーケティング用語」 という感じです。 ほとんどの場合で人によってオブジェクト指向の指す範囲が違いすぎて、技術的知見の共有には使えなくなっています。でも、いずれの定義にしろオブジェクトを基単位にするというのは重要ではないかと。 ソフトウェアの組織化の単位としてオブジェクトを使うというのが大事で、データの搬送に構造体代

    オブジェクト指向はすでに粒度が時代にあっていない - きしだのHatena
    mohno
    mohno 2021/09/25
    「ソフトウェアの部品を組織をまたがって再利用する方法としてはWeb APIが主流」←その分野に詳しくないけど、Web APIを何で作るの?オブジェクト指向を使わないってC++じゃなくCを使う、みたいに受け取れちゃうんだけど。
  • オブジェクト指向がわからないあなたへ

    どうも、都内の某企業に勤めるフルスタックエンジニアです。この記事では、ITの非専門家に向けて、オブジェクト指向の解説をしたいと思います。 小学生のプログラミング教育が開始されたり、AIやIoTなどの技術が身近になった今日、オブジェクト指向を理解しておくことは極めて重要です。なぜならば、オブジェクト指向はITエンジニアとっての「共通言語」であって、今やあらゆるソフトウェア技術がオブジェクト指向の上に成り立っているからです。したがって、オブジェクト指向を理解すれば、ITのすべての分野の基礎が身についたことになります。難しい概念がいくつか出てきますが、分かりやすく解説するので頑張ってついてきて下さい! オブジェクト指向とはまず、オブジェクト指向とは何かを解説します。オブジェクト(object)とは、「モノ」のことです。言い換えれば「モノ指向」です。つまり、コンピュータのようなバーチャルな対象では

    オブジェクト指向がわからないあなたへ
    mohno
    mohno 2021/04/21
    どこからツッコめばと思ったら……↓うわぁ、はてブで気付いた。「全部うそ」
  • 学生の頃オブジェクト指向にハマって継承を繰り返していた後輩が泣きついてきた時にあの人が現れて解決した話

    垂木いすゞ @Isuzu_T このアカウントは誰向きでもありません。発言を読んだことに起因する不快感に関して当アカウントは責任を負いかねます。フォロー・リムーブ・リプライはご自由に。挨拶不要。反応するかは気分次第です。このアカウントはエロ、愚痴、政治、アニメ実況、不謹慎ジョーク、その他一切の言動を自重しません。サイバーイグアナ氏フォロー中 垂木いすゞ @Isuzu_T 学生の頃の話だ。 当時、僕が所属していたプログラミングサークルの後輩が、オブジェクト指向にはまっていた。僕はオブジェクト指向がなんなのかよくわからず、構造体に毛の生えたような使い方しかしていなかったのだが、後輩は継承にドハマリし、あらゆるコードで継承を使っていた。 2021-02-23 17:07:05 垂木いすゞ @Isuzu_T 「継承って使いすぎると良くないって聞くけどね」 僕はそう言ったが、聞き齧りなので理由は説明で

    学生の頃オブジェクト指向にハマって継承を繰り返していた後輩が泣きついてきた時にあの人が現れて解決した話
    mohno
    mohno 2021/02/25
    「寺生まれのTさん」を知らなかったが、かつてクラスやメソッドをやたら細分化しようとしていた人がいたのを思い出した→https://www.slideshare.net/MoriharuOhzu/ss-14083300
  • 2000年代オブジェクト指向は絶対の正義だった。つまり僕は洗脳を経験している - レベルエンター山本大のブログ

    私がIT業界の片隅に所属をし始めた2000年ごろ、Javaエンジニアはスーパースターだった。Javaエンジニアを名乗るということは、秘奥義オブジェクト指向を習得していることに他ならないからだ。 「オブジェクト指向こそ正義」だった。 Javaとオブジェクト指向を身につければ、20年はっていけると言われたものだった。 あれから20年。たしかにJavaとオブジェクト指向で20年はえた。が、もはやオブジェクト指向は絶対でも正義でもない。 僕は、IT講師として新入社員にJavaを教える仕事もしているが「オブジェクト指向こそ正義」と無垢な生徒達に教えなければならない時に、苦痛を覚えるようにすらなってしまった。 2000年代から、新人教育のテキストは変わっていない。継承は積極的に使っていくべきで、オブジェクトは現実世界を模した仮想現実世界をコンピューター内に生み出す技術とされている。Strutsだけ

    2000年代オブジェクト指向は絶対の正義だった。つまり僕は洗脳を経験している - レベルエンター山本大のブログ
    mohno
    mohno 2021/02/14
    下手な人がクラスを作ると関数ライブラリみたいな潰しがきかなくなるとか、イベントハンドラの定義も継承みたいなものだとか、適切な使い方は熟練度によって変わるという話は90年代からあったけどなあ。
  • 継承は禁止するべき

    キチガイに刃物、ゴミプログラマに継承。危険なものは取り上げるべきだ。 オブジェクト指向プログラミングにおける継承は強力な手法であるが、これを正しく使えるプログラマは残念なことに極めて少ない。たいていの場合、継承を使うことで却ってプログラムの保守を困難にしてしまう。継承のアンチパターンの最たるものは、単なるメソッドやメンバ変数の共有のために継承を使うパターンだ。これを行うとデータが密結合になってバグの原因になり、プログラムを把握することも極めて困難になる。 そもそも、熟達したプログラマの感覚では、業務で書くアプリケーションの実装に継承を使うべき局面などほとんど無い。ライブラリ等のより低レベルな処理で仕様が確定しているものについては、継承が効果的となる場合もあるが、複雑なアプリケーションのロジックに継承を使うのはほとんどの場合、時期尚早な抽象化となる。 また、凡庸なプログラマが継承で実現したい

    継承は禁止するべき
    mohno
    mohno 2020/10/22
    そりゃ「継承」イコール「新しいクラスを作る」だから、熟練してない人が作ると悲惨なことになるだろうね。いわゆるビジュアル開発ツールは、継承させつつも、そのトラブルを回避させている、ともいえる。
  • 2020年の開発者が知っておくべき11の必須スキル - Qiita

    以下はjavinpaul( Webサイト / Twitter / Facebook / dev.to )による記事、11 Essential Skills Software Developers should Learn in 2020の日語訳です。 なおリンク先URLは元記事のままであり、和訳にあたり変更などは行っていません。 11 Essential Skills Software Developers should Learn in 2020 注意事項:この記事にはアフィリエイトリンクが含まれています。 この記事に記載されているリンクを踏んで製品やサービスを購入すると、私が利益を受けとることがあります。 ソフトウェア開発を始めてしばらくすると、優れたプログラマになるには何をすればいいのかという考えが時によぎるでしょう。 より良い開発者になるために、2020年には何を学ぶべきでしょう

    2020年の開発者が知っておくべき11の必須スキル - Qiita
    mohno
    mohno 2020/01/21
    序盤、最近は大変だよねぇ、と思ったが、後半になるにしたがってレガシーな感じがあってホッとする(←オイ)。というか「C++(というかC)はポインタが理解できずに死んだ」←オイ。
  • <5> (標準) Pascal へのオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) - Qiita

    <5> (標準) Pascal へのオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) 5. (標準) Pascal へのオブジェクト指向拡張 1993 年の (標準)Pascal へのオブジェクト指向拡張はドラフトのまま放置されました。 Object-Oriented Extensions to Pascal (1993) 余談ですが、このドラフトには 『J&W』改訂者のジム・F.マイナー氏や、Apple のカート・J.シュマッカー氏、Borland のデビッド・インターシモーヌ氏が参加しています。 5.1. ドラフトのオブジェクト指向拡張案 クラス型は型宣言部 (type) にて "型名 = class (親クラス) ~ end;" として定義します。 3.1.1. クラス型の定義 次のようにしてクラスを定義できるようです。 ドラフトでのクラスをざっ

    <5> (標準) Pascal へのオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) - Qiita
    mohno
    mohno 2019/12/10
    「多重継承可能」←C++風Pascalをめざしたのかなあ。多重継承なんて、(OWL5以外)C++でも使ってるのを見たことないんだが。
  • <4> Turbo Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) - Qiita

    <4> Turbo Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) 4. Turbo Pascal のオブジェクト指向拡張 Borland は 1989 年の Turbo Pascal バージョン 5.5 において、オブジェクト指向拡張を取り入れました。自社の Pascal に対して行った最初のオブジェクト指向拡張です。 これが Delphi に繋がる (Borland の) Object Pascal の始まりとなるのですが、Borland 自身はこの拡張を Object Pascal とは呼んでいません。オブジェクト指向拡張を強調する文脈では Pascal with Objects と呼んでいました 1。 Turbo Pascal 5.5 のオブジェクト指向拡張は 1985 年にラリー・テスラーが書いた "Object Pasca

    <4> Turbo Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) - Qiita
    mohno
    mohno 2019/12/06
    「Borland は 1989 年の Turbo Pascal バージョン 5.5 において、オブジェクト指向拡張を取り入れました」←なんでオブジェクト指向なんて大事な拡張したバージョンが「0.5」増えるだけなんだよ、って言われたなあ。
  • オブジェクト指向とは何ですか?

    回答 (8件中の1件目) 英語では「object-oriented」で「OO」と略され、1960~1980年代のプログラミング手法(OOP)から始まり、その応用としてソフトウエアの設計・分析の手法(OOD/OOA)、近年はユーザーインターフェース・エクスペリエンスのデザイン(OOUI/OOUX)、オブジェクト指向存在論(OOO)なる哲学分野にまで、広く使われる用語です。ここではOOPについて説明を試みます。 オブジェクト指向の「オブジェクト」は、1967年に発表されたSimula 67 [1] というプログラミング言語に組み込まれた当時としては新しい同名の言語機能(あるいはそれに準ずる...

    オブジェクト指向とは何ですか?
    mohno
    mohno 2019/02/17
    ②は①のメッセージを仮想関数という“Cの延長線っぽい”手段で実装してるだけで大きな括りで違いはないと思うんだけどな。まあ、WndProcだってメッセージングの実装という見方はあるだろうけれど。
  • オブジェクト指向にメリットなんて存在しない|古都こと|note

    最近の新人は勉強熱心だ。新しく聞いた概念を貪欲に取り入れようとする様は、はたから眺めていても感心する。私なんて10年前に得た知識でなんとかごまかしごまかし生きているというのに。 もちろん様々な場面で「躓き」は発生する。有名どころではポインタや非同期処理が初心者キラーだ。そして一番の初見殺しは……オブジェクト指向だ。 オブジェクト指向に殺されたプログラマは数知れない。新人からベテランまで、たいてい皆殺しにされている。 なぜそれほどまでに多くのプログラマを混乱させるのだろう。やネットではオブジェクト指向の数々の多大なメリットが列挙されており、実に素晴らしいパラダイムに思える。しかし教通りに組んでみてもどうにもしっくりこない。当に自分はオブジェクト指向のメリットを享受できているのだろうか? 種明かしをしよう。実はそれらメリットとやらは全部全くの嘘で、オブジェクト指向にメリットなんてものは存

    オブジェクト指向にメリットなんて存在しない|古都こと|note
    mohno
    mohno 2019/01/01
    「工作機械がなくてもノコギリとカナヅチがあればいいだろ」みたいな感じがあるなあ。それでいい場面があるのは事実だが、マルチパラダイムって、普通にオブジェクト指向が含まれてるよね。
  • お前は絶望的にプログラミングに向いてないから諦めて刺身にタンポポ乗せる仕事でもやってろ|古都こと|note

    刺身にタンポポ乗せる仕事ってきょうび言わねーな……。 プログラミングとは、勉強も運動もスマブラも下手なクソ隠キャ中学生が「俺もパソコン1台で凄い技術者になって…!」とワクワクしながら始めるものの思ったより普通に難しいし学校の試験で出たような知識要求されるしで3日で放り投げ、10数年後にnoteで「お前らは絶望的にプログラミングに向いてないからやめろ」なんて記事を書くだけのザコに成り下がる、夢と希望に溢れた技術である。 近年ではパソコンのスペックの上昇にともないできることも増え、どこのご家庭にもあるRTX2080で簡単にディープラーニングもできるようになった。Unityで3Dゲームをバリバリ動かしてもブルースクリーンは出ない。やっぱ世界を広げるのは小賢しい知恵よりもスペックの暴力だぜ。 開発環境や言語も選択肢豊富で、エディタもかつては有料クラスでも手に入らなかったような贅沢な機能が満載のもの

    お前は絶望的にプログラミングに向いてないから諦めて刺身にタンポポ乗せる仕事でもやってろ|古都こと|note
    mohno
    mohno 2019/01/01
    「刺身にタンポポ乗せる仕事」←素で知らなくて「あれは食用菊ですよ」と突っ込んだ思い出が。「dist = distribution」というコメントを見て驚いてる。「プログラミング以前の「何か」」←とりあえずタイピング。
  • Introducing Inline Variables in the Delphi Language

    The Delphi language in 10.3 has a fairly core change in the way it allows far more flexibility in the declaration of local variables, their scope and lifetime. This is a change that breaks a key tenet of the original Pascal language, but offers a significant number of advantages, reducing unneeded code in several cases. Old Style Var Blocks Since Turbo Pascal 1 and until now, following classic Pas

    Introducing Inline Variables in the Delphi Language
    mohno
    mohno 2018/10/30
    "Inline Variables" ←おお、とうとう実装したか:-D っていうか TDictionary って Free しなくていいんだっけ?(何も覚えていない^_^;)