第1回(10/2) オブジェクト指向プログラミング入門 ・オブジェクトを使ってみる。「オブジェクト.メッセージの形」 ・Ruby 文法 ■ 参考書 ・Ruby入門..高橋征義,後藤裕蔵:たのしいRuby,ソフトバンク,2002. ・応用例....前田修吾,まつもとゆきひろ,やまだあきら,永井秀利:Rubyアプリケーションプログラミング,オーム社,2002. ・手引......まつもとゆきひろ:Rubyデスクトップリファレンス,オライー・ジャパン,2000. ・オンラインマニュアル...http://rubycentral.com/book/index.html ■ オブジェクト指向プログラミング ・オブジェクト = データと機能の塊 ・特徴 - カプセル化:変数やサブルーチンの詳細を隠す - 多態性(Polymorphism):サブルーチン呼び出しインタフェース - Mixin:サブルーチンを取り込む - 継承:データとサブルーチンを引き継ぐ ■ Ruby の使い方 (方法1) インタラクティブな Ruby ⇒ irb コマンド ・load("プログラムファイル名") ・1行ずつ Ruby のコマンドを動かす ・コマンドの返り値が表示される (方法2) コマンドラインからrubyを起動し実行する ・ruby プログラムファイル名 (方法3) コマンドラインから直接実行する 1. ファイルの先頭に「#!/usr/bin/ruby」と書く。 2. ファイルに実行属性を付ける。 3. パスの通ったところにファイルを置く。 ■ オブジェクトを直に触ってみよう オブジェクトにメッセージを送るには ⇒ その1 「オブジェクト.メッセージ」の形式 その2 「オブジェクト::メッセージ」の形式 その3 「オブジェクト 演算子 ○○」の形式 □□□ 演習1:オブジェクトにメッセージを送る。以下を方法1で試せ。□□□ ・「オブジェクト.メッセージ」の形式 - 数のオブジェクト -123.abs 123.456.round - 文字列のオブジェクト "abcdefg".length "abcdefg".capitalize "01001010101".gsub(/101/,"_") - 配列のオブジェクト [123,456,"abc","def"].empty? [123,456,"abc","def"].at(3) [3,4,1,2,5,"ab","ef","cd"].slice(0..4).sort [123,456,"abc","def"].at(3).capitalize - ハッシュのオブジェクト {"Mike"=>"boy","Nancy"=>"girl","Joe"=>"boy"}.indexes("Nancy") {"Mike"=>"boy","Nancy"=>"girl","Joe"=>"boy"}.keys {"Mike"=>"boy","Nancy"=>"girl","Joe"=>"boy"}.values - 正規表現のオブジェクト /\d+\s/.match("123 abc") (参考: MatchData Object) /\d+\s/.match("123 abc").post_match ・「オブジェクト::メッセージ」の形式 - ファイルのオブジェクト File::ftype("/etc") File::atime("/usr/local") - ソケットのオブジェクト(require 'socket'を実行後、使用可) Socket::gethostname ・「オブジェクト 演算子 ○○」の形式 - 数のオブジェクト 123 + 345 256 << 2 - 文字列のオブジェクト "abc" + "def" "abc" << "def" - 配列のオブジェクト [123,456,"abc"][1] [123,456,"abc"][3] = "def" [123,456,"abc"] & [456,123] [123,456,"abc"] << "def" ーーー 演習1 ここまで ーーー ■ 変数でオブジェクトを表し、変数から触ってみよう ・変数でオブジェクトを表すには、「変数名 = オブジェクト」 ・変数のデバッグ用の表示には、「p 変数名」 □□□ 演習2:オブジェクトにメッセージを送る。以下を方法1で試せ。□□□ 変数とオブジェクト ・オブジェクトを表す a = 123 b = "abc" c = [a,456,b,"def"] d = {"Mike"=>"boy","Nancy"=>"girl"} f = File ・変数経由でメッセージを送る a = 123 a + 345 b = "abc" b + "def" f::ftype("/etc") ・メッセージを送った結果を変数で受けとる a = 123 f = a + 345 b = "abc" g = b + "def" ・メッセージによるオブジェクトの変化 (例1) a = "abc" p a a << "def" p a (例2) a = "abc" p a a + "def" p a ・オブジェクト"abc"は1つしか存在しない (例3) a = "abc" b = a b[1] = "X" (例4) a = "abc" b = a << "def" b[1] = "X" p a p b (例5) a = "abc" b = a + "def" b[1] = "X" p a p b ーーー 演習2 ここまで ーーー ■ Ruby の文法 ・euc コードを含むプログラムを実行する場合 ruby -Ke ファイル名 ・表示 ⇒ list0101.rb ・条件文 ⇒ list0102.rb ・繰り返し ⇒ list0103.rb list0104.rb ・メインルーチンとサブルーチン ⇒ list0105.rb ※ 普遍的な言語の表記ができればよい。Ruby の簡潔な表現は狙っていない。 □□□ 演習3:以下のを満たすプログラムを作れ。□□□ ・1 から n までの和を求めるサブルーチン sum ・1 から n までの積を求めるサブルーチン pai ・メインルーチンでは、変数 a に sum(5) の値、b に sum(6) の値、c に pai(5)の値をそれぞれ入れ、puts a、puts b、puts c、により表示する。 ⇒ prac0103.rb ーーー 演習3 ここまで ーーー □□□ 演習4:九九表を表示するプログラムを作れ。□□□ 3通りの表示方法がある。それぞれ作れ。 (a) 9x9の表 (b) 9x9のすべてを表示する必要は無いので、左下半分を表示するもの。 (c) 9x9のすべてを表示する必要は無いので、右上半分を表示するもの。 ⇒ work0101.rb, work0102.rb, work0103.rb ーーー 演習4 ここまで ーーー ■ 宿題:演習4(c)を完成させ、プログラムを印刷し、その上に説明を手書きし、提出せよ。