目次
3.継承よりも構成を好む(特に今)
4。インターフェイスとラムダを通る多型
最終的な考え
ホームページ Java &#&チュートリアル 現代のJavaコンテキストにおけるオブジェクト指向の設計原則

現代のJavaコンテキストにおけるオブジェクト指向の設計原則

Jul 26, 2025 am 07:00 AM

オブジェクト指向の設計原則は、現代のJava開発において依然として不可欠であり、新しい言語の特徴と建築パターンとともに進化しています。 1。固体原理はこれまで以上に関連性があります。SRPは、特にSpringのような階層化されたフレームワークで、単一目的のクラスを保証します。 OCPは、インターフェイスと依存関係噴射を介して拡張を促進します。 LSPは、サブタイプの代替可能性を保証します。 ISPは、デフォルトのメソッドであっても膨満感を避け、焦点を絞ったインターフェイスを支持しています。 DIPは、DIフレームワークによくサポートされている抽象化に応じて強調しています。 2。カプセル化はゲッター/セッターを超えています:不変のデータのレコード、制御されたインスタンス化の工場メソッド、およびパッケージアクセスを制限するJavaモジュールを使用します。 3。継承よりも構成が好まれます:依存性階層を避けて、依存性注入と機能的挙動を使用して柔軟なシステムを構築します。 4。多型はインターフェイスとラムダを活用します:機能や消費者などの機能的インターフェイスは、ランタイムの動作の変化を可能にし、SAMSとメソッド参照を通じて戦略やオブザーバーなどのパターンをサポートします。 5.不変性と糸の安全性は重要です。最終フィールドと不変のコレクションを使用して不変のオブジェクトを設計し、同時環境でステートレスサービスを好む。最終的に、Modern Javaは、OOPの強みと機能的および反応的なパラダイムを組み合わせており、レコード、密閉クラス、パターンマッチングなどの更新された機能を使用して、保守可能でスケーラブルでテスト可能なコードを実現します。

現代のJavaコンテキストにおけるオブジェクト指向の設計原則

言語が機能的なプログラミング機能、リアクティブパラダイム、クラウドネイティブパターンで進化したとしても、オブジェクト指向のデザイン(OOD)の原理は、現代のJava開発の基礎となっています。 Javaは現在、Lambdas、Streams、およびRecordsをサポートしていますが、OODのコア教義(カプセル化、相続、多型、および抽象化)は、維持可能でスケーラブルな、テスト可能なシステムの構築に依然として不可欠です。

現代のJavaコンテキストにおけるオブジェクト指向の設計原則

今日のJavaの風景に古典的なオブジェクト指向のデザイン原則が適用される方法は次のとおりです。


1。堅実な原則はこれまで以上に関連性があります

ロバート・C・マーティンによって作られた堅実なものは時代遅れではありません。適応しています。 Spring Boot、Jakarta EE、またはMicroservicesを使用する場合でも、最新のJavaコードベースはこれらの原則の恩恵を受けます。

現代のJavaコンテキストにおけるオブジェクト指向の設計原則
  • 単一責任原則(SRP)
    クラスには、変更する理由が1つある必要があります。 Springアプリケーションでは、これは懸念を分離することを意味します。コントローラーはHTTPルーティングを処理し、サービスにはビジネスロジックが含まれ、リポジトリはデータアクセスを管理します。
    例:データベースクエリと電子メールセンディングロジックを同じサービスクラスに入れないでください。

  • オープン/クローズド原理(OCP)
    クラスは拡張のために開いている必要がありますが、変更のために閉鎖する必要があります。インターフェイスと依存関係噴射を使用します。
    最新のユースケース: PaymentProcessorインターフェイスを定義し、コアロジックを変更せずにさまざまな実装( StripeProcessorPayPalProcessor )を注入します。

    現代のJavaコンテキストにおけるオブジェクト指向の設計原則
  • リスコフ代替原理(LSP)
    サブタイプは、ベースタイプに対して代替可能でなければなりません。 Javaの強力なタイピングと@Overrideチェックにより、これは簡単に実施できます。
    気をつけてください:ランタイムタイプのチェックでLSPに違反したり、オーバーライドされた方法でUnsupportedOperationExceptionを投げたりしないでください。

  • インターフェイス分離原理(ISP)
    クライアントは、使用していないインターフェイスに依存してはなりません。小さくて焦点を絞ったインターフェイスを好む。
    Java 8注:インターフェイス内のデフォルトメソッドは、それらを膨らませて抵抗するように誘惑する可能性があります。 UserServiceなどの大きなインターフェイスをUserAuthUserProfileManagerなどに分割します。

  • 依存関係の反転原理(DIP)
    コンクリートではなく、抽象化に依存します。これは、DI(依存関係噴射)のようなSpring Shineのようなフレームワークです。
    ベストプラクティス:コンストラクターインジェクションを使用し、クラスで直接new ING依存関係を避けます。


2。ゲッターとセッターを超えたカプセル化

モダンジャワはより強力なカプセル化を奨励しています:

  • 不変のデータキャリアにレコード(Java 16以降)を使用してください。

    パブリックレコードユーザー(文字列名、int age){}

    ボイラープレートはなく、自動的に不変で行儀の良い。

  • 制御されたオブジェクト作成のためのプライベートコンストラクター工場の方法を支持します:

    パブリッククラスの支払い{
        プライベート最終文字列ID;
        private Payment(string id){this.id = id; }
        (string id){return new Payment(id);のpublic static支払い; }
    }
  • モジュール(Java 9)を使用して、パッケージをカプセル化します。
    module-info.javaファイルを使用すると、必要なもののみをエクスポートし、真のアクセス境界を実施できます。


