Modelleren & 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 / KI1V13009 Solis-id met password Microsoft Visual Studio Community 2015 of Mono + Xamarin (voor Mac/Linux) op de prakticumcomputers en/of zelf gratis downloaden 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 programmeertalen 1945 1950 1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 Mach.taal Assembler Fortran Algol Basic Pascal Simula C Cobol Lisp Prolog SQL C++ Java C# 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 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 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 ; Windows-applicatie using System.Windows.Forms; using System.Drawing; class HalloWin1 { static void Main ( ) declaratie en toekenning { Form scherm; van een variabele met type Form scherm = new Form( ); aanpassen van scherm.Text = "Hallo"; properties scherm.BackColor = Color.Yellow; scherm.Size = new Size(200,100); Application.Run(scherm); } gebruik van de variabele } bij aanroep van Run 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 ; Windows-applicatie class HalloWin2 { static void Main ( ) aanroep van de { HalloForm Form scherm; scherm; constructor methode scherm = new HalloForm( Form( ); ); Application.Run(scherm); } subklasse is een gespecialiseerde versie } definitie van de class HalloForm : Form constructor methode { public HalloForm( ) { this.Text = "Hallo"; this.BackColor = Color.Yellow; this.Size = new Size(200,100); } } Windows-applicatie class HalloForm : Form { public HalloForm( ) { this.Text = "Hallo"; this.BackColor = Color.Yellow; this.Size = new Size(200,100); Label groet; groet = new Label( ); groet.Text = "Hallo allemaal"; groet.Location = new Point(30,20); this.Controls.Add(groet); } }