"====================================================================== 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.