fork download
  1. "======================================================================
  2.  1. Book(本)クラスの定義
  3. ======================================================================"
  4. Object subclass: Book [
  5. | title isBorrowed |
  6.  
  7. "初期化メソッド"
  8. Book class >> newWithTitle: aString [
  9. ^ (self new) initTitle: aString
  10. ]
  11.  
  12. initTitle: aString [
  13. title := aString.
  14. isBorrowed := false.
  15. ]
  16.  
  17. "ゲッター(本のタイトルを返す)"
  18. title [
  19. ^ title
  20. ]
  21.  
  22. "ゲッター(貸出中かどうかを返す)"
  23. isBorrowed [
  24. ^ isBorrowed
  25. ]
  26.  
  27. "本を貸出状態にするメソッド"
  28. markAsBorrowed [
  29. isBorrowed := true.
  30. ]
  31.  
  32. "本を返却状態にするメソッド"
  33. markAsReturned [
  34. isBorrowed := false.
  35. ]
  36. ]
  37.  
  38. "======================================================================
  39.  2. User(利用者)クラスの定義
  40. ======================================================================"
  41. Object subclass: User [
  42. | name |
  43.  
  44. "初期化メソッド"
  45. User class >> newWithName: aString [
  46. ^ (self new) initName: aString
  47. ]
  48.  
  49. initName: aString [
  50. name := aString.
  51. ]
  52.  
  53. "本を借りるメソッド(UserがBookにメッセージを送る)"
  54. borrowBook: aBook [
  55. (aBook isBorrowed) ifTrue: [
  56. Transcript show: name; show: 'は「'; show: aBook title; show: '」を借りようとしましたが、すでに貸出中です。'; cr.
  57. ] ifFalse: [
  58. aBook markAsBorrowed.
  59. Transcript show: name; show: 'が「'; show: aBook title; show: '」を借りました。'; cr.
  60. ].
  61. ]
  62.  
  63. "本を返すメソッド(UserがBookにメッセージを送る)"
  64. returnBook: aBook [
  65. (aBook isBorrowed) ifTrue: [
  66. aBook markAsReturned.
  67. Transcript show: name; show: 'が「'; show: aBook title; show: '」を返却しました。'; cr.
  68. ] ifFalse: [
  69. Transcript show: '「'; show: aBook title; show: '」は貸出されていません。'; cr.
  70. ].
  71. ]
  72. ]
  73.  
  74. "======================================================================
  75.  3. メイン処理(システムの動かし方)
  76. ======================================================================"
  77. | book1 book2 user1 user2 |
  78.  
  79. "オブジェクトの作成"
  80. book1 := Book newWithTitle: 'Smalltalk-no-Ehon'.
  81. book2 := Book newWithTitle: 'Object-Shiko-Ron'.
  82. user1 := User newWithName: 'Tanaka'.
  83. user2 := User newWithName: 'Sato'.
  84.  
  85. Transcript show: '--- 貸出システム シミュレーション開始 ---'; cr.
  86.  
  87. "1. 田中さんが Smalltalkの絵本 を借りる"
  88. user1 borrowBook: book1.
  89.  
  90. "2. 佐藤さんが 同じ本 を借りようとする(エラーハンドリングの確認)"
  91. user2 borrowBook: book1.
  92.  
  93. "3. 田中さんが オブジェクト指向論 を借りる"
  94. user1 borrowBook: book2.
  95.  
  96. "4. 田中さんが Smalltalkの絵本 を返す"
  97. user1 returnBook: book1.
  98.  
  99. "5. 佐藤さんが 改めてSmalltalkの絵本 を借りる"
  100. user2 borrowBook: book1.
  101.  
  102. Transcript show: '--- シミュレーション終了 ---'; cr.
Success #stdin #stdout 0.01s 8616KB
stdin
Standard input is empty
stdout
--- 貸出システム シミュレーション開始 ---
Tanakaが「Smalltalk-no-Ehon」を借りました。
Satoは「Smalltalk-no-Ehon」を借りようとしましたが、すでに貸出中です。
Tanakaが「Object-Shiko-Ron」を借りました。
Tanakaが「Smalltalk-no-Ehon」を返却しました。
Satoが「Smalltalk-no-Ehon」を借りました。
--- シミュレーション終了 ---