Warning: session_start() [function.session-start]: open(/var/lib/php-sessions//sess_5839c172f5d05576af9548f437c2cd9a, O_RDWR) failed: Permission denied (13) in /datas/vol2/w4a141629/var/www/goprod.bouhours.net/htdocs/common.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /datas/vol2/w4a141629/var/www/goprod.bouhours.net/htdocs/common.php:2) in /datas/vol2/w4a141629/var/www/goprod.bouhours.net/htdocs/common.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /datas/vol2/w4a141629/var/www/goprod.bouhours.net/htdocs/common.php:2) in /datas/vol2/w4a141629/var/www/goprod.bouhours.net/htdocs/common.php on line 3
GOPROD • GOod PRactice in Object oriented Design
Login :
Password :

Design patterns

Recursive composition

Class diagram :

Class diagram

Strong points :

  1. 1. Decoupling and extensibility
    1. KO 1.1 Maximal factorization of the composition
    2. KO 1.2 Addition or removal of a leaf does not need code modification
    3. KO 1.3 Addition or removal of a composite does not need code modification
  2. 2. Uniform protocol
    1. KO 2.1 Uniform protocol on operations of composed object
    2. KO 2.2 Uniform protocol on composition managing
    3. KO 2.3 Unique access point for the client class

Spoiled pattern instantiations on different problems

Problem 1 :

Problem wording :
Design a system enabling to draw a graphic image. A graphic image is composed of lines, rectangles, texts and groups. A group may be composed of other groups, lines, rectangles and texts.
Optimal solution :

Static diagram :

Static diagram

This solution allows a good decoupling, and a good extensibility.

Alternative solution :

Static diagram :

Static diagram

Probably the worst solution. No decoupling, no extensibility and none uniform protocol

Les têtes de mule
Cédric BOUHOURS
Cédric BOUHOURS
Cédric BOUHOURS

Warning: Unknown: open(/var/lib/php-sessions//sess_5839c172f5d05576af9548f437c2cd9a, O_RDWR) failed: Permission denied (13) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php-sessions/) in Unknown on line 0