Mobiel programmeren Jeroen Fokker Wat heb je nodig? Website Met collegediktaat en software www.cs.uu.nl / docs / vakken / b1mop Laptop – bring your own device Microsoft Visual Studio Community 2015 of Xamarin Studio Android device eventueel gesimuleerd in software Wat gaan we doen? Theorie (16 colleges + 2 deeltentamens) Praktijk (16 keer, 3 inleveropdrachten) Oefening (4 werkcolleges) Groeps-indeling Niet helemaal zoals in Osiris, maar: Verplichtingen Meedoen aan 2 deeltentamens Als je er eentje ontbreekt of 50/50-gemiddelde is <5: Aanvullende toets in maart Inleveren van 3 practicumopgaven (in teams van 2) Als je er eentje ontbreekt of 20/40/40-gemiddelde is <5: Aanvullende opdracht in periode 3 Hoofdstuk 1 Mobiel Programmeren 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 telefonie: 1875 Thomas Edison microfoon Alexander Bell telefoon Geschiedenis van telefonie: 1880 Commerciële telefoonnetten Geschiedenis van telefonie: 1890 Interlocaal telefoneren Geschiedenis van telefonie: 1922 Automatische centrale, kiesschijf Geschiedenis van computers&programmeren: 1936 Alan Turing: On computable numbers, with an application to the Entscheidungsproblem Geschiedenis van computers&telefonie: 1941-44 Bomba (Engels/Poolse crypto-cracking machine) Enigma (Duitse versleutelingsmachine) 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 telefonie: 1950-60 Eerste autotelefoons 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 telefonie: 1960-65 Automatisch telefoonnet voltooid Commerciële radiotelefonie 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&telefonie: 1975-80 Apple-][ (1977) Motorola Dyna-Tac (1973) Geschiedenis van computers&programmeren: 1980-85 Programmeertaal: C Vax-11 (1981) IBM-PC (1981) Commodore64 (1984) Geschiedenis van computers&programmeren: 1985-90 Geschiedenis van telefonie: 1990-95: “2G” GSM-netwerk IBM Simon (1994) Nokia 1610 (1996) Kermit (1992) Geschiedenis van telefonie: 1995-2000 “PDA” Nokia 3310 (2000) 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&telefonie: 2005-2010 Geschiedenis van telefonie&programmeren: 2005-2010 Apple iPhone (2007) HTC Dream (2008) Windows Phone (2010) Programmeertaal: Programmeertaal: Programmeertaal: Objective C Swift Java C# C++ C# Geschiedenis van computers&programmeren: 2010-2015 Geschiedenis van telefonie: 2010-2015 iOS 8.4 (2015) Android 6.0 (2015) Windows 8.1 (2014) Geschiedenis van computers, telefonie, 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 Lisp Prolog SQL C++ Java C# Haskell Swift 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 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 “Code” “Code” 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 using using using één klasse ...met één methode ...met acht opdrachten accolades begrenzen klasse en methode Android.OS; Android.App; Android.Widget; Android.Graphics; [ActivityAttribute(Label = "Hello", MainLauncher = true)] public class HalloApp : Activity { protected override void OnCreate(Bundle b) { base.OnCreate(b); TextView scherm; scherm = new TextView(this); scherm.Text = "Hallo!"; scherm.TextSize = 80; scherm.SetBackgroundColor(Color.Yellow); scherm.SetTextColor(Color.DarkBlue); this.SetContentView(scherm); } } Programmeer-problemen vroeger: hoe kan ik het geheugen zo efficiënt mogelijk gebruiken? nu: hoe kan ik die overvloed van geheugen nog overzien? Mobiel: Hoe spaar ik mijn batterij? 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