Код IT
← Каталог

Учебные примеры ООП — Класс и объект

Чертёж класса Figure и конкретные объекты — круг и квадрат.

smalltalk smalltalkencyclopediaoop-practice4 embed URL статья в энциклопедии
Smalltalk main.st
"=== figure.st — Pharo Playground ==="
Object subclass: #Figure
    instanceVariableNames: 'name color'
    classVariableNames: ''
    package: 'OOPPractice' !

Figure class >> newName: aName color: aColor [
    ^ self basicNew
        name: aName;
        color: aColor;
        yourself
]

Figure >> name: aString [ name := aString ]
Figure >> color: aString [ color := aString ]

Figure >> describe [
    Transcript show: 'Фигура «', name, '», цвет: ', color; cr
]

Object subclass: #Circle
    instanceVariableNames: ''
    classVariableNames: ''
    package: 'OOPPractice' !

Circle class >> newColor: aColor [
    ^ (Figure newName: 'Круг' color: aColor)
]

Object subclass: #Square
    instanceVariableNames: ''
    classVariableNames: ''
    package: 'OOPPractice' !

Square class >> newColor: aColor [
    ^ (Figure newName: 'Квадрат' color: aColor)
]

"--- Demo ---"
| circle square |
circle := Circle newColor: 'красный'.
square := Square newColor: 'синий'.
circle describe.
square describe.
"=== figure.st — Pharo Playground ==="
Object subclass: #Figure
    instanceVariableNames: 'name color'
    classVariableNames: ''
    package: 'OOPPractice' !

Figure class >> newName: aName color: aColor [
    ^ self basicNew
        name: aName;
        color: aColor;
        yourself
]

Figure >> name: aString [ name := aString ]
Figure >> color: aString [ color := aString ]

Figure >> describe [
    Transcript show: 'Фигура «', name, '», цвет: ', color; cr
]

Object subclass: #Circle
    instanceVariableNames: ''
    classVariableNames: ''
    package: 'OOPPractice' !

Circle class >> newColor: aColor [
    ^ (Figure newName: 'Круг' color: aColor)
]

Object subclass: #Square
    instanceVariableNames: ''
    classVariableNames: ''
    package: 'OOPPractice' !

Square class >> newColor: aColor [
    ^ (Figure newName: 'Квадрат' color: aColor)
]

"--- Demo ---"
| circle square |
circle := Circle newColor: 'красный'.
square := Square newColor: 'синий'.
circle describe.
square describe.