【プログラム】プログラムの性質〜プログラム言語の種類と実行の流れまで解説!

【初心者必見】プログラムの性質~プログラム言語とプログラム実行の流れまで解説!
ハテオ君

プログラムってどんな種類があり実行の流れはどのような手順で行われているんだろう?

今回はこの悩みを解決していきます。

本日の記事テーマ

プログラムの性質〜プログラム言語の種類と実行の流れまで徹底解説!

プログラムはコンピューターへ命令を行うデータの塊です。

このプログラムはいくつかの性質や属性などに分類されています。
また、プログラム言語にもさまざまな種類があるのでIT未経験者には覚えるのが大変です。

しかし、このプログラムは主に人間の手で作成するのでIT業界で働く上では必須知識となっていますので今回の内容でしっかり理解していきましょう!

今回の記事内容

  • プログラム5つの属性と性質
  • プログラム言語の種類
  • 言語プロセッサ
  • プログラムの作成~実行までの手順(コンパイル方式)
  • プログラム開発時に使われる便利ツール

記事の最後には、今回の内容に関しての確認問題も用意していますので、インプットとアウトプットとしても是非活用してみてください。

元中卒の私が誰でも理解できるように解説していきます。

それでは早速見ていきましょう!

黄島 成

プログラム5つの属性と性質

プログラム5つの属性と性質

プログラムはコンピューターに指示を与える命令データのことで、メモリに保存されCPUがメモリから取り出し実行を行います。

そんなプログラムは、使用形態によって以下4つの属性と性質に分かれます。

  • リ再配置可能 (リロケータブル)
  • 再入可能 (リエントラント)
  • 再使用可能 (リユーザブル)
  • 再帰的 (リカーシブ)

順番に属性の特徴や性質を見ていきましょう。

再配置可能(リロケータブル)

再配置可能とは、主記憶上のどこのアドレスに配置しても、実行することが出来るプログラムの性質です。

別名「リロケータブル」とも呼ばれます。

再配置可能図

再配置可能な処理の流れ

  • ①:プログラムの先頭アドレスをベースレジスタに設定
  • ②:プログラムの先頭からの相対アドレスを採用
  • ③:主記憶上の任意のアドレスに配置

再配置可能では、相対アドレスを採用することでプログラム変更をせずに主記憶上の任意のアドレスに配置することが可能になります。

再配置可能=どこに配置しても実行が可能<

再入可能(リエントラント)

再入可能とは、同時に複数のタスクが共有して実行しても、正しい結果が得られるプログラムの性質です。 

別名「リエントラント」とも呼ばれます。

再入可能図

再入可能な処理の流れ

  • ①:プログラムを手続き部分とデータ部分に分割
  • ②:データ部分をタスクごとに持つ

再入可能では、上記流れを行う事で複数のタスクを実行しても、正しい結果を得ることが可能です。

再入可能=複数のタスクが同時に使用

再使用可能(リユーザブル)

再使用可能とは、一度実行したあと、ロードし直さずに再び事項を繰り返しても、正しい結果が得られるプログラムの性質です。

別名「リユーザブル」とも呼ばれます。

再使用可能図

再使用可能な処理を実現するためには、プログラム終了後、プログラム中で使用している変数の値を初期値に戻す必要がある。

再使用可能=再ロードしなくても使用可能

再帰的(リカーシブ)

再帰的とは、実行中に自分自身を呼び出すことができるプログラムの性質です。

別名「リカーシブ」とも呼ばれます。

再帰的図

再帰的な処理を実現するためには、実行途中の状態を、スタックを用いてLIFO方式で記録し、制御する必要がある。

再帰的=自分自身を呼び出す

プログラム言語の種類

プログラム言語の種類

プログラム言語は、主に以下2つの種類が存在します。

  • 低水準言語
  • 高水準言語

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

低水準言語

低水準言語とは、コンピュータが理解しやすい機械語または機械語に近い形式で記述した言語になります。

低水準言語図

低水準言語では主に以下の2つに分類されます。

  • 機械語=1と0で構成される、コンピュータが理解できる唯一の言語
  • アセンブラ言語=機械語を1対1で記号に置換えた言語

高水準言語

高水準言語とは、人間が理解しやすい自然言語に近い形式で記述した言語になります。

高水準言語

