狠狠撸

狠狠撸Share a Scribd company logo
エクストリーム?エンジニアへの道
(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 (20)

Moodle Moot 2014 LT資料
Moodle Moot 2014 LT資料Moodle Moot 2014 LT資料
Moodle Moot 2014 LT資料
Yoshikazu Asada
?
091021 Kyoso Forum Doi
091021 Kyoso Forum Doi091021 Kyoso Forum Doi
091021 Kyoso Forum Doi
KyosoYokohama
?
NHN HTML5勉強会 サービス開発
NHN HTML5勉強会 サービス開発NHN HTML5勉強会 サービス開発
NHN HTML5勉強会 サービス開発
nhn_hangame
?
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
?
【防卫省?自卫队御中】厂贰翱提案
【防卫省?自卫队御中】厂贰翱提案【防卫省?自卫队御中】厂贰翱提案
【防卫省?自卫队御中】厂贰翱提案
Ko Abe
?
第12回
第12回第12回
第12回
rbgri
?
コンサルタントが明かす 仮想化提案のすべて
コンサルタントが明かす 仮想化提案のすべてコンサルタントが明かす 仮想化提案のすべて
コンサルタントが明かす 仮想化提案のすべて
VirtualTech Japan Inc.
?
新しい强化ミーティングの提案
新しい强化ミーティングの提案新しい强化ミーティングの提案
新しい强化ミーティングの提案
冈山大学漕艇部
?
提案に役に立つ情報 (teianlab 勉強会)
提案に役に立つ情報 (teianlab 勉強会)提案に役に立つ情報 (teianlab 勉強会)
提案に役に立つ情報 (teianlab 勉強会)
MKT International Inc.
?
ロジカルプレゼンテーション
ロジカルプレゼンテーションロジカルプレゼンテーション
ロジカルプレゼンテーション
Aya Kaino
?
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
Hiroya Nagao
?
上山棚田奥别产
上山棚田奥别产上山棚田奥别产
上山棚田奥别产
Mome Menpei
?
スマートフォンによる短时间睡眠支援に向けた入眠时刻の推定
スマートフォンによる短时间睡眠支援に向けた入眠时刻の推定スマートフォンによる短时间睡眠支援に向けた入眠时刻の推定
スマートフォンによる短时间睡眠支援に向けた入眠时刻の推定
Ubi NAIST
?
顿别狈础て?の痴别谤迟颈肠补运用
顿别狈础て?の痴别谤迟颈肠补运用顿别狈础て?の痴别谤迟颈肠补运用
顿别狈础て?の痴别谤迟颈肠补运用
Shota Suzuki
?
ウェブサイト运用プロデューサーによる「提案型」クリエイティブパートナーシップ构筑の可能性について
ウェブサイト运用プロデューサーによる「提案型」クリエイティブパートナーシップ构筑の可能性についてウェブサイト运用プロデューサーによる「提案型」クリエイティブパートナーシップ构筑の可能性について
ウェブサイト运用プロデューサーによる「提案型」クリエイティブパートナーシップ构筑の可能性について
株式会社コパイロツト COPILOT Inc.
?
制作効率化のための素材探しと情报収集术
制作効率化のための素材探しと情报収集术制作効率化のための素材探しと情报収集术
制作効率化のための素材探しと情报収集术
kenji goto
?
ユニクロ実証研究
ユニクロ実証研究ユニクロ実証研究
ユニクロ実証研究
h-takamizawa
?
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
Harald Erb
?
NHN HTML5勉強会 サービス開発
NHN HTML5勉強会 サービス開発NHN HTML5勉強会 サービス開発
NHN HTML5勉強会 サービス開発
nhn_hangame
?
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
?
【防卫省?自卫队御中】厂贰翱提案
【防卫省?自卫队御中】厂贰翱提案【防卫省?自卫队御中】厂贰翱提案
【防卫省?自卫队御中】厂贰翱提案
Ko Abe
?
第12回
第12回第12回
第12回
rbgri
?
コンサルタントが明かす 仮想化提案のすべて
コンサルタントが明かす 仮想化提案のすべてコンサルタントが明かす 仮想化提案のすべて
コンサルタントが明かす 仮想化提案のすべて
VirtualTech Japan Inc.
?
新しい强化ミーティングの提案
新しい强化ミーティングの提案新しい强化ミーティングの提案
新しい强化ミーティングの提案
冈山大学漕艇部
?
提案に役に立つ情報 (teianlab 勉強会)
提案に役に立つ情報 (teianlab 勉強会)提案に役に立つ情報 (teianlab 勉強会)
提案に役に立つ情報 (teianlab 勉強会)
MKT International Inc.
?
ロジカルプレゼンテーション
ロジカルプレゼンテーションロジカルプレゼンテーション
ロジカルプレゼンテーション
Aya Kaino
?
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
第二十一回 P2PSIP勉強会 柔軟な経路表に基づくOverlayNetworkの設計と応用 2010/09/19
Hiroya Nagao
?
上山棚田奥别产
上山棚田奥别产上山棚田奥别产
上山棚田奥别产
Mome Menpei
?
スマートフォンによる短时间睡眠支援に向けた入眠时刻の推定
スマートフォンによる短时间睡眠支援に向けた入眠时刻の推定スマートフォンによる短时间睡眠支援に向けた入眠时刻の推定
スマートフォンによる短时间睡眠支援に向けた入眠时刻の推定
Ubi NAIST
?
顿别狈础て?の痴别谤迟颈肠补运用
顿别狈础て?の痴别谤迟颈肠补运用顿别狈础て?の痴别谤迟颈肠补运用
顿别狈础て?の痴别谤迟颈肠补运用
Shota Suzuki
?
ウェブサイト运用プロデューサーによる「提案型」クリエイティブパートナーシップ构筑の可能性について
ウェブサイト运用プロデューサーによる「提案型」クリエイティブパートナーシップ构筑の可能性についてウェブサイト运用プロデューサーによる「提案型」クリエイティブパートナーシップ构筑の可能性について
ウェブサイト运用プロデューサーによる「提案型」クリエイティブパートナーシップ构筑の可能性について
株式会社コパイロツト COPILOT Inc.
?
制作効率化のための素材探しと情报収集术
制作効率化のための素材探しと情报収集术制作効率化のための素材探しと情报収集术
制作効率化のための素材探しと情报収集术
kenji goto
?
ユニクロ実証研究
ユニクロ実証研究ユニクロ実証研究
ユニクロ実証研究
h-takamizawa
?
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
Harald Erb
?

エクストリームエンシ?ニア2