Imperatief programmeren
Jeroen Fokker
Wat heb je nodig?
Collegediktaat
kopen bij A-Eskwadraat (BBG-238)
of zelf downloaden en uitprinten
www.cs.uu.nl / docs / vakken / imp
Solis-id met password
Microsoft Visual Studio Community 2015
of Visual Studio Express C# 2010/2013
op de prakticumcomputers
en/of zelf gratis downloaden
Wat gaan we doen?
Theorie (14 colleges + 3 deeltentamens)
Oefening (6 werkcolleges)
Praktijk (15 keer, 3 inleveropgaven)
13-15 wo 15-17 <24
11-13
prakt.
prakt.
prakt. 1
prakt. 1
prakt. 2
prakt. 2
prakt. 2
prakt. 3
prakt. 3
prakt.
prakt.
college
college
college
college
college
college
college
college
prakt. 1
prakt. 2
prakt. 3
prakt. 3
Tent. 3
vr 13-15 15-17
college werkcoll
college werkcoll
Tent. 1
college werkcoll
college werkcoll
Tent. 2
college werkcoll
college werkcoll
<24
Verplichtingen
Meedoen aan 3 deeltentamens
Als je er eentje ontbreekt
of 20/30/50-gemiddelde is <5:
Aanvullende toets in kerstvakantie
Inleveren van 3 practicumopgaven
(in teams van 2)
Als je er eentje ontbreekt
of 20/30/50-gemiddelde is <5:
Aanvullende opgave in periode 2
Practicumopgaven
0
1
2
3
Hoofdstuk 1
Programmeren
Imperatief programmeren
Von Neumann’s computer-model (1950):
computer
=
+
geheugen
processor
om waarden
op te slaan
om opdrachten
uit te voeren
Opdrachten
Opdracht:
voorschrift om het geheugen te veranderen
opdrachten staan zelf ook in het geheugen
maar veranderen zichzelf niet
Programma:
lange reeks opdrachten,
die één voor één worden uitgevoerd
door de processor
Programmeertalen
Programmeertaal:
notatie voor
programma’s
sinds 1945:
4000 verschillende talen gepubliceerd
Geschiedenis van computers:
~1820-1871
Charles
Babbage
Difference Engine
(ontwerp 1821, bouw 1991)
Analytical Engine
(ontwerp 1830-1870)
Geschiedenis van programmeren:
1936
Alan Turing:
On computable
numbers, with an
application to the
Entscheidungsproblem
Geschiedenis van computers&programmeren:
1940-45
Z3 (Dld 1941)
ENIAC (USA 1943)
Colossus (Eng 1943)
Geschiedenis van computers&programmeren:
1945-50
Programmeertaal:
Machinetaal
Mark-I (Eng 1948)
Illiac (USA 1948)
Geschiedenis van computers&programmeren:
1950-55
Programmeertaal:
Assembler
Univac (1951)
Geschiedenis van computers&programmeren:
1955-60
Programmeertaal:
Fortran
NCR304 (1957)
Zebra (NL, 1958)
Geschiedenis van computers&programmeren:
1960-65
Programmeertaal:
Cobol
Algol
Lisp
IBM
PDP-1
Geschiedenis van computers&programmeren:
1965-70
Programmeertaal:
Basic
LINC-8 (1966)
PDP-8 (1966)
Geschiedenis van computers&programmeren:
1970-75
Programmeertaal:
Pascal
PDP-11 (1970)
Geschiedenis van computers&programmeren:
1975-80
Apple-][ (1977)
Geschiedenis van computers&programmeren:
1980-85
Programmeertaal:
C
Vax-11 (1981)
IBM-PC (1981)
Commodore64 (1984)
Geschiedenis van computers&programmeren:
1985-90
Geschiedenis van computers&programmeren:
1990-95
Programmeertaal:
C++
Geschiedenis van computers&programmeren:
1995-2000
Programmeertaal:
Java
Geschiedenis van computers&programmeren:
2000-2005
Geschiedenis van computers&programmeren:
2000-2005
Programmeertaal:
C#
PHP
Geschiedenis van computers&programmeren:
2005-2010
Geschiedenis van computers&programmeren:
2010-2015
Geschiedenis van computers&programmeren:
2015-2020
E-health
Self-driving car
Geschiedenis van
programmeertalen
1945
1950
1955
1960
1965
1970
1975
1980
1985
1990
1995
2000
Mach.taal
Assembler
Fortran
Algol
Basic
Pascal
Simula
C
Cobol
Databases
(periode 3)
SQL
C++
Java
C#
Imperatief
Programmeren
Lisp
Prolog
Functioneel
Programmeren
(jaar 2)
Haskell
Webtechnologie
(keuzevak)
Perl
PHP
Python
Geheugencapaciteit
65er
70er
80er
85er
90er
95er
00er
05er
10er
jaren:
jaren:
jaren:
jaren:
jaren:
jaren:
jaren:
jaren:
jaren:
8 kB RAM
16 kB RAM
64 kB RAM
640 kB RAM
4 MB RAM
16 MB RAM
128 MB RAM
1GB RAM
8GB RAM
ponskaarten
tape
floppy-disk
harddisk
CD
DVD
Stick / Cloud
Programmeer-problemen
vroeger:
hoe kan ik het geheugen zo
efficiënt mogelijk gebruiken?
nu:
hoe kan ik die overvloed van
geheugen nog overzien?
Indeling van het geheugen
plaats in het geheugen
met een naam
groepje variabelen
dat bij elkaar hoort
groepje objecten
dat bij elkaar hoort
variabele
object
object
Indeling van het programma
voorschrift om het
geheugen te veranderen
groepje opdrachten
dat bij elkaar hoort
groepje methoden
dat bij elkaar hoort
groepje klassen
dat bij elkaar hoort
opdracht
methode
klasse
namespace
Programmeer-paradigma’s
Imperatief
Assembler
Fortran
Procedureel
Pascal
Basic
Functioneel
Lisp
Algol
Excel
Haskell
C
Objectgeoriënteerd
C++
Declaratief
Java
Simula
C#
Logisch
Prolog
Hoofdstuk 2
Hallo, C# !
Soorten programma’s
Consoleapplicatie
Soorten programma’s
Consoleapplicatie
Windowsapplicatie
Soorten programma’s
Consoleapplicatie
Windowsapplicatie
Webapplicatie
Soorten programma’s
Consoleapplicatie
Windowsapplicatie
Webapplicatie
Game
Soorten programma’s
Consoleapplicatie
Windowsapplicatie
Webapplicatie
Game
Applet
Soorten programma’s
Consoleapplicatie
Windowsapplicatie
Webapplicatie
Game
Applet
App
Opbouw broncode
Opdrachten om
het geheugen
te veranderen
Opdrachten zijn
gegroepeerd in
methoden
Methoden zijn
gegroepeerd in
klassen
Soorten opdrachten
Toekennings -opdracht:
verander het geheugen
Aanroep van een andere methode:
voer eerst de opdrachten in die methode uit,
en ga daarna verder waar je gebleven was
en dat kunnen zelf ook weer aanroepen
zijn van weer andere methodes...
dus de “waar was ik gebleven” administratie is best ingewikkeld!
Voorbeeld C#-programma
using System;
één klasse
...met één
methode
...met twee
opdrachten
class Hallo
{
static void Main ( )
{
Console.WriteLine("Hallo!");
Console.ReadLine( );
}
}
accolades begrenzen
klasse, resp. methode
Klasse- en methode-header
using System;
naam:
bedacht door
de programmeur
één van de
methodes moet
Main heten
class Hallo
{
static void Main ( )
{
Console.WriteLine("Hallo!");
Console.ReadLine( );
}
}
Opdracht: methode-aanroep
using System;
opdrachten:
aanroep van
andere
methoden
class Hallo
{
static void Main( )
{
Console.WriteLine("Hallo!");
Console.ReadLine(
);
}
}
klasse waaruit
de methode komt
altijd
een punt
naam van de
methode
overige
details
Klasse-bibliotheken
library-klassen
mag je
gebruiken...
als je ze maar
aangeeft in
welke library
ze staan
using System;
class Hallo
{
static void Main( )
{
Console.WriteLine("Hallo!");
Console.ReadLine( );
}
}
Methode-header en -aanroep
using System;
methodeheader
methodeaanroep
class Hallo
{
static void Main( )
{
Console.WriteLine("Hallo!");
Console.ReadLine( );
}
}
Syntax en semantiek
Syntax:
de vorm van het
programma
Semantiek:
wat het programma
betekent
compilatie
eenheid
using
library
naam
klasse
declaratie
;
Syntax van klasse-declaratie
klasse
declaratie
public
private
:
class
naam
naam
{
member
}
Syntax van member
member
public
private
static
type
void
naam
(
type
naam
,
)
blok
Syntax van blok
blok
{
declaratie
opdracht
}
Syntax van opdracht
opdracht
klasse
methode
naam
object
expressie
naam
.
property
(
expressie
naam
+=
variabele
=
)
;
,
expressie
;
Syntax van opdracht
opdracht
klasse
methode
naam
object
expressie
naam
.
property
(
expressie
naam
+=
variabele
=
)
;
,
expressie
;
Console-applicatie
using System;
class Hallo2
{
static void Main ( )
{
Console.WriteLine("Hallo!");
Console.ReadLine( );
}
}
Console-applicatie
using System;
class Hallo2
{
static void Main ( )
{
Console.WriteLine("Wat is je naam?");
naam = Console.ReadLine( );
}
}
Toekennings-opdracht
geeft een waarde
aan een variabele
Console-applicatie
using System;
Declaratie
class Hallo2
introduceert een variabele
{
van een bepaald type
static void Main ( )
{ string naam;
Console.WriteLine("Wat is je naam?");
naam = Console.ReadLine( );
}
}
Console-applicatie
using System;
class Hallo2
{
gebruik van
static void Main ( )
de variabele
{ string naam;
Console.WriteLine("Wat is je naam?");
naam = Console.ReadLine( );
Console.WriteLine("Hallo, " + naam + "!");
}
}
Console-applicatie
using System;
class Hallo2
{
static void Main ( )
{ string naam;
Console.WriteLine("Wat is je naam?");
naam = Console.ReadLine( );
Console.WriteLine("Hallo, " + naam + "!");
Console.WriteLine("met " + naam.Length + " letters.");
}
}
Property van
een object
Console-applicatie
using System;
class Hallo2
{
static void Main ( )
{ string naam;
Console.WriteLine("Wat is je naam?");
naam = Console.ReadLine( );
Console.WriteLine("Hallo, " + naam + "!");
Console.WriteLine("met " + naam.Length + " letters.");
Console.ReadLine( );
}
}
Syntax van opdracht
opdracht
klasse
methode
naam
object
expressie
naam
.
property
(
expressie
naam
+=
variabele
=
)
;
,
expressie
;
Syntax van opdracht
opdracht
klasse
methode
naam
toekenning
object
expressie
naam
.
property
(
expressie
naam
+=
variabele
=
)
;
,
expressie
;
Wat gaan we doen?
Theorie (14 colleges + 3 deeltentamens)
Oefening (6 werkcolleges)
Praktijk (15 keer, 3 inleveropgaven)
13-15 wo 15-17 <24
11-13
prakt.
prakt.
prakt. 1
prakt. 1
prakt. 2
prakt. 2
prakt. 2
prakt. 3
prakt. 3
prakt.
prakt.
college
college
college
college
college
college
college
college
prakt. 1
prakt. 2
prakt. 3
prakt. 3
Tent. 3
vr 13-15 15-17
college werkcoll
college werkcoll
Tent. 1
college werkcoll
college werkcoll
Tent. 2
college werkcoll
college werkcoll
<24