Hoofdstuk 1 Programmeren
Imperatief programmeren Von Neumann’s computer-model (1950): computer = + geheugen om waarden op te slaan processor om opdrachten uit te voeren
Opdrachten Opdracht: voorschrift om het geheugen te veranderen Programma: lange reeks opdrachten, die één voor één worden uitgevoerd door de processor opdrachten staan zelf ook in het geheugen maar veranderen zichzelf niet
Programmeertalen Programmeertaal: notatie voor programma’s sinds 1945: 4000 verschillende talen gepubliceerd
Geschiedenis van computers&programmeren: 1940-45 Z3 (Dld 1941) Eniac (USA 1943) “Electronic Numeric Integrator And Computer”. Z3 (Duitsland 1941) heette oorspronkelijk V3 maar dat gaf verwarring met raketten; werd niettemin gebombardeerd – de foto is reconstructie uit de 60er jaren met ontwerper Konrad Zuse; had een heuse programmeertaal “PlanKalkül”, maar dat wist na de oorlog niemand meer. Colossus, Engels apparaat voor decodering van de Enigma – eigenlijk geen computer, want niet programmeerbaar. ENIAC (USA 1943) Colossus (Eng 1943)
Geschiedenis van computers&programmeren: 1945-50 Programmeertaal: Machinetaal Mark-I (Eng 1948) Illiac (USA 1948) Illiac-II, Mark-I
Geschiedenis van computers&programmeren: 1950-55 Programmeertaal: Assembler Univac (1951) Univac (1951) “Universal automatic Computer”
Geschiedenis van computers&programmeren: 1955-60 Programmeertaal: Fortran NCR304 (1957) fabrikant “National Cash Registers” Zebra (“Zeer Eenvoudige Binaire Reken Automaat”), gebouwd bij het Mathematich Centrum in A’dam (voorloper van het CWI) NCR304 (1957) Zebra (NL, 1958)
Geschiedenis van computers&programmeren: 1960-65 Programmeertaal: Cobol Algol Lisp IBM mainframe (“International Business Machines”), en Dec (Digital Equipment Company) PDP-1 (“Programmable Data Processor”) (minicomputer, ca $100.000) IBM PDP-1
Geschiedenis van computers&programmeren: 1965-70 Programmeertaal: Basic LINC-8 (1966) PDP-8 (1966) PDP-8 (1966) LINC-8 (1966)
Geschiedenis van computers&programmeren: 1970-75 Programmeertaal: Pascal PDP-11/40 (1970) (minicomputer, $20.000) PDP-11 (1970)
Geschiedenis van computers&programmeren: 1975-80 Programmeertaal: Simula Apple-II (1977) (microcomputer, $2000) Apple-][ (1977)
Geschiedenis van computers&programmeren: 1980-85 Programmeertaal: C Vax-11 (1981) VAX-11 (80er jaren), IBM PC (1981) “Personal computer”, commodore64 (1984) spelcomputer Commodore64 (1984) IBM-PC (1981)
Geschiedenis van computers&programmeren: 1985-90 Apple Mac (1985) Windows 2.0 (1988)
Geschiedenis van computers&programmeren: 1990-95 Programmeertaal: C++ Moscaic (1994), XS4all eerste NL internetprovider (1993), windows 3.1
Geschiedenis van computers&programmeren: 1995-2000 Programmeertaal: Java Netscape (1994-1998), Google (1998) SGI Onyx (1996)
Geschiedenis van computers&programmeren: 2000-2005 Windows-XP, Apple OS-X
Geschiedenis van computers&programmeren: 2000-2005 Programmeertaal: C# PHP Windows-XP, Apple OS-X
Geschiedenis van computers&programmeren: 2005-2010 Netbook, iBook, iPhone
Geschiedenis van computers&programmeren: 2010-2015 iPad
Geschiedenis van programmeertalen 1945 1950 1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 Assembler Mach.taal Fortran Algol Basic Pascal Simula C C++ Java Cobol SQL Lisp Prolog Haskell PHP Perl Python Functioneel Programmeren (jaar 2) Databases (periode 3) Internet- Programmeren (jaar 2) Imperatief Programmeren C#
Geheugencapaciteit 65er jaren: 8 kB RAM ponskaarten 70er jaren: 16 kB RAM tape 80er jaren: 64 kB RAM floppy-disk 85er jaren: 640 kB RAM 90er jaren: 4 MB RAM harddisk 95er jaren: 16 MB RAM CD 00er jaren: 128 MB RAM DVD 05er jaren: 1GB RAM 10er jaren: 8GB RAM BlueRay
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 variabele object object groepje objecten dat bij elkaar hoort
Indeling van het programma voorschrift om het geheugen te veranderen groepje opdrachten dat bij elkaar hoort opdracht methode klasse groepje methoden dat bij elkaar hoort namespace groepje klassen dat bij elkaar hoort
Programmeer-paradigma’s Imperatief Declaratief Assembler Fortran Basic Functioneel Lisp Procedureel Algol Excel Haskell Pascal C Object- georiënteerd Logisch Simula Prolog C++ Java C#
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 .class bytecode Interpreter voor processor 1 Compiler Interpreter voor processor 2
Vertalen 5/5: Compiler+Compiler Een compiler vertaalt de broncode naar een intermediate language , die vervolgens wordt gecompileerd .cs sourcecode .il Intermediate language Compiler voor processor 1 .exe machinecode voor processor 1 Compiler .a machinecode voor processor 2 Compiler 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 .vb sourcecode .a machinecode voor processor 2 Compiler voor processor 2 Compiler
Programmeer-cyclus Modelleer Specificeer Implementeer Edit Compile Run