Computer Science from Scratch

カナダで習ったjavaをまとめてます。

コンピュータとJavaの紹介①

<目次>

の9本立てでお送りします!

このページの目標はコンピュータの構成要素についてとjavaというプログラミング言語の概要を知る事です。

Javaとは

この連載ではプログラミング言語の一つであるjavaについて紹介します。皆さんjavaという名前は一度は耳にしたことがあると思います。javaどんなコンピュータでも動かす事が出来るコンピュータ言語つまりよく見る小難しそうなプログラミング言語のことで、ウェブサイトとかアプリとか作るのに使われます。

この記事では、まずコンピュータとは何ぞやというという疑問について深掘りしていきたいと思います。コンピュータはHardwareとSoftwareに二つによって構成されています。順番に見ていきましょうー

Hardwareについて

これまたよく聞く単語ですね。ただ、「ハードウェアって何?」と聞かれてあなたはどこまで正確に答えられますか?なんとなくガシャンゴション動く奴の事を言うんじゃないかと思っている方は大体正解です笑

ハードウェアはphysical componentsの事を指していて、physical componentsとは要は物理的に存在する部品ってことですよね。反対に言えばコンピュータ内でピコピコ言ってる電気信号とかはハードウェアではないという事です。

一般的にはハードウェアはいくつかの部品で構成されています。

  • CPU(The Central Processing Unit)
  • Main Memory
  • Secondary Storage Devices
  • Input Devices
  • Output Devices

といったものが覚えとくべきパーツですね。

上から順番に見ていくとまずCPUについてですね。

CPU について

CPUは先述した通り、The Central Processing Unitの略です。直訳すると中央で処理する塊(組織)みたいなところでしょうか?Unit って言葉はカタカナでユニットと言う事もありますが、組織や単位といった色んな意味を持つ、少し分かりずらい言葉ですよねここでは一塊になった奴(という意味での組織)っていう捉え方で問題ないと思います。直訳した時に中央で、という言い方をした通りコンピュータの心臓部分です。他のパーツから送られてくる情報を処理したり、コントロールする為の部品ですね。

一塊になった奴といった通り、CPUには二つの部門があります。

control unitarithmetic and logic unitです。

control はコントロール、つまり管理(制御)する組織で、arithmetic and logic は直訳すると算術と論理みたいな意味なので、要は情報や別のパーツから頼まれた仕事を処理する組織という事ですね。

そして良く試験で問題になるのは処理のされ方です。Fetch、Decode、Executeの三つの順序をサイクルさせながら情報は処理、制御、管理されることです。

順番に見ていきましょう。

Fetchは直訳すると取ってくるという意味。メインメモリ(次に紹介するやつ)からお仕事依頼を受け取りCPUに渡す。

DecodeはFetchで持ってきたデータをCPUにとって解析しやすい形に変換して(eoncodeして)、解析してもう一度運びやすさに特化したデータの形に戻す(decodeする)ことです。他のサイトを見るとレジスタが~とか、クロックが~とか、プロセッサが~とか書いてありますが、要は持ってきたデータをコンピュータが使う0と1だけを使い、なる早で処理する為に何段階かの行程がありますよって事です。

Executeは処理されたデータを適切な場所に運ぶことですかね。画面に表示したいデータをマウスに送っても意味ないし、間違って印刷機にデータを送ってしまうのも大変な事になる可能性があるので正しい場所にデータを送っていきます。データの保管場所であるメモリーにもおくります。こうすることで履歴を確認したり元に戻る操作(例えばCtrl + Z)をする事が可能になるんですね!

Main Memoryについて

Main Memory は通称RAM(Random Access Memory)と言います。特徴としては、その場で処理されたり入力された情報を瞬時に読み込んで記憶する事が出来る。その代わり電源を切ったらすべて消えてリセットされるという事。

Q じゃあずっと保存しておきたい情報やデータはどうすんの?

A Secondary Storage Devicesに保存しましょ

Secondary Storage Devicesについて

