SlideShare a Scribd company logo
Stéphane Ducasse 1
Stéphane Ducasse
stephane.ducasse@inria.fr
http://stephane.ducasse.free.fr/
Naming Smalltalk
Patterns
S.Ducasse 2
Coding Standards
Mainly from Smalltalk Best
Practice Patterns by K. Beck
Excellent
Must read!
S.Ducasse 3
Coding Standards
• Standards
• improve communication
• let code be the design
• make code more habitable
• change
S.Ducasse 4
Coding Standards for Smalltalk
• Variables have no types
• Names can be any length
• Operations named with keywords
• Pretty printer
S.Ducasse 5
Names
• Names should mean something.
• Standard protocols
• Object (printOn:, =)
• Collection (do:, add:, at:put:, size)
• Standard naming conventions
S.Ducasse 6
Intention Revealing Selector
• Readability of message send is more important than
readability of method
• Name should specify what method does, not how.
• aDoor open
• and not
• aDoor putPressureOnHandleThenPullWithRotation
S.Ducasse 7
Examples
ParagraphEditor>>highlight: aRectangle
self reverse: aRectangle
If you would replace highlight: by reverse: , the
system will run in the same way but you would
reveal the implementation of the method.
S.Ducasse 8
Examples
If we choose to name after HOW it accomplished
its task
Array>>linearSearchFor:,
Set>>hashedSearchFor:,
BTree>>treeSearchFor:
These names are not good because you have to
know the type of the objects.
Collection>>searchFor:
even better
Collection>>includes:
S.Ducasse 9
Instead of:
setTypeList: aList
"add the aList elt to the Set of type taken by the
variable"
typeList add: aList.
Write:
addTypeList: aList
"add the aList elt to the Set of type taken by the
variable"
typeList add: aList.
Name your Method Well
S.Ducasse 10
setType: aVal
"compute and store the variable type"
self addTypeList: (ArrayType with: aVal).
currentType := (currentType computeTypes: (ArrayType with: aVal))
Not precise, not good
computeAndStoreType: aVal
"compute and store the variable type"
self addTypeList: (ArrayType with: aVal).
currentType := (currentType computeTypes: (ArrayType with: aVal))
Precise, give to the reader a good idea of the
functionality and not about the implementation
Name Well your Methods
S.Ducasse 11
Method Names
S.Ducasse 12
Method Names
• If there is already a standard name, use it otherwise
follow these rules.
• Three kinds of methods
• change state of receiver
• change state of argument
• return value from receiver
S.Ducasse 13
Change State of Receiver
• method name is verb phrase
• translateBy:
• add:
S.Ducasse 14
Change State of Argument
• Verb phrase ending with preposition like on or to.
• displayOn:
• addTo:
• printOn:
S.Ducasse 15
ReturnValue from Receiver
• Method name is noun phrase or adjective, a description
rather than a command
• translatedBy:
• size
• topLeft
S.Ducasse 16
Method Names
• Specialized names for specialized purposes.
• Double-dispatching methods
• Accessing methods
• Query methods
• Boolean property setting
• Converter methods
S.Ducasse 17
Accessing Methods
• Many instance variables have accessing methods, methods
for reading and writing them.
• Same name than the instance variables
• Accessing methods come in pairs.
• name, name:
• width, width:
• x, x:
S.Ducasse 18
When to use Accessing Methods
• Two opinions:
• Always, including an object’s own instance variable
• lazy initialization, subclassing is easier
• Only when you need to use it.
• better information hiding
• With the refactoring browser it is easy to transform the
class using or not accessing
S.Ducasse 19
Query Method
• Methods that return a value often describe the type of the
value because they are noun phrases.
• Query methods are not noun phrases, but are predicates.
• How can we make the return type clear?
• Provide a method that returns a Boolean in the “testing”
protocol. Name it by prefacing the property name with a
form of “be” or “has”- is, was, will, has
S.Ducasse 20
Testing Methods
• Prefix every testing method with "is".
• isNil
• isControlWanted
• isEmpty
• hasBorder
S.Ducasse 21
Converting Method
• Often you want to return the receiver in a new format.
• Prepend "as" to the name of the class of object returned.
• asSet (in Collection)
• asFloat (in Number)
• asComposedText (in Text)
S.Ducasse 22
Classes
S.Ducasse 23
Simple Superclass Name
• What should we call the root of a hierarchy?
• Complex name conveys full meaning.
• Simple name is easy to say, type, extend.
• But need to show that subclasses are related.
S.Ducasse 24
Simple Superclass Name
• Give superclasses simple names: two or (preferably) one
word
• Number
• Collection
• VisualComponent
S.Ducasse 25
Qualified Subclass Name
• What should you call a subclass that plays a role similar to
its superclass?
• Unique name conveys most information
• Derived name communicates relationship to superclass
S.Ducasse 26
Qualified Subclass Name
• Use names with obvious meaning. Otherwise, prepend an
adjective to most important superclass.
• OrderedCollection
• UndefinedObject
• CloneFigureCommand, CompositeCommand,
ConnectionCommand
S.Ducasse 27
S.Ducasse 28
Variables: Roles vs.Types
• Types are specified by classes
• aRectangle
• aCollection
• aView
• Roles - how an object is used
• location
• employees
• topView
S.Ducasse 29
Role Suggesting InstanceVariable
• What should you name an instance variable?
• Type is important for understanding implementation. But
class comment can describe type.
• Role communicates intent, and this harder to understand
than type.
S.Ducasse 30
Role Suggesting InstanceVariable
• Name instance variables for the role they play. Make the
name plural if the variable is a collection.
• Point: x, y
• Interval: start, stop, step
• Polyline: vertices
S.Ducasse 31
Type Suggesting Parameter Name
• Name of variable can either communicate type or role.
• Keywords communicate their parameter's role, so name of
variable should give new information.
S.Ducasse 32
Type Suggesting Parameter Name
• Name parameters according to their most general
expected class, preceded by "a" or "an". If there is more
than one parameter with the same expected class, precede
the class with a descriptive word.
S.Ducasse 33
Temporaries
• Name temporaries after role they play.
• Use temporaries to:
• collect intermediate results
• reuse result of an expression
• name result of an expression
• Methods are simpler when they don't use temporaries!
S.Ducasse 34
Conclusion
Names are important
Programming is about
communication
intention
…
Read the book:
Smalltalk Best Practice Patterns
Even if you will program in Java or C#!
When the program compiles this is the start not the
end…

