User Tools

Site Tools


principles:tell_don_t_ask_information_expert

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
principles:tell_don_t_ask_information_expert [2013-09-06 15:10] – [Description] TdA == IE christianprinciples:tell_don_t_ask_information_expert [2021-09-02 20:51] – old revision restored (2021-03-28 06:12) 65.21.179.175
Line 11: Line 11:
 /* fill in contexts here: */ /* fill in contexts here: */
   * [[contexts:Object-Oriented Design]]    * [[contexts:Object-Oriented Design]] 
-  * [[contexts:Implementation]]+
  
 ===== Principle Statement ===== ===== Principle Statement =====
Line 20: Line 20:
 ===== Description ===== ===== Description =====
  
-Each module has a set of responsibilities so there is a kind of mapping between them. This mapping can be good or bad. A module is said to be an expert for a given responsibility if it already has the necessary information which is necessary to fulfill the task. IE now says that responsibilities should be mapped to modules such that each module only is responsible for things it is an expert for.+Each module has a set of responsibilities. Subsystems have specific tasks, packages group several related classes, classes have methods and attributes, and so on. So there is a kind of mapping between modules and responsibilities. This mapping is good when the information which is necessary to fulfill the given task is present in the given module so there is no need to acquire all this information.
  
-Another view on the principle is that responsibility mapping is bad when one module has to ask another module for information (getter invocation), makes some computations, and stores back the result (setter invocation). Rather modules should tell other modules what they should do and not patronize them. In object-orientation objects can be seen as entities constantly claiming "I can do that myself!". 
  
-The following reasoning shows that //Tell don't Ask// and //Information Expert// are essentially the same principle: 
- 
-  * Suppose TdA is adhered to, but IE is neglected. 
-    * When IE is neglected, then there is a module which is not the information expert for its responsibility. 
-    * But then the module has to ask for the information it needs, so TdA is also neglected. 
-    * As this violates the assumption that TdA is adhered to, this means that adhering to TdA also results in adhering to IE. 
-  * Suppose IE is adhered to but TdA is neglected 
-    * When TdA is neglected, then there is a module ''A'' which gets data from another module ''B'' and makes some computations or decisions which normally ''B'' could do. 
-    * But then ''B'' is the information expert and not ''A'', so IE is neglected. 
-    * As this violates the assumption that IE is adhered to, this means that adhering to IE also results in adhering to TdA. 
-  * So TdA and IE are equivalent views on the same principle. 
- 
-Despite of its proof-like form this is not a formal proof as there is no formal definition of TdA and IE. Nevertheless TdA and IE can be seen as two views on the same principle. 
 ===== Rationale ===== ===== Rationale =====
  
Line 61: Line 47:
 ===== Evidence ===== ===== Evidence =====
 /* Comment out what is not applicable and explain the rest: */ /* Comment out what is not applicable and explain the rest: */
- +/* 
-/*  * [[wiki:Proposed]]*/ +  * [[wiki:Proposed]] 
-/*  * [[wiki:Examined]]*+  * [[wiki:Examined]] 
- +  * [[wiki:Accepted]] 
-[[wiki:Accepted]]: This principle is prominently described in Craig Larman's book //Applying UMl and Patterns//. +  * [[wiki:Questioned]] 
- +*/
-/*  * [[wiki:Questioned]]*/ +
  
 ===== Relations to Other Principles ===== ===== Relations to Other Principles =====
Line 99: Line 83:
 ===== 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:Stub]]*/ +[[wiki:Stub]] 
-[[wiki:Incomplete]]+/*[[wiki:Incomplete]]*/
 /*[[wiki:Complete]]*/ /*[[wiki:Complete]]*/
  
Line 109: Line 93:
   * Andrew Hunt and David Thomas: //[[http://www.ccs.neu.edu/research/demeter/related-work/pragmatic-programmer/jan_03_enbug.pdf|The Art of Enbugging]]//   * Andrew Hunt and David Thomas: //[[http://www.ccs.neu.edu/research/demeter/related-work/pragmatic-programmer/jan_03_enbug.pdf|The Art of Enbugging]]//
  
-===== Discussion ===== 
- 
-Discuss this wiki article and the principle on the corresponding [[talk:principles:Tell Don't Ask/Information Expert|talk page]]. 
principles/tell_don_t_ask_information_expert.txt · Last modified: 2021-10-18 21:42 by christian