Pyhonに挑戦(6)からの続き
(2) shift-JISコード
当時、雑誌「アスキー」を発行していたアスキー社を中心とするグループによって、1980年代に提唱された漢字を含む文字コード。8ビットのACIIコードを内包しつつ、半角カナ文字にA1~DFを割り当て、さらに16ビットの漢字コードを割り当てるため、16ビットの第1バイトが81~9F,E0~FCの部分で第2バイトを00~FFとして漢字にコードを割り当てていました。1バイト(8ビット)で表される文字を半角文字、2バイト(16ビット)で表される文字を全角文字と呼んでいました。全角文字を半角文字の2倍の幅をとって表示することにより、半角文字と全角文字を混在させて容易に整然と表示できるため、当時流通していたMS-DOSを搭載するパソコンに採用され、その後も日本語ウィンドウズに採用されてきました。中国語など文字種の多い言語に対応できない、漢字コードの第2バイトが5Cである漢字が、UNIX系のシステムで文字化けしてしまう、などの問題点があります。
(3) UTF-8コード
キリル文字、インド系文字、アラビア系文字、スウェーデン語文字への対応を容易にするために、文字コードの拡張が考えられ、24ビットを使って文字を表すことが考えられました。1990年ごろから中国を主とする国際会議で改良が進められてきました。中国で使われる4万種以上の漢字にコードを割り当てることを主目的としたため、shift-JISとはほぼ互換性はなく、UTF-8とshift-JISの間でコード変換を簡単に行うことができません。パソコンが世界中に普及するにつれ、shift-JISよりも、UTF-8をパソコンの標準とする流れにあります。Pythonでは、UTF-8が標準です。
(4) オブジェクト指向
FORTARANとかCといった初期の手続き型言語では、処理に必要なデータの構造は、一つ一つバラバラに考えられ、それらを共通に扱うサブルーチンの作成にも、一つ一つその特徴を考慮してプログラミングを行っていました。また、プログラムは一連のシーケンスに沿って(コンピュータが処理を行う順に沿って)制作されていました。従って、キー入力待ち、あるいは、マウス動作待ちの状態では、無限ループの状態を維持するようになっていました。多くの端末を接続して複数のプログラムを同時に動かす場合には、バッチ処理と言って、定期的にタイマーで割り込みをかけて同時に動いているプログラムを順次切り替える、と言う処理を行っていましたが、これでは、複数のプログラムの効率的な並行処理とは言えません。
そこで、イベント・ドリブンというプログラム手法が考えられました。キー入力待ちで無限ループになるのではなく、パソコンが動作を停止している状況で、キー入力割込み、マウス動作割込みが発生したところからプログラムが動作を開始する、という手法です。キー入力がなされたときに、入力内容を解析する部分から、何らかのデータ処理を行う部分に向って処理要求メッセージを送り、処理終了後に、結果の画面表示を行う部分に終了メッセージを送り、さらに画面制御を行う部分に表示書き換えメッセージを送る、という具合にして一連のデータ処理を行います。
これを、手続き処理によるシーケンスでプログラムミングを行うのでは対応が難しいので、キー入力部、入力内容解析部、データ処理部、結果の表示部、画面制御部、の一つ一つの処理をそれぞれカプセル化して、
そこで、イベント・ドリブンというプログラム手法が考えられました。キー入力待ちで無限ループになるのではなく、パソコンが動作を停止している状況で、キー入力割込み、マウス動作割込みが発生したところからプログラムが動作を開始する、という手法です。キー入力がなされたときに、入力内容を解析する部分から、何らかのデータ処理を行う部分に向って処理要求メッセージを送り、処理終了後に、結果の画面表示を行う部分に終了メッセージを送り、さらに画面制御を行う部分に表示書き換えメッセージを送る、という具合にして一連のデータ処理を行います。
これを、手続き処理によるシーケンスでプログラムミングを行うのでは対応が難しいので、キー入力部、入力内容解析部、データ処理部、結果の表示部、画面制御部、の一つ一つの処理をそれぞれカプセル化して、
キー入力→入力内容解析→データ処理→結果の表示→画面制御
というような感じにできないか、ということで、データとデータの処理をまとめて、一つの単位をしてプログラミングを行う、という発想が出てきました。
オブジェクト指向では、この単位をクラスと言います。クラスは、データとそのデータを処理するプログラム(メソッドと言います)を両方持っています。
また、クラスを考えると、似たような処理を行うのにデータ構造が微妙に異なる、ということが起きるので、オブジェクト指向には、継承、という概念があります。例えば、配列と文字列には、何番目の要素、何番目の文字というところが類似しています。そこで、配列、文字列の共通的な性格を抽出して、コレクションという抽象概念を作り、先頭から何番目の要素を取り出す、末尾に文字を付加する、といった機能を共通化したプログラムで行うようにします。ですが、実数の配列と文字列では、何番目の要素が、配列では実数値で、文字列では文字、というような違いがあります。そこで、実数の配列をコレクション・クラスのサブクラス、文字列をコレクション・クラスのサブクラスというようにして、コレクションというクラスの機能やデータの持ち方をサブクラスから使えるようにします。この考え方を継承と言います。pythonでは、大元のcollectionクラスを継承してサブクラスreal_arrayを作るときは、
オブジェクト指向では、この単位をクラスと言います。クラスは、データとそのデータを処理するプログラム(メソッドと言います)を両方持っています。
また、クラスを考えると、似たような処理を行うのにデータ構造が微妙に異なる、ということが起きるので、オブジェクト指向には、継承、という概念があります。例えば、配列と文字列には、何番目の要素、何番目の文字というところが類似しています。そこで、配列、文字列の共通的な性格を抽出して、コレクションという抽象概念を作り、先頭から何番目の要素を取り出す、末尾に文字を付加する、といった機能を共通化したプログラムで行うようにします。ですが、実数の配列と文字列では、何番目の要素が、配列では実数値で、文字列では文字、というような違いがあります。そこで、実数の配列をコレクション・クラスのサブクラス、文字列をコレクション・クラスのサブクラスというようにして、コレクションというクラスの機能やデータの持ち方をサブクラスから使えるようにします。この考え方を継承と言います。pythonでは、大元のcollectionクラスを継承してサブクラスreal_arrayを作るときは、
class real_array(collection)
というようにして継承関係を明示します。こうして、同じようなプログラムをちょっとした違いによってバラバラとたくさん作る、という無駄を省きます。
また、実数の配列、というだけでも抽象的概念なので、具体的に、生徒の身長の配列というときには、実数の配列というクラスからインスタンスというものを作ります。クラスのnewメソッドを作ってインスタンスを作る、という言語が多いのですが、python言語では、クラスreal_arrayのインスタンスを作るとき、
また、実数の配列、というだけでも抽象的概念なので、具体的に、生徒の身長の配列というときには、実数の配列というクラスからインスタンスというものを作ります。クラスのnewメソッドを作ってインスタンスを作る、という言語が多いのですが、python言語では、クラスreal_arrayのインスタンスを作るとき、
height = real_array(data1)
という形でインスタンスheightを作ります。pythonのクラスには__init__(self, data1)というメソッドが用意されていて、このとき自動的にこのメソッドが呼ばれます。