More Related Content

PPT
7 - OOP - OO Concepts
PPT
10 - OOP - Inheritance (b)
PPT
Shellvariables in Linux
PPT
Stoop 301-internal objectstructureinvw
PPT
8 - OOP - Smalltalk Model
PPT
5 - OOP - Smalltalk in a Nutshell (c)
PPT
Stoop 416-lsp
PPT
Stoop 400 o-metaclassonly
7 - OOP - OO Concepts
10 - OOP - Inheritance (b)
Shellvariables in Linux
Stoop 301-internal objectstructureinvw
8 - OOP - Smalltalk Model
5 - OOP - Smalltalk in a Nutshell (c)
Stoop 416-lsp
Stoop 400 o-metaclassonly

Viewers also liked (20)

PPT
Stoop 430-design patternsintro
PPT
Stoop 431-visitor
PPT
11 - OOP - Numbers
PPT
Stoop 300-block optimizationinvw
PPT
Stoop ed-subtyping subclassing
PPT
Stoop 414-smalltalk elementsofdesign
PPT
Stoop sed-class initialization
PPT
PPT
12 virtualmachine
PPT
Stoop 440-adaptor
PPT
Stoop 433-chain
PPT
Double Dispatch
PPT
Stoop ed-some principles
PPT
08 refactoring
PPT
Stoop 423-smalltalk idioms
PPT
Stoop 437-proxy
PPT
03 standardclasses
PPT
Stoop ed-frameworks
PPT
Stoop 305-reflective programming5
PPT
Stoop 430-design patternsintro
Stoop 431-visitor
11 - OOP - Numbers
Stoop 300-block optimizationinvw
Stoop ed-subtyping subclassing
Stoop 414-smalltalk elementsofdesign
Stoop sed-class initialization
12 virtualmachine
Stoop 440-adaptor
Stoop 433-chain
Double Dispatch
Stoop ed-some principles
08 refactoring
Stoop 423-smalltalk idioms
Stoop 437-proxy
03 standardclasses
Stoop ed-frameworks
Stoop 305-reflective programming5
Ad

Similar to Stoop 422-naming idioms (20)

PPT
9 - OOP - Smalltalk Classes (a)
PPT
9 - OOP - Smalltalk Classes (c)
PPT
9 - OOP - Smalltalk Classes (b)
PPT
4 - OOP - Taste of Smalltalk (Tamagoshi)
PPT
8 - OOP - Syntax & Messages
PPT
Stoop 423-some designpatterns
PPT
Stoop ed-class forreuse
PPT
Stoop 421-design heuristics
PPTX
Classes, objects in JAVA
PPT
8 - OOP - Smalltalk Syntax
PPT
Debugging VisualWorks
PPT
Class & Object - Intro
PPT
4 - OOP - Taste of Smalltalk (Squeak)
PPT
4 - OOP - Taste of Smalltalk (VisualWorks)
PPT
Object and class in java
PPT
12 - Conditions and Loops
PPT
PPT
JavaYDL8
PPTX
Fundamentals of OOP (Object Oriented Programming)
PPT
9 - OOP - Smalltalk Classes (a)
9 - OOP - Smalltalk Classes (c)
9 - OOP - Smalltalk Classes (b)
4 - OOP - Taste of Smalltalk (Tamagoshi)
8 - OOP - Syntax & Messages
Stoop 423-some designpatterns
Stoop ed-class forreuse
Stoop 421-design heuristics
Classes, objects in JAVA
8 - OOP - Smalltalk Syntax
Debugging VisualWorks
Class & Object - Intro
4 - OOP - Taste of Smalltalk (Squeak)
4 - OOP - Taste of Smalltalk (VisualWorks)
Object and class in java
12 - Conditions and Loops
JavaYDL8
Fundamentals of OOP (Object Oriented Programming)
Ad

More from The World of Smalltalk (18)

PDF
05 seaside canvas
PPT
PPT
10 reflection
PPT
09 metaclasses
PPT
07 bestpractice
PPT
PPT
Stoop sed-smells
PPT
Stoop sed-sharing ornot
PPT
Stoop sed-class initialization
PPT
Stoop metaclasses
PPT
Stoop ed-unit ofreuse
PPT
Stoop ed-inheritance composition
PPT
Stoop ed-dual interface
PPT
Stoop 450-s unit
05 seaside canvas
10 reflection
09 metaclasses
07 bestpractice
Stoop sed-smells
Stoop sed-sharing ornot
Stoop sed-class initialization
Stoop metaclasses
Stoop ed-unit ofreuse
Stoop ed-inheritance composition
Stoop ed-dual interface
Stoop 450-s unit

Stoop 422-naming idioms

  • 1. Stéphane Ducasse 1 Stéphane Ducasse stephane.ducasse@inria.fr http://stephane.ducasse.free.fr/ Naming Smalltalk Patterns
  • 2. S.Ducasse 2 Coding Standards Mainly from Smalltalk Best Practice Patterns by K. Beck Excellent Must read!
  • 3. S.Ducasse 3 Coding Standards • Standards • improve communication • let code be the design • make code more habitable • change
  • 4. S.Ducasse 4 Coding Standards for Smalltalk • Variables have no types • Names can be any length • Operations named with keywords • Pretty printer
  • 5. S.Ducasse 5 Names • Names should mean something. • Standard protocols • Object (printOn:, =) • Collection (do:, add:, at:put:, size) • Standard naming conventions
  • 6. S.Ducasse 6 Intention Revealing Selector • Readability of message send is more important than readability of method • Name should specify what method does, not how. • aDoor open • and not • aDoor putPressureOnHandleThenPullWithRotation
  • 7. S.Ducasse 7 Examples ParagraphEditor>>highlight: aRectangle self reverse: aRectangle If you would replace highlight: by reverse: , the system will run in the same way but you would reveal the implementation of the method.
  • 8. S.Ducasse 8 Examples If we choose to name after HOW it accomplished its task Array>>linearSearchFor:, Set>>hashedSearchFor:, BTree>>treeSearchFor: These names are not good because you have to know the type of the objects. Collection>>searchFor: even better Collection>>includes:
  • 9. S.Ducasse 9 Instead of: setTypeList: aList "add the aList elt to the Set of type taken by the variable" typeList add: aList. Write: addTypeList: aList "add the aList elt to the Set of type taken by the variable" typeList add: aList. Name your Method Well
  • 10. S.Ducasse 10 setType: aVal "compute and store the variable type" self addTypeList: (ArrayType with: aVal). currentType := (currentType computeTypes: (ArrayType with: aVal)) Not precise, not good computeAndStoreType: aVal "compute and store the variable type" self addTypeList: (ArrayType with: aVal). currentType := (currentType computeTypes: (ArrayType with: aVal)) Precise, give to the reader a good idea of the functionality and not about the implementation Name Well your Methods
  • 12. S.Ducasse 12 Method Names • If there is already a standard name, use it otherwise follow these rules. • Three kinds of methods • change state of receiver • change state of argument • return value from receiver
  • 13. S.Ducasse 13 Change State of Receiver • method name is verb phrase • translateBy: • add:
  • 14. S.Ducasse 14 Change State of Argument • Verb phrase ending with preposition like on or to. • displayOn: • addTo: • printOn:
  • 15. S.Ducasse 15 ReturnValue from Receiver • Method name is noun phrase or adjective, a description rather than a command • translatedBy: • size • topLeft
  • 16. S.Ducasse 16 Method Names • Specialized names for specialized purposes. • Double-dispatching methods • Accessing methods • Query methods • Boolean property setting • Converter methods
  • 17. S.Ducasse 17 Accessing Methods • Many instance variables have accessing methods, methods for reading and writing them. • Same name than the instance variables • Accessing methods come in pairs. • name, name: • width, width: • x, x:
  • 18. S.Ducasse 18 When to use Accessing Methods • Two opinions: • Always, including an object’s own instance variable • lazy initialization, subclassing is easier • Only when you need to use it. • better information hiding • With the refactoring browser it is easy to transform the class using or not accessing
  • 19. S.Ducasse 19 Query Method • Methods that return a value often describe the type of the value because they are noun phrases. • Query methods are not noun phrases, but are predicates. • How can we make the return type clear? • Provide a method that returns a Boolean in the “testing” protocol. Name it by prefacing the property name with a form of “be” or “has”- is, was, will, has
  • 20. S.Ducasse 20 Testing Methods • Prefix every testing method with "is". • isNil • isControlWanted • isEmpty • hasBorder
  • 21. S.Ducasse 21 Converting Method • Often you want to return the receiver in a new format. • Prepend "as" to the name of the class of object returned. • asSet (in Collection) • asFloat (in Number) • asComposedText (in Text)
  • 23. S.Ducasse 23 Simple Superclass Name • What should we call the root of a hierarchy? • Complex name conveys full meaning. • Simple name is easy to say, type, extend. • But need to show that subclasses are related.
  • 24. S.Ducasse 24 Simple Superclass Name • Give superclasses simple names: two or (preferably) one word • Number • Collection • VisualComponent
  • 25. S.Ducasse 25 Qualified Subclass Name • What should you call a subclass that plays a role similar to its superclass? • Unique name conveys most information • Derived name communicates relationship to superclass
  • 26. S.Ducasse 26 Qualified Subclass Name • Use names with obvious meaning. Otherwise, prepend an adjective to most important superclass. • OrderedCollection • UndefinedObject • CloneFigureCommand, CompositeCommand, ConnectionCommand
  • 28. S.Ducasse 28 Variables: Roles vs.Types • Types are specified by classes • aRectangle • aCollection • aView • Roles - how an object is used • location • employees • topView
  • 29. S.Ducasse 29 Role Suggesting InstanceVariable • What should you name an instance variable? • Type is important for understanding implementation. But class comment can describe type. • Role communicates intent, and this harder to understand than type.
  • 30. S.Ducasse 30 Role Suggesting InstanceVariable • Name instance variables for the role they play. Make the name plural if the variable is a collection. • Point: x, y • Interval: start, stop, step • Polyline: vertices
  • 31. S.Ducasse 31 Type Suggesting Parameter Name • Name of variable can either communicate type or role. • Keywords communicate their parameter's role, so name of variable should give new information.
  • 32. S.Ducasse 32 Type Suggesting Parameter Name • Name parameters according to their most general expected class, preceded by "a" or "an". If there is more than one parameter with the same expected class, precede the class with a descriptive word.
  • 33. S.Ducasse 33 Temporaries • Name temporaries after role they play. • Use temporaries to: • collect intermediate results • reuse result of an expression • name result of an expression • Methods are simpler when they don't use temporaries!
  • 34. S.Ducasse 34 Conclusion Names are important Programming is about communication intention … Read the book: Smalltalk Best Practice Patterns Even if you will program in Java or C#! When the program compiles this is the start not the end…