高水準言語では主に以下7つの種類があります。

  • OBOL=事務処理計算に適した言語
  • FORTRAN=科学技術計算に適した言語
  • C=システム記述に適した言語
  • BASIC=初心者向きの会話型言語
  • Pascal=プログラミング教育用言語
  • C++ C=言語にオブジェクト指向の概念を取り入れた言語
  • Java=インターネットや分散システム環境で利用されるオブジェクト指向型言語

Java(ジャバ)

人間でも理解できる高水準言語には、Java(ジャバ)と呼ばれる言語があり、このJavaは代表的なプログラム言語になります。

Javaには、複数の種類があり、使用用途によって使い分けられます。また、Javaの様々な種類のことを「フレームワーク」と呼ばれます。

Javaの種類

名称概要
Java Servlet (サーブレット)Javaで開発されたプログラム。
クライアントの要求に応じてWebアプリケーションサーバ上で実行される。
JavaApplet (アプレット)Javaで開発されたプログラム。
WebサーバからダウンロードしてクライアントのWebブラウザ上で実行される。
JavaApplication (アプリケーション)Java VMが稼働している環境だけあれば、WebブラウザやWebサーバがなくても動作するプログラムです。
Java VM(仮想マシンン)Javaで開発されたプログラムを実行するインタプリタであり、Javaコンパイラが生成したバイトコードと呼ばれる中間コードを実行する機能をもっています。これにより、異なるハード ウェアや基本ソフトウェア上でも実行できます。
JavaBeans(ビーンズ)Javaで開発されたプログラムを再利用できるようにアプリケーションの部品として取り扱う ための規約です。

言語プロセッサ

言語プロセッサ

言語プロセッサは、人間が理解できるプログラム言語で記述した原始プログラム(ソースプログラム) を、コンピュータが理解できる機械語に翻訳するためのソフトウェアの総称です。

プログラミング言語で作られたプログラムは、人間が理解できる記号や文字列で書かれているため、コンピューターは理解ができません。


そのため、コンピュータが理解できる機械語に変換する必要があります。

このように、高水準言語化からて低水準言語へ変換する時に使われるソフトウェアを「言語プロセッサ」と呼びます。

言語プロセッサ図

言語プロセッサの代表的な種類

  • アセンブラ
  • インタプリタ
  • コンパイラ
  • ジェネレータ

アセンブラ

アセンブラは、低水準言語に分類されるアセンブラ言語で書かれた原始プログラム(ソースコード)を、機械語のプログラムに翻訳する言語プロセッサです。

アセンブラ図

インタプリンタ

インタプリンタは、高水準言語でかかれた原始プログラムを、1命令ずつ解釈していきながら同時に実行する言語プロセッサです。

インタプリンタ図

インタプリンタを使う代表的な言語は、「JavaScript・PHP・Ruby・Pythonなどが挙げられます。このような言語を「スクリプト言語」と呼びます。

コンパイラ

コンパイラは、高水準言語で書かれた原始プログラム(ソースコード)を、一括して機械語のプログラムに翻訳する言語プロセッサです。

コンパイラ図

このようにコンパイラを使い機械語に変換することを「コンパイル」と呼ばれ、この方式を「コンパイル方式」と呼びます。

コンパイラを使う代表的な言語は、「C・C++・Java・FORTRAN・COBOL・Pascalなどが挙げられます。

インタプリンタとコンパイラの違いは、1つずつやるのか?まとめてやるのか?となります。

ジェネレータ

ジェネレータは、必要なパラメータを設定したら、処理の目的に応じたプログラムを自動的に生成してくれる言語プロセッサです。 

ジェネレータ図

その他の言語プロセッサ

その他の言語のプロセッサの一覧

名称概要
プリコンパイラ高水準言語に付加的に定義された機能と文法に従ってコーディングされたプログラムを、元の高 水準言語だけを使用したプログラムに変換するプログラム
クロスコンパイラあるコンピュータを使用して、そのコンピュータとは異なる命令方式をもつコンピュータで実行できる目的プログラムを生成するプログラム
トランスレータある処理形容に書かれた原始プログラムを、他の処理形容の原始プログラムに変換するプログラム
エミュレ―タほかのコンピュータ用のプログラムを解読し、実行するマイクロプログラム。スマホゲームをPCで実行する時などに使われます。

