Object subclass: Book [
| title borrowed |
Book class >> title: aString [
^self new initTitle: aString
]
initTitle: aString [
title := aString.
borrowed := false.
^self
]
title [
^title
]
isBorrowed [
^borrowed
]
borrow [
borrowed := true.
]
returnBook [
borrowed := false.
]
]
Object subclass: User [
| name |
User class >> name: aString [
^self new initName: aString
]
initName: aString [
name := aString.
^self
]
name [
^name
]
]
Object subclass: Library [
| books |
Library class >> newLibrary [
^self new init
]
init [
books := OrderedCollection new.
^self
]
addBook: aBook [
books add: aBook.
]
borrowBook: aBook by: aUser [
(aBook isBorrowed)
ifTrue: [
Transcript show: '貸出中'; cr.
]
ifFalse: [
aBook borrow.
Transcript show: aUser name;
show: ' が ';
show: aBook title;
show: ' を借りました'; cr.
].
]
returnBook: aBook [
aBook returnBook.
Transcript show: aBook title;
show: ' を返却しました'; cr.
]
]
| library book1 user1 |
library := Library newLibrary.
book1 := Book title: 'オブジェクト指向入門'.
user1 := User name: '佐藤'.
library addBook: book1.
library borrowBook: book1 by: user1.
library returnBook: book1.
T2JqZWN0IHN1YmNsYXNzOiBCb29rIFsKICAgIHwgdGl0bGUgYm9ycm93ZWQgfAoKICAgIEJvb2sgY2xhc3MgPj4gdGl0bGU6IGFTdHJpbmcgWwogICAgICAgIF5zZWxmIG5ldyBpbml0VGl0bGU6IGFTdHJpbmcKICAgIF0KCiAgICBpbml0VGl0bGU6IGFTdHJpbmcgWwogICAgICAgIHRpdGxlIDo9IGFTdHJpbmcuCiAgICAgICAgYm9ycm93ZWQgOj0gZmFsc2UuCiAgICAgICAgXnNlbGYKICAgIF0KCiAgICB0aXRsZSBbCiAgICAgICAgXnRpdGxlCiAgICBdCgogICAgaXNCb3Jyb3dlZCBbCiAgICAgICAgXmJvcnJvd2VkCiAgICBdCgogICAgYm9ycm93IFsKICAgICAgICBib3Jyb3dlZCA6PSB0cnVlLgogICAgXQoKICAgIHJldHVybkJvb2sgWwogICAgICAgIGJvcnJvd2VkIDo9IGZhbHNlLgogICAgXQpdCgpPYmplY3Qgc3ViY2xhc3M6IFVzZXIgWwogICAgfCBuYW1lIHwKCiAgICBVc2VyIGNsYXNzID4+IG5hbWU6IGFTdHJpbmcgWwogICAgICAgIF5zZWxmIG5ldyBpbml0TmFtZTogYVN0cmluZwogICAgXQoKICAgIGluaXROYW1lOiBhU3RyaW5nIFsKICAgICAgICBuYW1lIDo9IGFTdHJpbmcuCiAgICAgICAgXnNlbGYKICAgIF0KCiAgICBuYW1lIFsKICAgICAgICBebmFtZQogICAgXQpdCgpPYmplY3Qgc3ViY2xhc3M6IExpYnJhcnkgWwogICAgfCBib29rcyB8CgogICAgTGlicmFyeSBjbGFzcyA+PiBuZXdMaWJyYXJ5IFsKICAgICAgICBec2VsZiBuZXcgaW5pdAogICAgXQoKICAgIGluaXQgWwogICAgICAgIGJvb2tzIDo9IE9yZGVyZWRDb2xsZWN0aW9uIG5ldy4KICAgICAgICBec2VsZgogICAgXQoKICAgIGFkZEJvb2s6IGFCb29rIFsKICAgICAgICBib29rcyBhZGQ6IGFCb29rLgogICAgXQoKICAgIGJvcnJvd0Jvb2s6IGFCb29rIGJ5OiBhVXNlciBbCiAgICAgICAgKGFCb29rIGlzQm9ycm93ZWQpCiAgICAgICAgICAgIGlmVHJ1ZTogWwogICAgICAgICAgICAgICAgVHJhbnNjcmlwdCBzaG93OiAn6LK45Ye65LitJzsgY3IuCiAgICAgICAgICAgIF0KICAgICAgICAgICAgaWZGYWxzZTogWwogICAgICAgICAgICAgICAgYUJvb2sgYm9ycm93LgogICAgICAgICAgICAgICAgVHJhbnNjcmlwdCBzaG93OiBhVXNlciBuYW1lOwogICAgICAgICAgICAgICAgICAgIHNob3c6ICcg44GMICc7CiAgICAgICAgICAgICAgICAgICAgc2hvdzogYUJvb2sgdGl0bGU7CiAgICAgICAgICAgICAgICAgICAgc2hvdzogJyDjgpLlgJ/jgorjgb7jgZfjgZ8nOyBjci4KICAgICAgICAgICAgXS4KICAgIF0KCiAgICByZXR1cm5Cb29rOiBhQm9vayBbCiAgICAgICAgYUJvb2sgcmV0dXJuQm9vay4KICAgICAgICBUcmFuc2NyaXB0IHNob3c6IGFCb29rIHRpdGxlOwogICAgICAgICAgICBzaG93OiAnIOOCkui/lOWNtOOBl+OBvuOBl+OBnyc7IGNyLgogICAgXQpdCgp8IGxpYnJhcnkgYm9vazEgdXNlcjEgfAoKbGlicmFyeSA6PSBMaWJyYXJ5IG5ld0xpYnJhcnkuCgpib29rMSA6PSBCb29rIHRpdGxlOiAn44Kq44OW44K444Kn44Kv44OI5oyH5ZCR5YWl6ZaAJy4KCnVzZXIxIDo9IFVzZXIgbmFtZTogJ+S9kOiXpCcuCgpsaWJyYXJ5IGFkZEJvb2s6IGJvb2sxLgoKbGlicmFyeSBib3Jyb3dCb29rOiBib29rMSBieTogdXNlcjEuCgpsaWJyYXJ5IHJldHVybkJvb2s6IGJvb2sxLg==