2010年2月28日日曜日

プログラム言語について-C言語-

久しぶりです。今日は、C言語についてお話します。最近では、C言語やJavaでのプログラム開発が多くなっていますが、私が最初にC言語を使うようになったのは、約25年前でした。
当時、パソコンでのシステム開発用のプログラム言語としては、アセンブラの他には、PascalやPL/M(PL/I言語の中から、パソコンシステム開発向けに限定したもの)くらいしかありませんでした。共に、メモリの確保やポインターなどを利用したプログラミングが可能となる点が、利用されていた点かと思います。

しかしながら、Pascalではビット演算機能がなく、より高速な処理を行うには不向きでした。Pascalは、設計者であるヴィルトが本来プログラミングとは、事柄を抽象的に考えるべきであり、コンピュータ内のビット形式などを意図したコーディングはすべきでないとの考え方によるものだと思います。しかし、これが、実際のプログラミングでは、より高速に処理するために、コンピュータ内のビット形式を意図する必要がありました。

このような状況下で、使われるようになったのがC言語です。C言語では、PascalやPL/Mなどのようにメモリを動的に確保したり、ポインターが利用できること、CPU上のビット操作が簡単にできること、構文が単純でありコンパイル時間が高速であったことなどからパソコンシステム用のプログラム言語として利用されるようになったと思います。

なお、C言語は、もともとUnixオペレーティングシステムを開発するために設計されているために、面白い書き方があります。。Unixが稼動するミニコンがPDP-11であったことから、PDP-11が6ビットマシンであったころから、通常は、バイナリデータを表現する際に16進数で表現されたますが、8進数の表現のが簡単になっています
 ⇒(文字列の中に16進数表現で書き込むには、「\xAB」、8進数表現で書き込むには「\253」などと指定します)

詳しくは、パソコン昔話(なぜ1バイトは8ビット)をご覧ください。

2010年2月9日火曜日

Javaで構造体を扱う

Javaは、オブジェクト指向の言語と言われますが、いままでC言語などを使ってプログラミングしていた人にとっては、C言語の構造体のメンバーに関数が追加されたものがクラスと考えることができます。詳しくは、Cプログラマーから見たJavaをご覧下さい。
したがって、JavaでのC言語の構造体は、メソッドのないクラスを定義することで利用可能となります。Javaのクラス内で構造体を利用するには、クラスの内部に別ファイルで定義したClassを利用することで対応できますが、この方法だとファイルの数が増えてしまうことが欠点となります。
各クラスのロジックをコーディングする時に、一時的に構造体を使いたくても別にファイルを作成することが必要になってしまいます。
このような場合に、簡単に構造体を作る方法がわかりました。

このような場合、クラス定義のファイルに、一時的に利用する構造体を「final」を付けたクラスとして定義します。

final class xxx_item {
 double key;
 String value;

 public xxx_item (double p1, String p2) {
  key = p1;
  value = p2;
 }
}

public class xxx_list {
 ・・・・・・・
 メソッドなどで
 xxx_item temp = xxx_item(10,"aaaaa");  
 temp.key は、10
 temp.value は、"aaaaa"
 となります。
}

このようにすると、1つのクラス定義でも簡単に構造体を利用することが可能となります。
参考にしてやってみてください。


2010年2月7日日曜日

自転車のチェーンが外れたときの対処方法

コンピュータの話ではありませんが、今日、自転車のチェーンが外れました。とりあえず、引いて家に戻りましたが、インターネットで簡単に直せることが分かりました。自転車屋さんに持っていったらお金がかかったかもしれませんが、タダで直すことができました。

後輪の歯車にチェーンの一つを引っ掛けてペダルをゆっくり回すと、次々の歯車にチェーンが噛むようになり、元通りになりました。チェーンが若干のたるみを持っているので、このような方法で直すことができます。