タグ

OOPに関するatsushifxのブックマーク (40)

  • Enumとてもつらい、でも負けない - エムスリーテックブログ

    列挙型、JavaでいうならEnum型、使っていますか。使わないわけにいきませんよね。 でも、Enumを使っていたせいで辛い目にあったことありませんか。ないですか。それならきっともうすぐに辛い目にあうと思います。 Enumはすべてのプログラマに等しく辛みを与えてくれるからです。そんな辛みについて、ちょっと一緒に直視してみましょう。 エムスリーエンジニアリンググループ、Unit1(製薬企業向けプラットフォームチーム)三浦(@yuba@reax.work) [記事一覧 ]がお送りいたします、エムスリー Advent Calendar 2023の6日目です。 アプリケーションプログラミング上の辛み 1. 既存のif文が偶発的に意図しない方に倒れる 2. switch文に至っては「どちらでもない」で処理不発に アプリケーションプログラミング上の対策 1. 分岐条件をEnumに持たせる 2. swi

    Enumとてもつらい、でも負けない - エムスリーテックブログ
    atsushifx
    atsushifx 2023/12/06
    そもそもデータ構造がかわってくるわけで・・・。とてもつらい
  • ドメイン固有型(値オブジェクト含む)を再考する - かとじゅんの技術日誌

    Value Objectが盛り上がっているらしい。 Value Objectについて整理しよう - Software Transactional Memo Value Objectの説明に異論がないものの、主題はValue Object Obsessionのほうですよね。 こちらも聞いてみた。 fukabori.fm よい機会なので、よくわかっているつもりの、値オブジェクトというかドメイン固有型について再考してみよう。 それは値か属性か それはエンティティの全メンバーやデータベースの全列のために「顧客郵便番号」「送付先郵便番号」「事業所郵便番号」「契約日」などのクラス(メンバではなくクラス!)を定義して、immutableな振る舞いを強制する事を以てValue Objectであると言い張り、ドメイン知識の断片をそれぞれのクラスに書き散らして「高凝集になった」「型システムが守ってくれる」と喜

    ドメイン固有型(値オブジェクト含む)を再考する - かとじゅんの技術日誌
    atsushifx
    atsushifx 2022/05/17
    「良いコード/悪いコードで学ぶ設計入門」が何でも値オブジェクトって感じに読めるけど、Java言語による例のためかも
  • Value Objectについて整理しよう - Software Transactional Memo

    Value Objectとは何であるか? マーチン・ファウラーのPatterns of Enterprise Application Architecture(PofEAA)やエヴァンス・エリックのDomain Driven Design: Tackling Complexity in the Heart of Software(DDD)が原典であるが、PofEAAではこう切り出している。 When programming, I often find it's useful to represent things as a compound. プログラミング時は物をcompound(合成物)として表現すると便利なことがしばしばある。 例えば2次元空間上での座標のように複数のメンバ(属性)を持つ物は便利である、と。しかしそれらを比較する方法は一意ではない、そこで Objects that a

    Value Objectについて整理しよう - Software Transactional Memo
  • オブジェクト思考と「間」の概念 - 西尾泰和のScrapbox

  • 2021年の「オブジェクト指向」を考える

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

    2021年の「オブジェクト指向」を考える
    atsushifx
    atsushifx 2021/10/09
    オブジェクト指向の概要をうまくまとめたやつ。議論をするつもりなら、抑えておきたい。/自分はカプセル化、情報隠蔽、メッセージ指向がオブジェクト指向だとおもっている
  • オブジェクト指向が5000%理解できる記事

    前書き 結論から。 オブジェクト指向とは、現実世界を正しく捉えることです。 オブジェクト指向、全然むずかしくないんですけど、悩んでる人多いですね。この記事を読めば絶対に分かるようになるので、ゆっくり読んでみてください。 想定読者は今まさにオブジェクト指向に苦戦している人たちです。 オブジェクト指向ができた背景とかオブジェクト指向のメリットとかそういうのはググればいくらでも出てくるので、この記事ではオブジェクト指向の質的なコンセプトにのみ焦点を当てています。 あたまでっかちな説明ばかりで分かりにくかったオブジェクト指向が、5分でサクッと理解できる内容になっています。お楽しみに! 目次 理論編 オブジェクト クラス プロパティ メソッド メッセージング 実践編 まとめ おまけ 継承 ポリモフィズム コンストラクタ カプセル化 理論編 むずかしく考えないでくださいね。オブジェクトとは、物です。

    オブジェクト指向が5000%理解できる記事
    atsushifx
    atsushifx 2018/09/26
    記法だけの説明で、肝心のカプセル化などの話が全くない。
  • 単一責任の原則(SRP)についての見解と方法論 - FLINTERS Engineer's Blog

    こんにちは@kimutyamです。 今週末はいよいよScalaMatsuri2017ですね。 弊社は、今年も将軍スポンサーとして参加させていただきます。 そして今年も同人誌を配布させていただきます。 同人誌については去年配布した話を杉谷がブログで紹介しております。 labs.septeni.co.jp 今年の同人誌目次は以下となります。 ScalaAndroidアプリ開発 単一責任の原則(SRP)についての見解と方法論 末尾再帰の呼び出し最適化の有無によるScalaコンパイラの挙動について Akka HTTP で LINE bot を作ってみました 新卒scalaエンジニアが書くISUCONの歩き方 去年に比べて記事数は少なめですが、内容は濃くなっております。 ちなみに私は弊社の今泉と一緒に『単一責任の原則(SRP)についての見解と方法論』を執筆しました。 (Scala関係ないw) 代わ

    単一責任の原則(SRP)についての見解と方法論 - FLINTERS Engineer's Blog
  • プログラミング。好きだけど、さようなら。

    追記(2015 5/20) 洋屋にジョブチェンジを果たしました。 --- 1年の間、プログラマとして働いていたが、続けていくことが無理だと思い、さようならする話。 プログラマになる前は、コーヒー屋で働いていた。しかし、色々とあり辞め、職業訓練校に通ってプログラミング(php)を学び、60人ほどのソフトウェア開発会社に就職した。 会社に入ると、まずC#の研修があった。研修と言っても、C#で内製ツールを独りで作るという研修だった。この研修中に「あれ、オレ、プログラム書けねー」と思ったりしたが、研修は終えることができたし、社内の人にも「なかなか良く出来ている」と言ってもらえ、大丈夫だろうと思っていた。 研修が終わり、C#の社内で実際に使われているツールに、機能をいくつか追加する仕事を振られた。前任者にどんな設計になっているのか大雑把に聞き、なんとなくイメージができ、コードを読み始めたのだが、こ

    プログラミング。好きだけど、さようなら。
    atsushifx
    atsushifx 2016/04/23
    資質はあるし技術力はあるんだろうけど、オブジェクト指向への違和感がぬぐえないいじょう、現状のプログラマーには向いていないとしかいえない
  • 継承はメソッドを使いまわすためにあるのでない - 超ウィザード級ハッカーのたのしみ

    まだまだオブジェクト指向を極めたわけではないのですが、最近気になったこと。 オブジェクト指向の継承はメソッドを使いまわすためにあるのではないということです。 Fooというクラスがあって、BarというクラスがFooを継承(inherit)しているとする。つまり、Bar is a Fooとなっている。 このとき、Barに求められるのは、Fooと同じメソッドを持つということだけではない。メソッドの動作は変えても良いが、意味は変えてはならない。プログラム内でFooクラスを使っているところをBarに置き換えても、Fooを使っているつもりで動作しなければならない。 これを守ろうと思ったら、継承はむやみにできなくなると思うです。 ただメソッドを使いまわしたいだけなら継承ではなくて、委譲(delegate)をするべきなのです。例えば、Fooを継承したBarというクラスがあったとして、他にFooを継承したク

    継承はメソッドを使いまわすためにあるのでない - 超ウィザード級ハッカーのたのしみ
  • より良いプログラムを書くための究極の奇策 – 「Data first, not code first」 | POSTD

    (訳注:2015/10/31、いただいた翻訳フィードバックを元に記事を修正いたしました。) 開発者は嫌うでしょう。 ここでは、標準的なコツや策略について書きますが、当に興味があるのは、別のことです。究極の奇策を見つけたいと思います。策略をひとつずつ試して、プログラミングの聖域に少しでも近づければ良いのですが。 はじめに 私が初めて書いたビデオゲームは、 Ninja Wars (忍者戦争)でした。 そう、これは、画像で埋めたHTMLのtableです。 src 属性を変えることで、動きを実現しています。JavaScriptファイルの冒頭は下記のようになっています。 var x = 314; var y = 8; var prevy= 1; var prevx= 1; var prevsw= 0; var row= 304; var endrow= 142; var sword= 296; v

    より良いプログラムを書くための究極の奇策 – 「Data first, not code first」 | POSTD
    atsushifx
    atsushifx 2015/10/27
    オブジェクト指向はもともとパフォーマンスが良くないのでゲームプログラミングとは相性が悪い。今回の記事は昔からあるデータフロープログラミングとOOPを組み合わせた、モダンDFDと呼ぶべきもの
  • Nitlanguage.org

    # What is Nit? Nit is an expressive language with a script-like syntax, a friendly type-system and aims at elegance, simplicity and intuitiveness. So, what does the famous hello world program look like, in Nit? print "Hello, World!" # Development The Nit project is currently in alpha stage, at v0.8. It is in active development, moving fast and the APIs are still evolving. You can follow the develo

  • そのオブジェクト指向入門は間違っている(大げさ) - Webアプリエンジニア養成読本 AdventCalendar2014 25日目最終日! - uzullaがブログ

    はい、Webアプリエンジニア養成読 AdventCalendar2014です。突然トリをやる事になってしまったので、どうしたもんかとおもいます…。 「最終日だぞ…ちゃんとかかないといけない…しかしネタはない…そうだリンク集を作ろう!」とか思ったんですが、そもそもアドベントカレンダーってリンク集だよねって気付いて愕然としているクリスマスの夜です。現在朝の4時、これを書き終えて寝たい。 さて…何を話そう ここまでWebアプリエンジニア養成読アドベントカレンダーということで続けてきました。そして今日は25日、ついに最終日です! Webアプリエンジニア養成読 Advent Calendar 2014 - Qiita Webアプリエンジニア養成読[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus) 作者:和田 裕介,石田 絢一 (uz

    そのオブジェクト指向入門は間違っている(大げさ) - Webアプリエンジニア養成読本 AdventCalendar2014 25日目最終日! - uzullaがブログ
    atsushifx
    atsushifx 2014/12/26
    いろいろと突っ込みたいし、id:javablackさんが召還されそうだけどクリスマスだし辞めておく。OOPの本質はnamespaceの分割と抽象化だと思うけど、初心者プログラマーにいっても利点はすぐにはわからないよね
  • Refactoring Ruby with Monads

    Contents Introduction Stacks Collections Abstract data types Refactoring Handling nil Multiple results Asynchronous code Monads Conclusion Introduction Hello! I’m going to tell you about monads, and how we can uncover them by refactoring our Ruby code. The ideas in this article might be unfamiliar, so before we get stuck into the details, let’s warm our brains up with something simple. People alwa

  • if文の条件式の書き方あれこれ | GuildWorks Blog

    if文の条件式の書き方あれこれ | GuildWorks Blog
    atsushifx
    atsushifx 2014/09/23
    リファクタリングの典型例だけど、債務をどこに入れるべきかという話でもある。ServiceDateに入れるべきというのはあるけど、この場合enumを使ってその日がどの季節かというのがいい気がする
  • 関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考える - モナドとわたしとコモナド

    Googleで適当に検索すると とズラリと出てくる。 オブジェクト指向 v.s. 関数型プログラミング 関数型とオブジェクト指向という一見相反するプログラミングパラダイムの併用について理解した プログラマが知るべき97のこと/関数型プログラミングを学ぶことの重要性 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 関数型プログラミングとオブジェクト指向の抜き差しならない関係について整理して考える とそれなりに参考になりそうな情報はあるものの、無駄に複雑化されたオブジェクト指向をストローマンにするような記事ばかり(それだけ今までのオブジェクト指向にみんなうんざりさせられているのだろう)で、そろそろきちんと自分自身「関数型プログラミングとオブジェクト指向の切り離され方」についてはっきりさせておきたい、と考え、概念整理した結論を書きます。 まず端的な結論 結論を

    関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考える - モナドとわたしとコモナド
    atsushifx
    atsushifx 2014/09/22
    Haskellは純粋関数型言語だったっけ。それでOOPのオブジェクトが表現できるのなら、OOPは関数プログラミングのサブセットだといえる。関数型は関数自体を引数にできるから可能だということかな
  • 本当のオブジェクト指向は可読性を上げる

    Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成するIgaHironobu

    本当のオブジェクト指向は可読性を上げる
    atsushifx
    atsushifx 2014/07/31
    この一目でわかる名前付けが難しい上に抽象化という考え自体が難しい。あとはインターフェイスとなるメソッドの引数などの設計が難しい上になかなか変えられなかったりする。Code Completeをよんだりいいコードを読むこ
  • オブジェクト指向について - きしだのHatena

    参考までに、ぼくの基的な定義は、ランボーの「データ構造と振る舞いが一体となったオブジェクトの集まりとしてソフトウェアを組織化すること」という定義に従っています。そのようなオブジェクトが単体ではなく組織化されるということが重要です。オブジェクト指向を勉強するとはそのような組織化のしかたを勉強することだと考えています。 現在のシステムは、データはデータベースに格納され、振る舞いとは分離して管理されています。そのような中では、システムをオブジェクトの集まりとして組織化することはできません。 局所的にも、ステートレスを前提としたHTTPの処理では、オブジェクト組織の必要な局面はありません。 個別のオブジェクトの共通化に継承を使うという点では「クラスは単にユーザー定義型であり、継承は部分型と差分プログラミングを実現する仕組みだととらえる」だけで充分だと考えています。 そうしたシステムにオブジェクト

    オブジェクト指向について - きしだのHatena
    atsushifx
    atsushifx 2014/07/23
    スタンスを明確にしてくれてありがたい。というか、ランボーのオブジェクト指向で考えるとこうなるのはしかたない。DDD(ドメイン駆動設計)がOMTの後継なんだろうけどどっちも自分にはよくわからない
  • SwiftのArrayがヤバイ - Qiita

    (2015.11.18に追記) 「Swift List」 で検索するとこの投稿にたどり着いてしまいますが、関数型言語でいうところのリストをお求めの方は "Swiftでhead、tailにパターンマッチできる遅延リスト" を御覧下さい。 (2014.7.24に追記) SwiftのArrayの新仕様(beta 3以降)がヤバイどころかすばらしいのでまとめました 。 (2014.7.10に追記) SwiftのArrayがヤバくなくなりました。 投稿に書かれているのはbeta 2までの古いSwiftについての情報ですのでご注意下さい 。beta 3以降では次のような挙動となり、値型としてごく自然な挙動になりました。 var a = [11, 22, 33] var b = a a[0] = 777 // b[0]は777にならない a.append(44) a[0] = 888 // b[0]は

    SwiftのArrayがヤバイ - Qiita
    atsushifx
    atsushifx 2014/06/22
    AppleのSwiftだとArrayオブジェクトでDeep Copyが行われるという話。たぶん、副作用を起こさないためだろうだけどShallow Copyだと思い込んでいると足下をすくわれると
  • https://qiita.com/tokomakoma123/items/a33feffe947a958a2d3a

    atsushifx
    atsushifx 2014/06/16
    C++での抽象データ型の話が抜けてる。あと3条件にカプセル化と差分プログラミングが抜けたのがおもしろい。メッセージングとポリモーフィズムを使いこなせればOOPはすごく楽なんだけど技術力が必要だし、自分もまだま
  • 社内勉強会でオブジェクト指向についてLTしました | Nekoya press

    毎週定例の社内勉強会でオブジェクト指向の基礎についてLTしました。資料はやや加筆しています。 昨今、オブジェクト指向というとMVCとかデザインパターンみたいな発展的なトピックが目立つような気がしていて、もっと簡単に考えればいいのになーという思いからこういう話をしました。 凝集度を高める設計指針を出来るだけ平易な言葉で語ろうというのがコンセプトでした。 サンプルがいろいろ話をはしょりすぎで、改めて見るとちょっと違和感ありますね… 開発のバイトで来てくれてる学生の子たちに、こういう概念的な話を聞いてもらう機会って積極的に作らないとなかなかないので、そういう場を作っていくのもおっさんの役割なのかなーみたいなことを思ってます。

    atsushifx
    atsushifx 2014/01/12
    この例だと年齢確認オブジェクトとしてTASPOを導入したほうがわかりやすい気がする