29日目①(2025.02.28) Javaの歴史



今日で2月も終わりですね!!
少しずつ暖かくなってきたような気がして気分もルンルンなあきパパでございます。
めちゃめちゃJavaとは関係ない話ですが、2月1日から、Javaの挑戦の他にもダイエットに挑戦してます。
なんと、2月28日時点で(2月1日時点と比べて)5.8Kgの減量に成功しました!!
やっと大学2回生の時くらいの体重です、、、
最終目標は高校卒業時の体重であと5Kgほど減らさないとですが、
停滞時期がありながらも順調に減ってきているので、このルンルン気分をJavaの勉強にぶっこんで、高いモチベーションで臨んでいきます!!
(ダイエット記録も(リアルタイムにはならないですが)食事内容や筋トレ内容をブログで発信するかもです)

すごく話が逸れてしまいましたが、15年振りくらいに60Kg台に突入してテンションが上がりすぎたゆえであるとご理解いただければ幸いです。

【Javaの歴史】

Javaの基本編は(使いこなせるレベルかどうかは別として)必要最低限の部分は網羅したかなという感じです。
「必要最低限の部分は網羅した」という部分に対して
「初心者が何を分かった風に言うとるねん!!」
と思われる人もおられるかもですが、この根拠は、Tim先生と菅原先生の基本講座の動画を勉強し終えたというところで判断しています!!

ここからは、応用編、実践と移っていく過程で足りない知識・理解が浅い箇所を埋め込んでいこうと思います。

そして、今日の最初のテーマは「Javaの歴史」です。

今回も菅原先生がめっちゃ分かりやすい説明をしてくださりました。
学んだことを文字で書いていくのはなかなか大変で、逆に見返した時に「?」となりそうなので、自分なりに特に大切だと思ったことを書いておこうと思います。

★Javaの構成

Java
 ①言語仕様
 ②開発環境

①言語仕様
 ①-1基本文法(変数、データ型、制御文)
   制御文→構造化プログラミング
         → プログラムを順次、進行・分岐・繰り返しの3つの構造の組み合わせ

           作る。
           c言語ではGoto文でプログラムのどこへでも飛べたが、分かりにくく
           なるため、javaではその変わりとして「例外処理」がある
 
 ①-2オブジェクト指向(クラス、継承、ポリモフィズム)
  javaが広まった理由の1つは、厳密なオブジェクト指向の文法ルールがあったから。
  C++は、クラス外にメソッドを定義したりできるという特徴があるが、クラス外の
  ところばっかりでコーディングをする人がいたりして現場が混乱した。

②開発環境
 ②-1 JRE(Java Runtime Environment)
    Javaの実行環境。
    OS(Windows、Mac)ごとに提供されている。

 ②-2 開発するためのコンパイラ(javac)

 ②-3 ガーベッジコレクション
    ゴミ集めのこと。使われなくなったメモリ領域が自動的に解放される仕組み。
    → メモリの解放を気にせずにプログラミングができる。


このような開発環境を使いながらクラスを記述していく



色々な機能を持ったたくさんのクラスが公表されていて、それを利用することができる。
→「パッケージ」という形でまとめられている。

(Javaが公表しているパッケージ(一部))

・基本クラス(java.lang)
・コレクション(java.util)
・ファイル管理(java.io)
・ネット機能(java.net)
・DBアクセス(java.sql)

その他にも多くのパッケージがあって、パッケージをまとめたものを図書館になぞらえて、
「クラスライブラリ」という。

①言語仕様、②開発環境
が公表され、クラスライブラリも充実していく中で、並行して
「Javaで開発するためのツール」も作られていった。

★ツール

色々なツールがある中で、多くのプログラマーが使っているのはIDEというエディタや実行環境などを合わせた統合開発環境

ツール
 ・IDE → 「Eclipse」や「IntelliJIDEA」
 ・webサーバー → Apatch(アパッチ)※ジェロニモの「アパッチのおたけび」とは無関係と
                    思われます。

IDEの中の「Eclipse」や「IntelliJIDEA」が菅原先生が説明してくださっている2022年時点でよく使われるツールですが、その時々で流行のツールは変わっていったそうです。

これまでの時代の中で使われていたツールによって、どんなJavaプログラムが作られていたのか。

大きく分けて、
①Webアプリ
②組み込み系
の2つに分かれて発展していった。

【Webアプリの発展】

