Ruby技術者検定試験は、普段毎日Rubyを書いている人なら受かる、というお話でした。それならば毎日Rubyを書けばいい!と。使っているのはJRubyとSWTです。思ったよりも速いですね。継承、モジュール、多種多様な制御構文、データ構造などRubyの要素をなるべく使うようにしています。
続きを読むRuby技術者検定試験は、普段毎日Rubyを書いている人なら受かる、というお話でした。それならば毎日Rubyを書けばいい!と。使っているのはJRubyとSWTです。思ったよりも速いですね。継承、モジュール、多種多様な制御構文、データ構造などRubyの要素をなるべく使うようにしています。
続きを読むa2cさんのエントリーが気になったので、僕なりの考えをまとめます。決めつけで書いてますが、ご意見があればコメントなりトラックバックなりを頂ければ、と思います。
まず、インスタンスとオブジェクトですが、これは同じモノだと思います。プログラミング言語Rubyには「インスタンスはオブジェクトのおしゃれな言い方」だか「キザな言い方」と書かれています。
僕の中のオブジェクト指向の母はC++。僕の中でオブジェクトというのは「関数ポインタ+変数のテーブル」です。クラスで定義したメソッド自体はオブジェクトは持っていません。オブジェクトが持っているのは関数のポインタだけ。オブジェクトは自分が使えるメソッドの情報だけ持っています。
オブジェクトを生成する「モノ」がクラス。クラスはオブジェクトではないです。C++では。JavaやPython、Rubyはクラスもオブジェクトです。これはなぜか?クラスという概念を、オブジェクトという仕組みで定義してみた、という言語ごとの都合でしかないと思います。
プロトタイプとは何か?というと、プログラムの中でオブジェクトを組み立てて、それを複製してオブジェクトを作る仕組みです。クラスベースのオブジェクト指向とは違う仕組み。IOとかいくつかの言語が取り入れています。clone()だか、copy()というメソッドを作り、動的にメソッドやデータを追加して、複製して開発していく、というスタイルにしていけばプロトタイプになると思います。
オブジェクト指向って、厳密な定義がなくて、各言語の実装ごとに雰囲気が違うんですよね。だいたい自分が最初に学んだ言語の特徴で「オブジェクト指向ってこうなんだ」と理解している人が多いです。僕はオブジェクト指向は「プログラムを階層構造に整理するための技法」程度にしか考えてません。なので、Pythonの「クラスもオブジェクトもすべて名前空間」というあっさりした考え方が好きです。
C言語でもオブジェクト指向はできます。関数ポインタ+データテーブルを構造体で定義して、メソッドの第一引数で、その構造体を受け取れるようにしておけばいいから。Gaucheとかのオブジェクト指向実装もそんな感じでした。
僕の考えなので人によって色々だと思います。
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 |