Imperatief programmeren

advertisement
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”
Download