Introduktion til programmering. Programmeringssprog Uge 44 Computer Science, kap 6. Learning Python: kap 13, 14.



Relaterede dokumenter
Introduktion til programmering. Programmeringssprog Uge 44 Computer Science, kap 6. Learning Python: kap 13, 14.

Introduktion til programmering. Programmeringssprog Uge 41 Computer Science, kap 6. Learning Python: kap 13, 14.

Introduktion til programmering. Afslutning

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

Python programmering. Per Tøfting. MacFest

Introduktion til funktioner, moduler og scopes i Python

Dokumentation af programmering i Python 2.75

Lær Python dag 1 - modul 1

Programmering i C. Lektion september 2009

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Skriftlig eksamen i Datalogi

Abstrakte datatyper C#-version

JavaScript. nedarvning.

Programmering i C. Lektion oktober 2008

3 Algebraisk Specifikation af Abstrakte Datatyper.

Introduktion til programmering. Uge 38.1 Python 2 Learning Python, kap 8-12.

BOSK F2011, 1. del: Udsagnslogik

Lær Python - Dag 4, modul 1 Objektorienteret programmering

It og informationssøgning Forelæsning november 2006 Nils Andersen. Regulære udtryk og formelle sprog

DM536. Rapport og debug

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

DM507 Algoritmer og datastrukturer

Forelæsning Uge 2 Mandag

It og informationssøgning Forelæsning oktober 2006 Jakob Grue Simonsen. Klasser

Peter Kellberg. Rundt om Danmarks Statistiks makroer. Design, Standardisering, Teknik

DM507 Algoritmer og datastrukturer

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Introduktion til programmering. Intro

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

Interaktionsudvikling

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Kapitel 3 Betinget logik i C#

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

#AlleKanKode. Lektion 4 - Kontrol flow

BRP Kursusintroduktion og Java-oversigt

SPSS introduktion Om at komme igang 1

Ugens emner. Regulære sprog og digitale billeder. Adressering af områder. Et alfabet. Dette billede: kan repræsenteres af en FA med 832 tilstande

HTX, RTG. Rumlige Figurer. Matematik og programmering

Ja! det beviste vi uge 16+17

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Sproget Rascal (v. 2)

1 Grundbegreber. Noter. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner.

It og informationssøgning Forelæsning oktober 2006 Nils Andersen

Enigma. Et programmeringssprog. Forfatter: Niels Serup X. Y Vejleder: A B C. Fag: Programmering Uddannelsessted: N M

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

Programmering for begyndere Lektion 2. Opsamling mm

Programmering i C. Lektion december 2008

Introduktion til ActionScript

Multiparadigme Programmering

Programmering C RTG

4 Basal Objekt-orienteret Programmering I.

Klasser og Objekter i Python. Uge 11

Introduktion til C programmering

It og informationssøgning Forelæsning 5 4. oktober 2006 Nils Andersen. Tilfældige tal. Statistisk test. Sæt og associationslister.

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Datalogi OB, Efterår 2002 OH er, forelæsning 3/ forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Forelæsning Uge 2 Torsdag

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

IT sikkerhed Whitelist

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september (Tak til Jakob Bardram for nogle slides) Dagens begreber

Test af It-komponent

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

It og informationssøgning Forelæsning september 2006 Nils Andersen. Gentagelser og tekster

DM507 Algoritmer og datastrukturer

Programmering i C Videre med C (2 af 4) 19. marts 2007

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Sammenlign og byt. Et eksempel på dokumentering af et program

Introduktion. Philip Bille

LAMBDA- KALKULER. Fra. til funktionelle sprog

Løsning til øvelsesopgaver dag 4 spg 5-9

Recollections about the Development of Pascal. Niklaus Wirth ACM, 1993

Vejledningtiladministratorbrugerfladen

2 Funktionsorienteret programmering i Scheme.

Kontrol-strukturer i PHP

Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum

RefWorks Workshop Medicinsk Bibliotek Aalborg Universitetshospital. Oprettelse af konto/log in RefWorks-databasen... 2

Programmering og Problemløsning, 2017

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

DM507 Algoritmer og datastrukturer

Introduktion til prædikatlogik

Eksempel: Skat i år 2000

