ウェア技術教育をテーマとしたETロボコンは6年目を迎えました。2007が開催されました。多くの出会いと学びにあふれた、刺激的な2日間でした。オブジェクト倶楽部のコミュニティライブ、角谷信太郎のセッションへも、たくさんの皆さんにご参加頂きました。心より感謝申し上げます。当日資料を公開いたしました。「もう一度あの空気を味わいたい!」「参加できずに残念!」どちらの皆さんも、ぜひチェックしてみてくださいね。〜ETロボコン〜皆さん、ロボコン知ってます??そう。テレビで放送されたりしてるロボコンです(事務局注:赤い、あのロボコンじゃありませんよ)。ソフトウェア屋さんからすると「いやいやロボットなんて作れないし...」と見るだけのものになってしまいますよね。そこで、今日は「ETソフトウェアロボットコンテスト(愛称:ETロボコン)[*1]」という、ソフトウェアで勝負するロボコンがありますのでご紹介します。ETロボコンはソフトウェアについて競い合うロボコンです。ロボットはLego社のMindstorms[*2]を使用し、全てのチームが同じ条件で競技を行います。Legoブロックでライントレースするロボットを組み立てるのですが、このロボットは各チームとも同じ設計図に基づいて組み立てます。モーターのチューンナップは当然禁止です。ロボットの動き(コースを回る時間)以外に、ソフトウェアの設計も審査対象です。オブジェクト倶楽部からは主宰の平鍋が審査員として、私、山口も技術委員として参加しています。何かと画面と睨めっこになりがちな毎日かと思いますが、自分の思いどおりに"もの”が動くと大人でもウキウキしてきちゃいます。観戦してみてはいかがでしょうか。自分の書いたUMLが著名な審査員[*3]に評価してもらえたり、1つの問題に対して100を越える[*4]モデルを見比べたりできる機会は、ETロボコンだけですよ。#実は、オブジェクト倶楽部のメンバも過去に3人参加しています。2006年参加チーム数実績_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。クラスと型は同じもの?こんにちは、天野勝です。今回のお言葉は「クラスと型は同じもの?」[*1]です。見で、解釈、解説してみます。達しあって、協調しながらシステムとして動作するというのが、基本スタイルです。クラスには、どのような状態を持つかをフィールドとして定義し、メッセージを受け取ったらどのように振舞うべきかといったルール的なことをメソッドとして定義します。コンパイラによって、他のクラスのインスタンスに対してメッセージが送れるか(メソッドを呼び出せるか)についてチェックして、所望するメッセージを受け取れない場合はエラーとして報告されます。このようなメソッド呼び出しをうまく使って、ポリモフィズムが実現されています。クラスを定義するときに、継承という仕組みを使うことで、他のクラスを元に差分だけを定義するということもできます。プログラミングをするには、クラスを作らなくてはいけません。このようなプログラム言語の世界においては、クラスこそがプログラムの中心なのです。クラスなしではプログラムは作れないのです[*2]。●DRY原則とクラスクラスがあることで、どのようなメリットがあるのでしょうか。筆者は、大きく二つのメリットがあると考えています。一つは、記述量を減らすことができるということです。オブジェクト指向なパラダイムでは、オブジェクト同士の協調によりシステムが動作すると考えます。この実行時の状態をなんらかの方法で実現すればよいわけです。Javaでは、その一つ一つのオブジェクトを効率よく生み出すために、プログラミング時にクラスを定義し、そのインスタンスとしてオブジェクトを生成するという仕組みで実現しています。一つのクラスから複数のインスタンスを生成できる仕組みをマルチインスタンスと呼ぶことがあります。Personクラスのインスタンスとして、田中さんオブジェクトと、鈴木さんオブジェクトを作るのではなく、それぞれのオブジェクトをいちいちプログラミングしていたとしたら、コードの記述量が膨大になってしまうでしょう。なかには多くのダブったコードが出てくることでしょう。これはDRY原則[*3]の観点から見ても好ましくありません。一つは、コンパイラによるエラーチェックです。クラスをユーザ定義型として扱い、コンパイラに型チェックをさせるという型システムとしての側面から見ると、実行する前にコンパイラでエラーをあぶりだせるというのも大きなメリットといえるでしょう。●静的型付け言語と動的型付け言語コンパイラでエラーをあぶりだせるのは、静的型付け言語の特徴です。世の中にはコンパイラを持たない言語も多くあります。その中で、RubyやPythonのような動的型付け言語においては、メッセージを受け取ったときに、そのメッセージに反応できれば何かしらの振る舞いをし、反応できないようであればメッセージの送信元に受け付けられないと応答する、という仕組みを備えています。動的型付け言語では、もはやクラスには型としての意義は存在しません。●おわりにオブジェクト指向プログラミングにおけるクラスの役割について、筆者なりの解釈を解説しました。クラスは静的な型付け言語においては型としての役割を担いますが、動的な型付け言語には型としての役割はほとんどありません。このため、単純なエラーを発見するにも実行させてみることが必要になります。具体的には、ユニットテストを行うのがよいでしょう。的型付け言語が、静的型付け言語よりも劣っているような印象を受けるかもしれませんが、筆者はそのようには考えていません。テスト駆動開発が当たり前となってきた2007年2月時点[*4]では、少し作っては素早くユニットテストによりプログラムを実行して動作を確認するので、コンパイル単位ごとにコンパイルしてエラーを報告させるということに、それほど重要性を感じていません。http://amazon.co.jp/o/ASIN/4894712636/xpjp-22[2]:プロトタイプベースの話はここでは忘れてください。Yourself」の略。重複したコードを書かない、同じ事を繰り返さないということ。ろはいかがでしょうか?_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。ホントのところ今週は「普段やっている会議のなかで、一番困ることは?」のホントのところ。私たちは日ごろ色々な会議に出席しています。広く考えれば、打ち合わせ、ミーティングと色々呼び名がありますが、会議では出席する人の貴重な時間を使っています。