プログラムの作成~実行までの手順(コンパイル方式)

プログラムの作成~実行までの手順(コンパイル方式)

人間が高水準言語で原始プログラム(ソースコード)を作成したあと、そのプログラムを実行するまでの流れを解説していきます。

ここでは、「コンパイル方式」によって実行するまでの手順で解説します。

流れは以下図の通りです。

ソフトウェア作成手順図

ソフトウェア作成手順

  • ①:コンパイル
  • ②:リンク
  • ③:ロード

①:コンパイル

コンパイルは、原始プログラムから目的プログラム(オブジェクトプログラム)を作成する作業です。

この部分では「コンパイラ」が担当します。

コンパイラはプログラムコードを解釈して次のような手順でオブジェクトコードを生成します。 

コンパイル手順

コンパイラによる最適化の主な目的は、プログラム実行時の処理効率を高めたオブジェクトコードを生成し、プログラムの実行時間を短縮することです。

コンパイラは原始プログラムから目的プログラムへ生成生産する役割を担当

②:リンカ(連結編集)

リンカは、目的プログラムなどを組み合わせて、1つのロードモジュール(実行可能プログラム)を作成です。

この部分では「リンカ(リンケージエディタ)」が役割を担当します。

リンカの手順図

リンカは目的プログラムからロードモジュール作成する役割を担当

この目的プログラムを組み合わせる時、以下2つの組み合わせ方法があります。

  • 動的リンキング(ダイナミックリンク)
  • 静的リンキング(スタティックリンク)

動的リンキング(ダイナミックリンク)

動的リンキングとは、プログラム実行中に必要になった時点で、共有ライブラリやシステムライブラリに容易されているプログラムモジュールをロードすることです。 

静的リンキング(スタティックリンク)

静的リンキングとは、プログラムの実行に先立ち、連係編集において複数の目的プログラムを全てリンク(連結)しておくことです。 

③:ロード

ロードは、実行に先立ってロードモジュールを主記憶上へ読み込みをする作業です。

この部分では「ローダ」が役割を担当します。

ロード流れ図

プログラム開発時に使われる便利ツール

プログラム開発時に使われる便利ツール

コンピューターへの命令する際のプログラムは、人間が理解できるプログラム言語(高水準言語)を使ってパソコンで作成されます。

プログラム作成図

そのプログラムを作成する時に使われる代表的な便利ツールを最後に紹介していきます。主に以下2つです。

  • デバックツール
  • IDE(総合開発環境)

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

デバッグツール 

デバッグツールとは、プログラム開発の際に使われるツールの1つで、プログラムに潜んでいる誤り(バグ)を発見し、修正する(デバッグ)ソフトになります。

別名「デバッガー」とも呼ばれ、人間がプログラミング言語で書いたソースコードには誤りがあることが多く、この誤りを探し出し見つけるとすごく時間がかかってしまいます。

しかし、このデバックツールを用いることで、誤った箇所を正確に発見することができるので、効率よくプログラムの開発が可能になります。

デバッグを支援するツール(デバッガ)には主に以下3つのようなものがあります。

  • トレーサ
    プログラムの命令の実行順序、実行結果などの履歴情報を出力する
  • スナップショットダンプ
    プログラムの特定の命令を実行するごとに、指定されたメモリの内容を出力する ファイルダンプ 磁気テープファイルや磁気ディスクファイルなどの内容を出力する
  • メモリダンプ
    プログラム実行中にエラーが発生したとき、メモリの内容を出力する

プログラミングに興味ある方やプログラマーを目指しているは覚えておきましょう!

IDE(総合開発環境)

IDE(統合開発環境)とは、プログラミングする時に必要な機能を1つのパーケージにまとめたソフトウェアのことです。

  • リコードを書くテキストエディタ
  • コンパイラ
  • デバックツール
  • コードのバージョン管理

などの機能がまとめて入っているソフトウェアです。

このIDEを使うことで、プログラミングする前の準備時間を大幅に削減でき、初心者でも簡単にプログラミングを行うことができるメリットがあります。

IDEには数多くの種類が豊富にあります。

例えば、OSSとして提供されている「Eclipse(エクリプス)」などがあり、EclipseはJavaをはじめ、複数の言語に対応しています。

