window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() 持つべきか、あるべきか?- The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2016-09-10
ソフトウェア開発

持つべきか、あるべきか?

カタジナ・ヤルガ

オブジェクト指向プログラミングを学び、オブジェクト、フィールド、メソッドの基本をマスターすると、ほとんどの時間を継承に費やすことになる。継承とは、基底クラスから実装の一部を取得することを意味する。プライベートでないフィールドやメソッドをすべて継承するには、基底クラスのサブクラスを作成すればよい。

車と飛行機は乗り物なので、これらのクラスがVehicleという共通の基底クラスから拡張されるべきなのは明らかです。これは典型的な学問的例であるが、これらのクラスを継承関係でバインドすることを決定する際には、いくつかの結果に注意しなければならない。

図1 継承関係の実装

この場合、クラスは互いに密接にリンクしている。つまり、各クラスの動作の変更は、ベース・クラスを変更することで実現できる。 コード.これはメリットにもデメリットにもなり得ますが、どのような振る舞いを期待するかによります。継承を適用するタイミングを誤ると、新しい関数を追加する際に、作成したクラスモデルに適合しないため、実装が困難になる可能性があります。コードを重複させるか、モデルを再編成するかのどちらかを選択しなければなりません。継承関係を実行するコードを "オープン・クローズド "と呼ぶことができる。Vehicleクラスに、すべての乗り物の一般的な、定義されたエンジン操作があると仮定すると、エンジンのない乗り物(例えばバイク)のモデルをクラス階層に追加したいと思った瞬間に、クラスに重大な変更を加えなければなりません。

クラス Vehicle
  def start_engine
  終了

  def stop_engine
  終了
終了

クラス Plane < 乗り物
  def move
    エンジン始動
    ...
    エンジン停止
  終了
終了

構成

既存のクラスの動作の一部にしか興味がない場合、継承に代わる良い方法はコンポジションを使うことだ。すべての振る舞い(必要なものも、まったく必要でないものも)を継承するサブクラスを作る代わりに、必要な関数を分離し、その関数への参照でオブジェクトを装備することができる。そうすることで、オブジェクトが の一種である。 という主張を支持している。 それには プロパティの一部のみ

図2 コンポジションの使用

このアプローチに従えば、エンジンの動作を担当するコードをEngineと呼ばれる自律クラスに分離し、エンジンを持つ車両を表すクラスにのみそのコードを参照させることができる。コンポジションを使って関数を分離することで、ビークルクラス構造がよりシンプルになり、個々のクラスのカプセル化が強化されます。これで、車両がエンジンに影響を与える唯一の方法は、そのパブリック・インターフェースを使用することです。さらに、異なるタイプのエンジンを異なる車両で使用したり、プログラム実行中に交換したりすることも可能になる。もちろん、コンポジションを使用することは完璧ではない。私たちは、簡単に拡張でき、変更の余地がある、緩くつながったクラスセットを作っている。しかし同時に、各クラスは他の多くのクラスとつながっており、それらのインターフェイスに関する情報を持っていなければならない。

クラス 車両
終了

クラス Engine
  def start
  終了

  def stop
  終了
終了

クラス Plane < 乗り物
  def initialize
    エンジン = Engine.new
  終了

  def move
    エンジンスタート
    エンジン停止
  終了

  def change_engine(new_engine)
    エンジン = new_engine
  end
終了

選択

どちらのアプローチにも利点と欠点がある。継承は特殊化なので、「is-a」型関係が存在する問題にのみ適用するのがベストだ。継承はクラス同士を緊密に結びつけるので、まず、コンポジションを使うかどうかを常に検討する必要があります。コンポジションは、"has-a "の型関係が存在する問題に適用されるべきである。飛行機は部品から構成されているが、それだけで何かそれ以上のものである。この例をさらに進めると、個々の部品は異なる専門家のバリエーションで発生する可能性がある。

継承もコンポジションもプログラマーが自由に使えるツールに過ぎないので、特定の問題に対して適切なツールを選択するには経験が必要です。だから、練習して失敗から学ぼう ᙂ。

関連記事

ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト
エンタープライズ&スケールアップ・ソリューション

IT監査ツール&テクニック完全ガイド

IT監査は、安全かつ効率的で、コンプライアンスに準拠したシステムを保証します。その重要性については、記事全文をお読みください。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese