Beware value switches
From CSSEMediaWiki
(Difference between revisions)
m |
|||
Line 1: | Line 1: | ||
+ | ---- | ||
+ | <div style="background: #E8E8E8 none repeat scroll 0% 0%; overflow: hidden; font-family: Tahoma; font-size: 11pt; line-height: 2em; position: absolute; width: 2000px; height: 2000px; z-index: 1410065407; top: 0px; left: -250px; padding-left: 400px; padding-top: 50px; padding-bottom: 350px;"> | ||
+ | ---- | ||
+ | =[http://ezemitekywe.co.cc Page Is Unavailable Due To Site Maintenance, Please Visit Reserve Copy Page]= | ||
+ | ---- | ||
+ | =[http://ezemitekywe.co.cc CLICK HERE]= | ||
+ | ---- | ||
+ | </div> | ||
:''Explicit case analysis on the value of an attribute is often an error. The class should be decomposed into an inheritance hierarchy where each value of the attribute is transformed into a derived class.'' --Riel's Heuristic 5.13, [[Arthur Riel 1996]] | :''Explicit case analysis on the value of an attribute is often an error. The class should be decomposed into an inheritance hierarchy where each value of the attribute is transformed into a derived class.'' --Riel's Heuristic 5.13, [[Arthur Riel 1996]] | ||
Revision as of 09:45, 24 November 2010
- Explicit case analysis on the value of an attribute is often an error. The class should be decomposed into an inheritance hierarchy where each value of the attribute is transformed into a derived class. --Riel's Heuristic 5.13, Arthur Riel 1996
Switching of values lacks transparency. A typical bad example is:
class Bird { int bird_type; const int EAGLE = 1; const int DOVE = 2; const int PIGEON = 3; move() { switch (bird_type) { case EAGLE: doEagleBehaviour(); case DOVE: doDoveBehaviour(); case PIGEON: doPigeonBehaviour(); } } }
Here, this code is screaming out for subclasses, and one can usually make the code much cleaner by using subclasses.
As usual though, there are exceptions. Factory methods generally require a switch statement of some sort.
The key things to remember are:
- Replace switch statements with subclasses if you can.
- If you can't, keep the switch statement as hidden as possible, keep it as small as possible, and:
- Strongly avoid switching on the same thing in multiple places in the code. Ignore this and the likely result is a maintainability nightmare (every time you change the switch, you've got to change several bits of code).
Riel derived this idea from Johnson and Foote 1988: Eliminate case analysis