Introduktion til programmering Intro
Plan Personer og kompetencer Studieportalen Kususplan Formål Eksamen Computerens historie Computeren som tegnbærer. Maskinarkitektur Python
Personer og kompetencer Forelæsninger: Peter Bøgh Andersen Professor i Informationsvidenskab Email:pba@imv.au.dk Kontor: Wiener bygningen, Vær 224 Har arbejdet med computeren som medium i 20 år og anvendt mange programmeringssprog (Algol, Simula, Pascal, C++, Hypertalk, Lingo) Startede med Python i august Øvelser og terminaltimer Morten Keblovszi 3 semester på informationsvidenskab Selvstændigg virksomhed Email: morten@werden.dk Er fremragende til Python og web-programmering. Forskellige kompetencer: brug os til det vi er gode til.
Studieportalen Fælles netportal for uddannelser ved Informationsvidenskab Adgang til semesterplanen Fra Informationsvidenskabs hjemmeside: vælg Undervisning og trykt derefter på Links. Direkte: http://imv.au.dk/~pba/homepagematerial\programmering.htm Indeholder en kursusplan Hvad skal læses til hver gang? Pds-filer der kan downloades: Øvrig litteratur Programmer Øvelsesopgaver til næste mandag.
Kursusplanen Emne Litteratur Øvelser Kan downloades
Kursusplan I 6-9: Intro, Historik, Maskinarkitektur, Tegnbegrebet 13-9: Python I: værdier, tildelinger og sammenligninger, dynamiske typer, string, list, tupler, filer 20-9: Python II: sætninger, udtryk, sandhedsværdier, kontrolstrukturer, funktioner, kommentarer 27-9: Netværk og operativsystemer. 4-10: Algoritmer og datastrukturer, korrekthed, kompleksitet, søgning, iteration, rekursion 11-10: Formelle sprog, historik, procedurale, funktionelle (lambda, apply), objektorienterede, og logiske sprog. Grammatik, compilering og fortolkning Uge 42: efterårsferie
Kursus plan II 25-10:L Beregnelighed og AI. Genetiske algoritmer, konnektionisme. 1-11: Relationelle databaser, ER-diagrammer, normalisering 8-11: SQL databaser 15-11: SQL databaser 22-11: Objektorienteret analyse? 29-11: Objektorienteret programmering + Django? 6-12: Objektorienteret programmering + Django?
Formål I Introducere nogle centrale værktøjer og teknikker i arbejdet med computeren som medie. Specielt vil der være en introduktion til programmering Introducere til analyse og modellering af data, samt til en analytisk tilgang til problemløsning. Basale principper vedr. computerens opbygning og funktion, samt til programmering og databaser. Teknikker og metoder, der vil bringe sammenhæng mellem teori og praksis. De basale principper er den robuste del. Python dør på et tidspunkt. Men Principperne kan ikke forstås uden handson praksis!
Opgaver 1. obligatoriske opgave løses i ugerne 36 43 (python) 2. obligatoriske opgave indleveres i uge 46 (databaser) 3. obligatoriske opgave (OOP) indleveres i uge 51 1 obligatoriske opgave: 5 ud af 6 obligatoriske øvelser. Sendes pr mail til mig tirsdagen efter opgaven er stillet. Eksamen: mundtlig eksamination i 3. obligatoriske opgave i januar.
Computerens historie Kap 0 i Computer science
I store linjer. Computeren som automat og talknuser (1945 ) Computeren som værktøj (1975-) Computeren som medium (1990-) Computeren som omgivelse (2000-) pervasive computing
Charles Babbage 1792-1871 Konstruerede en general purpose computer i 1830 erne Analytical engine (dampdrevet) Bestod af 5 dele: The store (hukommelsen) The Mill (regneenheden) The Input The output http://www.fourmilab.ch/b abbage!
John von Neumann 1903-1957 Von Neumann arkitektur, 1945 Aritmetisk-logisk enhed Kontrolenhed Hukommelse Både data og program In/output Bus, dataveje
Allan Turing 1912-1954 Udgangspunkt i Hilberts Entschidungsproblem Findes der en metode eller proces, med hvilken det kan afgøres om en given matematisk proces kan bevises? En mekanisk metode En maskine der kunne udføre denne metode - Turingmaskinen
Anden verdenskrig Kodebrydning Tyskernes Enigmamaskine (mekanisk) Turing som kodebryder
Fra Mainframe til PC Mark I 1944 ENIAC 1950 Electrical Numerical Integrator and Computer Personlig computer 1976 Apple, Steve Jobs & Stephen Wozniak hobbyfolket
Computeren som tegnbærer Kap 0 i Computer Science
Peirce s tegnbegreb I lettere vulgær udformning En mere nuanceret beskrivelse kommer hos Casper
Computerbaserede tegn Interfacetegn: angiver hvad man har gjort, kan gøre, og ikke kan gøre Modalitet: er tilfældet, er muligt, er umuligt
En anden notation
Algoritmer En algoritme er en sekvens af entydige udførbare trin som definerer en proces der ender med et resultat Et program er et tegn der repræsenterer en algoritme. En algoritme kan repræsenteres af mange forskellige programmer Et program realiseres i mange forskellige typer af materiale Elektronisk: en file eller RAM Papir: en brugsanvisning Lyd: en mundtlig instruktion
Muslingetilberedning for mennesker Så længe der er muslinger i spanden: Tag en musling op af spanden Hvis muslingen er lukket så: Ellers: Smid den i gryden Smid den i affaldsposen Kog muslingerne i 5 min Så længe der er muslinger i gryden Tag en musling op af gryden Hvis muslingen er åben så: Ellers: Læg den på fadet Smid den i skraldespanden
Muslingetilberedning for maskiner (Python) # Spanden indeholder muslinger. 0 betyder lukket, 1 betyder åben spand = [1,0,0,1,0,1,0,0] # gryde og affaldspose er tomme i starten gryde = [] affaldspose = [] # sålænge der er muslinger i spanden while spand <> []: # tag en musling op enmusling = spand[0] del spand[0] # hvis muslingen er lukket if enmusling == 0: #så smide den i gryden gryde.append(enmusling ) # ellers else: #smid den i affaldsposen affaldspose.append(enmusling ) Kommentarer til menneskelig fortolkning
Sammenligning Samme algoritme, forskellige programmer Menneskelig versus maskinel fortolker Computerprogrammer skal læses af både mennesker og maskiner Kommentarer Interpretanten er under forhandling ved menneskelige fortolkere, ikke ved maskinelle I laver tonsvis af fejl i starten!! Naturlie sprog udvikler sigg kontinuerligt Computersprog er stabile i perioder og udvikler sig i versioner (Python 2.3) Abstraktion Muslinger er repræsenteret ved én egenskab: lukket eller åben Indkapsling En muslingesorteringsautomat kan arbejde selv og vi behøver ikke forstå hvordan den bærer sig ad, kun hvordan den skal betjenes Meningstab?
Hvad betyder det? Et program kan repræsentere Det område programmet handler om ( problemområdet ) Et andet program En del af den fysiske computer Muslingeprogrammet repræsenterer problemområdet, dets genstande og begivenheder.
Hvad betyder det? Databaser repræsenterer hændelser, tilstande, personer, ting og strukturer i organisationen. Forbindelse til organisationsanalyse
Maskinarkitektur Kap 2 i Computer Science
Computerens opbygning Gemme operation
Binær kode Maskinens sprog som den reagerer fysisk på
Binærkode Load R1 C1 Kopier indholdet af celle C1 ind i register R1 Load R1 B Kopier bitmønstret B ind i register R1 Store R1 C1 Gem indeholdet af R1 i celle C1 Add R1 R2 R3 Adder indeholdet af registre R2 og R3 og gem resultatet i R1 Jump R1 C1 Hvis indholdet af R1 er 0, så hop til den instruktion som er gemt i celle C1, dvs sæt programtælleren til at referere til denne celle. Ellers fortsæt med næste instruktion.
Repræsentationer Programtælleren repræsenter den celle hvor næste instruktion ligger Man kan referere til en værdi ved at referere til den celle der indeholder værdien. 00 repræsenterer da værdien 02 Men man kan også gøre det indirekte ved at referere til en celle der refererer til den celle der indeholder værdien. 00 repræsenterer da værdien 45
Pythons referencer Hvordan refererer Python? a = [1,2,3,4] b = a Direkte? I så fald burde b ikke påvirkes hvis vi ændrer på a
Pythons referencer a = [1,2,3,4] b = a Indirekte? I så fald burde b ændre sig hvis a gør det.
Python refererer indirekte Python refererer til objekter >>> a = [1,2,3,4] >>> b = a >>> del a[2] >>> a [1, 2, 4] >>> b [1, 2, 4]
Maskincyclussen Gentag indtil stop Hent næste instruktion fra lageret, læg det i instruktionsregistret og forøg programtælleren Dekod bitmønstret i instruktionsregistret Udfør handlingen som instruktionsregistret repræsenterer
Assembler Samme som maskinsprog, men med mnemotekniske forkortelser LD R5, Pris LD R6, Skat ADD R0, R5, R6 ST R0, Ialt HLT Problem: programmet handler om maskinens fysiske dele: Store R1 C1 eller om programmet selv: Jump R1 C1 Det er svært at tolke programmet som en repræsentation af problemområdet
Problemet Maskinkode er svær at tolke som andet end fysiske processer i maskinen Men vi er interesserede i om den repræsenterer hændelser i problemområdet korrekt!
Høj-niveausprog Alle programmeringssprog med et højere abstraktionsniveau end assembler kaldes højniveausprog. Algol, Simula, Pascal, C++, Java, Basic, Smalltalk, Lingo. Python Disse sprog er lettere at tolke som udsagn om problemområdet Nemmere at finde fejl Nemmere at forstå hvad programmet gør
Muslingeprogrammet igen Muslingeprogrammet kan tolkes som udsagn om hvordan man tillaver muslinger givet bestemte tolkningsregler spand = [1,0,0,1,0,1,0,0] #spand = en spand med muslinger gryde = [] #den gryde vi vil kode muslingerne i affaldspose = [] #den affaldspose vi smider de dårlige muslinger i while spand <> []: # spanden er ikke tom enmusling = spand[0] # tag en musling op del spand[0] if enmusling == 0: #muslingen er lukket else: gryde.append(enmusling ) #læg den i gryden affaldspose.append(enmusling ) #læg den i affaldspose
Muslingeprogrammet igen igen Tolkningsregler En liste tolkes som en kontainer EN tom liste tolkes som en tom kontainer 0,1 tolkes som muslinger i en bestemt tilstand Enmusling tolkes som den musling jeg har i hånden Slettelse af et element fra en liste tolkes som det at tage noget op af en kontainer Tilføjelse af et element til en liste tolkes som det at lægge noget ned i kontaineren.
Kompilering En compiler er et program der læser et andet program og producerer assembler kode Assemblerkode oversættes til maskinkode og sættes sammen med forskellige hjælpefiler (linkning) til objektkode. Objektkoden kan udføres af den mikrokodede processor.
Kompilering De forskellige interpretanter (af regeltypen) udgøres selv af udførbare programmer Interpretant, repræsentamen og objekt kan alle være programmer Analogi: Jeg køber et samlesæt med en fransk brugsanvisning (text) Jeg køber en fransk-dansk ordbog (text) Jeg oversætter brugsanvisningen (text) til dansk ved hjælp af den franske ordbog (text) Jeg oversætter den danske version til handlinger ved hjælp af mit kendskab til dansk
En symbolbehandlende maskine Tekster der repræsenterer tekster ved hjælp af tekster!!! Web-programmering
Fortolkning Fortolkere er programmer der læser højniveauprogrogrammer og udfører dem (oversætter dem evt. til objektkode, kaldet JIT, just in time) Skriptsprog som Python, Hypercard, Lingo, LISP.
Python Python er et fortolket sprog der kan afvikles på (næsten) alle maskiner Windows, Mac, UNIX, Palm, etc www.python.org Meget udbredt som scriptsprog til hjemmesider, men er et komplet programmeringssprog til alle typer af udvikling
Python Python består af: Python fortolkeren En samling hjælpemidler skrevet i Python (moduler) Netværk, matematik, databaser, filhåndtering, interface Programmer kan afvikles interaktivt eller ved at skrive dem på forhånd.
IDE i windows: debuggeren Kør programmet linje for linje xx Man kan holde øje med sine variable her Trekanten viser hvilken sætning Python udfører nu
IDE i Windows: det interaktive vindue Man kan eksperimentere og afprøve ting i IDLEs interaktive vindue Man kan også undersøge og ændre de variable i det program man kører Hvad var det lige der var i spanden? Hvad var der i gryden? Virker append som jeg tror den virker? Ja
IDLE interaktive vindue Hvis I ikke kan huske hvordan et eller andet skal skrives, prøv jer først frem ved at skrive simple ting i det interaktive vindue Når det er blevet rigtigt kan I skrive det ind i programmet
Python Første øvelsestime bruges til en introduktion til IDLE Mac OS X: Standard i styresystemet http://homepages.cwi.nl/~jack/macpython Windows: http:/www.activestate.com/products/activepytho n. Ellers: www.python.org