IT人材のためのキャリアライフスタイルマガジン

Javaとは|言語の特徴/できること/ メリット・デメリット/勉強方法

初回公開日:2017年09月27日

更新日:2020年08月28日

記載されている内容は2017年09月27日時点のものです。現在の情報と異なる可能性がありますので、ご了承ください。

また、記事に記載されている情報は自己責任でご活用いただき、本記事の内容に関する事項については、専門家等に相談するようにしてください。

言語・フレームワーク

Androidのアプリ制作でも一躍有名になったJavaプログラミングですが、これからJavaを学習しようと思っている方にJavaのメリットやデメリット、学習方法をご紹介します。Javaでどんなことができるのか、またJavaの学習に向けたスクールも紹介します。

Javaとは

Javaとは、スマートフォンや、インターネットで利用されるアプリケーション開発で使用されるの言語の一つです。 現在Googleが使用している「Google三大言語(Java、C++、Python)」のひとつでもあり、応用力のある言語として非常に根強いを誇っています。そしてこのJavaは現在、世界中で主に大企業での大規模システムや、Androidアプリなどに使用されています。 今回はJavaの簡単な歴史と特徴や、勉強方法、メリットやデメリット、就職での優位性などについてご紹介いたします。

Javaの歴史

まず、簡単な歴史から説明しますが、後々重要になる話だけします。Javaは1995年マイクロソフト社が世に出したプログラム言語です。(windowsを作った会社とは異なります。) 当初はテレビのようなインターネットなどを経由しない、小さな機械に組み込んで使う「組み込み系」とで動作させたくて作られたそうですが、当時の技術ではJavaが動くようなスペックの「組み込み系」の機械はありませんでした。(Javaの動作自体も今より遅かったです) しかし、今では技術が進歩し、Androidを代表する小型端末で使用されるようになりました。

Javaの言語の特徴とできること

Javaにはこのような特徴を備えています。 ・ 実行環境があれば、どんなマシンでも動く。(組み込み系の小さなメモリ上から汎用機まで) ・オブジェクト指向プログラミング言語 以下では特徴がどのようなものなのかをご説明いたします。

Javaの特徴~実行環境があれば、どんなマシンでも動く

「実行環境があれば、どんなマシンでも動く」ということがなぜ特徴なのか、それをご説明するには、Javaが登場する以前からの、お話を少しする必要があります。 Java登場以前のプログラムはコンピュータごとに動くプログラム言語が異なるという状態でした。コンピュータを作る会社がそれぞれにプログラム言語を作り、そのコンピュータではそれ以外のプログラムを動かすことはできなかったのです。 困ったのはプログラムを作る人達です。コンピュータが変わるごとにプログラムを新しく作り直さなくてはいけませんでした。そこで登場したのが「JVM(Java Virtual Machine:Java仮想マシン)」というプログラムです。 例えるなら、Java仮想マシンは「マシン本体と実際に動くプログラムの通訳者のようなもの」で、どのようなコンピュータであってもJava仮想マシンさえ動作すれば、Javaはどんなコンピュータ上でも利用することが出来ます。 そのため、コンピュータが別のものが変わることになっても、Java仮想マシンがあれば以前に作られたプログラムも問題なく別のコンピュータで動作させることができるのです。

Javaの特徴~オブジェクト指向プログラミング言語

Javaはプログラムを作る時に「オブジェクト指向」という考えに従ってプログラムを作ることができる言語です。 「オブジェクト指向」とは、Javaでプログラムを作れば自動的に「オブジェクト指向」のアプリが作れるという単純なものではなく、「オブジェクト指向」という考え方を理解する必要があります。 簡単に説明すると、「オブジェクト指向」はプログラムを「オブジェクト」という部品のようなものを組み立てていくというプログラムの作成手法です。 この「オブジェクト指向」は以下のような特性を持っています。 1.カプセル化 2.継承(インヘリタンス) 3.Polymorphism ポリモフィズム この三つは、「オブジェクト指向」の肝である考えなのですが、実際に触ってみないと具体的にイメージするのは難しいものです。簡単にですが、どのようなプログラミングの歴史的な経緯から「オブジェクト指向」がなぜ必要になったかを交えてご紹介いたします。

グローバルな引きこもり~カプセル化

ではまず、「処理」と「変数」それぞれに視点を置いて、「オブジェクト指向」以前のプログラミング手法で起きた問題点と、「カプセル化」という考え方が生み出された経緯をお話しいたします。

まずは、「処理」の視点から

まず、「処理」に主眼をおいて、どんな問題があったか話をしましょう。かつてプログラムのソースは悪しき「コピー&ペースト」によって、同じ処理が複数の箇所に散らばるというカオスな状態でした。しかし、開発時にはそれでいいとしても、ひとたび保守するとなった時には、このような惨状が広がっていました。 「プログラム仕様変更ですか?え~と同じ処理をしている場所を探しますね…1、2、3、…あ、ここも?あれ?…あれ?…どこで何をしているのかわからないよ…全部見直さないといけない…」 このような地獄を味わった人々は同じ処理を書かなくて言いように、人は同じ処理をする部分を切り出して「関数」(あるいは、プロシージャとかサブルーチン…大体同じ意味で使っています)というものを作り出しました。 「似たような手続きには名前をつけて再利用できるようにしよう」「ひとかたまりの手続きに名前をつけてわかりやすくしよう」こうして生まれたのが「手続き型プログラミング」というものです。これにより少し保守が楽になり、人は少し幸せになりました。 しかし、「手続型プログラミング」には限界がありました。例えば、こんな問題があるのです。これは、「猫型プログラミング言語史観(1)」で紹介されていた例です。C言語のソースになります。見慣れない人もいるかもなので、コメントをつけておきます。

#include /* 構造体 「人」の定義 */ // 「構造体」というのは、「値の塊」だと思ってください。 typedef struct { char* name; int age; } person_t; /* 「お誕生日おめでとうございます」関数 */ void happy_birthday(person_t* p){ p->age++; // 引数で渡された「人」の年齢に「1」加算 } /* main関数 */ int main(int argc, char** argv){ person_t yoshikawa = {"吉川さん", 27}; // 吉川さん、27歳を定義 happy_birthday(&yoshikawa); // 吉川さん、お誕生日おめでとうございます printf("yoshikawa's age is %d", yoshikawa.age); // 吉川さんの年齢をコマンドラインに表示 return 0; // 終了 }

関連タグ

アクセスランキング