🐕

[Java]Java,はじめまして。概説

2023/06/03に公開4

概説

  • Javaはオブジェクト指向プログラミング言語であり、コンパイル言語

コンパイラ言語
プログラムをコンパイルして実行可能ファイルを生成する言語
(機械語に一括変換してから実行するプログラミング言語のこと。)

用語補足:コンパイルとは

コンパイル(compile):
プログラミング言語で書かれたソースコードをコンピューターが実行可能な形式に変換すること。
この変換作業を行うプログラムのことをコンパイラ(compiler)と呼ぶ。
プログラマが書いたプログラムは、人間が理解しやすい形式で書かれていますが、
コンピュータは0と1のバイナリ形式でしかプログラムを実行できない。
故に、プログラマが書いたソースコードをコンピューターが理解できる形式に変換する必要がある。

オブジェクト指向プログラミング言語
オブジェクト思考開発に適した言語。データと処理を1セットとしてプログラムを
組み立てていく開発手法に適した言語。

補足:オブジェクト指向プログラミングを採用している言語とそれら言語の違い

オブジェクト指向プログラミングを採用している言語とそれら言語の違い

  • オブジェクト指向プログラミングを採用している言語
    Java、C++、Python、Ruby、JavaScriptなど

    全体的な考え方は共通しており、オブジェクト指向プログラミングを採用することによって、
    プログラムの再利用性や保守性が向上し、大規模なプログラムの開発が可能になる。

    それぞれの言語で
    オブジェクト指向プログラミングがどのように実装されているかによって、
    その違いが生じる。

    オブジェクト指向プログラミングは、
    プログラムをオブジェクトと呼ばれる単位で構成することを特徴としている。
    オブジェクトは、データとそのデータを処理するための手続きを
    一つのまとまりにしたもので、プログラムの中心となる構成要素。

    【オブジェクト指向プログラミングを採用している言語の違い】

    1. クラスの扱い方
      オブジェクト指向プログラミングでは、
      クラスがオブジェクトを生成する際の設計図となる。
      JavaやC++では、クラスは静的に定義され、クラスベースの継承によって、クラスの機能を再利用できます。
      PythonやJavaScriptでは、クラスの定義が動的であり、プロトタイプベースの継承によって、クラスの機能を再利用できます。
    クラスの扱い JAVA / C++ Python / JavaScript
    クラス 静的 動的
    継承 クラスベースの継承 プロトタイプベースの継承
    1. 継承の扱い方
      継承は、オブジェクト指向プログラミングにおいて非常に重要な機能。
    • JavaやC++では、クラスベースの継承が採用されており、
      クラスの階層構造を形成することができます。
    • PythonやJavaScriptでは、プロトタイプベースの継承が採用されており、
      オブジェクトのプロパティとして継承を扱います。
    1. メソッドの扱い方
      オブジェクト指向プログラミングでは、
      オブジェクトのメソッドを呼び出すことができます。
    • JavaやC++では、メソッドはクラスに定義され、静的なもの。
    • PythonやJavaScriptでは、メソッドはオブジェクトのプロパティとして定義され、動的に変更することができる。

Javaはオブジェクト指向プログラミングを採用しているが、JAVAのフレームワークにおいては
アスペクト指向プログラミングを実現するためのフレームワークとして、
Spring FrameworkやAspectJなどがある。
これらのフレームワークを使用することで、
アスペクト指向プログラミングの恩恵を受けることができる。

補足:AOP(Aspect Oriented Programming)

AOP(Aspect Oriented Programming)

  • Aspect Oriented Programmingの略称で、直訳するとアスペクト指向プログラミング

  • オブジェクト指向プログラミングを拡張した概念。

    オブジェクト指向 アスペクト指向
    関心事の分離 クラスに分散される アスペクトに集約される
    コードの密度 関心事に散在する 関心事に集約する
    クロスカット機能 パッケージによる実装 アスペクト指向で実装される
    メンテナンス性 関心事が散在しているため、保守が困難 関心事が集約されているため、保守が容易
    重複コード 関心事が重複する可能性がある 関心事が別々に実装されるため、重複しない

補足:オブジェクト指向プログラミングとアスペクト指向プログラミングの歴史

オブジェクト指向プログラミングとアスペクト指向プログラミングの歴史
  1. オブジェクト指向プログラミングが登場する以前、
    プログラムは手続き的な形式で記述されていました。
    この手続き的なプログラミングは、複雑なアプリケーションを作成する際に
    問題が発生することがありました。

  2. その後、オブジェクト指向プログラミングが登場し、
    プログラムがオブジェクトの集合体として記述されるようになりました。これにより、
    プログラムがより複雑になっても、オブジェクトとしてまとめることで、より管理しやすくなりました。

    しかし、オブジェクト指向プログラミングでも、クラスの責務が明確でなくなり、
    保守が困難になることがありました。
    そこで、アスペクト指向プログラミングが登場しました。

  3. アスペクト指向プログラミングは、
    オブジェクト指向プログラミングの欠点を補完するために開発されたものであり、
    異なる関心事を独立して定義することができます。
    これにより、オブジェクト指向プログラミングでは扱いにくい、
    例えばログ出力やトランザクション管理などのクロスカット機能を
    簡単に実現することができるようになりました。

アスペクト指向プログラミングは、オブジェクト指向プログラミングと同じく、
現在でも広く使われているプログラミング手法の一つです。