Secondary Storage Devicesは通称ROM(Read Only Memory)と言います。特徴としては電源がいらない。つまりRAMみたいに電源によってデータが消えたりしないということ。身近な例ではUSB(Universal Serial Bus)とかDVDとかSDカードとか。RAMを揮発性メモリなんて呼ぶのに対して、ROMを不揮発性メモリと読んだり読み出し専用メモリというようですね。これが転じてROMってろなんていうネットスラングが出来たようです。(意味は黙ってろ、つまり読むだけにして書き込んだりするなって事)

Input DevicesとOutput Devicesについて

これは皆さんご存知の通り入力したり、出力したりするパーツの事です。具体的にはキーボードやマウス、スクリーンなどなど。ひっかけ問題でUSBはInput、Output、どちらでもない、どちらでもある、のどれかを選ぶ問題があったりしますがUSBはデータを入力するのでInput Devicesの一つと考えられますね。またデータの出力先にもなっているのでOutput Devicesの一つでもあります。答えがどちらでもあるですね。

 

今まではHardWareについて勉強してきました。という事は次はSoftwareですね!

Softwareについて

ソフトウェアはピコピコする部分のことです。巷でよく聞くOS(Operation System)Aplication softwareがソフトウェアの二つの部門ですね。WindowsとかMacOSとか他にもLinuxなんかが有名なOSです。ハードウェアを心臓と例えるならソフトウェアはコンピュータの脳みそに例えられます。ハードウェアの指揮を取ったり、どうやったらCPUが早くて正確に動くかのまとめた参考書みたいなやつです。各ケースにあわせて、その参考書を頼りに考えハードウェアに指令したりするのがお仕事です。Aplication softwareは通称アプリってやつでユーザーが自分の使いやすいようにプラスアルファで足す事が出来るやつ。ワード、エクセルからSNSのアプリ等々色んなアプリがありますが、コンピュータサイエンスの観点から見ると、それらはOSに付け足す事が出来るソフトウェア、つまり副教材みたいなものですね。

Programについて

今まで何となくぼかしてきましたが、プログラムという用語の明確な定義を聞かれたら答えられますか?Computer program はコンピューターが特定の問題を解決する為に保持している指令のセットのこと。例えば、数字①を入力するコード、数字②を入力するコード、①と②を掛け算するコード、計算結果をスクリーンに表示するコード。これら一連のコードの集まりの事をプログラムという。Argorithmとも言います。敢えて違いを言うならば、アルゴリズムは順番通りにやる事が記載されているもので、プログラムはアルゴリズムの実行方法をコンピューターに指示するコードのことです。

これらを基にmachine languageつまり二進数の奴(0と1)に変換されます。人語からコンピューター語に翻訳されたということです。ただこれが厄介なことにCPUが違うとマシーンランゲージも違うということです。そこで間を取ったProgramming langageが中継の言語として使われるわけです!このプログラミング言語の一つにjavaがあります。他にもCとか色々ありますが、今回はjavaの学習なので知らなくていいでしょう()

二種類のjava

javaにはjava applicationjava appletの二種類があります。アプリケーションは独立していて、そのプログラム単体で処理が完結しているもの。アプレットはWebとかと繋げたり、他のプログラムと接続して使われる小さいプログラムのこと。アプリケーションは完全に独立しているので、外からハッキングされないのが一番の特徴であり、皆が使うメリット。

プログラムの構成要素

プログラムは全てのコードを数種類に分けて考える事が出来る。

  • Keywords
  • Operators
  • Punctuation
  • Programmer-Defined name
  • syntax

とある。順番に説明しよう。

Keywords

一番大事なワードの事で、intといった変数についてのワードや、ifといった分岐点やループを作るためのもの、またvoidといったaccess specifierというやつまで幅広く存在する。(変数とか分岐点とかは後程紹介するので今回は何か処理するためのものと分かればOk)何か特定の処理をしたいなって思った時に必ず使う大事な言葉のまとめ集でjava内に用意されている

Operators

=とか+とかの符号。色々ややこしいルールがあるけど慣れれば全く問題ない。ルールは後程説明する。