Lyskryds. Thomas Olsson Søren Guldbrand Pedersen. Og der blev lys!

Quick guide - WISEflow

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning

Newtons afkølingslov

Programmering, algoritmik og matematik en nødvendig sammenblanding?

Algoritmer og invarianter

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Dynamisk programmering

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

DM507 Algoritmer og datastrukturer

Adgangsgivende eksamen (udeladt kategori: Matematisk student med matematik på niveau A)

Programmering af CS1700-Proxlæser

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13%

Uge 36 Intro Kap 0 og 2 i Computer science

Transkript:

Introduktion til programmering Programmeringssprog Uge 44 Computer Science, kap 6. Learning Python: kap 13, 14.

Plan Programmeringsparadigmer Funktionel programmering i Python Pause Scope: referencekonteksten Oversættelse og kompilering

Generel udviklingstendens Repræsentation af maskinelle processer repræsentation af processer i problemområdet Portabilitet Væk fra maskinafhængighed (python, java etc.) Abstraktion, aggregering og indkapsling Menneske tilpasser sig maskine maskine tilpasser sig menneske

Naturlige og formelle sprog Naturlige sprog Udvikler sig gradvist Distribueret udvikling Interpretanten til forhandling Formelle sprog Udvikler sig i spring Python 2.3 Python 2.4 Centraliseret udvikling Interpretanten ikke til forhandling SYNTAX ERROR Fælles træk Syntaks, semantik, pragmatik Udvikling afspejler praktiske udtryksbehov

Programmeringsparadigmer

Programmeringsparadigmer Imperative / procedurelle Python, C, FORTRAN, ALGOL Objektorienterede python, C++, smalltalk, java Funktionelle lisp, ML Deklarative / logiske prolog

Programmeringsparadigmer Et paradigme udtrykker et syn på problemområdet Interpretant paradigmets syn på verden Repræsentation program Objekt problemområde

ITs påvirkning af vores tænkemåde Når vi konsumerer et medieprodukt er vi nødt til at acceptere interpretanten præmissen - under konsumprocessen Den er en forudsætning for konsum Vi kan ikke se en amerikansk mainstream film med fornøjelse uden i en halvanden time at acceptere den amerikanske fortolkning af verden Og vi kan ikke bruge et IT-system uden i brugsperioden at acceptere dets syn på verden

Imperative/procedurelle Interpretant: Verden består af aktive processer og passive ting Tingene flyder mellem processerne og skifter tilstand Programmering Udform en algoritme der omdanner ting En algoritme er en sekvens af tilstandsændringer Ontologi Subjekt Objekt Tekstgenre: narrativ

Objektorienterede Interpretant: Verden består af aktive objekter samt af kommunikation mellem disse objekter Objekterne har metoder tilknyttet >>> x = ['a','b','c'] >>> x.extend([1,2,3]) Programmering: lav en struktur af objekter hvis vekselvirkning resulterer i det ønskede resultat Simuler problemområdet Ontologi Subjekt/Objekt Subjekt/Objekt Note Indeholder normalt en procedural komponent (C++, Python) Understøtter indkapsling og genbrug Tekstgenre: deskriptiv.

Funktionelle Interpretant Verden består af afhængigheder Inspireret af matematikken Programmering Lav et hierarki af funktioner der kalder andre funktioner Funktion(funktion(funktion(data))) Ontologi Input-output Python har et funktionelt subset (apply, map, reduce, listcomprehension)

Deklarative Interpretant Verden består af sande eller falske sætninger samt af logiske slutningsprocesser Ontologi Logisk positivisme Tekstgenre: argumentativ

Prolog 1: påstande far(peter,jeppe). far(peter,lotte). mor(else,jeppe). mor(else,lotte). far(jeppe,estrid). mor(lotte,erik). mor(lotte,ida). han(peter). han(jeppe). han(erik). hun(else). hun(estrid). hun(ida). hun(lotte).

