[squeak-dev] The Inbox: Kernel-cmm.761.mcz
H. Hirzel
hannes.hirzel at gmail.com
Fri Jul 5 06:39:35 UTC 2013
On 7/5/13, Tobias Pape <Das.Linux at gmx.de> wrote:
> Can’t we name that ‘properties’?
+1
> I think that ‘attributes’ is too close to the notion of
> attributes in general OO design as well as UML.
> These attributes would correspond to our attributes.
>
> Magritte and SqueakSource both provide such properties-bearing
> approach; the implementation is similar but does not
> (yet) provide the deepcopy stuff; the protocol would be similar
> but with ‘at’ instead of ‘named’
>
> Fun fact. Magritte supports descriptions that can access either
> instance variables directly or via accessor, or alternatively,
> such a properties dictionary, as long as it is named ‘properties’.
>
>
> Best
> -Tobias
>
> Am 05.07.2013 um 07:02 schrieb commits at source.squeak.org:
>
>> A new version of Kernel was added to project The Inbox:
>> http://source.squeak.org/inbox/Kernel-cmm.761.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Kernel-cmm.761
>> Author: cmm
>> Time: 4 July 2013, 9:01:30.236 pm
>> UUID: b9aaab83-9dfc-4c4f-a4e6-203167954cc1
>> Ancestors: Kernel-cmm.760
>>
>> - Introduce AttributableObject, an abstract class whose subclass instances
>> allow a variable number of attributes to be set and accessed at run time.
>>
>> =============== Diff against Kernel-cmm.760 ===============
>>
>> Item was added:
>> + Object subclass: #AttributableObject
>> + instanceVariableNames: 'attributes'
>> + classVariableNames: ''
>> + poolDictionaries: ''
>> + category: 'Kernel-Models'!
>> +
>> + !AttributableObject commentStamp: 'cmm 10/7/2009 21:03' prior: 0!
>> + Subclass from this abstract class to inherit an attribute Dictionary.!
>>
>> Item was added:
>> + ----- Method: AttributableObject>>attributeNamed: (in category
>> 'attributes') -----
>> + attributeNamed: aString
>> + ^ attributes ifNotNil:
>> + [ attributes
>> + at: aString
>> + ifAbsent: [ nil ] ]!
>>
>> Item was added:
>> + ----- Method: AttributableObject>>attributeNamed:put: (in category
>> 'attributes') -----
>> + attributeNamed: aString put: anObject
>> + anObject ifNotNil: [ attributes ifNil: [ attributes := Dictionary new
>> ] ].
>> + ^ anObject
>> + ifNil:
>> + [ self removeAttributeNamed: aString.
>> + anObject ]
>> + ifNotNil:
>> + [ attributes
>> + at: aString
>> + put: anObject ]!
>>
>> Item was added:
>> + ----- Method: AttributableObject>>attributesToDeepCopy (in category
>> 'copying') -----
>> + attributesToDeepCopy
>> + "Subclasses override."
>> + ^ attributes
>> + ifNil: [ Array empty ]
>> + ifNotNil: [ attributes keys ]!
>>
>> Item was added:
>> + ----- Method: AttributableObject>>removeAttributeNamed: (in category
>> 'attributes') -----
>> + removeAttributeNamed: aString
>> + ^ attributes ifNotNil:
>> + [ | answer |
>> + answer := attributes
>> + removeKey: aString
>> + ifAbsent: [ nil ].
>> + attributes ifEmpty: [ attributes := nil ].
>> + answer ]!
>>
>> Item was added:
>> + ----- Method: AttributableObject>>veryDeepInner: (in category 'copying')
>> -----
>> + veryDeepInner: aDeepCopier
>> + super veryDeepInner: aDeepCopier.
>> + attributes := attributes copy.
>> + self attributesToDeepCopy do:
>> + [ : eachAttribute | attributes
>> + at: eachAttribute
>> + ifPresent:
>> + [ : value | attributes
>> + at: eachAttribute
>> + put: (value veryDeepCopyWith: aDeepCopier) ]
>> + ifAbsent: [ self error: eachAttribute, ' is not an
>> attribute.' ] ]!
>>
>>
>
>
More information about the Squeak-dev
mailing list
|