Mobiel programmeren Jeroen Fokker Wat heb je nodig? Collegediktaat In afleveringen downloaden en evt.uitprinten www.cs.uu.nl / docs / vakken / b1mop Laptop – bring your own device Microsoft Visual Studio Community 2015 Met Xamarin.Android plugin Android device eventueel gesimuleerd in software Wat gaan we doen? Theorie (16 colleges + 2 deeltentamens) Praktijk (16 keer, 3 inleveropdrachten) Oefening (4 werkcolleges) college prakt. college prakt. college prakt. college prakt. 1 college prakt. 1 college prakt. 2 college prakt. college prakt. 2 college prakt. 3 college prakt. 3 college prakt. 2 college prakt. 3 werkcoll college prakt. 3 werkcoll Tent. 3 college prakt. 1 werkcoll college prakt. 1 college prakt. 2 werkcoll Tent. 1 Groeps-indeling Niet zoals in Osiris, maar: 017: kappa, lambda 020: mu, pi 106: rho, sigma 175: tau, phi, psi, omega, overige 1ejaars 103: tweedejaars, keuzevak, premaster 109: ouderejaars Verplichtingen Meedoen aan 2 deeltentamens Als je er eentje ontbreekt of 40/60-gemiddelde is <5: Aanvullende toets in maart Inleveren van 3 practicumopgaven (in teams van 2) Als je er eentje ontbreekt of 20/30/50-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 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 Programmeer-paradigma’s Imperatief Assembler Fortran Procedureel Pascal Basic Functioneel Lisp Algol Swift 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 “Code” “Code”