タグ

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

  • 継承はなんでダメ? - まめめも

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

    継承はなんでダメ? - まめめも
    ghostbass
    ghostbass 2024/02/10
    安直にやるとDerivedAとDerivedBの両方の特徴を持ってしまうSuperBaseが爆誕して修正不可能になる
  • 10年モノのサービスをアーキテクチャから再設計─はてなブックマークがScalaとDDDを使う理由 - エンジニアHub|Webエンジニアのキャリアを考える!

    10年モノのサービスをアーキテクチャから再設計─はてなブックマークがScalaとDDDを使う理由 10年以上運用されているサービスには、さまざまな技術的な負債が発生しています。今後の継続的な改善のため、いったん新規開発を止めて4年かけて全面的なリニューアルを実施した「はてなブックマーク」の開発者に、プロジェクトの課題や解決する手法などを聞きました。 改善1つに数カ月かかるなら全てを書き換えられないか 2000年代にトレンドだった開発手法の負債 過去の開発意図を探る考古学的手法 データセンター移行も見据えて刷新しよう ドメインモデル設計とScalaとマイクロサービス化 コアロジックにはScalaを採用 きちんとしたドメインモデルによる設計と実装を継続したい 段階的なリリースとデータの移行という2つの大きな課題 求められる機能に沿ったデータベーススキーマに再構築 新旧の2システムを維持しながら

    10年モノのサービスをアーキテクチャから再設計─はてなブックマークがScalaとDDDを使う理由 - エンジニアHub|Webエンジニアのキャリアを考える!
    ghostbass
    ghostbass 2020/01/01
    自前のフレームワークとかもう維持できないよん
  • オブジェクト指向がわからない! そんなあなたの脳味噌をオブジェクト脳にする準備体操

    オブジェクト指向で挫折しないために オブジェクト指向のプログラミング言語は当たり前の存在になり、たしかに目新しさはなくなりました。業務でオブジェクト指向のプログラミング言語が使っている方も多いと思います。 だとすれば、そもそもオブジェクト指向とはどういうもので、実際のプログラミングでどう役立つのか、特別に学ばなければならないようなものなのでしょうか。 考えてみてください。たとえRubyJavaを使えているとしても、オブジェクト指向プログラミングができているとは限らないのです。Rubyを学び、Railsを読んで自動生成されるコードを書き換えることはできても、自分でクラスを追加することができない方もいるかもしれません。 RubyJavaPythonといった個別の言語を学習すると、どうしてもその言語の特徴や機能を中心に学ぶことになります。オブジェクト指向は技術書を読む前提知識として扱わ

    オブジェクト指向がわからない! そんなあなたの脳味噌をオブジェクト脳にする準備体操
    ghostbass
    ghostbass 2018/12/17
    「オブジェクト指向は初期の関数型言語であるLispの影響を強く受けていて」?
  • 「オブジェクト指向とは、現実世界を正しく捉えること」という理解はデメリットのほうが大きい

    これは「オブジェクト指向」がよくわかってない人の書いたポエムである。 そういうのが嫌いな人はお帰りください。 はじめに リンクは貼らないが「オブジェクト指向の質とは現実を正しく捉えること」と書かれている記事(以下、元記事)がバズった。 私は正直「オブジェクト指向」の何たるかを理解しているとは言い難い。 しかし、そんな私でも元記事がいくつかの点でおかしい、もっと厳しくいうと開発現場に混乱をもたらす可能性を持っていることは理解できる。そこでこの記事では「オブジェクト指向とは〇〇である」という言及は行わずに、元記事の問題点を指摘するに留める。 長方形と正方形の例 オブジェクト指向プログラミングと現実世界の話というとBobおじさんが『アジャイルソフトウェア開発の奥義』に書いた正方形と長方形の話が有名だ。 話は簡単だ。「正方形クラスは長方形クラスを継承するべきか?」というものだ。 少しだけ詳しく見

    「オブジェクト指向とは、現実世界を正しく捉えること」という理解はデメリットのほうが大きい
    ghostbass
    ghostbass 2018/10/09
    代替同意/サンプルについて。そもそも現実世界なら正方形は長方形のsubtypeでなくspecial caseなのでモデリングが間違い。
  • 世の中で一番わかりやすいオブジェクト指向の説明 スティーブ・ジョブズの言葉 - ライフをハックしたい

    ghostbass
    ghostbass 2017/11/15
    まあ、そういう事ではあるけど、そこで終わると a1 = new A(), a2 = new A() としたらわからなくなる。
  • リポジトリ - Strategic Choice

    リポジトリ@オブジェクトリレーショナルメタデータマッピングパターン「仕様」を満たすデータ取得レイヤ。どういうこと?リポジトリは、ドメイン層とデータマッピング層を仲介し、ドメインオブジェクトに対してコレクションのようにアクセスできるインターフェースを提供します。リポジトリにより、クライアントは、「仕様」を満たすコレクションを、クエリオブジェクトやクライテリアを使用することなく、宣言的に取得することができます。どうすれば?リポジトリは、ドメインオブジェクトに対して、データマッパーの検索を隠蔽します。リポジトリは、内部的に『クエリーオブジェクト』を生成して検索を実行し、クライアントには単純な検索インターフェイスだけを公開します。どうして?データマッパーは、ドメインオブジェクトをデータベースアクセスコードから分離する「レイヤ」です。このよう構成の中で、クエリ部分を別途「レイヤ」化することには価値が

  • 単一責任の原則(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
  • Railsで大規模アプリケーションを正しく設計するために避けるべき3つの機能 - Qiita

    この記事はCrowdWorks Advent Calendar 2016 の24日目の記事です。CrowdWorksのエンジニアが毎日なにかを書きます。 昨日の記事は @suzan2go による「ラーメン屋で考えるRailsのデータモデリング」でした。 はじめに CrowdWorksは、2011年の創業以来、約5年間の開発を続けてきました。サービスの立ち上げ期においては、サービスの継続性・変更容易性を高めることよりも、サービスを成長させ、存続に繋がるフェースまで素早く立ち上げることが最重要な観点です。 一方で、サービス提供も5年が経過し、多くの方にご利用頂く「社会インフラ」に一歩ずつ近づいてきています。そういった環境の変化もあり、「日々改善し続ける」「日々変更し続ける」ことに重要視する観点が移り変わってきました。そのような価値観の変遷に取り組む過程で考えている「大規模で複雑な業務要件を担う

    Railsで大規模アプリケーションを正しく設計するために避けるべき3つの機能 - Qiita
  • Visitor パターン再考 - Qiita

    オブジェクト指向 Advent Calendar というものを見つけたので、Visitor パターンについて書いてみます。 嘘です Visitor パターンについて書きたいけれど、Java Advent Calendar は埋まってしまってるので、それっぽい Advent Calendar に参加しただけです。別に Advent Calendar に参加しないといけない決まりなんてないんですけど。 デザインパターン Visitor パターンとは、デザインパターンの一つです。 そもそもデザインパターンとは何かというと、1995 年に Gamma らが "Gang of Four"、俗にいう GoF で提唱した、オブジェクト指向プログラミングによって特定領域の問題を解決しようとする際に頻出するイディオムのようなものです。 GoF で提唱されたデザインパターンは多くありますが、1995 年に発表

    Visitor パターン再考 - Qiita
    ghostbass
    ghostbass 2015/12/24
    Linqっぽいのを作ろうとするとVisitorになるわけだがオリジナルはどうなんだろう
  • 【CakePHP】アソシエーションで迷ったらこう考えよう | ECWorks Blog

    CakePHPの機能でまず使ってみたくなるのが「アソシエーション」でしょう。アソシエーションはテーブルのJOINをもう少し概念的にしたもので、理解できるとクエリが格段にわかりやすく表現できます。 ところが、理解するまでに結構苦労してしまう事も確かです。そこで、実践的な部分も踏まえて、もう少しわかりやすい解説をしてみようと思います。 ■模範的な考え方 CakePHPマニュアル等でまず解説されているアソシエーションは、次の通りです。 hasOne (A hasOne B) Aは1つのBを持っている hasMany (A hasMany B) Aは複数のBを持っている belongsTo (B belongsTo A) BはAに従属している hasAndBelongsToMany(HABTM) (A HABTM B) AとBは複数のそれぞれを持っている 文章に書いただけでは分かりにくいいかもしれ

    ghostbass
    ghostbass 2015/02/27
    前半はよかったけど後半はなんだろう。Mtrって何? User belongsTo StatusにしてしまえばMtrとか要らないんじゃないの?
  • 優れたプログラムとは (2):気難しいプログラマ:エンジニアライフ

    前回の続きです。 ○モジュール設計 優れたプログラムは、極めて慎重にモジュール設計がなされています。機能ごとに分けられたコンポーネントや適切に階層化されたレイヤーは、なるべく互いに関係性を持たないように区切られています。 例えば、上位に位置する層はOSやRDBMSに直接アクセスすることはありませんし、逆に下位層がユーザーインターフェイスの変更に影響を受けることはありません。重要なのは、そのモジュールをいかに外部を意識しないように作るか、ということです。 参照する側の事情に左右されない独立性・汎用性が、設計のカギとなることでしょう。オブジェクト指向言語においては、これら論理構造上の区分けは、クラスの階層やJavaのpackageなどでより明示化された実装が可能となります。 ○疎結合性を阻害するスコープの問題 プログラム品質を決定づける大きな要因の一つがスコープです。スコープが広がれば広がるほ

    優れたプログラムとは (2):気難しいプログラマ:エンジニアライフ
  • Build seven good object-oriented habits in PHP

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    Build seven good object-oriented habits in PHP
    ghostbass
    ghostbass 2013/05/01
    publicなフィールドを使わずまったく同じアクセッサを作る意義は無いように思える。setName(...)に集約されるのならわからんでもない。
  • Phpではじめるオブジェクト指向(公開用)

    Frameworks We Live By: Design by day-to-day framework development: Multi-para...Atsuhiro Kubo

    Phpではじめるオブジェクト指向(公開用)
    ghostbass
    ghostbass 2012/09/21
    継承は微妙だしLoDは何それ状態
  • ドメイン駆動設計の概要

    目次 プラトン的モデル 言うべきことを言う コンテキスト 価値提案を把握する 単一責任システム エンティティは ID とライフサイクルを持つ 値オブジェクトは記述する 集計ルートによりエンティティを結合する ドメイン サービス モデルの主要な操作 リポジトリにより集計ルートを省略する データベースの関連事項 DDD の使用を開始する ドメイン駆動設計 (DDD) とは、洗練されたオブジェクト システムの設計に役立つ原則とパターンをまとめたものです。設計に DDD を適切に適用することで、ドメイン モデルと呼ばれるソフトウェア抽象化を実現できます。このモデルにより複雑なビジネス ロジックをカプセル化できるため、実際の業務とコードとの間に存在するギャップを小さくすることができます。 この記事では、DDD に関連する基的な概念と設計パターンについて解説します。機能豊富なドメイン モデルを設計し

    ドメイン駆動設計の概要
  • データ中心指向とオブジェクト指向

    オブジェクト指向プログラミングと対比されるものとして、手続き型のほかに、データ中心指向があります。データ中心指向は、大量のデータを扱う業務アプリケーションで適用される方法論で、機能や処理を中心に考えるのではなく、データを中心に考えていくアプローチです。機能や処理に比べてデータは不変であるため、データが重要な意味を持ってくる業務アプリケーションでは、この考え方が適しています。 オブジェクト指向との違いは何かというと、簡単に言えば、オブジェクトを中心に考えるか、データベースを中心に考えるかの違いです。 ドメインを中心に考えている点では、どちらも一緒です。ドメインとは、アプリケーションが解決しようとしている問題領域のことです。ドメインを明確にする際、モデルが作成されます。モデルは、その問題領域で扱うデータを構造化し、関連を明確にし、アプリケーションの質的な部分、骨子を明確にしていくものです。そ

    ghostbass
    ghostbass 2011/02/03
    ふむ、と思うところとおや?と思うところが混在。
  • Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート(その1) - 達人プログラマーを目指して

    昨日書いたSI業界(日)のJavaプログラマーにはオブジェクト指向より忍耐力が求められている? - 達人プログラマーを目指してが予想以上に大きな反響があり驚いています。特に、あの有名なひがさんにもSI業界の現状と未来に関してコメントをしていただきました。(SI業界からはさっさと抜けだしたほうがいい) ただし、SI業界の今後がどうかということや新しいサービスを使ったビジネスのことについては、私自身最先端技術に十分にキャッチアップできておらず、自分の考えを整理できていないため、一旦考えないことにして、ここでは例の試験問題の設計とリファクタリングについて考察してみたいと思います。具体的な例に基づいて説明することで、オブジェクト指向がSI業界の多くの方々に考えられているほど理解不能なものなのではなく、問題を単純化し、プログラムの保守性を桁違いに向上させるうえできわめて重要な役割を果たすということ

    Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート(その1) - 達人プログラマーを目指して
    ghostbass
    ghostbass 2011/01/12
    ステキ/オブジェクト指向の初級本に何が足らないかってやっぱり動くコードだよね
  • 第4回 オブジェクト指向の本質 | gihyo.jp

    エンジニアとして良い仕事をするために必要なこと ソフトウェア業界で日米を往復しながら仕事をしていると、世界中のさまざまなエンジニアに会う。私のように「プログラミングを心底楽しんでいる」人から、「⁠新3K」(⁠きつい・厳しい・帰れない)を身をもって体験している人までさまざまだが、共通して言えることは、エンジニアとしての基礎がしっかりできている人とできていない人では、その生産効率に大きな開きがあり、それが結果的には、会社での労働環境や待遇に、そして結果として自分自身にとっての「仕事の充実度」に、大きな影響を与えているということである。 いつも締め切りに追われている、毎回バグで苦しんでいる、徹夜の連続で体力に限界がきているなど、「⁠仕事がきつい」理由はいろいろとあると思うが、会社や上司の悪口を言う前に、自分自身がプロフェッショナルなエンジニアとしてこの業界で勝負をするうえで必要な最低限の基礎がで

    第4回 オブジェクト指向の本質 | gihyo.jp
    ghostbass
    ghostbass 2010/11/20
    こんな良い文を書けるのに「日本語はオブジェクト指向」なんて文も書いちゃうのはなんでだろう。
  • オブジェクト指向の憂うつ~設計編

    1960 年生まれ,独身フリー・プログラマの生態とは? 日経ソフトウエアの人気連載「フリー・プログラマの華麗な生活」からより抜きの記事をお送りします。2001年上旬の連載開始当初から,現在に至るまでの生活を振り返って,週1回のペースで公開していく予定です。プログラミングに興味がある人もない人も,フリー・プログラマを目指している人もそうでない人も,“華麗”とはほど遠い,フリー・プログラマの生活をちょっと覗いてみませんか。 ※ 記事は執筆時の情報に基づいており,現在では異なる場合があります。 前回の記事で「オブジェクト指向だからこそ悩む」という書き方をしたが,よく考えてみるとこれはあまり正しい表現ではない。なぜなら,オブジェクト指向プログラミング(以降,OOPと略す)の仕様を持ったプログラミング言語であるからといって,大抵の場合は必ずしもOOPを多用する必要があるわけではないからだ。 現に,少

    オブジェクト指向の憂うつ~設計編
    ghostbass
    ghostbass 2010/09/15
    なんだかなあ
  • 『ドメインモデルに対する日米の温度差』

    マーチン・ファウラー氏によれば、アプリケーションの中核部であるビジネスロジックを構築する方法には、Transaction ScriptパターンとDomain Modelパターンの2通りがあるという。Domain Modelパターンは、データと振る舞いを1つのオブジェクトにまとめ、オブジェクト指向のテクニックを駆使するやり方だ。一方のTransaction Scriptパターンでは、データと振る舞いは別々のオブジェクトに分け、振る舞いをスクリプト的に淡々とプログラミングしていく。 日ではTransaction Scriptが優勢 この2通りのうち、日ではTransaction Scriptパターンの方が優勢だ。日のオピニオンリーダーも軒並みTransaction Scriptを薦めている。 たとえば、Seasarの開発者であるひがやすを氏は、古くからデータと振る舞いを分離するアプローチ

    『ドメインモデルに対する日米の温度差』
    ghostbass
    ghostbass 2010/09/14
    データ処理に関しての「構造化設計」を「トランザクションスクリプト」と呼んでいるだけじゃないの?
  • Seasar S2Tiger - @//メモ

    app.dicon † <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components.dtd"> <components> <include path="dao.dicon"/> <!-- DAOs --> <component name="CustomerDao" class="com.snail.exam.s2dao.CustomerDao"> <aspect>dao.interceptor</aspect> </component> <component name="OrderDao" class="com.snail.exam.s2dao.OrderDao"> <aspe