title: Warnier-voorstelling
text: De Warnier-voorstelling is een methode om gestructureerd te programmeren die beschreven werd door de Franse informaticus Jean-Dominique Warnier en de Amerikaanse informaticus Kenneth Orr. Aan de hand van de gegevensstroom wordt een programma opgebouwd. Bij de voorstelling hiervan wordt gebruikgemaakt van accolades. De methode vertoont grote gelijkenissen met de Jackson Structured Programming, maar kan makkelijker uitgetypt worden.
  
  Voorbeeld 
  Een bestand geeft weer hoeveel geld er voor het goede doel werd geschonken, gesorteerd per provincie en per gemeente:
  Antwerpen       * Lier      * 3445,98 * Scouts-Lier
  Antwerpen       * Berchem   * 2555,98 * Scouts-Berchem
  Antwerpen       * Berchem   *  559,80 * Chiro-Berchem
  Vlaams Brabant  * Leuven    * 4567,77 * Chiro-Leuven
  Vlaams Brabant  * Halle     *  778,77 * Chiro-Halle
  Vlaams Brabant  * Vilvoorde *  367,77 * Chiro-Vilvoorde
  Oost-Vlaanderen * Gent      *  456,34 * anonieme schenker
  Graag zouden we een overzicht produceren met hoeveel er per provincie werd geschonken:
  -provincie Antwerpen:
  --Lier:      * 3445,98
  --Berchem:   * 3115,78
  -provincie Vlaams Brabant:
  --Leuven:    * 4567,77
  --Halle:     *  778,77
  --Vilvoorde: *  367,77
  -Oost-Vlaanderen:
  --Gent:      *  456,34
  Een Warnier-diagram zal eerst de invoer beschrijven:
  {provincie (*) {stad (*)      {schenker (*) {bedrag
  Daarna de uitvoer:
  {              {provincienaam
  {provincie (*) {stad (*)      {totaalbedrag per stad
  {              {
  En ten slotte het programma dat een fusie is van beide: wat bij invoer stond, worden read-instructies, wat bij uitvoer stond, worden write-instructies.
  
  Vuistregels 
  Volgens Warnier bestaat het schrijven van een logisch foutloos programma uit volgende stappen, onafhankelijk van de programmeertaal die gebruikt wordt:
   Beschrijf eerst de vorm van de gegeven invoer en de gewenste uitvoer.
   Beschrijf op basis daarvan de ruwe programmastructuur aan de hand van de basisconstructies (zie hieronder) sequentie, selectie en iteratie. Vermijd het gebruik van sprongen (goto). (Dit leidt tot moeilijk te begrijpen programma's, en bovendien kan aangetoond worden dat alle programmaflows met de drie basisconstructies kunnen beschreven worden.)
   Vul aan met voorwaarden. (IF/UNTIL/WHILE)
   Schrijf de input- en output-instructies op de gewenste plaatsen. (OPEN/READ/WRITE/CLOSE)
   Vul aan met tellers en variabelen naar wens (totaal, subtotaal, aantal, ...)
  
  Basisconstructies
  
  Sequentie 
  Hiervoor worden de opeenvolgende zaken onder elkaar achter dezelfde accolade geschreven:
  {sta op
  {eet ontbijt
  {werk thuis
  {eet middagmaal
  {werk elders
  {eet avondmaal
  {slaap
  
  Selectie 
  Tussen de verschillende mogelijkheden (van een If(... then else...)/Eval/CASE/Switch/...-constructie) wordt een (x) geschreven
  {(WHEN geslacht = 'M')
  {man
  { (x)
  {(WHEN geslacht = 'V')
  {vrouw
  { (x)
  {(WHEN OTHER)
  {onbekend
  
  Iteratie 
  Na de te herhalen stap wordt een (*) geschreven voor een iteratie, of een (+) voor een repetitie. De stopvoorwaarde wordt eronder geschreven tussen ronde haken.
  {moeder
  {kinderen (*)
  {(UNTIL geen kinderen meer)
  {vader
  
  Zie ook 
   Datamodellering
  
  Literatuur 
   James A. Senn, Analysis & Design of Information Systems, 2nd ed., McGraw-Hill Publishing Company
  
  Externe links 
    Dave Higgins Consulting website 
    Ken Orr Institute
    Voorbeelddiagrammen
  
  Programmeerconcept