Hoorcollege 1b

advertisement
(Game)programmeren
Arjan Egges & Paul Bergervoet
Gameprogrammeren
• 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,
programmeren, games: 1940-45
Z3 (Dld 1941)
ENIAC (USA 1943)
Colossus (Eng 1943)
Geschiedenis van computers,
programmeren, games: 1945-50
 Programmeertaal:
Machinetaal
Mark-I (Eng 1948)
Illiac (USA 1948)
Geschiedenis van computers,
programmeren, games: 1950-55
 Programmeertaal:
Assembler
Univac (1951)
Geschiedenis van computers,
programmeren, games: 1955-60
 Programmeertaal:
Fortran
NCR304 (1957)
Zebra (NL, 1958)
Geschiedenis van computers,
programmeren, games: 1955-60
Tennis for Two (1958)
• Brookhaven National Laboratory, dept.
of Energy
Geschiedenis van computers,
programmeren, games: 1960-65
IBM
 Programmeertaal:
Cobol, Algol, Lisp
PDP-1
Geschiedenis van computers,
programmeren, games: 1965-70
 Programmeertaal:
Basic
LINC-8 (1966)
PDP-8 (1966)
Geschiedenis van computers,
programmeren, games: 1970-75
 Programmeertaal:
Pascal
PDP-11 (1970)
Geschiedenis van computers,
programmeren, games: 1970-75
Eerste arcade games
Magnavox Odyssey (1972)
Geschiedenis van computers,
programmeren, games: 1975-80
 Programmeertaal:
Simula
Atari (1977)
Apple-II (1977)
Geschiedenis van computers,
programmeren, games: 1980-85
Commodore64 (1984)
Vax-11 (1981)
 Programmeertaal:
(Objective)C
IBM-PC (1981)
Donkey Kong (1981)
Geschiedenis van computers,
programmeren, games: 1980-85
• Odyssey2, Coleco, Atari 5200
• Commodore 64GS, Nintendo
Famicon, Coleco Adam
Geschiedenis van computers,
programmeren, games: 1985-90
Geschiedenis van computers,
programmeren, games: 1990-95
 Programmeertaal:
C++
Geschiedenis van computers,
programmeren, games: 1990-95
 Nieuwere consoles (Sega
Saturn, Playstation, N64)…
 Doom
Geschiedenis van computers,
programmeren, games: 1995-2000
 Programmeertaal:
Java, JavaScript
Geschiedenis van computers,
programmeren, games: 2000-2005
Geschiedenis van computers,
programmeren, games: 2000-2005
 Programmeertaal:
C#
PHP
Geschiedenis van computers,
programmeren, games: 2005-2010
Geschiedenis van computers,
programmeren, games: 2010-2016
 Programmeertaal:
Swift, ES6,
TypeScript
Geschiedenis van programmeertalen
1945
1950
1955
1960
1965
1970
1975
1980
1985
1990
1995
2000
2010
2015
Mach.taal
Assembler
Fortran
Algol
Basic
Pascal
Simula
(Obj.)C
Cobol
Databases
(periode 3)
SQL
C++
Java
JavaScript
C#
Swift
Lisp
Prolog
Functioneel
Programmeren
(jaar 2)
Haskell
Gameprogrammeren
Webtechnologie
(jaar 2)
Perl
PHP
Python
Geheugencapaciteit
•
•
•
•
•
•
•
•
•
65er jaren:
70er jaren:
80er jaren:
85er jaren:
90er jaren:
95er jaren:
00er jaren:
05er jaren:
10er jaren:
8 kB RAM
16 kB RAM
64 kB RAM
640 kB RAM
4 MB RAM
16 MB RAM
128 MB RAM
1GB RAM
16GB RAM
ponskaarten
tape
floppy-disk
harddisk
CD
DVD
SSD, “The 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
Basic
Procedureel
Pascal
C++
Java
Functioneel
Lisp
Algol
Excel
C
Objectgeoriënteerd
Declaratief
Simula
C#
Logisch
Prolog
Haskell
Vertalen 1/5: Assembler
• Een assembler vertaalt machine-specifieke
broncode naar objectcode,
die vervolgens kan worden uitgevoerd
.asm
sourcecode
voor processor 1
Assembler
voor processor 1
.exe
machinecode
voor processor 1
.asm
sourcecode
voor processor 2
Assembler
voor processor 2
.a
machinecode
voor processor 2
Vertalen 2/5: Compiler
• Een compiler vertaalt de broncode
naar machine-specifieke objectcode,
die vervolgens kan worden uitgevoerd
.cpp
sourcecode
Compiler
voor processor 1
.exe
machinecode
voor processor 1
Compiler
voor processor 2
.a
machinecode
voor processor 2
Vertalen 3/5: Interpreter
• Een processor-specifieke interpreter
leest de broncode en voert die uit
.php
sourcecode
Interpreter
voor processor 1
Interpreter
voor processor 2
Vertalen 4/5: Compiler+Interpr.
• Een universele compiler vertaalt de broncode
naar een bytecode, die gemakkelijk kan
worden geïnterpreteerd
.java
sourcecode
Compiler
.class
bytecode
Interpreter
voor processor 1
Interpreter
voor processor 2
Vertalen 5/5: Compiler+Compiler
• Een compiler vertaalt de broncode naar een
intermediate language , die vervolgens wordt
gecompileerd
.cs
sourcecode
Compiler
.il
Intermediate
language
Compiler
voor processor 1
.exe
machinecode
voor processor 1
Compiler
voor processor 2
.a
machinecode
voor processor 2
Vertalen 5/5: Compiler+Compiler
• Een compiler vertaalt de broncode naar een
intermediate language , die vervolgens wordt
gecompileerd
.cs
sourcecode
.vb
sourcecode
Compiler
Compiler
.il
Intermediate
language
Compiler
voor processor 1
.exe
machinecode
voor processor 1
Compiler
voor processor 2
.a
machinecode
voor processor 2
Programmeer-cyclus
Modelleer
Specificeer
Implementeer
Edit
Compile
Run
Download