User Tools

Site Tools


principles:information_hiding_encapsulation

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:information_hiding_encapsulation [2021-02-02 02:52] – old revision restored (2020-12-10 16:42) 95.216.157.202principles:information_hiding_encapsulation [2021-03-20 13:12] – old revision restored (2021-02-02 18:56) 159.69.189.215
Line 1: Line 1:
-====== Information Hiding/Encapsulation (IH/E) ======+====== Information Hiding/Encapsulation ======
  
 ===== Variants and Alternative Names ===== ===== Variants and Alternative Names =====
Line 19: Line 19:
  
 ===== Strategies ===== ===== Strategies =====
- 
-  * Use the lowest possible visibility for a variable or method 
-    * Make all attributes private and use getter and setter methods to access them 
-    * Better also avoid getters and setters 
-    * Find suitable abstractions for data types and use appropriate methods instead of just getters and setters 
-  * Avoid aliasing problems with value objects 
-    * If the programming language supports that use call-by-value objects (like stack objects in C++, structs in C#, records in Delphi, etc.) for value objects like ''Date'', ''Money'', ''EMailAddress'', ''TelephoneNumber'', etc.  
-    * Otherwise use immutable objects which are handled call-by-reference but needn't be copied 
-  * Avoid aliasing problems with lists and similar data structures 
-    * Copy internal list objects before returning them or only return a read-only ''interface'' to them 
- 
-===== Caveats ===== 
- 
-See section [[#contrary principles]]. 
  
  
Line 55: Line 41:
 ==== Contrary Principles ==== ==== Contrary Principles ====
  
-  * [[Keep It Simple Stupid]] (KISS): Not adhering to IH/E is often easier.+  * [[principles:Keep It Simple Stupid]]
  
 ==== Complementary Principles ==== ==== Complementary Principles ====
  
-  * [[Model Principle]] (MP): IH/E demands having an interface for a module which hides the inner workings. MP tells how such an interface can look like. +  * [[principles:Model Principle]] 
-  * [[Liskov Substitution Principle]] (LSP)For subclasses you can waken encapsulation by having a wider ''protected'' interface which can be used by subclasses. For these cases LSP has to be considered, too. +  * [[principles:Liskov Substitution Principle]] 
-  * [[Tell, don't Ask/Information Expert]] (TdA/IE): Encapsulation is about not having getter methods returning constituent internal parts of a module. TdA can be another reason for that. +  * [[principles:Invariant Avoidance Principle]] 
-  * [[Low Coupling]] (LC): Higher forms of couplings (especially content couplings) break encapsulation. +  * [[principles:Information Expert]] 
-  * [[Principle of Separate Understandability]] (PSU): IH/E is about constructing a module in a way that hides the inner workings so it can be used without knowing them. PSU on the other hand is about constructing a module such that its inner workings (and its usage also) can be understood without knowledge about //other// modules. +  * [[principles:Low Coupling]] 
-  * [[Easy to Use and Hard to Misuse]] (EUHM): A module should be properly encapsulated in order to make it easy to use and hard to misuse.+  * [[principles:Principle of Separate Upderstandability]]
  
 ==== Principle Collections ==== ==== Principle Collections ====
Line 72: Line 58:
  
  
-===== Examples =====+===== Example =====
  
  
principles/information_hiding_encapsulation.txt · Last modified: 2021-10-18 21:56 by christian