①Webアプリ
 ①-1 サーブレット
 → webサーバー上で動くJavaプログラム。Webプラウザからのリクエストによって起動・
   実行される。
   特徴:Javaのプログラムの中でHTMLを記述(-,java)
   ⇓
   JavaプログラムからHTMLタグを取得するには、タグの対応が分かりにくく、
   レイアウトを整えるのが難しいという壁にぶつかる
  ⇓
  ①-2 JSP
   サーブレットの課題を克服すべく、HTMLの中にJavaコードを埋め込んだ。
   Java技術や、Webサーバーで動く(ー.jsp)

  ①-3 JavaBeans
→ サーブレットやJSPだけではWebアプリ全体の機能を表現しきれない部分がある
   ⇓
    処理部分を別のクラスとして抜き出す
    ⇓
    処理を部品化して共有することに適したクラスの設計ルールを作った。
    ※JavaBeansに基づいて作ったクラスを「Bean」と呼ぶ
    (例)
    処理を抜き出す場合は、引数なしのコンストラクタを抜き出しましょう

こういう流れで
「プログラムを部品の組み合わせから作ろう!!」
という考えが広まった。
これと合わせて広まっていったのが、
「デザインパターン」

【デザインパターン】

Javaに限らず、他の言語でも使われ始めた考え方で、
「こういう風にプログラミングすると効率良いよ」
といった考えのもと、オブジェクト指向言語で開発する時によく起きる問題とそれに対処するための設計方法をまとめたもの。

デザインパターンの代表格として、MVCモデルというモデルが誕生(今でもよく使われている)

MVCモデル → サーブレット、JSP、JavaBeansの考え方を組み合わせたもの。
       WebアプリをModel(処理)、View(画面表示)、Controller(全体制御)の組み合わせ
      で構成する設計手法



MVCもでるでは、色々な技術ができすぎたため、
★対象者
★目的
に応じて、Javaの機能を3つのエディションに分けた。

【エディション】

① Java SE ( Standard Edition )
Javaの基本的な機能(クラスライブラリ)をまとめたエディション
→ デスクトップアプリケーション等を作る際に使う

② JavaEE ( Enterprise Edition )

大規模なWebサービスや、業務システムを開発するためのエディション
→後に「JakartaEE」に名称変更

③JavaMe ( Micro Edition )
家電製品や携帯端末などの組み込み機器向けのプログラムを開発するためのエディション
(例)
・OJPI ( Oracle Java Platform Integrator ) → 家電製品に組み込まれているプログラム
・IOT → 家電や、車、建物などがインターネットに接続されて情報が通信される仕組み
・ICカード → VISAのクレカのICチップなどでJavaの技術が使われている

★Javaの開発をする際に、まず最初にすることが
 JDK(Java Development Kit ) のインストール。
このJDKには、「言語仕様」「開発環境」「JavaSE」が盛り込まれている。
 (JRE、コンパイラ、クラスライブラリ)

★Java EEを使いたい場合
JDKの基本機能+JavaEEのSDK(Software Development Kit)をインストール

★JavaMEを使いたい場合
JDKの基本機能+JavaMEのSDKをインストール

【Androidアプリの躍進】

Android自体がJavaで作られているため、Androidスマホで使われるアプリもJavaで作られるケースが多い。
(同じくアプリ開発で使われているKotlinもJavaから派生して生まれた言語)

★Androidアプリをより作りやすくするために、Googleが
 「AndroidStudio」という開発ツールをリリース
→ アプリを処理するJavaファイルとレイアウト情報などをまとめるXMLファイルを作ることが
  でき、実際に開発しているマシンと実際のスマホをUSBで繋いでデモとして動かしながら
  開発ができる。

【フレームワークを使った開発】

フレームワーク → システム開発でよく使われる機能の枠組み。
        コーディング量が減るため、開発や保守の効率がアップする。
(プログラムの大枠が既にある状態で、必要な箇所だけプログラミングする)

★有名なフレームワーク
 ・Spring
 ・SpringBoot(Springが色々と機能を盛り込んでいるので、より簡単にできるように)

上記2つのフレームワークは、2022年時点ではフリーランス向けのJavaの求人でトップ2とのこと。



というわけで、Javaの歴史を学んだわけですが、これによって、今後目指すものが具体的になりましたね!!

引き続き楽しんでいこう!!!


 

コメントを残す