「コンピュータはなぜ動くのか」まとめ

## 第1章
コンピュータの絶対的な3つの基礎
1.コンピュータはプログラムの解釈と実行
2. プログラムは命令とデータの集合体
3. コンピュータの都合は、人間の感覚と異なることがある*1

ICとは外部から入力されたデータを演算し、その結果を外部に出力するもの。

命令とは入力、演算、出力をコンピュータに指示するもの。

データとは、命令の対象となる入力情報によって得られる出力情報

コンピュータとは、プログラムを動作させるもの。

*1 代表例は、すべての情報を数値に置き換えること。色や秘密鍵などは数値に置き換えられる。

## 2章
CPUとは、人間でいうと脳に相当する部分。内部で演算を行い、メモリーとI/Oをコントロールする。

メモリーとは、命令とデータを記憶するためのもの。駐車場みたいイメージ。

I/Oとは、パソコン本体、キーボード、マウス、ディスプレイなどの周辺機器を接続し、データの受け渡しを可能にするもの。

クロック信号とは、CPUを動作させるためのもの。電圧の高低を繰り返す。信号みたいイメージ。

クロック・ジェネレータとは、クロック信号を出力するもの。この中には水晶があり、振動数に応じてクロックを発生させる。

ディップ・スイッチとは、プログラムの入力を可能にする装置。

LEDとは、プログラムの動作結果を出力する装置

アドレス・ピンとは、CPUに付いており、データの入出力先を指定させることを可能にするもの。

データ・ピンとは、データの入出力を可能にするもの。

レジスタとは、CPUとI/Oの中でデータを記憶するもの。倉庫みたいなもの。

ポートとは、I/Oが外部装置とデータを受け渡すことを可能にするもの。荷物の荷下ろしを行う場所みたいなもの

制御ピンとは、ICの機能をコントロールするための電気信号を入出力するためのもの。

コンデンサとは、電気をためるもの。

## 第3章
マシン語とは、0と1が並んだプログラミン言語

メモリーのアドレス空間とは、メモリーの中にあるデータの格納場所を指定するアドレスの範囲。荷物置き場みたいなイメージ。

アセンブリ言語とは、マシン語を英語でわかりやすくしたものをニーモニックと呼び、
そのニーモニックを使用したプログラム言語。

オペコードとは、「○○せよ」という命令のこと。

オペランドとは、命令対象となる「○○を」の部分を意味する

第4章
フローチャートとは、プログラムの流れを表した図のこと。地図みたいイメージ。

プログラムの種類は3つある。小さい番地から大きな番地に向かって進む「順次進行」、途中で枝分かれする「条件分岐」、何度も実行する「繰り返し」の3つ。

アルゴリズムとは、与えられた問題を解く順序。

## 第6章
変数とは、データの入れ物

配列とは、複数のデータを格納するためのメモリー領域をまとめて確保し、全体に1つの名前を付けたもの。旅行客が荷物置き場に荷物を置くイメージ。

データ構造とは、データの置き方。

スタックとはデータを山のように積んでいく

キューとは、データを行列のように並ばせる

リストとは、データの並びを任意に変更できる

2分木とは、データの並びを2またにわける。

## 第7章
OOPとは、いろいろな意見が本には書かれているが、その1つに「部品を組み合わせてプログラムを構築する」ものとある。

クラスとは、金型みたいなもの。

オブジェクトとは、金型で生成されたもの。

## 第8章
データベースとは、データを貯めて、利用しやすいように整理したもの。ファイルみたいイメージ。

リレーショナル・データベースとは、データを複数のテーブルに分けて管理し、テーブル同士の関係を記録したもの。

データベース・アプリケーションとは、データベースを利用するためのプログラム。

DBMSとは、簡単にデータファイルを読み書きできるようにし、データを矛盾なく安全に保つ。例えば、SQL文をデータベースに送信したら、MySQLというDBMSがそのSQL文を受け取り、データベースに送る。

スタンドアロン型システムとは、1台のPC上にデータファイル、DBMS、アプリケーションが配置されている状況で行うシステム開発。

ファイル共有型システムとは、1台のPC上にデータファイルを配置し、DBMS、アプリケーションが配置された複数のPCから共有して行うシステム開発。

クライアント/サーバー型システムとは、1台のPC上にデータファイル、DBMSを配置し、アプリケーションが配置された複数のPCから利用するシステム開発。

Webサーバーとは、データファイルとDBMSが配置されたPCのこと

クライアントとは、アプリケーションが配置されたPC

Webシステムとは、サーバーとクライアントの間がインターネットで接続されているもの。クライアントにはWebブラウザだけが配置されている。

