Imperatief programmeren Jeroen Fokker
www.cs.uu.nl / docs / vakken / imp Wat heb je nodig? Collegediktaat kopen bij A-Eskwadraat (BBG-238) of zelf downloaden en uitprinten Solis-id met password Microsoft Visual Studio Community 2015 of Visual Studio Express C# 2010/2013 op de prakticumcomputers en/of zelf gratis downloaden www.cs.uu.nl / docs / vakken / imp
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 vr 13-15 15-17 <24 prakt. college prakt. college werkcoll prakt. college prakt. college werkcoll prakt. 1 college Tent. 1 prakt. 1 college prakt. 1 college werkcoll prakt. 2 college prakt. 2 college werkcoll prakt. 2 college Tent. 2 prakt. 2 college prakt. 3 college werkcoll prakt. 3 college prakt. 3 college werkcoll prakt. 3 Tent. 3
Verplichtingen Meedoen aan 3 deeltentamens Inleveren van 3 practicumopgaven (in teams van 2) Als je er eentje ontbreekt of 20/30/50-gemiddelde is <5: Aanvullende toets in kerstvakantie Als je er eentje ontbreekt of 20/30/50-gemiddelde is <5: Aanvullende opgave in periode 2
Practicumopgaven 2 1 3
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: ~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 Entscheidungs- problem 1822 Automatische central, 1829 automatische interlokale verbinding; 1831 telefooncel
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-II, Mark-I Illiac (USA 1948)
Geschiedenis van computers&programmeren: 1950-55 Programmeertaal: Assembler Univac (1951) “Universal automatic Computer” Univac (1951)
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) LINC-8 (1966) PDP-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 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 computers&programmeren: 2015-2020 E-health iPad Self-driving car
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) Web- technologie (keuzevak) 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 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 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#
Hoofdstuk 2 Hallo, C# !
Soorten programma’s Console- applicatie
Soorten programma’s Console- applicatie Windows- applicatie
Soorten programma’s Console- applicatie Windows- applicatie Web- applicatie
Soorten programma’s Console- applicatie Windows- applicatie Web- applicatie Game
Soorten programma’s Console- applicatie Windows- applicatie Web- applicatie Game Applet
Soorten programma’s Console- applicatie Windows- applicatie Web- applicatie 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; class Hallo { static void Main ( ) { Console.WriteLine("Hallo!"); Console.ReadLine( ); } één klasse ...met één methode ...met twee opdrachten accolades begrenzen klasse, resp. methode
Klasse- en methode-header using System; class Hallo { static void Main ( ) { Console.WriteLine("Hallo!"); Console.ReadLine( ); } naam: bedacht door de programmeur naam: bedacht door de programmeur één van de methodes moet Main heten Main
Opdracht: methode-aanroep using System; class Hallo { static void Main( ) { Console.WriteLine("Hallo!"); Console.ReadLine( ); } opdrachten: aanroep van andere methoden klasse waaruit de methode komt altijd een punt naam van de methode overige details
Klasse-bibliotheken library-klassen mag je gebruiken... using System; class Hallo { static void Main( ) { Console.WriteLine("Hallo!"); Console.ReadLine( ); } als je ze maar aangeeft in welke library ze staan
Methode-header en -aanroep using System; class Hallo { static void Main( ) { Console.WriteLine("Hallo!"); Console.ReadLine( ); } methode- header methode- aanroep
Syntax en semantiek Syntax: de vorm van het programma Semantiek: wat het programma betekent compilatie eenheid using ; klasse declaratie library naam
Syntax van klasse-declaratie public private : naam class naam { member }
Syntax van member member type void naam ( type naam ) blok , public private static type void naam ( type naam ) blok ,
Syntax van blok blok declaratie { } opdracht
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie klasse naam methode naam ( expressie ) ; . , object expressie property naam += variabele = expressie ;
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie klasse naam methode naam ( expressie ) ; . , object expressie property naam += variabele = expressie ;
Console-applicatie using System; class Hallo2 { static void Main ( ) { Console.WriteLine("Hallo!"); Console.ReadLine( ); }
Toekennings-opdracht geeft een waarde aan een variabele 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
Declaratie introduceert een variabele van een bepaald type Console-applicatie using System; class Hallo2 { static void Main ( ) { string naam; Console.WriteLine("Wat is je naam?"); naam = Console.ReadLine( ); } Declaratie introduceert een variabele van een bepaald type
gebruik van de variabele Console-applicatie using System; class Hallo2 { static void Main ( ) { string naam; Console.WriteLine("Wat is je naam?"); naam = Console.ReadLine( ); Console.WriteLine("Hallo, " + naam + "!"); } gebruik van de variabele
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."); } 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 naam naam ( expressie ) ; . , expressie klasse naam methode naam ( expressie ) ; . , object expressie property naam += variabele = expressie ;
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie klasse naam methode naam ( expressie ) ; . , object expressie property naam += toekenning 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 vr 13-15 15-17 <24 prakt. college prakt. college werkcoll prakt. college prakt. college werkcoll prakt. 1 college Tent. 1 prakt. 1 college prakt. 1 college werkcoll prakt. 2 college prakt. 2 college werkcoll prakt. 2 college Tent. 2 prakt. 2 college prakt. 3 college werkcoll prakt. 3 college prakt. 3 college werkcoll prakt. 3 Tent. 3