AOPを使うメリット
  • AOPを使うメリット

    1. コードの再利用性の向上 -共通処理に統一性を持たせられる
      アスペクトを使うことで、コード内の共通の機能を分離し、再利用可能なコードとして分離できる。
      例えば、ログ出力やエラーハンドリングなどは、複数のクラスで共通して行われる可能性があります。
      AOPを使うことで、これらの機能を共通のアスペクトとして定義することができる。
    2. メンテナンス性の向上
      AOPを使うことで、コードの可読性とメンテナンス性を向上させることができる。
      アスペクトを使用することで、関心の分離が実現され、コードの目的や意図がより明確になる。
      また、同じアスペクトを使用する複数のクラスに変更が必要な場合、
      アスペクト自体を変更するだけで済むため、変更に伴う影響範囲が小さくなる。
    3. 横断的関心の解決
      横断的関心とは、クラスの機能や目的には関係ないが、
      クラスに関する処理として必要な機能のこと。
      例えば、ログ出力やトランザクション管理などが該当。AOPを使用することで、これらの横断的関心を
      別のアスペクトに分離し、クラスに侵入することなく、機能を提供することができる。
    4. 柔軟な設定
      AOPを使用することで、アプリケーションの機能を実行するために必要な横断的関心を
      柔軟に設定することができる。
      例えば、ログ出力のレベルを切り替えることができたり、トランザクションの境界を設定することが
      できたりします。このような柔軟性は、アプリケーションの設定を変更する必要がある場合に
      非常に役立ちます。
    5. 既存概念のメリットは維持される
      既存概念のメリットは維持されること。
      AOPは、オブジェクト指向プログラミングの概念における、共通処理の問題を解決した形になる。
      つまり、本来持つオブジェクト指向のメリットは受け継がれる。
      問題点を修正しつつ、カスタマイズ性や再利用性の向上、分業化、独立性などの本来持つメリットは
      維持されるので、非常に便利。

    以上のように、AOPを使用することで、
    コードの再利用性やメンテナンス性、横断的関心の解決、柔軟な設定など、
    さまざまなメリットを得ることができます。

  • Javaはプラットフォーム非依存性があり、Java仮想マシン(JVM)上で実行されるため、
    異なるオペレーティングシステムやハードウェアに対して同じコードを使用することができる。
    (OSを選ばない!!!)

    JVM(Java Virtual Machine)とは:

    Javaプログラミング言語の実行環境を提供する仮想マシンのこと。
    JVMは、
    Javaバイトコード(Javaプログラムをコンパイルした後の中間表現)を実行することができる。
    (JavaプログラムはJVMがPCが読み取れる機械語へ変換して実行されるともいう。)

  • Javaは安全性、信頼性、スケーラビリティが高く大規模アプリケーションの開発に向いている。
    Javaが得意なこと:webアプリケーション開発、アンドロイド開発

長所と短所

Javaの長所

1. プラットフォーム非依存性
Javaはプラットフォーム非依存性がある。
つまり、異なるオペレーティングシステムやハードウェア上で実行することができる。
これによって、アプリケーションの移植性が向上し、
開発者が異なるプラットフォームに対応するためにコードを書き直す必要がありません。
2. オブジェクト指向プログラミング
Javaは完全なオブジェクト指向プログラミング言語で、クラスとオブジェクトを使用して構造化されたプログラムを作成することができる。これにより、コードの再利用性やメンテナンス性が向上し、大規模なアプリケーションの開発に適している。
3. マルチスレッド処理
Javaはマルチスレッド処理に対応しており、複数のスレッドを同時に実行することができる。
これにより、パフォーマンスの向上や非同期処理が可能となる。
4. ガベージコレクション
Javaにはガベージコレクションがあり、メモリ管理を自動的に行うことができる。
これにより、メモリリークやメモリ管理の問題を回避することができる。
5. 多様なフレームワーク
Javaには多数のフレームワークがあり、Spring Framework(Spring,Spring Boot)、Hibernate、Struts、JavaServer Faces(JSF)などがある。これらのフレームワークを使用することで、アプリケーションの開発が容易になります。

Javaの短所

1. 実行速度
Javaはインタープリターによる実行が必要なため、C++などのネイティブコードに比べて実行速度が遅いとされています。ただし、JITコンパイラや最適化技術の進歩により、Javaの実行速度は向上しています。
2. メモリ使用量
Javaはガベージコレクションによるメモリ管理を行うため、メモリ使用量が多くなることがあります。また、大規模なアプリケーションを開発する場合、メモリ使用量が増加することがあります。

3. 長いコード
Javaは静的型付け言語であり、タイプセーフなコードを書く必要がある。
そのため、同等の機能を持つ動的型付け言語に比べてコードが長くなることがある。

これらの短所は、Javaの開発者が適切に処理することができる。
例えば、実行速度の問題に対しては、
JITコンパイラや最適化技術を使用してパフォーマンスを向上させることができる。


以上!

Discussion

GamzaGamza

よく書かれた記事!

AOP に関しては、@Transaction アノテーションまたはロギング メカニズムを確認することもできます。

AirichanAirichan

嬉しいコメント、ありがとうございます!!
最近初めてJavaに触れましてまとめてみました。
もっと学びながら触りながら理解できるよう頑張ります!✨

Hyon🇰🇷Hyon🇰🇷

お世話になっております!
とても良い勉強になりました!

AirichanAirichan

お世話になっております!コメントありがとうございます!
転職し現在JavaとSpringbootを絶賛勉強中で、これからもかいていくので、
よろしくお願いいたします☺️