SlideShare a Scribd company logo
1 of 42
Download to read offline
エクストリーム・エンジニアへの道
(Ruby編)第2回 初級
テクノロジックアート
長瀬 嘉秀
■オブジェクト指向
■クラス
■継承
■モジュール
内容
•オブジェクト指向とは
オブジェクト指向
4
身近な例
•同じ「乗用車」でも、別々の「モノ」とし
て存在する。
これをオブジェクトと呼ぶ。
鈴木さんの車 佐藤さんの車
乗用車
5
グループ分け
•オブジェクトは特徴によってグループ分け
できる
トラックA トラックB
佐藤さんの乗用車鈴木さんの乗用車
乗用車のグループ
トラックのグループ
6
グループの特徴
•グループにはそれぞれ特徴がある
乗用車 → 人を乗せるための自動車
トラック → 荷物を載せるための自動
車
7
グループの階層化
•乗用車、トラックともに自動車である。
・・・ どちらも自動車の特徴を持つ。
自動車
乗用車 トラック
8
クラスとは
•クラスとは
同じ特徴を持つオブジェクトのグループ
オブジェクトのテンプレート(型)
佐藤さんの乗用車
(オブジェクト)
乗用車
(クラス)
9
クラスの例
•クラスは共通する特徴を持っているグルー
プ
鈴木さんの乗用車
(オブジェクト)
佐藤さんの乗用車
(オブジェクト)
乗用車クラス
10
例:乗用車クラス
•乗用車の特徴
–四輪車
–人を乗せられる
–燃料で動く
–車体の色
–前へ進む
–・・・
11
クラスの構成要素
属性 ・・・ クラス(オブジェクト)が持つ
値(変数)
振る舞い ・・・ クラス(オブジェクト)の動作(
メソッド)
クラスは以下の性質を持つ
12
クラスの属性
•排気量
•重量
•色
•搭乗人数
•ドア数
•・・・
乗用車クラス
例:乗用車クラスが持つ属性
13
クラスの振る舞い
•例:乗用車クラスが持つ振る舞い(メソッド)
前に進む
後ろに戻る
止まる
右へ曲がる
左へ曲がる
・・・
乗用車クラス
14
クラスの属性と振る舞い
乗用車
排気量
重量
…
前に進む
後ろに戻る
…
クラス名
乗用車
属性
振る舞い
•UMLによるクラス構造の記述
15
プログラム上のクラスの定義
class Car
def initialize
# 排気量
@engineDisplacement
# 重量
@weight
end
def runForward ()
・・・・
end
end
クラス名
属性
振る舞い
属性の名前
振る舞いの名前
乗用車クラスの場合(Ruby言語)
シンプルなコード
class Ningen
def initialize(name, shincho)
@name = name
@shincho = shincho
end
def taberu
puts "食べています。"
end
def neru
puts "寝ています。"
end
end
ningen.rb
•コードを書いて、動かしてみましょ
う!!
シンプルなコード 動作
require_relative './ningen'
ningen = Ningen.new("小林", 178)
ningen.taberu
ningen.neru
manager.rb
シンプルなコード 実行
% ruby manager.rb
食べてます。
寝ています。
•部長、担当、主任
例題
•コードを書いて、動かしてみましょう。
例題 コード
class Shain
def standup
puts "社員はとりあえず起立する"
end
end
shain.rb
例題 コード(担当)
class Tanto < Shain
def standup
puts "担当は慌てて起立しました"
end
end
tanto.rb
例題 実行
require_relative 'shain'
require_relative 'tanto'
shain = Tanto.new
shain.standup
shacho.rb
% ruby shacho.rb
•主任、部長のコードを作成しましょ
う!!
•次のメッセージを表示します
例題 主任、部長
主任が素早く立ちました
部長がだるそうに立ちました
「ついたての向こうにいる君、とりあえ
ず基本給を教えてあげるから、そこから
計算して君の給料を答えなさい」
演習 給料はいくら?
給料計算ルール
担当:基本給が給料と同じ
主任:基本給*2+1が給料
部長:基本給*3が給料
演習 実行結果
% ruby shacho.rb
担当は慌てて起立しました
私の給料は100円です。
主任が素早く立ちました。
私の給料は201円です。
部長はだるそうに立ち上がりました
私の給料は300円です。
演習 メインルーチン
shacho.rb
require_relative 'shain'
require_relative 'shunin'
require_relative 'bucho'
require_relative 'Tanto'
shain = Tanto.new
shain.standup
puts "私の給料は#{ shain.calculate_salary(100)}円です。
"
shain = Shunin.new
shain.standup
puts "私の給料は#{ shain.calculate_salary(100)}円です。"
shain = Bucho.new
shain.standup
演習 クラス図
•Rspec
•Rubyのテスト環境
テストの作成
演習 テスト
# -*- coding: utf-8 -*-
require 'rspec'
require_relative 'Tanto'
describe Tanto do
let(:tanto) { Tanto.new }
it '担当は給料は基本給と一緒。基本給が100な
ら給料も100' do
expect(tanto.calculate_salary(100)).to eq 100
end
end
tanto_spec.rb
演習 テスト実行
% rspec tanto_spec.rb
% rspec --format=d tanto_spec.rb
担当の給料は基本給と一緒。基本給が100なら給料も
100
•社長にメッセージを返す
改善案
•部長、主任を書いて、実行しましょ
う!!
演習 部長、主任実行
Bucho
部長の給料は基本給の3倍なので、基本給が100なら給料は300
Tanto
担当の給料は基本給と一緒。基本給が100なら給料も100'
Shunin
主任の給料は基本給の2倍+1、基本給が100なら給料は201
•現状の流れ
改善
•取締役を作成
改善案 取締役
it '取締役はふんぞり返って立ち上がる' do
expect(torishimariyaku.standup).to eq 'ふん
ぞり返って立ち上がりました。'
end
torishimariyaku_spec.rb
•実行する
•ただし、エラー
改善案 実行
% rspec torishimariyaku_spec.rb
•エラーを修正して、正しく実装
改善案 正しく実装
def standup
'ふんぞり返って立ち上がりました。
'
end
torishimariyaku.rb
改善案 実行(正しく)
% rspec torishimariyaku_spec.rb
Torishimariyaku
取締役の給料は基本給の4倍+2、基本給が100な
ら給料は402
取締役はふんぞり返って立ち上がる
•社員、部長などを修正
改善案 社長を修正
puts shain.standup
•関数の塊
•変数も含まれる
•共通機能のような関数
•クラスに取り込んで使うことができ、
mix-in
•Java言語のインターフェースに相当
モジュール
モジュールの例
module Salary
def calculate_salary
kihon + teate
end
def kihon
@kihonkyu
end
def teate
0
end
end
モジュールの組み込み
class Shain
include Salary
def initialize(kihonkyu)
@kihonkyu = kihonkyu
end
end
•部長クラスを作ってください
•基本は基本給×3、手当は1
モジュール 担当、部長
class Tantou < Shain
end

