principles:single_level_of_abstraction
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
principles:single_level_of_abstraction [2014-06-30 23:09] – Evidence, alternative n christian | principles:single_level_of_abstraction [2020-09-09 15:26] – old revision restored (2014-07-01 11:12) 116.202.228.169 | ||
---|---|---|---|
Line 12: | Line 12: | ||
===== Principle Statement ===== | ===== Principle Statement ===== | ||
- | Each [[glossary: | + | Each method |
Line 36: | Line 36: | ||
===== Caveats ===== | ===== Caveats ===== | ||
+ | An exception where it may be helpful not to adhere to the principle are certain algorithms. When implementing for instance a sorting algorithm, keeping the algorithm together can be considered more readable than splitting it up into several small functions. This is because certain algorithms are well known and splitting them up may disguise them. A suitable compromise has to be found in such a case. | ||
- | See section [[#contrary principles]]. | + | See section [[#contrary principles]] |
===== Origin ===== | ===== Origin ===== | ||
+ | Stated in [[resources: | ||
===== Evidence ===== | ===== Evidence ===== | ||
Line 58: | Line 60: | ||
==== Specializations ==== | ==== Specializations ==== | ||
+ | * [[One Line Blocks]] | ||
==== Contrary Principles ==== | ==== Contrary Principles ==== | ||
- | |||
* [[More Is More Complex|MIMC]]: | * [[More Is More Complex|MIMC]]: | ||
* [[Principle of Separate Understandability|PSU]]: | * [[Principle of Separate Understandability|PSU]]: | ||
Line 75: | Line 77: | ||
===== Examples ===== | ===== Examples ===== | ||
- | ==== Example1: | + | ==== Example1: |
+ | |||
+ | A typical example for the application of SLA is a loop iterating over a certain data structure: | ||
+ | |||
+ | <code java> | ||
+ | public List< | ||
+ | List< | ||
+ | for (ResultEntity entity : resultSet) { | ||
+ | ResultDto dto = new ResultDto(); | ||
+ | dto.setShoeSize(entity.getShoeSize()); | ||
+ | dto.setNumberOfEarthWorms(entity.getNumberOfEarthWorms()); | ||
+ | dto.setAge(computeAge(entity.getBirthday())); | ||
+ | result.add(dto); | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | There are two levels of abstractions in this method. First there is the loop which acts upon the whole result set and second there is the loop body which converts a single entity to a [[patterns: | ||
+ | |||
+ | <code java> | ||
+ | public List< | ||
+ | List< | ||
+ | for (ResultEntity entity : resultSet) { | ||
+ | result.add(toDto(entity)); | ||
+ | } | ||
+ | return result; | ||
+ | } | ||
+ | |||
+ | private ResultDto toDto(ResultEntity) { | ||
+ | ResultDto dto = new ResultDto(); | ||
+ | dto.setShoeSize(entity.getShoeSize()); | ||
+ | dto.setNumberOfEarthWorms(entity.getNumberOfEarthWorms()); | ||
+ | dto.setAge(computeAge(entity.getBirthday())); | ||
+ | return dto; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Now there are two smaller methods each of which is written in terms of a single level of abstraction. This is better readable as no mental grouping is necessary. Furthermore the two methods are still separately understandable ([[Principle of Separate Understandability|PSU]]) so no mental inlining is necessary and if you don't care about the details of the '' | ||
+ | |||
+ | ==== Example2: Commented Code Blocks ==== | ||
+ | |||
+ | ==== Example3: Algorithms ==== | ||
===== Description Status ===== | ===== Description Status ===== | ||
/* Choose one of the following and comment out the rest: */ | /* Choose one of the following and comment out the rest: */ | ||
- | [[wiki: | + | /*[[wiki: |
- | /*[[wiki: | + | |
+ | [[wiki: | ||
/ | / | ||
===== Further Reading ===== | ===== Further Reading ===== | ||
+ | * {{page> | ||
===== Discussion ===== | ===== Discussion ===== | ||
Discuss this wiki article and the principle on the corresponding [[talk: | Discuss this wiki article and the principle on the corresponding [[talk: |
principles/single_level_of_abstraction.txt · Last modified: 2021-10-18 22:03 by christian