Imperatief programmeren

advertisement
Hoofdstuk 10.2
Rekenmachinecasus
Voorbeeld: Rekenmachine
Voorbeeld: Rekenmachine
Twee aspecten:
User-interface
class Calculator
: Form
Werking
class Processor
Rekenmachine:
User-interface
Label
TableLayoutPanel
Button
Calculator ( )
{
paneel = new TableLayoutPanel( );
for (int t=0; t<16; t++)
{
Button knop = new Button();
paneel.Controls.Add( knop );
}
this.Controls.Add( paneel );
}
Buttons zijn
ondergeschikt aan
het paneel
User-interface
Calculator ( )
{
paneel = new TableLayoutPanel( );
paneel.Columncount = 4;
for (int t=0; t<4; t++)
paneel.ColumnStyles.Add( ...25%... );
for (int t=0; t<16; t++)
{
Button knop = new Button();
knop.Text = "789/456*123+0C=-"[t].ToString();
knop.Dock = DockStyle.Fill;
knop.Click
+= this.klik;
knop.KeyPress += this.toets;
knop.Resize
+= this.groei;
Buttons zijn
paneel.Controls.Add( knop );
ondergeschikt aan
}
het paneel
this.Controls.Add( paneel );
}
Opbouw klasse Calculator
class Calculator : Form
{
Label result;
TableLayoutPanel paneel;
Proc proc;
membervariabelen
ook nodig in
EventHandlers
Calculator ( )
result = new Label( );
{
result.TextAlign = ContentAlignment.MiddleRight;
// en de rest van de Userinterface-opbouw
proc = new Processor ( );
}
Calculator Event-handlers
class Calculator : Form
{
Label result; Proc proc;
void klik (object obj, EA ea)
{
verwerk( ((Button) object) . Text[0] );
}
void toets(object obj, KPEA kpea )
{
verwerk( kpea.KeyChar );
}
void groei(object obj, EA ea )
{
Control c = (Control) obj;
int h = c.Height / 2;
if (c==result) h = c.Height/3;
c.Font = new Font("Tahoma", h);
}
Calculator Event-handlers
class Calculator : Form
{
Label result; Proc proc;
void verwerk (char c)
{
if
(c==‘C’)
else if (c==‘=’)
else if (c>=‘0’&&c<=‘9’)
else
result . Text (
}
proc.Schoon();
proc.Reken();
proc.Cijfer(c- ‘0’);
proc.Operatie(c);
proc . Scherm );
Opbouw klasse Proc
class Proc
{
long Scherm;
Proc ( )
void Schoon ( )
void Reken ( )
void Cijfer (int n)
void Operatie (char c)
wat is
een Proc?
{
{
{
{
{
this . Schoon(); }
... }
... }
wat kan
... }
een Proc?
... }
Wat is een Proc?
waarde op het scherm
huidige waarde
vorige waarde
laatst gebruikte operator
er lijkt niets te gebeuren...
schermwaarde wordt tienmaal
zo groot plus cijfer
3348
372
37
9
Opbouw klasse Proc
class Proc
{
long Scherm;
long waarde, vorige;
char op;
Proc ( )
void Schoon ( )
void Reken ( )
void Cijfer (int n)
void Operatie (char c)
wat is
een Proc?
{
{
{
{
{
this . Schoon(); }
... }
... }
wat kan
... }
een Proc?
... }
Proc’s methode cijfer
class Proc
{
long scherm, waarde, vorige;
char op;
void Cijfer (int n)
{
waarde = 10*waarde + n;
scherm = waarde;
}
Proc’s methode reken
class Proc
{
long scherm, waarde, vorige;
char op;
void Reken ( )
{
if (op==‘+’) vorige
if (op==‘-’) vorige
if (op==‘*’) vorige
if (op==‘/’) vorige
scherm = vorige;
waarde = 0;
}
+= waarde;
-= waarde;
*= waarde;
/= waarde;
Proc’s methode operatie
class Proc
{
long scherm, waarde, vorige;
char op;
void Operatie (char c)
{
this . reken ( );
op = c;
}
void Schoon ( )
{
waarde = 0;
vorige = 0;
scherm = 0;
op
= ‘+’;
}
Testen van een reeks
mogelijke waarden
switch (x)
{
if
case 1:(x==1)
else if2:(x==2)
case
else if3:(x==3)
case
else if4:(x==4)
case
else if5:(x==5)
case
else if6:(x==6)
case
else if7:(x==7)
case
else
default:
}
this.een();
this.twee();
this.drie();
this.vier();
this.vijf();
this.zes();
this.zeven();
this.meer();
break;
break;
break;
break;
break;
break;
break;
Download