Allegro!

JavaやIT系小ネタ、趣味の話まで。

Javaと愉快な仲間たち①Javaのそもそも

こんにちは皆さん、Java書いてますか?
この記事を投稿するにあたり、ネットで調べまくったり参考書を読みあさったりしました。
約2年前にJavaを使い始めてからというもの、Javaについて触れる機会が多いのですがなんと言っても序盤が眠くなりませんか?

やれJDKAPIやれオブジェクト指向だから云々・・・めっちゃ眠たくなりませんか???

そこで今回からシリーズ記事として「Javaと愉快な仲間たち」について、まとめていきたいと思います。

目標としては、実際に手を動かしながらWebアプリケーションの作り方を簡潔にまとめたいな〜と。
ミドルウェアの説明や実際にJavaでのテストについても解説していきたいと思っていますので、優しく見守っててくださると嬉しいですw

そもそも何故書こうと思ったの?

私は最初「とりあえず参考書読もう」と文字から情報を得ようとしました。
参考書で説明されているように画面ポチポチしながら…みたいなやつをして、手を動かしながら覚えようと考えました。

実際に手を動かしながら取り組むので眠くなりません。
しかし、出てくる単語に不満を抱いてしまい「当分Java見たくない!」となっちゃった記憶があります。。

 

だって、そもそもJavaって何??の状態です。
JDKって?コンパイラって?開発ツールは何を使えばいいの?パッケージ構成ってどうしたらいいの?

そういう(初歩的な)疑問は解消されずに残ったままなわけです。

しかし、周りはスイスイと先を越してしまい聞くに聞けず…そんな状態が続き、ストレスを感じてしまいました。

当時を振り返ると、派手に躓いていた思い出が強くあるので今後新しい人に難しい序論を分かりやすく説明できるようにしようと思い、このシリーズを書こうと思いました。

 

Javaのそもそも

では、Javaについて簡単にまとめていきます。

Javaには様々な種類があります。Java SE、Java EEJava ME…この人たち誰ですか??って状態ですよね。

上記はこの記事で後ほど説明するのでご安心ください。

 

Javaとは

Javaは、携帯電話から銀行のソフトウェアなどに使われていてサーバー等でも多く採用されているプログラム言語です。

Javaの大きな特徴として「Write once,Run anywhere(一度書けばどこでも使える)」というキャッチフレーズが印象的で、WindowsでもMacでもLinuxでもスーパーコンピューターでもプログラムが実行されます。

 

Javaのメリット・デメリット

それでは、Javaを使って開発をするメリットとデメリットについて書いていきます。

メリット①環境問わず実行できる

Javaはプラットフォームに依存しません。
その理由として、「JVM(Java Virtual Machine:Java仮想マシン)」で動いており、このJVMがOSの差分を吸収してくれます。

メリット②処理速度が速い

Javaは、数多くあるプログラミング言語の中でも処理速度はダントツです。その理由の一つが起動にコンパイル を必要とするコンパイラ言語であるから。

コンパイラとは、人間が書いたプログラムをPCが実行するためにPC側で処理が行えるように変換してくれるものです。

コンパイラ言語では、予めコンパイル 済みのファイルを用意し実行するためプログラム実行時にはコンパイル されずその分処理が速くなります。

 

メリット③セキュリティ面で優れている

Javaは開発当初からセキュリティを考慮した設計となっています。
セキュリティに考慮した設計の特徴として、主に下記が挙げられます。

Javaバイトコードの正当性チェック

JVMJavaバイトコードを読む時に不正なコードが入っていないかチェックします。

Java Sandbox モデル

JVMJavaプログラムがアクセスすべき領域の範囲を超えてアクセスしていないかチェエックします。
Javaバイトコードごとに信頼されるクラスか区別し、信頼されていないクラスをロードしメソッドを実行しようとすると例外が発生します。
しかし、Javaアプリケーションは信頼され、Javaアプレットではネットワークからロードされるクラスは全て信頼されないと言う仕様になっていたためJavaアプレットは制限だらけになってしまいできることが限られていました。

Javaコード署名モデル
Java Sandboxモデルではアプレットの制約が非常に厳しかったのでネットワークを通じて組み込まれるJavaコードに電子署名し出所の明示及び改竄されていないことを保証する機構が加わりました。

メリット④ライブラリやAPIが充実している

プログラム言語には「ライブラリ」と呼ばれるプログラムの部品やJavaは特にライブラリが豊富で、多くのライブラリは無償で提供されています。
ライブラリを使えば、様々な機能を自分のプログラムに簡単に組み込むことができ開発時間を短縮させることが可能です。

 

デメリット①オブジェクト指向に対する理解が必要

オブジェクト指向は非常に優れた考え方ですが、理解するまでに時間がかかる理論でもあります。
オブジェクト指向を理解しなければ、プログラムの「独立性」「再利用性」「拡張性」を活かせずに結果的に質の高いプログラムを作ることは難しいでしょう。

オブジェクト指向についてはspeakerdeckでまとめた資料があるので、ぜひ参考にしてください。

speakerdeck.com

 

デメリット②コンパイル が必要

Javaコンパイル してプログラムを実行する必要があるので、開発者の中には「コンパイル するのが面倒だ」と言う方もいます。

 

Javaを動かすために必要なもの

Javaを動かすために必要なものは4つあります。

  1. JVM(Java Virtual Machine)
  2. コンパイラ
  3. API
  4. ソースコード

ソースコードだけは分かる!と言う方、多いのではないでしょうか?実は私もそうでしたw

今回は、ソースコード以外の3つを説明していきますね。

Java VM(Java Virtual Machine)

Java言語で作られたプログラムを実行するためのソフトウェアで、JREに含まれています。
実行するためには、ソースコードコンパイル してクラスファイルを作成する必要があります。

コンパイラ

コンパイル と言う言葉が先ほど出てきましたが、コンパイル はプログラム言語をコンピュータが理解できる言語に変換することを指します。そのための翻訳ソフトウェアをコンパイラといいます。
ほとんどのコンパイラはコンピュータが直接実行できるコンピュータ特有の言語に合わせて翻訳し、直接実行を行います。
しかし、Javaは「どんな環境でも動く」と説明しました。
Javaが他の言語と違うところは、特定のコンピュータが理解できる機械語に翻訳するのではなく、どのコンピュータでも使える中間言語というものを作成します。

つまり、Javaが動くために中間言語に変換され、更にそれぞれのコンピュータにインストールされたJava仮想マシン機械語に翻訳して実行する2段構えとなっています。

API

APIにはJavaSE、JavaEE、JavaMEがあります。
それぞれの違いは下記の通りです。

JavaSE:標準的な機能がまとめられたAPI。ちなみに、Javaのバージョンが2から5までをJ2SEとよび、6以降はJavaSEと表されます。
JavaEE:JavaSEにサーバ関係のライブラリなどを追加したもので、ベースはJavaSEそのもの。
JavaME:携帯電話、デジタルメディアデバイスなど組み込みデバイス環境で実行するアプリケーションのためのAPI

絵に起こすとこんな感じ。 

f:id:PaZoo:20200329120856p:plain

まとめ

今回はJavaの仲間たち①ということで、Javaのそもそもについて簡単にまとめてみましたがいかがだったでしょうか。
文字で説明すると長くなりますが、絵で表すと10枚程度の資料になるんだろうな〜と思いながら文字に起こしてますw

次回もJavaと愉快な仲間たちの続編を書いていこうと思います〜。

次はTomcatとかJavaにおけるWebアプリケーションについてまとめたいなあ。