プログラミング初心者にはとても役に立つソフトウェアとなっています。

今回のまとめ&確認問題

【初心者必見】プログラムの性質~プログラム言語とプログラム実行の流れまで解説!まとめ

プログラムの基礎知識については上記内容で以上となります。

それではまず今回の内容をまとめていきましょう。

まとめ

  • プログラムの属性は、再配置可能 、再入可能 、再使用可能 、再帰的 の4つが存在する。
  • プログラム言語は、高水準言語と低水準言語の2種類がある。
  • プログラムは、言語プロセッサを仲介し人間とコンピュータの理解できる言語に変換する。
  • プログラムは、コンパイル→リンク→ロードの順番で実行する。
  • プログラム開発時には、デバックツールとIDEを使うと簡単に作成できる。

今回の確認問題に挑戦してみましょう!

確認問題

ソフトウェア確認問題③

「次へ」で問題スタート!

①解説

【問題①】

コンパイラにおける最適化の説明として、適切なものはどれか。

:オブジェクトコードを生成する代わりに、インタプリタ用の中間コードを生成する。
不正解× 中間コードの目的は、後続のインタプリタが最適化を行いやすくするため
:コンパイルを実施するコンピュータとは異なるアーキテクチャをもったコンピュータで動作するオブジェクトコードを生成する。
不正解× クロスコンパイラの説明
:プログラムコードを解析して、実行時の処理効率を高めたオブジェクトコードを生成する。
正解○
:プログラムの実行時に、呼び出されたサブプログラム名やある時点での変数の内容を表示させるようなオブジェクトコードを生成する。
不正解× デバッガ(debugger)の説明

【解説】

コンパイラは、高水準言語で書かれた原始プログラム(ソースコード)を、一括して機械語のプログラムに翻訳する言語プロセッサです。

コンパイラによる最適化の主な目的は、プログラム実行時の処理効率を高めたオブジェクトコードを生成し、プログラムの実行時間を短縮することです。

つまり答えは「」となる。

②解説

【問題②】

Javaのプログラムにおいて、よく使われる機能などを部品化し、再利用できるようにコンポーネント化するための仕様はどれか。

:JavaBeans
正解○
:JavaScript
不正解×
:Javaアプリケーション
不正解×
:Javaアプレット
不正解×

【解説】

Javaの種類

名称概要
Java Servlet (サーブレット)Javaで開発されたプログラム。 クライアントの要求に応じてWebアプリケーションサーバ上で実行される。
JavaApplet (アプレット)Javaで開発されたプログラム。 WebサーバからダウンロードしてクライアントのWebブラウザ上で実行される。
JavaApplication (アプリケーション)Java VMが稼働している環境だけあれば、WebブラウザやWebサーバがなくても動作するプログラムです。
Java VM(仮想マシンン)Javaで開発されたプログラムを実行するインタプリタであり、Javaコンパイラが生成したバイトコードと呼ばれる中間コードを実行する機能をもっています。これにより、異なるハード ウェアや基本ソフトウェア上でも実行できます。
JavaBeans(ビーンズ)Javaで開発されたプログラムを再利用できるようにアプリケーションの部品として取り扱う ための規約です。

上記Javaの種類の中で再利用出来る使用はどれか?答えは「」ですね。

③解説

【問題③】

リンカの機能として、適切なものはどれか。

:作成したプログラムをライブラリに登録する。
不正解×:コンパイラの機能
:実行に先立ってロードモジュールを主記憶にロードする。
不正解×:ローダの機能
:相互参照の解決などを行い、複数の目的モジュールなどから一つのロードモジュールを生成する。
正解○
:プログラムの実行を監視し、ステップごとに実行結果を記録する。
不正解×:デバッガの機能

【解説】

リンカは、目的プログラムなどを組み合わせて、1つのロードモジュール(実行可能プログラム)を作成します。

この部分では「リンカ(リンケージエディタ)」が役割を担当します。

つまり答えは「」となる。

最後まで読んでいただきありがとうございました!

今回の内容が、役に立ったな!と思ったらシェア&ブクマ登録よろしくお願いします。

また、質問や問い合わせに関しては、コメント欄かお問い合わせフォームを活用ください。

それではまたお会いしましょう。

黄島 成

-ソフトウェア
-