Functionele decompositie
Functionele decompositie is een manier om het ontwerp van een systeem te analyseren. Een functionele decompositie is een hiërarchische verzameling van (deel)functies. Functionele decompositie streeft ernaar soortgelijke bewerkingen onder te brengen in één algemeen bruikbare functie en soortgelijke bewerkingen daarbinnen weer in andere functies enzovoorts.

Dit principe wordt toegepast binnen de Software Engineering.

Voorbeeld

Neem het volgende codefragment dat het teken van een tweetal getallen berekent:

  int i1, i2; // het teken van het getal x1 resp. het getal x2
if (x1 > 0){
  i1= 1;
} else if (x1 < 0){
  i1= -1;
} else{
  i1= 0;
}
if (x2 > 0){
  i2= 1;
} else if (x2 < 0){
  i2= -1;
} else{
  i2= 0;
}

Het fragment if .. else if .. else komt tweemaal voor en doet in beide gevallen hetzelfde, zij het dan met twee verschillende getallen als invoer. Functionele decompositie leidt tot het ontwerp van een functie die deze bewerking uitvoert op een willekeurig getal, hier x:

  int sign(float x){
  if (x > 0){
    return 1;
  } else if (x < 0){
    return -1;
  } else{
    return 0;
  }
}

Het oorspronkelijke codefragment kan nu vereenvoudigd worden tot:

  int i1, i2;
i1= sign(x1);
i2= sign(x2);

Functies met geheugen

In de praktijk komt het nogal eens voor dat bepaalde waarden voor de functieparameters vaak voorkomen. Om tijd te besparen kan dan gebruikgemaakt worden van een geheugen met daarin de 'meest gestelde vragen' en de bijbehorende 'antwoorden'.

Als het antwoord afhangt van andere omstandigheden dan van de gestelde vraag alleen is dit echter niet zonder risico. Een functie die de grootte van een bestand moet bepalen bijvoorbeeld zou een geheugen met bestandsnamen en eerder berekende groottes kunnen bevatten, maar als een bestand tussentijds wijzigt is de waarde in het geheugen niet meer correct. Dit probleem kan worden opgelost door ervoor te zorgen dat bij verandering van het bestand de waarde in het geheugen wordt aangepast. Alle betrokken functies delen dan een collectief geheugen. Deze benadering is verwant aan object-georiënteerd programmeren.

Software engineering