User Tools

Site Tools


principles:single_level_of_abstraction

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
principles:single_level_of_abstraction [2020-10-12 14:25]
159.69.186.191 old revision restored (2014-07-01 11:12)
principles:single_level_of_abstraction [2020-10-12 19:58] (current)
159.69.186.191 old revision restored (2020-10-12 12:08)
Line 12: Line 12:
 ===== Principle Statement ===== ===== Principle Statement =====
  
-Each method should be written in terms of a single level of abstraction.+Each method should be written in terms of a single level of abstraction
  
  
Line 19: Line 19:
 All statements of a method should belong to the same level of abstraction. If there is a statement which belongs to a lower level of abstraction, it should go to a private method which comprises statements on this level. Doing so will result in smaller methods. All statements of a method should belong to the same level of abstraction. If there is a statement which belongs to a lower level of abstraction, it should go to a private method which comprises statements on this level. Doing so will result in smaller methods.
  
-Often the body of a loop can be extracted resulting in a separate private method. Loops should ideally contain a single statement (usually a method call). Sometimes this is not achievable without other drawbacks but certainly large loop bodies can be considered a small+Often the body of a loop can be extracted resulting in a separate private method. Loops should ideally contain a single statement (usually a method call). Sometimes this is not achievable without other drawbacks but certainly large loop bodies can be considered a smell
  
 A further indicator for a missing method is the combination of a blank line, a comment and a block of code. In most of the cases the code block should go to a new private method. This also makes the comment obsolete as the new method carries a name which typically resembles the comment.  A further indicator for a missing method is the combination of a blank line, a comment and a block of code. In most of the cases the code block should go to a new private method. This also makes the comment obsolete as the new method carries a name which typically resembles the comment. 
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]] for further aspects.+
  
  
Line 106: Line 104:
 } }
  
-private ResultDto toDto(ResultEntity) {+private ResultDto toDto(ResultEntity entity) {
     ResultDto dto = new ResultDto();     ResultDto dto = new ResultDto();
     dto.setShoeSize(entity.getShoeSize());             dto.setShoeSize(entity.getShoeSize());        
Line 117: Line 115:
 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 ''toDto'' method, you can just read and understand ''buildResult'' without being distracted by unnecessary detail. 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 ''toDto'' method, you can just read and understand ''buildResult'' without being distracted by unnecessary detail.
  
-==== Example2: Commented Code Blocks ====+==== Example2: Comment Plus Code Block ====
  
-==== Example3: Algorithms ====+==== Example3: Parameter Checking ====
  
 +==== Example4: Extracting Classes ====
  
 ===== Description Status ===== ===== Description Status =====
principles/single_level_of_abstraction.txt · Last modified: 2020-10-12 19:58 by 159.69.186.191