Prologg 2: slutningsregler farfar(aeldre,yngre) :- far(aeldre,mellem),far(mellem,yngre). farmor(aeldre,yngre) :- mor(aeldre,mellem),far(mellem,yngre). morfar(aeldre,yngre) :- far(aeldre,mellem),mor(mellem,yngre). mormor(aeldre,yngre) :- mor(aeldre,mellem),mor(mellem,yngre). soen(yngre,aeldre) :- han(yngre),far(aeldre,yngre). soen(yngre,aeldre) :- han(yngre),mor(aeldre,yngre). datter(yngre,aeldre) :- hun(yngre),far(aeldre,yngre). datter(yngre,aeldre) :- hun(yngre),mor(aeldre,yngre).

Prolog 3: slutningsregler bedstemor(aeldre,yngre) :- mormor(aeldre,yngre). bedstemor(aeldre,yngre) :- farmor(aeldre,yngre). bedstefar(aeldre,yngre) :- morfar(aeldre,yngre). bedstefar(aeldre,yngre) :- farfar(aeldre,yngre). barnebarn(yngre,aeldre) :- bedstemor(aeldre,yngre). barnebarn(yngre,aeldre) :- bedstefar(aeldre,yngre). soennesoen(yngre,aeldre) :- soen(yngre,mellem), soen(mellem,aeldre). datterdatter(yngre,aeldre) :- datter(yngre,mellem), datter(mellem,aeldre). soeskende(a,b) :- far(x,a), far(x,b), not(a = B). soeskende(a,b) :- mor(x,a), mor(x,b), not(a = B).

Prolog 4: forespørgsler 1?- barnebarn(x,peter). X = erik ; X = ida ; X = estrid ; 2?- farfar(peter,x). X = estrid ; 3?- morfar(peter,x). X = erik ; X = ida ; 4?- soeskende(erik,x). X = ida ;

Python Objektorienteret (kommer næste gang) Proceduralt (Det vi har programmeret indtil videre) Men med elementer af funktionel programmering. Kommer nu

Funktionelle træk i Python Lambda: anonyme funktioner Et udtryk, ikke en række sætninger Kan stå steder hvor def ikke kan bruges, f.eks. inline i dictonaries og lister lambda arg1 argn : hvad skal der gøres Implementering af kommandointerface kommando = { 'plus':(lambda x, y: x+y), 'minus': (lambda x, y: x-y), gange': (lambda x,y: x*y)} >>> kommando['plus'](3,4) 7 >>> kommando[ gange'](30,50) 1500 >>>

En lommeregner def Lommeregner(): kommando = {'plus':(lambda x, y: x+y),\ 'minus': (lambda x, y: x-y),\ 'gange': (lambda x,y: x*y)} inp = raw_input('tast et udtryk: ') inp = inp.split() if inp[0] == 'slut': return 'slut' else: x = int(inp[0]) op = inp[1] y = int(inp[2]) return kommando[op](x,y) while True: resultat = Lommeregner() if resultat == 'slut': break else: print resultat >>> Lommeregner() tast et udtryk: 4 plus 78 82

Output tast et udtryk: 2 plus 5 7 tast et udtryk: 5 minus 57-52 tast et udtryk: slut >>>

Apply Matcher en funktion med argumenter i form af en tupel >>> def plus(x,y): return x+y >>> apply(plus,(3,4)) 7

Map map( funktion, sekvens ) [] Map: anvender en funktion på hvert medlem af en sekvens og returnerer de enkelte resultater i form af en liste >>> ordliste =('peter','anders','karl') >>> def lavnavne(etnavn): return etnavn.title() >>> map(lavnavne,ordliste) ['Peter', 'Anders', 'Karl'] >>>

Reduce reduce(...) reduce(function, sequence[, initial]) -> value Apply a function of two arguments cumulatively to the items of a sequence, from left to right, so as to reduce the sequence to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). If initial is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty.

Filter filter ( boolsk funktion, sekvens ) [] Anvender en boolsk funktion på hvert medlem af en sekvens og returnerer de medlemmer for hvilken funktionen bliver sand >>> ordliste =('peter','anders','karl','poul','anni') >>> def checknavne(etnavn): return etnavn.startswith('p') >>> filter(checknavne,ordliste) ('peter', 'poul') >>>

List comprehensions [udtryk for var in sekvens ] [] Syntaks: [Udtryk for variabel in sekvens if betingelse] Beregner udtryk, hvis betingelse er sand, for en variabel der sættes til at referere til alle medlemmer af sekvensen. >>> [x*2 for x in [1,2,-3,0,-4] if x > 0] [2, 4] Effektivt, kort, men uforståeligt!

