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