14Dec
みなさん、こんにちは。
本日は、「アルゴリズム・プログラミング」について書いていきます。
7月中旬から始めた用語説明も今回で最後になります。
それでは、始めていきましょう。
「アルゴリズム」とは、問題を解決するための方法や手順を一般化したものです。
一般化という言葉は、高校生であれば聞いたことがあるかと思いますが、「広く通用するものとすること。」という意味であり、今回であれば問題解決の流れ(一連の動作)を決めたものということです。
「プログラム(ソース、ソースコード)」とは、コンピュータに命令を指示する言語を用いて表したものであり、これを作成することを「プログラミング」といいます。
このときに用いる言語を「プログラミング言語」といい、人工的に構成された言語体系をもっています。
このプログラミング言語は、多種多様であり、それぞれの用途はもちろん、一部では好みによっても用いるものが変わります。
プログラミングを行う際に有効なものの1つが「フローチャート」です。
フローチャートは、アルゴリズムを視覚的にわかりやすく表現した図の1つで、フローチャートを見ることによって、プログラムを考える際に必要な階層などを取り決めることができます。プログラミングの事前準備のようなものですね。
アルゴリズムをしっかりと考え、フローチャートに間違えなく反映させ、プログラミングを行うことで、システム上の不具合は、減らすことができます。
しかし、今後のことを考えると、発展性をもたせることが必要なので、各データには意味をもたせ、プログラム上で保持できるようなものにすることも必要です。
一方で、すべてのデータを保持するとなると膨大なデータ量となるので、プログラムの動作速度にも影響を及ぼします。
これだけでも「いたちごっこ」状態ですね…
さて、本題に戻りましょう。
プログラミングの工程で何らかのミスがあった場合にコンピュータからメッセージが返される場合があります。これが「エラーメッセージ」です。
「バグ」という問題の原因によって、問題が発生したことを示すものですが、無限ループなどが発生した場合にはエラーメッセージは表示されません。
プログラムを使用するためには、「デバッグ」というバグを取り除く作業を行う必要があります。
エラーメッセージの例を挙げましょう。
「構文エラー(syntax error)」機械語に翻訳できない、文が成立していないときのエラーです。
「実行時エラー(runtime error)」途中で動作が停止するエラーです。
「論理エラー(logic error)」正しい結果が得られないときのエラーです。
さて、プログラミングを行う際に、毎回すべてのコードを考えないといけないのでしょうか。
今では、プログラミング言語の仕様にあらかじめ用意された処理があります。これを「組み込み関数」といいます。
よく例として挙げられるのがレシピです。料理のレシピや作業手順書などがこれに似ています。1からすべてを考えるのではなく、既存のものを応用させていくというような形です。
一方でユーザが作成する関数を「ユーザ定義関数」といいます。
これらの関数などをファイルとしてまとめたものを「モジュール」といいます。
「配列(リスト)」とは、データの数が多い場合に異なる名前の変数を複数使用せずに、複数の値を1つの名前(配列名)によって管理する仕組みのことです。
「一次元配列」や「二次元配列」というように要素をいくつの添字で指定するかで配列の次元が変わります。
ここでいう、要素とは配列中の各変数のことで、添字(インデックス)とは要素の番号のことです。
変数にも種類があり、関数の外側で宣言し、プログラム全体が有効になる「グローバル変数」と関数の内側のみ有効となる「ローカル変数」があります。
この配列の中からも目的の値を見つけなければいけません。
このことを「探索」といいます。
そして、この探索にも種類があります。
「線形探索」とは、端から順に目的の値である探索値を探すアルゴリズムで
「二分探索」とは、データが昇順または降順によって整列されている配列に対して、探索範囲を半分に狭めることを繰り返して探索値を絞り込むアルゴリズムです。
膨大な量のデータであればあるほど、きちんと整列させた状態で二分探索を行うことでより早く処理を行うことができますね。
「交換法」とは、データを昇順または降順に整列させるアルゴリズムのうち、データの大小を比較し、交換を行う方法です。
「値渡し」とは、値をコピーする渡し方で
「参照渡し」とは、値を共有する渡し方です。
処理の流れに沿ってプログラミングを作成する方法を「手続き型プログラミング」といい、
関連するデータとそれに対する操作を1つのオブジェクトととらえて、プログラムを作成する方法を「オブジェクト指向プログラミング」といいます。
各種用語の説明です。
・プロパティ:オブジェクトの属性・その値
・メソッド:関数
・クラス:いわゆる設計図のようなもの
・オブジェクト:設計図をもとに作られたもの(インスタンスともいう)
・クラスの定義:クラスを作ること
・フィールド:クラス内で宣言されている変数
・コンストラクタ:オブジェクトの生成時に自動的に呼び出されるメソッド
・ゲッタメソッド:フィールドの値を取得できるメソッド
・セッタメソッド:フィールドに値を設定するためのメソッド
・デコレータ:関数に処理の追加や変更を行う機能
・インスタンス化:クラスをもとにしてオブジェクトを作ること(単にオブジェクトの作成ともいう)
データ構造や処理の流れなどのソフトウェアに関連する様々な設計や機能を図示するための表記法を定めたものを「統一モデリング言語(UML)」といい、オブジェクト指向の分野で多く用いられます。
構成要素として、クラス図やオブジェクト図などシステムの構造を示す「構造図」や状態遷移図やアクティビティ図などの動作や変化を示す「振る舞い図」などがあります。
上記の「状態遷移図」とは状態遷移を図形式にしたもので、表形式にした「状態遷移表」というものもあります。
そもそも「状態遷移」とは、ある状態から別の状態に変化することです。
「NoSQL」とは、データベースの1種でビッグデータの対応を可能としています。
そもそも「SQL」とは、「Structured Quety Language」の略であり、データベースの制御を行うプログラミング言語です。SQLはISOによって規格化されているため、1つを習得すれば、大半のものに対応できるようになります。数年おきに規格が改定されるので、その都度確認は必要ですが…
このNoSQLはその名のとおり、SQLを使用しないデータベースで今までのリレーショナル型の課題解決ができるとされています。
リレーショナル型データベースは、端的にいえば「表」です。
一方でNoSQLの一種である「キーバリュー型」では、キー(項目名)、バリュー(値)の組を書き込み、キーを指定することで、そのキーに紐づいたバリューを読みだすことができるものです。
本日はここまでです。
情報Ⅰの用語の説明を書いてきましたが、情報Ⅰの範囲外になるので書いていなかったもの、豆知識のような部分はかなり省きましたので、今後はそれらについて書いていこうかとも思っています。
何かこのブログ記事で触れてほしい内容があれば、教室までご連絡ください。