SSブログ

Ruby オブジェクト指向講座 [よもやま日記]

Ruby オブジェクト指向講座を受講してきた。

● アジェンダ
1. オブジェクト指向とは
2. クラスとオブジェクト
3. アクセス修飾子/アクセサメソッド
4. 継承
5. 演習
6. 外部ファイルの内容を利用する
7. RubyGems
8. モジュールとMix-in
9. Rubyの基本API
10.振り返り・質疑応答

---------- 以下、備忘録として ----------
・オブジェクトとは
物理的な実態を伴うオブジェクト:ロボットなど
概念的なオブジェクト:会社など
→概念的な部分が大切

・オブジェクト指向とは
概念や実態をなるべくそのままの形で表現しようとするプログラミング手法

オブジェクト指向に登場する概念
・クラス
- 状態(状況)
- 振る舞い(動作)
・インスタンス

(例)
ロボットの場合
・クラス
- 状態/状況
 バッテリー残量

- 動作
 歩く
 話す

クラスの先頭は大文字?
- 大文字でなくてもプログラムは動く
- 慣例的に大文字で、大文字をみたらオブジェクトと分かりやすい

インスタンス変数
「@変数名」
インスタンスごとに値を保持できる変数

クラス変数
「@@変数名」
クラスごとに値を保持できる変数

ローカル変数
メソッド内のみで有効な変数

グローバル変数
どこでも利用できる変数
→ どこでも利用できてしまう
「$変数名」

定数
一度定義したら内容が変更されない変数
先頭の文字が大文字なら定数とみなす

initialize
メソッド名は「initialize」固定

インスタンス変数/クラス変数については、外部から直接参照や更新はできない
クラス外からのアクセスは、「アクセサメソッド」を定義する
・参照メソッド
- メソッド名は変数名と同じ

・変更メソッド
- メソッド名は「変数名=」

アクセス制限の修飾子
public
protected
private
※ 何も書かないとpublicになる

内部では使いたいけど、外部では使って欲しくない場合にprivateを使う

継承のプログラミング

差分プログラミング
差分だけを書けばよい

クラス定義には親クラスはひとつしか継承できない(単一継承)


Rubyの標語
Don't Repeat Yourself

requireメソッドとloadメソッドの違い
・requireは、一度読み込んだファイルは繰り返し読み込まれる
・loadは、何度でも読み込み可能

モジュールとクラス
モジュールは、インスタンスの作成ができない
モジュールは、インスタンスの作成ができない
モジュールのメソッドは継承関係にかかわらず自由にクラスに追加できる
モジュール自身はクラスではない

Rubyのリファレンス
http://www.ruby-lang.org/ja/
http://doc.ruby-lang.org/ja/1.8.7/class/Math.html

組み込みクラス
100は、Integerのインスタンス
つまり、メソッドが使える。

オブジェクト.class
→そのオブジェクトのクラス名を返す

a = 100
a.class
=> Fixnum
a.to_s
=> "100"
a.class
=> Fixnum
a.to_s.class
=> String

"日本語".length
"日本語".split(//s).length

Regexp(regular expression)クラス
〒123-4567
 ~~~~~~~
 数数数-数数数数
→/\d\d\d-\d\d\d\d/

"123-4567" =~ /^\d\d\d-\d\d\d\d$/


たのしいRuby 第3版

たのしいRuby 第3版

  • 作者: 高橋 征義
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2010/03/31
  • メディア: 単行本



演習
インストール
gem install rails -v 2.3.9 --no-rdoc --no-ri
gem install sqlite3 --no-rdoc --no-ri
http://www.sqlite.org/sqlitedll-3_7_3.zip

1. プロジェクトの作成
 rails [プロジェクト名]

2. プロジェクト内に移動
 cd demo1

3. Scaffoldを使ってwebアプリ生成
 ruby script/generate scaffold Shop(≒DBのテーブル名) name:string address:string tel:string
ruby script/generate scaffold Shop name:string address:string tel:string

4. DBにテーブル生成
 rake db:migrate

5. Webサーバを起動
 ruby script/server

6. ブラウザから呼出
 http://localhost:3000/Shops