所与のルールとプログラマの与えるルール

今回クラスというのが出てきた。Java勉強会5月9日http://d.hatena.ne.jp/bioinformatics/20050507
Stringというのがクラスのひとつらしい。
自分のやりたいことをやるのに適したクラスを見つけることが必要らしい。
クラスは「お仕着せ」だが、そのクラスを自分なりに「使えるものにする」ことを「オブジェクトを作る」という。

こんな理解でよいのだろうか?

だとすると、Javaでプログラミングとは、

  1. Java設計者(クラスの制定者)」に文句を言わないこと
  2. 自分のやりたいことを実現するために必要なクラスを自分のものにすること
  3. 「自分で使えるクラス」をカスタマイズする「オブジェクト化」のパターンをマスターすること

と書き表せると思いました。


以下は、ここまでの「理解」にいたるにあたっての思考過程です。

public class SampleD3L1 {
 public static void main(String args[]){
  String strMessage ;
  strMessage = "メッセージ記入欄" ;
  System.out.println(strMessage);
 }
}
  • という内容をテキストファイル"SampleD3L1.java"で保存し、
  • Java 2 SDK を用いて構築した環境において、javac SampleD3L1.java コマンドでコンパイル
  • 出来上がるコンパイル後ファイル "SampleD3L1.class" ファイルを
  • java SampleD3L1 コマンドでJava的に実行して
  • その結果、標準出力に「メッセージ記入欄」という文字列が表示される

という一連の動作は、「だれが」「どこに規定されたルール」に基づいて行っているんだろうか?
これが分かると、先週覚えたデータ型変数とクラスの違いが分かるような気がする。

  • まず、ソースを"xxxxx.java"というように"java"という拡張子で保存するということは、javac コマンドが、要求している。したがって、Javaのルール、ということになるのだろう。これは、Java 2 SDKのルールではなく、Javaのルールということでよいのだろうか?
  • 次に"xxxx.java"ファイルの記載内容だが、コンパイルが成功するために、Javaのルールに則って記載されている必要がある。これはJavaのルールということでしかありえず、問題ない。
  • 次にソースの個々の中身だが、どれがJavaの「所与のルール」で、どこからが、「プログラマが与えたルール」だろうか?
  1. 「所与ルール」
    • 単語・記号
      • public, class, static, void, main, String, args, ;, System.out.pritln
    • 用法
      • public xxxx yyyy{}
      • main(){}
      • args[]
      • String xxxxx
      • System.out.pritln()
  2. プログラマが与えたルール」
    • strMessage はString
    • strMessageは"メッセージ記入欄"
  • "xxxxx.class"という"class"という拡張子のファイルがコンパイル後ファイルとしてできるのは、javaコマンドと、"public class xxxxx{}"という「所与ルールに則った記載」の帰結である
  • "java xxxxx"というコマンドで"xxxxx.class"というファイルが実行されるのも「所与のルール」
  • 標準出力に文字列が出るのは、やはりJavaの「所与ルール」System.out.pritln に規定されている

以上