"======================================================================
1. Book(本)クラスの定義
======================================================================"
Object subclass: Book [
| title isBorrowed |
"初期化メソッド"
Book class >> newWithTitle: aString [
^ (self new) initTitle: aString
]
initTitle: aString [
title := aString.
isBorrowed := false.
]
"ゲッター(本のタイトルを返す)"
title [
^ title
]
"ゲッター(貸出中かどうかを返す)"
isBorrowed [
^ isBorrowed
]
"本を貸出状態にするメソッド"
markAsBorrowed [
isBorrowed := true.
]
"本を返却状態にするメソッド"
markAsReturned [
isBorrowed := false.
]
]
"======================================================================
2. User(利用者)クラスの定義
======================================================================"
Object subclass: User [
| name |
"初期化メソッド"
User class >> newWithName: aString [
^ (self new) initName: aString
]
initName: aString [
name := aString.
]
"本を借りるメソッド(UserがBookにメッセージを送る)"
borrowBook: aBook [
(aBook isBorrowed) ifTrue: [
Transcript show: name; show: 'は「'; show: aBook title; show: '」を借りようとしましたが、すでに貸出中です。'; cr.
] ifFalse: [
aBook markAsBorrowed.
Transcript show: name; show: 'が「'; show: aBook title; show: '」を借りました。'; cr.
].
]
"本を返すメソッド(UserがBookにメッセージを送る)"
returnBook: aBook [
(aBook isBorrowed) ifTrue: [
aBook markAsReturned.
Transcript show: name; show: 'が「'; show: aBook title; show: '」を返却しました。'; cr.
] ifFalse: [
Transcript show: '「'; show: aBook title; show: '」は貸出されていません。'; cr.
].
]
]
"======================================================================
3. メイン処理(システムの動かし方)
======================================================================"
| book1 book2 user1 user2 |
"オブジェクトの作成"
book1 := Book newWithTitle: 'Smalltalk-no-Ehon'.
book2 := Book newWithTitle: 'Object-Shiko-Ron'.
user1 := User newWithName: 'Tanaka'.
user2 := User newWithName: 'Sato'.
Transcript show: '--- 貸出システム シミュレーション開始 ---'; cr.
"1. 田中さんが Smalltalkの絵本 を借りる"
user1 borrowBook: book1.
"2. 佐藤さんが 同じ本 を借りようとする(エラーハンドリングの確認)"
user2 borrowBook: book1.
"3. 田中さんが オブジェクト指向論 を借りる"
user1 borrowBook: book2.
"4. 田中さんが Smalltalkの絵本 を返す"
user1 returnBook: book1.
"5. 佐藤さんが 改めてSmalltalkの絵本 を借りる"
user2 borrowBook: book1.
Transcript show: '--- シミュレーション終了 ---'; cr.