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 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-02-02 18:56] – old revision restored (2021-02-01 19:42) 95.216.157.202
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