Punctuation

コードごとに区切りをつける為に文末に必ず;(セミコロン)を入れる。それの事。

Programmer-Defined name

数学とかで何か問題を解く際にこれをx,これをyと置くみたいなことがありますよね?それの事。javaでは色々な数字や文字が出てくるからそれらに対して全て名前を付けて管理します。

syntax

プログラムを書く時のルールのこと。

書いたプログラムの行方

メモ帳などで書かれたプログラムはsource codeと呼ばれパソコン内に保存されます。これらは次にjava compilerというやつでsyntax errorがないかを確認し、コンピューターが理解できるmachine langageに翻訳されます。これが二進数のやつ。それを解釈する為に、そして処理するためにJVM(Java Virtual Machine)というものがあります。これはWindows専用のJVMiOS専用のものがあり、それぞれ違う事が特徴です。どんなCPUやOSのもつパソコンでもマシーンランゲージまでは一緒です。しかしWindows内での0101とアイフォンでの0101は違うため、それそれの通訳がいるということです。

例えば、0101が10を画面に出力するというコードであるとします。しかしWindowsには10を出力するというコードが0011という風にOS内で決まっていたとします。JVM for Windowsは送られて0101を0011に再解釈するためにあるわけです。

 

とまあ色々とjavaのコードについて語ってきましたが、Intell J IDEAというアプリにコードを書いてRunのボタンを押せば実行されるのでメモ帳も必要ないし、JVMが~とか考える必要も実際はありません。

psudeocode について

頭がこんがらがらない様に、大きいプログラムを組む時はまず人語でプログラム全体の流れを書きます。箇条書きとかでいいと思います。そしたら、それを基にプログラミング言語調で書き直してみましょう、これをpsudeocodeといって、どんなkeywordsとかを使えばいいのかはっきりしますし、人語では簡単に書けてもプログラムするとなったら、どう書けばいいのかよく分からんみたいなことが多々あるので、それをプログラムを書く前に解決しておくためです。

Prepare number1 and number2

Display "What is the first number?"

Input number1

Display "What is the second number?"

Input number2

prepare number3

number3 = number1 * number2

Output "It is the result of the calculation" + number3

みたいな感じで書けばモーマンタイです。

あとはこれを基に実際にコードを書いてRunボタンを押してみて、エラーが出ればそれを基に修正を繰り返していくみたいな感じが一連の流れですね。

Object-Oriented Programingについて

javaの最大の特徴はなんですか?と尋ねられたら、どんなOSやCPUでも動かせるという点とObject-Oriented programingです!と元気に答えましょう。オブジェクト指向プログラミング言語とは、全てをモノとして考えるプログラミング言語の事です。とよく言われますがいまいちピンとこないですよね。まずオブジェクト指向プログラミング以外のプログラムは何なのかというとprocedural programing(手続き型プログラミング)ですね。これは料理で例えるなら料理そのものに近い感覚です。ある食材を切って炒めて、蒸して盛り付けて完成みたいな。ある食材がプログラミングによって色んな形に調理されて変形されて最終的に、注文していた料理として出力されるみたいな。一方で、オブジェクト指向プログラミングは料理で例えるならビュッフェに近いです。それぞれ独立した料理を一枚とプレートの上に乗せて一つづつ食べる事も出来るし、プレート上の複数の料理を混ぜて食べる事も出来るみたいな。一つ一つの料理がモノとして独立していて、それらの小さい料理つまりプログラミングが相互に関係しあったり、し合わなかったりというのをプログラマー自身が決める事が出来る。そんな感じです。色んなサイトをみるとすごろくを使って表現していますが、まあ分からなくてもぼんやりと理解していればそのうちだんだんとわかるようになってくるので、大丈夫だと思います()

 

ブログの悪いところは練習問題がないという事です。ぜひ何らかの形で自分でプログラムを書いたり練習問題を解いたりしてみましょう。因みに僕がオススメした本には練習問題とかが載っていると思います。

チャプター1はここまでなので次はチャプター2でお会いしましょうー!