Object subclass: Book [
| title borrowed |
Book class >> title: aTitle [
^self new initializeTitle: aTitle
]
initializeTitle: aTitle [
title := aTitle.
borrowed := false.
]
borrow [
borrowed
ifTrue: [Transcript show: title , ' is already borrowed'; cr.]
ifFalse: [
Transcript show: title , ' borrowed'; cr.
].
]
returnBook [
borrowed := false.
Transcript show: title , ' returned'; cr.
]
]
Object subclass: User [
| name |
User class >> name: aName [
^self new initializeName: aName
]
initializeName: aName [
name := aName.
]
borrowBook: aBook [
Transcript show: name , ' borrows a book'; cr.
aBook borrow.
]
]
Object subclass: Library [
| books |
Library class >> newLibrary [
^self new initialize
]
initialize [
books := OrderedCollection new.
]
addBook: aBook [
books add: aBook.
]
]
| library book user |
library := Library newLibrary.
book := Book title: 'Smalltalk Programming'.
user := User name: 'Sato'.
library addBook: book.
user borrowBook: book.
book returnBook.
T2JqZWN0IHN1YmNsYXNzOiBCb29rIFsKICAgIHwgdGl0bGUgYm9ycm93ZWQgfAoKICAgIEJvb2sgY2xhc3MgPj4gdGl0bGU6IGFUaXRsZSBbCiAgICAgICAgXnNlbGYgbmV3IGluaXRpYWxpemVUaXRsZTogYVRpdGxlCiAgICBdCgogICAgaW5pdGlhbGl6ZVRpdGxlOiBhVGl0bGUgWwogICAgICAgIHRpdGxlIDo9IGFUaXRsZS4KICAgICAgICBib3Jyb3dlZCA6PSBmYWxzZS4KICAgIF0KCiAgICBib3Jyb3cgWwogICAgICAgIGJvcnJvd2VkCiAgICAgICAgICAgIGlmVHJ1ZTogW1RyYW5zY3JpcHQgc2hvdzogdGl0bGUgLCAnIGlzIGFscmVhZHkgYm9ycm93ZWQnOyBjci5dCiAgICAgICAgICAgIGlmRmFsc2U6IFsKICAgICAgICAgICAgICAgIGJvcnJvd2VkIDo9IHRydWUuCiAgICAgICAgICAgICAgICBUcmFuc2NyaXB0IHNob3c6IHRpdGxlICwgJyBib3Jyb3dlZCc7IGNyLgogICAgICAgICAgICBdLgogICAgXQoKICAgIHJldHVybkJvb2sgWwogICAgICAgIGJvcnJvd2VkIDo9IGZhbHNlLgogICAgICAgIFRyYW5zY3JpcHQgc2hvdzogdGl0bGUgLCAnIHJldHVybmVkJzsgY3IuCiAgICBdCl0KCk9iamVjdCBzdWJjbGFzczogVXNlciBbCiAgICB8IG5hbWUgfAoKICAgIFVzZXIgY2xhc3MgPj4gbmFtZTogYU5hbWUgWwogICAgICAgIF5zZWxmIG5ldyBpbml0aWFsaXplTmFtZTogYU5hbWUKICAgIF0KCiAgICBpbml0aWFsaXplTmFtZTogYU5hbWUgWwogICAgICAgIG5hbWUgOj0gYU5hbWUuCiAgICBdCgogICAgYm9ycm93Qm9vazogYUJvb2sgWwogICAgICAgIFRyYW5zY3JpcHQgc2hvdzogbmFtZSAsICcgYm9ycm93cyBhIGJvb2snOyBjci4KICAgICAgICBhQm9vayBib3Jyb3cuCiAgICBdCl0KCk9iamVjdCBzdWJjbGFzczogTGlicmFyeSBbCiAgICB8IGJvb2tzIHwKCiAgICBMaWJyYXJ5IGNsYXNzID4+IG5ld0xpYnJhcnkgWwogICAgICAgIF5zZWxmIG5ldyBpbml0aWFsaXplCiAgICBdCgogICAgaW5pdGlhbGl6ZSBbCiAgICAgICAgYm9va3MgOj0gT3JkZXJlZENvbGxlY3Rpb24gbmV3LgogICAgXQoKICAgIGFkZEJvb2s6IGFCb29rIFsKICAgICAgICBib29rcyBhZGQ6IGFCb29rLgogICAgXQpdCgp8IGxpYnJhcnkgYm9vayB1c2VyIHwKCmxpYnJhcnkgOj0gTGlicmFyeSBuZXdMaWJyYXJ5Lgpib29rIDo9IEJvb2sgdGl0bGU6ICdTbWFsbHRhbGsgUHJvZ3JhbW1pbmcnLgp1c2VyIDo9IFVzZXIgbmFtZTogJ1NhdG8nLgoKbGlicmFyeSBhZGRCb29rOiBib29rLgp1c2VyIGJvcnJvd0Jvb2s6IGJvb2suCmJvb2sgcmV0dXJuQm9vay4=