Pause Pause

Scope

Scope Scope = samtalekontekst Namespace = interpretant der angiver hvad navne står for I Python: en slags dictionary hvor navne er knyttet til objekter { A :integerobjekt, B : funktionsobjekt, } Namespaces er knyttet til kontekster lige som i naturlige sprog

Hvad betyder et navn? Samtalekonteksten og tidsforløbet afgør hvad en repræsentation (et navn) repræsenterer. Det danske samfund: Anders Fogh betegner statsministeren (desværre stadigt) Vi kan bruge Fogh som henvisning til statsministeren: Fogh statsministeren Familiesammenkomst (del af det danske samfund): Hvis intet andet er sagt gælder reglen stadig. Fogh har en del bøvl med sine ministre i øjeblikket Men hvis der kommer en replik Kan I huske Købmand Fogh Ja, ja Fogh har lige solgt sin forretning Så etableres referencen Fogh købmanden

I naturlige sprog Referencen afgøres af Egenskaber ved objektet (han/hunkøn, andre egenskaber) Hvornår objektet sidste blev omtalt og hvor vigtigt det er Om der er nævnt andre kvalificerede objekter imellem taletidspunktet og sidste omtale Eksempel Prøv at se den mand derovre Ja, han (manden derovre) er noget nervøs Men se så ham bagved Han (manden bagved) ser mere ud til at have kontrol over tingene.

Scope i Python Lokale navne bruges i funktioner De forsvinder når funktionen er kørt færdig Der er 4 samtalekontekster Indbyggede navne (open, range, etc) Modulet (globale): navne der er blevet tilskrevet (A = 9) en reference i modulet eller er blevet erklæret globale Lokale navne i omgivende funktioner Lokale navn i funktionen: navne der er blevet tilskrevet en reference i modulet

Fastlæggelse af reference i Python Har navnet fået en værdi i denne funktion Ja: navnet refererer til denne værdi Nej: Har navnet fået en værdi i en indesluttende funktion: Ja: navnet refererer til denne værdi Nej: har navnet fået en værdi i modulet eller er det blevet erklæret global? Ja: navnets værdi er denne værdi Nej: findes navnet som indbygget navn? Ja: navnet har det indbyggede navns værdi def laegentil(x): x = x+1 return x Nej: fejl.

Eksempel >>> x = 10 >>> def laegentil(x): x = x+1 return x >>> laegentil(x) 11 >>> x 10 >>> def laegentil(y): global x x = y+1 return x >>> laegentil(x) 11 >>> x 11 lokal Global Global

Call by value, call by reference Python: call by reference er default Call by value kræver at parametren eksplicit er en kopi >>> def FjernFoerste(enListe): del enliste[0] return enliste >>> minliste = [1,2,3] >>> from copy import * >>> resultat1 = FjernFoerste(copy(minListe)) >>> resultat1 [2, 3] >>> minliste [1, 2, 3] >>> resultat1 = FjernFoerste(minListe) >>> minliste [2, 3] >>>

Aktuelle og formelle parametre Eksemplet igen def FjernFoerste(enListe): del enliste[0] return enliste Nyliste = FjernFoerste(minListe) Ved kaldet sættes de formelle parametre til at repræsentere den værdi de aktuelle parametre repræsenterer Formel parameter = aktuel parameter EnListe = minliste

Forskellen Call by value: i Python må man eksplicit kopiere R:minListe R: enliste O: [1,2,3] O: [1,2,3] Call by reference: default i Python R: minliste R: enliste O [1,2,3]

Oversættelse og kompilering

Oversættelse og kompilering Oversættelse fra et sprog til et andet Transformation af program Eks. fra C++ til maskinkode Fra python kildekode til python bytecode Først lexikalsk analyse Så syntaktisk analyse Resultat: parsetræ Så kodegenerering ud fra parsetræet

Leksikalsk analyse Leksikalsk analyse. Opdeling af kildekode-tekstfilen i en række tokens Tokens er reserverede ord og variable samt funktioner/operatorer Eks = print minvariabel -> ASSIGN, PRINT, VAR Variabelnavne må ikke starte på et tal >>> 1bil = 'Volvo' SyntaxError: invalid syntax >>> enbil = 'volvo'