### データベースを設計する
Step1: 必要なデータを洗い出す
Step2: データの属性を決め、テーブルを作成
レコードとは、テーブルに登録される1行のデータのまとまり。
カラムまたはフィールドとは、列のこと。属性の設定対象となる。

Step3: テーブルを分割し、整理する
正規化とは、テーブルを複数に分け、個々のテーブルの関係を設定し、データベースの構造を整理すること。

キーとは、テーブルとテーブルを関係づけるためのカラム。

主キーとは、各テーブルに、カラムの中にある値が分かればレコードを特定できるキー。他のレコードと重複しないもの。

外部キーとは、他のテーブルの主キーのこと。

リンク・テーブルとは、2つのテーブル間に追加されたテーブルのこと。1対多に分けることができ、芋づる式に情報を探すことが可能。

インデックス・テーブルとは、カラムの値とそのカラムを持つレコードの位置を記録したもの。高速に検索や並べ替えを行うことを可能にする。

Step4：ユーザー・インターフェイスの設計
データベースの操作の種類は、CRUDと呼ばれるものがある。
Create（登録）、REFER（取得)、UPDATE(更新)、DELETE（削除）の頭文字をとったもの。データベース・アプリケーションはレコードのCRUDができれば良い

SQL文とはDBMSにCRUDを指示する文。

トランザクションとは、複数のSQL文になったもの。

データ・オブジェクトとは、WindowsアプリケーションからDBMSにSQL文を送るソフトウエア部品。JavaでMySQLを使用する場合、JDBC。

トランザクション制御とは、2つのSQL文を送信し、何らかのトラブルにより1つのSQL文をしか成功しなかったという問題を防ぐための考え。この問題を避けるためにSQL文では、3つの命令が用意されている。1つは、トランザクション開始することをDBMSに伝えるBEGIN TRANSACTION命令、トランザクションの終了を伝えるCOMMIT、最後はトランザクションの途中でトラブルが発生した場合、トランザクション開始前の状態に戻すROLL BACK。

## 第9章
LANとは、小規模なネットワーク。つまりグループ化されたコンピュータ群。

WANとは、企業間を結ぶ大規模なネットワーク。

MACアドレスはメーカ名＋商品番号で規定されたもの。ハードウェア的に設定するもの。

IPアドレスは上位階層から地域、プロバイダーなどのグループごとに割り当てられる
数値。このグループに分けることで宛先までの道のりがスムーズになる。ソフトウエア的に設定するもの。

ホストとは、IPアドレスが設定されたコンピュータ

ネットワーク・アドレスとは、IPアドレスの中でLANを表す部分。

ホスト・アドレスとは、個々のコンピュータを表す部分。

サブネット・マスクとは、IPアドレスのどこまでがネットワークアドレスで、どこからがホスト・アドレスなのかを区別するためのもの。ソフトウエア的に設定するもの。

ルーターとは、経路の案内人みたいなもの。どこに情報を送信したら良いか決める役割を持つ。

DNSサーバーとは、コンピュータに付けられた名前のホスト名＋ドメイン名を組み合わせて作られたFQDNをIPアドレスに変換するもの。FWDNは、例えば、www.....comみたいなもの。また、ドメイン名とは特定のネットワークを教えてくれるもの。

ARPとは、IPアドレスをMACアドレスに変換するもの。

キャッシュとは、メモリー内に一時的にデータを記録しておくこと。

TCPとは、データの送信者と受信者がお互いに相手の確認を取りながら、確実にデータを渡すプロトコル。

IPとは、IPアドレスから送信先を指定し、データを送るプロトコル。

パケットとは、MACやIP、TCP等の情報が付加されたもの。TCPによって送信される。

## 第10章
平文とは、暗号化されていない文。

文字コードとは、個々の文字にあてられたコード

鍵とは、暗号化、復号化する際に使用される値。

公開鍵暗号方式とは、データを送る際はインターネット上で公開している受信者側のpublic keyを使ってデータを暗号化し、送られた側は自分のprivate keyを使って復号化を行う手法。

RSAとは、公開鍵暗号方式を実現するためのアルゴリズム。

電子署名とは、データの送信者を証明するもの。平文を構成するすべての文字コードを使用し、何らかの計算式で算出された値をprivate keyで暗号化し、public keyで複合化する手法。

## 第11章
XMLは、コンピュータが独自のタグ（例<dog>)で簡単に情報を識別できるようにしたもの。分散コンピューテイングにより得られた結果やぷろぐらむｗ呼び出す情報を送受信する際に使用される。

分散コンピューテイングとは、ネットワークで接続された複数のコンピュータにプログラムを分散して配置し、連動させることでコンピュータ・システム全体を機能させるもの。