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&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 Programmeertaal: Simula 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 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) InternetProgrammeren (jaar 2) Haskell 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 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 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 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+Compile 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+Compile 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