More Related Content

Viewers also liked

2012/06 GCAD Animation of Water Droplets on a Hydrophobic Windshield
2012/06 GCAD Animation of Water Droplets on a Hydrophobic Windshield2012/06 GCAD Animation of Water Droplets on a Hydrophobic Windshield
2012/06 GCAD Animation of Water Droplets on a Hydrophobic Windshield
Nobuyuki Nakata
 
第12回
第12回第12回
第12回
rbgri
 
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
Hiroya Nagao
 
ウェブサイト運用プロデューサーによる「提案型」クリエイティブパートナーシップ構築の可能性について
ウェブサイト運用プロデューサーによる「提案型」クリエイティブパートナーシップ構築の可能性についてウェブサイト運用プロデューサーによる「提案型」クリエイティブパートナーシップ構築の可能性について
ウェブサイト運用プロデューサーによる「提案型」クリエイティブパートナーシップ構築の可能性について
株式会社コパイロツト COPILOT Inc.
 

Viewers also liked (20)

01_garden for_life
01_garden for_life01_garden for_life
01_garden for_life
 
Moodle Moot 2014 LT資料
Moodle Moot 2014 LT資料Moodle Moot 2014 LT資料
Moodle Moot 2014 LT資料
 
091021 Kyoso Forum Doi
091021 Kyoso Forum Doi091021 Kyoso Forum Doi
091021 Kyoso Forum Doi
 
NHN HTML5勉強会 サービス開発
NHN HTML5勉強会 サービス開発NHN HTML5勉強会 サービス開発
NHN HTML5勉強会 サービス開発
 
2012/06 GCAD Animation of Water Droplets on a Hydrophobic Windshield
2012/06 GCAD Animation of Water Droplets on a Hydrophobic Windshield2012/06 GCAD Animation of Water Droplets on a Hydrophobic Windshield
2012/06 GCAD Animation of Water Droplets on a Hydrophobic Windshield
 
【防衛省・自衛隊御中】SEO提案
【防衛省・自衛隊御中】SEO提案【防衛省・自衛隊御中】SEO提案
【防衛省・自衛隊御中】SEO提案
 
第12回
第12回第12回
第12回
 
コンサルタントが明かす 仮想化提案のすべて
コンサルタントが明かす 仮想化提案のすべてコンサルタントが明かす 仮想化提案のすべて
コンサルタントが明かす 仮想化提案のすべて
 
新しい強化ミーティングの提案
新しい強化ミーティングの提案新しい強化ミーティングの提案
新しい強化ミーティングの提案
 
提案に役に立つ情報 (teianlab 勉強会)
提案に役に立つ情報 (teianlab 勉強会)提案に役に立つ情報 (teianlab 勉強会)
提案に役に立つ情報 (teianlab 勉強会)
 
ロジカルプレゼンテーション
ロジカルプレゼンテーションロジカルプレゼンテーション
ロジカルプレゼンテーション
 
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
 
上山棚田Web
上山棚田Web上山棚田Web
上山棚田Web
 
スマートフォンによる短時間睡眠支援に向けた入眠時刻の推定
スマートフォンによる短時間睡眠支援に向けた入眠時刻の推定スマートフォンによる短時間睡眠支援に向けた入眠時刻の推定
スマートフォンによる短時間睡眠支援に向けた入眠時刻の推定
 
DeNAでのVertica運用
DeNAでのVertica運用DeNAでのVertica運用
DeNAでのVertica運用
 
ウェブサイト運用プロデューサーによる「提案型」クリエイティブパートナーシップ構築の可能性について
ウェブサイト運用プロデューサーによる「提案型」クリエイティブパートナーシップ構築の可能性についてウェブサイト運用プロデューサーによる「提案型」クリエイティブパートナーシップ構築の可能性について
ウェブサイト運用プロデューサーによる「提案型」クリエイティブパートナーシップ構築の可能性について
 
制作効率化のための素材探しと情報収集術
制作効率化のための素材探しと情報収集術制作効率化のための素材探しと情報収集術
制作効率化のための素材探しと情報収集術
 
Ifa2012 120923
Ifa2012 120923Ifa2012 120923
Ifa2012 120923
 
ユニクロ実証研究
ユニクロ実証研究ユニクロ実証研究
ユニクロ実証研究
 
Oracle Unified Information Architeture + Analytics by Example
Oracle Unified Information Architeture + Analytics by ExampleOracle Unified Information Architeture + Analytics by Example
Oracle Unified Information Architeture + Analytics by Example
 

エクストリームエンジニア2