Leksikalsk analyse Nøgleord (if, then, ) >>> if = 'peter' SyntaxError: invalid syntax Reserverede ord If er et reserveret ord Int er ikke et reserveret ord (data type) >>> int = 1 >>> int 1 Nu virker int( 10 ) ikke mere! Så pas på! Hvis ordene bliver lilla i IDLE er det et indbygget ord som kan ændres, men som ikke bør ændres uden en specifik grund. Reserverede bliver orange

Syntaktisk analyse BNF - Backus-Naur-form Samme udtrykskraft som Chomsky s kontekst-frie grammatik S ::= N VP NP ::= N N som VP at S VP ::= VT NP VI N ::= Anders Bent Christina VT ::= så hørte VI ::= løb sov lo

Fragment af Python stmt::= simple_stmt compound_stmt simple_stmt::= small_stmt (';' small_stmt)* [';'] NEWLINE small_stmt::= expr_stmt print_stmt del_stmt pass_stmt flow_stmt import_stmt global_stmt exec_stmt assert_stmt print_stmt::= 'print' ( [ test (',' test)* [','] ] '>>' test [ (',' test)+ [','] ] ) del_stmt::= 'del' exprlist pass_stmt::= 'pass' flow_stmt::= break_stmt continue_stmt return_stmt raise_stmt yield_stmt break_stmt::= 'break' continue_stmt::= 'continue' return_stmt::= 'return' [testlist]

BNF og syntaksdiagrammer Expr ::= Term [Op Expression] Op ::= + - Syntaxregler er ofte rekursive Expression Term Op Expression Op + -

BNF og syntaksdiagrammer S ::= N VP NP ::= N N som VP at S VP ::= VT NP VI N ::= Anders Bent Christina VT ::= så hørte VI ::= løb sov lo NP som VP N at S

Parsning Analyse af om tokensekvensen overholder sprogets syntax Assign ::= Var = Expression Expression ::= Var Var + Var Var + Digit Digit + Digit Var ::= a b c... z Digit ::= 0 1 2... 9 a = a+4 a = 3+4 b = 3+5 Opbygning af parsetræer

Syntakstræ formelt sprog Assign Var Expression a = Var + Digit a = a+3 a 3

Syntakstræ dansk S ::= N VP NP ::= N N som VP at S VP ::= VT NP VI N ::= Anders Bent Christina VT ::= så hørte VI ::= løb sov lo S VP NP N VT N Bent så Anders

Syntakstræer Fjern denne flertydighed If (Boolean1): If (Boolean2): Statement1 else: Statement2 Skal statement2 udføres når Boolean1 er falsk eller når Boolean1 er sand og Boolean2 er falsk?

Fast og frit format Formatfrie sprog (de fleste) Problemet løses med forskellige former for paranteser If (Boolean1): {If (Boolean2): Statement1} else: Statement2 If (Boolean1): {If (Boolean2): Statement1 else: Statement2 } Sprog med fast format Problemet løses med indentering

Python fast format. Bruger indentering >>> def syntakstest(navn): if navn[0] == 'peter': if navn[1] == 'andersen': print 'det var peter andersen' else: print 'fornavnet var ikke peter >>> def syntakstest1(navn): if navn[0] == 'peter': if navn[1] == 'andersen': print 'det var peter andersen' else: 'fornavnet var ikke peter'

Semantisk analyse Er alle variable synlige? Check scope og namespace Er typen af variablen forenelig med de operationer der skal udføres på den? I stærkt typede sprog: kan gøres nu Utypede sprog som Python: kan først checkes under udførelsen

Kode generering Højniveaukode X y + z W x + z Maskininstruktioner (optimering) Load y i R1 Load z i R2 Add R2 til R1 (R1 = y + z) Store R1 i x Load x i R1 Load z i R2 Add R2 til R1 Store R1 i w Overflødigt

Adgang til MySQL serveren Hvis i logger på nettet med det login og password i har fået til MySQLserveren skulle i gerne blive opfattet som ansatte i stedet for studerende og vil derfor have adgang til MySQLserveren

Næste gang UML distilled kapitel 3 (4 i 2nd ed.)

Opgave Valgfri opgave med rekursion