Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'Funktioner
10.  Funktioner - Lasagne

Nøgleordet i dette og de følgende afsnit er abstraktion. I C udgøres den primære abstraktionsmekanisme af funktioner.

Ideen i dette kapitel er at introducere og motivere abstraktioner og funktioner via analogier fra gastronomien. Programmer kan opfattes som opskrifter på beregninger. Vi taler i denne sammenhæng om algoritmer. I den gastronomiske verden kender vi også til opskrifter, nemlig opskrifter på det at lave mad.

Vi studerer således indledningsvis en lasagne opskrift. God appetit!

10.1 Lasagne al forno10.3 Lasagne ala C
10.2 Struktureret lasagne
 

10.1.  Lasagne al forno
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Herunder viser vi en opskrift på lasagne al forno. Vi kan karakterisere den som en sekvens af trin, som vi antager vil kunne udføres af en mad fortolker. Uheldigvis har vi ikke (endnu) en automatiseret fortolker, som kan eksekvere opskriften. Vi må give den til en kyndig person (en kok, f.eks.) for hvem de enkelte trin giver mening. Vi vil her antage, at de enkelte trin er tydelige og klare for den person eller maskine, som effekturerer opskriften til en varm og lækker ret.

  • Bland og ælt 500 g durum hvedemel, 5 æg, lidt salt og 2 spsk olie.

  • Kør pastaen gemmen en pastamaskine i tynde baner.

  • Smelt 3 spsk smør, og rør det sammen med 3 spsk mel.

  • Spæd med med 5 dl mælk og kog sovsen under svag varme.

  • Svits 2 hakkede løg med 500 g hakket oksekød, samt salt og pebber.

  • Tilsæt 3 spsk tomatpuré, en ds. flåede tomater og 3 fed knust hvidløg.

  • Kog kødsovsen 10 minutter.

  • Bland nu lagvis pastabaner, kødsovs og hvid sovs. Drys med paramesanost.

  • Gratiner retten i ovnen 15 minutter ved 225 grader.

Alle som har lavet lasagne vil vide, at denne ret laves af kødsovs, hvid sovs, og pasta. Vi ser det således som en svaghed, at disse abstraktioner ikke har fundet indpas i opskriften. Indførelse af abstraktioner vil være vores næste træk.

 

10.2.  Struktureret lasagne
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Struktureret lasagne er nok ikke på menukortet i mange restauranter. Men strukturerede lasagneopskrifter, ala den vi viser i program 10.1 er almindelige i mange kogebøger.

I en mere struktureret opskrift indgår delopskrifter på lasagneplader, hvid sovs og kødsovs

1
2
3
4
5
6
7
8
9
Lav en dobbelt portion lasagneplader.

Lav en portion hvid sovs.

Lav en portion kødsovs.

Bland nu lagvis pastabaner, kødsovs og hvid sovs. Drys med paramesanost.

Gratiner retten i ovnen 15 minutter ved 225 grader.
Program 10.1    Lasagne.

De tre fremhævede linier aktiverer abstraktioner (delopskrifter) for hhv. det at lave lasagneplader (for vi køber dem nemlig ikke færdige i Bilka), hvid sovs, og kødsovs. Vi tænker på de sidste to trin som basale trin, der kan genkendes fra opskriften i afsnit 10.1.

Men vi skal naturligvis også beskrive, hvad det vil sige at lave plader, hvid sovs og kødsovs. Hver delopskrift indkapsler en række madlavningstrin. Vi viser de tre madlavningsabstraktioner i hhv. program 10.2, program 10.3 og program 10.4.

1
2
3
Bland og ælt 500 g durum hvedemel, 5 æg, lidt salt og 2 spsk olie;

Kør pastaen gemmen en pastamaskine i tynde baner;
Program 10.2    Lav en dobbelt portion lasagneplader.

1
2
3
Smelt 3 spsk smør, og rør det sammen med 3 spsk mel;

Spæd med med 5 mælk og kog sovsen under svag varme;
Program 10.3    Lav en portion hvid sovs.

1
2
3
4
5
6
7
Svits 2 hakkede løg med 500 g hakket oksekød, 
samt salt og pebber;

Tilsæt 3 spsk tomatpuré, en ds. flåede tomater
og 3 fed knust hvidløg;

Kog kødsovsen 10 minutter;
Program 10.4    Lav en portion kødsovs.

Vi kunne forsøge at strække analogien lidt længere. For det første kunne vi forsøge os med en generalisering af en delopskrift til at dække forskellige retter med fælles kendetegn. En realistisk og brugbar generalisering kunne være omfanget af delretten (enkelt portion, dobbelt portion, etc.).

For det andet kunne vi forsøge os med opskrifter, som skulle bruge en given delopskrift mere end én gang. Dette er måske urealistisk i den gastronomiske verden, i det mindste relativ til denne forfatters begrænsede gastronomiske forestillingsevner.

Anvendelser af delopskrifter højner abstraktionsniveauet og muliggør genbrug af basale opskrifter.

Delopskrifter svarer til procedurer i programmeringssprog. Brug af parametre generaliserer en opskrift så den bliver mere alsidig.

 

10.3.  Lasagne ala C
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Lad det være sagt klart og tydeligt allerede her - du får aldrig lasagne ud af din C compiler og fortolker. Alligevel forsøger vi os i program 10.5 med et C lignende program for den strukturerede lasagneopskrift, vi nåede frem til i afsnit 10.2.

I program 10.5 ser vi tre såkaldte funktionsprototyper lige efter include. Disse annoncerer at der er abstraktioner som hedder make_lasagne_plates make_white_sauce, og make_meat_sauce. Disse er nødvendige for at kunne anvende funktionerne i hovedopskriften. Så kommer hovedprogrammet, som altid i C hedder main. Efter denne ser vi implementeringen af de tre annoncerede funktioner.

At vi har forfattet program 10.5 på engelsk betyder naturligvis ikke alverden. Som regel foretrækker jeg at angive navne, kommentarer mv. i programmer på engelsk, for at opnå den bedste mulige helhed ift. selve programmeringssproget. Men det er udtryk for 'smag og behag'.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>

void make_lasagne_plates(void);
void make_white_sauce(void);
void make_meat_sauce(void)

int main(void) {
  make_lasagne_plates();
  make_white_sauce();
  make_meat_sauce();
  
  mix plates, meat sauce, and white sauce;
  sprinkle with paramesan cheese;
  bake 15 minutes at 225 degrees;  
  
  return 0;
}

void make_lasagne_plates(void) {
  mix flour, egs, salt and oil;
  process the pasta in the pasta machine;
}

void make_white_sauce(void) {
  melt butter and stir in some flour;
  add milk and boil the sauce;
}

void make_meat_sauce(void){
  chop the onion, and add meat, salt and pebber;
  add tomatos and garlic;
  boil the sauce 10 minutes;
}
Program 10.5    Et pseudo C program som laver lasagne.

Det er hermed slut på det gastronomiske kvarter. I kapitel 11 fortsætter vi vores indledende udforskning af abstraktioner og funktioner i en meget simpel grafisk verden.

Genereret: Onsdag 7. Juli 2010, 15:10:46
Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'