Programmeringsmetodik, 8p ML

Download Report

Transcript Programmeringsmetodik, 8p ML

Programmeringsmetodik, 8p
ML-delen
Programmering
Programmeringsmetodik
Programspråk
NR 1
1
Kursinformation
• Kursböcker
– Greg Michaelson, UCL Press
Elementary Standard ML
– Walter J. Savitch, Benjamin/Cummings
Turbo Pascal 7.0 (fourth edition)
• Lärare
–
–
–
–
Olof Johansson
Frida Mörtsell
Gunnar Gunnarsson
Anders Selander
Föreläsningar, grupptimmar
Grupptimmar, handledning
Grupptimmar, handledning
Handledning
2
Kursuppläggning
• Grundläggande programmering
– Programmering av små program
– ML-delen
9 september
– Pascal-delen
14 oktober
- 13 oktober
- 24 november
• Programmeringsmetodik
– Ingår i båda delarna
• Egen programmering
– Laborationer och datorövningar
3
Information på WWW
• Kursbok
– http://www/local/kurser/TDBA28/ht97
•
•
•
•
Schema
Laborationer
Planering
etc
• Datorhandbok
– http://www.ts.umu.se/~handbok/
4
Examination
• Laborationer
– 3 i ML och 3 i Pascal
• Duggor
– En i ML och en i Pascal
• Tentamen
– En i ML och en i Pascal
• Resultaten på tentamina ger slutbetyget (snittet av
betygen).
5
Laborationer
• ML
– Datorövning 2
– Laboration 1, Maze
– Laboration 2, Tvättomat
• Pascal
– Datorövning 3, Tipsrad?
– Laboration 1, Tvättomat
– Laboration 2, List unit
6
Tentamen
• ML
– Tentamen 13 oktober
– Omtentamen 28 oktober
• Pascal
– Tentamen 24 november
– Omtentamen 13 december
7
Bonuspoäng för laborationer
• Laborationer inlämnade i tid ger bonuspoäng till
tentamen
– Inlämnad och godkänd i tid ger 2 bonuspoäng
– Inlämnad men ofullständig ger 1 bonuspoäng
– Ej inlämnad eller underkänd ger 0 bonuspoäng
– Endast kommentarer räknas som godkänd
8
Grundläggande datorintroduktion
Tisdag 9 september
Kl. 13 - 17
MA323
Logga in, byta lösenord,
pröva på ML-systemet,
etc
9
Råd och förmaningar
•
•
•
•
•
ALLA inlämningsuppgifter är ENSKILDA
LÄS kurslitteraturen
Gör laborationerna i TID
Räkna med åtminstone 40 timmar/vecka
ANVÄND handledare och lärare
10
Programmeringsmetodik
• Program
– En sekvens av instruktioner för att behandla information
• Programmering
– Skriva program
• Programspråk
– Språk för att skriva program
• Programmeringsmetodik
– Metoder för att skriva program
11
Programmering
•
•
•
•
Analysera problem
Konstruera en lösning
Beskriva lösningen i ett programspråk
Använda datorsystem för att köra, testa och modifiera
program
• Dokumentera
12
Programspråk
• Konstruerat språk för att instruera datorer
• Enkla och entydiga
• Kriterier
–
–
–
–
Universala
Naturligt att uttrycka lösningar i
Implementerbart
Acceptabelt effektiva
13
Programspråksparadigmer
• Imperativa språk (Pascal, C, Cobol, Fortran)
– Uppdatera variabler
• Objektorienterade språk (Smalltalk, Eiffel, C++)
– Objekt med metoder
• Funktionella språk (SML, Haskell, Miranda, Lisp)
– Funktioner
• Logiska språk (Prolog)
– Logiska utsagor
14
Språkverktyg
• Kompilator, interpretator
– Översätter programspråket till en form som datorn kan
använda
• Editor
– För att skriva programmet på maskinläsbar form
• Avlusare (Debugger)
– Hjälp för att hitta fel i program
15
Modeller
• Ett sätt att lösa ett problem är att gör en modell som
fångar de viktigaste aspekterna hos ett problem. Sedan
använda modellen för att beskriva lösningen av
problemet.
• Ett program är en datormodell.
• En abstrakt modell identifierar det generella fallet
utifrån flera individuella fall, låser fast likheterna och
låter olikheterna vara öppna. Kan då användas på nya
fall genom att fylla ut de öppna punkterna.
16
Objekt, samlingar och egenskaper
• Information består av samlingar med beskrivningar av
objekt
• Samlingar är också objekt
• Instruktioner är objekt => program är en ordnade
samling av objekt
• I en samling har objekten gemensamma egenskaper
• Ett objekt beskrivs av en grupp egenskaper
17
Egenskap hos en egenskap
Har den eller inte Man
Sant/falskt
Antal av den
Ålder
Heltal
Ett värde av den
Vikt
Reella tal
Ett namn på den
Födelseort Strängar
18
Typer och metoder
• Värden
– Något som existerar under en beräkning.
• Metod
– Konstruera, hämta och manipulera egenskaper och
beskrivningar.
• Typ
– En samling värden med gemensamma egenskaper
tillsammans med metoder för dessa.
• Värden av olika typer kan inte jämföras
• Metoder är typ specifika
19
Nya typer av gamla
• En viktig del av programmering är att analysera
problemet för att identifiera typer i det.
• Utifrån gamla typer konstruerar vi värden och metoder
för nya typer avpassade för problemet.
• Genom att koppla ihop metoderna för de nya typer
löser vi problemet.
• Dessa nya typer kan sedan också användas för senare
problem.
20
Sätt att skapa nya typer
• Par, tupler
– Ett värde kan bestå av två värden av olika typer.
• Disjunkt union
– Ett värde kan bestå av antingen en typ eller en annan.
• Lista, array
– Ett värde kan bestå av en sekvens av värden av en typ.
• Avbildning
– Ett värde kan bestå av en avbildning av en typ på någon
annan typ.
21
Uttryck (Expression)
• En program fras som kan evalueras till ett värde.
– 4 + 6
– 3 * 10 > (4 + 5) * 4
• Evalueringen (beräkningen) sker genom att utföra
metoderna i uttrycket
– 3 * 10 > (4 + 5) * 4 ==>
30 > (4 + 5) * 4 ==>
30 > 9 * 4 ==>
30 > 36 ==>
false
22
Generalisera genom namngivning
• Vi vill kunna tala om godtyckliga värden hos
egenskaper snarare än specifika.
• Genom att namnge egenskapen så kan vi använda
namnet i stället för det specifika värdet.
– Sträckan en bil kör under två timmar är dess fart gånger två.
speed * 2
23
Abstraktioner
• När man generaliserat specifika värden med namn så är
får man en abstraktion.
• Centralt för all programmering
• En funktion är ett abstraherat uttryck.
– replace speed
in speed * 2
24
Använda abstraktioner
• För att använda en funktion måste namnet bytas ut mot
ett specifikt värde
– replace speed
in speed * 2
with 100
==> 100 * 2
• Kallas att specialisera en abstraktion.
• För funktioner kallas det att anropa eller applicera
funktionen.
25
Namnge funktioner
• Vi kan ge namn åt funktioner också
– distance is replace speed
replace duration
in speed * duration
• Så vi kan använda namnet istället för funktionen
– distance
with 20
with 10
26
Beräkning, evaluering
distance
with 20
with 10
==>
replace speed
replace duration
in speed * duration
with 20
with 10 ==>
replace duration
in 20 * duration
with 10 ==>
20 * 10 ==>
200
27
Val
• Vi behöver möjlighet välja olika alternativa
beräkningar
– if 5 > 4
then ”Myror”
else ”Elefanter” ==> ”Myror”
• Villkorsuttryck
– longer is replace duration1
replace duration2
in if duration1 > duration2
then duration1
else duration2
28
Namn är godtyckliga
• Namnen har ingen egen betydelse.
– distance is replace speed
replace duration
in speed * duration
– foo is replace bar
replace mud
in bar * mud
– foo och distance har samma betydelse
• Ett namn är en plats som kan kan ersättas av ett värde.
• Namn är dock viktiga för att påminna oss om vad de
ska generalisera.
29
Nya samlingar från gamla
• Vi kan se lösningen av ett problem som att vi börjar
med en initial samling värden som bearbetas för att
konstruera en slutsamling som ger lösningen.
• Några centrala metoder att bearbeta samlingar.
– Avbildning
– Filtrering
– Reducering
30
Avbildning (mapping)
När man bearbetar varje element i samlingen och på
det sättet får en ny samling
=>
31
Filtrering
När man väljer ut de värden som uppfyller vissa kriterier
Om
32
Reducering (folding)
Att kombinera ihop egenskaper hos alla värden i samlingen för
att forma ett slutvärde
1
3
3
4
5
7
+
23
33
Högre ordningens funktioner
• Abstrahera genom att introducera namn för funktioner.
– replace action
replace object
in action
with action
with object
• En funktion som kan appliceras på andra funktioner
kalla högre ordningens funktion
• Det ger oss möjlighet att återanvända generella
problemlösningsmetoder
34
Rekursion
• Om vi låter en funktion anropa sig själv kallas det
rekursion.
– faculty is replace number
in if number = 0
then 1
else number * faculty
with (number - 1)
• Ett grundläggande sätt att upprepa sekvens av
instruktioner
35
Standard ML
•
•
•
•
•
Standard Meta Language
Ett funktionellt språk
Hård typkontroll
Polymorfism
Mönstermatchning
36
Funktionella språk
• Den grundläggande modellen för beräkningar är
konstruktion och applikation av funktioner.
• Funktioner behandlas som värden.
• Högre ordningens funktioner
• Inga sidoeffekter
37
Exempel
datatype expr
= Const of int
| Var of string
| Plus of expr * expr
| Times of expr * expr
fun eval env (Const n) = n
| eval env (Var i) = env i
| eval env (Plus (e1,e2)) = eval env e1 + eval env e2
| eval env (Times (e1,e2)) = eval env e1 * eval env e2
fun diff id (Const n) = Const 0
| diff id (Var i) = if id = i then Const 1 else Const 0
| diff id (Plus (e1,e2)) = Plus (diff id e1, diff id e2)
| diff id (Times (e1,e2))
= Plus (Times (e1,diff id e2),Times (diff id e1,e2))
38