3.継承よりも構成を好む(特に今)

緊密な結合により、最新のデザインでは継承はあまり一般的ではありません。その代わり:

  • 構成と機能的インターフェイスを使用してシステムを構築します。

     public class orderprocessor {
        民間の最終税務主体税。
        プライベート最終通知サービス通知者。
    }
  • Lambdasを介した行動注入を活用してください:

     public voidプロセス(注文注文、predicate <dorder> validator){...}

    これは、サブクラスよりも柔軟です。

  • 深いクラスの階層を避けてください。それらはテストして進化するのが難しいです。


4。インターフェイスとラムダを通る多型

多型は、もはやサブクラス化だけではありません:

  • 機能的インターフェイス( FunctionConsumerSupplier )は、ラムダを使用したランタイムの多型を有効にします。
  • 戦略、コマンド、およびオブザーバーパターンは、多くの場合、SAMS(単一の抽象メソッド)およびメソッド参照で実装されています。
    リスト<文字列> name = users.stream()
        .map(user :: getName)
        .filter(name-> name.startswith( "a")))
        .tolist();

    ここでは、 mapfilter 、さまざまな動作を受け入れる多型操作です。


5.不変性と糸の安全性を備えた設計を念頭に置いてください

モダンなジャワは、同時に分散した環境で実行されます。 oodはそれを説明する必要があります:

  • 可能な場合はオブジェクトを不変にします( finalフィールド、セッターなし)。
  • List.copyOf()Map.of() 、またはimmutables.orgautovalueなどのライブラリを使用します。
  • 並行性のバグを避けるために、ステートレスサービス(春のシングルトン豆に共通)を好みます。

最終的な考え

オブジェクト指向のデザインは時代遅れではなく、進化しました。現代のジャバで:

  • Value:Domain Modeling、層状アーキテクチャ、クリーンな抽象化を追加する場所でOOPを使用します
  • 機能スタイルとブレンド:OO構造内のストリーム、ラムダ、および純粋な機能を使用します。
  • 最新のJava機能を活用してください:レコード、密封されたクラス、パターンマッチング、モジュールは、より安全でクリーンなOOPコードを記述します。

目標は変更されていません。理解しやすく、変更し、テストできるコードを書き込みます。今日のツールとプラクティスのために更新されたOOD原則は、まだ私たちを導きます。

基本的に、それはOOP対Modernではありません。それはModernとのOOPです。

以上が現代のJavaコンテキストにおけるオブジェクト指向の設計原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複数の操作を実行し、結果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複数のSQL操作を実行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります。現代のJavaでの日付処理は、java.timeapiを使用することを優先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

SpringとGuiceを使用したJavaでの依存関係のマスタリング SpringとGuiceを使用したJavaでの依存関係のマスタリング Aug 01, 2025 am 05:53 AM

依存関係の指示(di)isadesignpatternwhere objectsreceivedenciesiesedternally、setter、orfieldinoffiction.2.springframeworkusessaNnotationslike@component、@service、@autowiredwithjava Basedconfi

Javaパフォーマンスの最適化とプロファイリング手法 Javaパフォーマンスの最適化とプロファイリング手法 Jul 31, 2025 am 03:58 AM

パフォーマンス分析ツールを使用してボトルネックを見つけ、開発とテスト段階でVisualVMまたはJProfilerを使用し、生産環境で非同期財産を優先します。 2。オブジェクトの作成を削減し、オブジェクトを再利用し、StringBuilderを使用して文字列のスプライシングを置き換え、適切なGC戦略を選択します。 3.コレクションの使用を最適化し、シーンに応じて初期容量を選択し、プリセットします。 4.同時性を最適化し、同時コレクションを使用し、ロックの粒度を低減し、スレッドプールを合理的に設定します。 5. JVMパラメーターを調整し、合理的なヒープサイズと低遅延のゴミコレクターを設定し、GCログを有効にします。 6.コードレベルでの反射を避け、ラッパークラスを基本タイプに置き換え、初期化を遅延させ、最終と静的を使用します。 7。JMHと組み合わせた連続性能テストと監視

Java仮想マシン(JVM)内部の理解 Java仮想マシン(JVM)内部の理解 Aug 01, 2025 am 06:31 AM

thejvmenablesjavaの「writeonce、runany where "capabilitybyexcuting byteCodeThethermainComponents:1。theClassLoaderSubSystemloads、links、andinitializes.classfilesusingbootStrap、拡張、およびアプリケーションクラスローロー、

Javaのデッドロックとは何ですか?どうすればそれを防ぐことができますか? Javaのデッドロックとは何ですか?どうすればそれを防ぐことができますか? Aug 23, 2025 pm 12:55 PM

adeadlockinjavaoccurswhentwoorthoreThreadsareblockededforever、それぞれの方向に、通常はdueTococularwaitcausedistentlockdoringを使用します

Java、Spring Boot、Reactを使用したフルスタックWeb開発 Java、Spring Boot、Reactを使用したフルスタックWeb開発 Jul 31, 2025 am 03:33 AM

Java Springboot Reactテクノロジースタックを選択すると、中小企業レベルのシステムに適した安定した効率的なフルスタックWebアプリケーションを構築できます。 2.バックエンドはスプリングブートを使用して、restfulapiをすばやく構築します。コアコンポーネントには、Springweb、Springdatajpa、Springsecurity、Lombok、Swaggerが含まれます。フロントエンドの分離は、@RestControllerを介してJSONデータを返して達成されます。 3.フロントエンドはReact(ViteまたはCreatereactappと併せて)を使用してレスポンシブインターフェイスを開発し、Axiosを使用してバックエンドAPIを呼び出し、Reactrouter

See all articles