Läsbar prolog 8.1-8.3 CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.

Slides:



Advertisements
Liknande presentationer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Advertisements

Beskriver vad eleven ska försöka uppnå
Att hålla lektion i ämnet Idrott & Hälsa
TILLSAMMANS KAN VI GÖRA SKILLNAD VAR MED I EN ENTREPRENÖRIELL UTMANING.
Retorik Konsten att tala Hur håller man ett bra argumenterande tal?
Formulär Tänkte nu gå igenom vad ett formulär är och hur man kan skapa dem i Access.
Lärdomar från skolor med mer traditionellt undervisningsmönster
Ambassadörsutbildning för dig som ska prata om IdrottOnline Thomas Larsson, RF-IT Version: beta
Gå till första sidan Med användarna i fokus Användarundersökning som utgångspunkt för vidareutveckling av sökguide Borås Blekinge Tekniska Högskola.
9. Gör ritningen innan Du bygger huset
”Språk, lärande och identitetsutveckling är nära förknippade
Att söka och förvalta kunskap
GRÖNA SIDAN UPP, TRÄFF , Kjell Persson.
Att bygga en fungerande webbplats
xn + yn = zn Problemlösning Några enkla metoder
Daniel Nylén, Institutionen för Informatik
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
Prolog, Mån 16/9 Rebecca Jonson.
Programmeringsteknik Föreläsning 13 Skolan för Datavetenskap och kommunikation.
Logikprogrammering Ons, 25/9
Dcg-notation 21.2 G 2.3 M (BBS 8). dagens föreläsning extra argument i dcg-notation prolog-anrop i dcg-notation avslutande kommentarer om dcg.
Algoritmer och datastrukturer
Objektorienterad tänkande
Lund Studentlitteratur
Ett arbetsområde om poesi
Problembaserat inlärande eller Problembaserat lärande
Prolog PROgramming LOGic (programmation en logique)
Vad är du för typ av person?
Workshop inför Projektet
Musikens grundbegrepp och symboler
PIRATPARTIET Rubriksnitt: Impact, vanlig text Arial Här kan man lägga en lite ingressbetonad text på ett par tre meningar (men funkar även utan). Vill.
Retorik Konsten att tala Hur håller man ett bra argumenterande tal?
Kunskapskrav och matriser
Känna till och ha provat metoder och verktyg för processledning
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Personligt Brev ”Berätta om dig själv!”.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Logikprogrammering 21/10 Binära träd
Programmeringsmetodik
Utvecklingsprocessen Webbutveckling. Utvecklingsprocessen Bli inte rädd för alla begrepp och alla verktyg man verkar behöva kunna. Du måste inte använda.
Troubleshooting Your Network (Felsökning) Troubleshooting And The Helpdesk (Helpdesk och felsökning)
Video Games The movie. E -Ni ska välja ett spel som är er favorit. -Ni ska förklara varför den är just er favorit -Hur kan spelet utvecklas i framtiden.
Föreläsning 11 Logik med tillämpningar Innehåll u Generell resolution u Kapitel i Ben-Ari.
1 Mjukvaru-utveckling av interaktiva system God utveckling av interaktiva system kräver abstrakt funktionell beskrivning noggrann utvecklingsmetod Slutanvändare.
Retoriska arbetsprocessen
Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( )‏ Innehåll:  Att designa parallella program - manuell vs. automatisk parallellisering.
Föreläsning 1 Introduktion till kursen. Algoritmer
Skriftlig framställning
Föreläsningsanteckningar Kortfattat om programmeringsmetodik Ola Ågren Hur det går till att göra ett program.
Logikprogrammering ons 4/9 Rebecca Jonson.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
Skolutveckling genom aktionsforskning
Handledarutbildning för Läslyftet ht15-vt16 Handledning – Ewa Wictor
Framtidskartläggning
Systematisk problemlösning enligt EPA-modellen -MÖJLIGHETER OCH UTMANINGAR.
UPPSATSPLAN HUR GÖR MAN EN SÅDAN?. UPPSATSPLAN Nytt steg i processen, PM godkänt PM är början på planen Handledartilldelning Samarbete med handledare.
Kunskapsprogram inom digital affärsutveckling
Rädda klassrummet.
Djuren möter ungdomskulturen
Kreativa verktyg och metoder
Svenska – skriva berättelser
Djuren möter ungdomskulturen
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Tips för bättre kommunikation
xn + yn = zn Problemlösning Några enkla metoder
Inför NP Svenska Våren 2019.
Presentationens avskrift:

läsbar prolog CM 8.1

allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation

correctness ett program bör fungera som det ska otroligt nog ofta förbisett: speciellt om elegans, effektivitet och optimering får mer och mer utrymme!

’user-friendliness’ lätt att använda och interagera med vad betyder det egentligen? enormt begrepp som kan innefatta allt möjligt –t ex vem är ”user” i det här fallet? –och i vilket sammanhang?

efficiency tidseffektivitet minneseffektivitet alltså: optimering helt enkelt

readability kommentering i koden programmeringsstil alltså: lättförståelig kod

modifiability lätt att bygga ut programmet lätt att förändra programmet modularisering ett ”rent API” (application programming interface)

robustness felhantering felrapportering (istället för krasch!)

documentation kommentarer i koden API-specifikation designdokument (för att kommunicera idén med programmet)

allmänna principer alla dessa principer hänger så klart ihop t ex läsbarhet kopplat till dokumentation och ”användar- vänlighet” (där ”användaren” är en programmerare i det här fallet)

hur uppnår vi dessa principer? genom att ha koll på, och följa en designprocess genom praktiskt erfarenhet (projektet!)

processen definiera problemet FÖRST (”pappersprogrammering”) steg-för-stegbyggande (’iterativ utveckling’) gradvis förfining

processen (forts.) känna igen ’mönster’ –programmeringsmässigt (t ex rekursion) –deklarativt eller procedurellt? (beror på problemet) –(bildliga) representationer (stack, träd, lista, …) …och veta vilka mönster som passar ett specifikt problem

processen (forts.) top-level solution iterativ utveckling bottom-level solution

1 ’top-level solution’ –tänk igenom problemet: skissa! –försök definiera ’sub-problem’ –formulera och omformulera (på ett abstrakt plan) –använd kraftfulla representationer! (bilder, diagram, …) –gäller både procedurer, algoritmer, relationer och datastrukturer

2 ’iterative development/increments’ –omdefiniera, omstrukturera och förfina –var INTE rädd för att kasta och börja om (vägen dit har redan skänkt förståelse) –idéer, kreativitet och inspiration…

3 ’bottom-level solution’ –själva koden (exekverbar men kanske inte optimerad?) –…men det tar vi på föreläsning om ”effektiv prolog”

processen (forts.) top-level solution iterativ utveckling bottom-level solution skisser, diagram, ’pappersprogrammering’ diagram & kod kod

sub-problem så hur hittar vi lämpliga sub-problem? –vi lär oss att känna igen problem vi stött på förut (mönster) t ex rekursionsmetaforen –hitta basfallet (triviala fallet) –hitta generella fall där lösningen består av enklare varianter av ursprungs- problemet

bildrepresentationer deklarativt språk (sekvens eller ’ordning’ spelar inte så stor roll i bilder) datastrukturer (t ex träd) lämpar sig för bilder (av just träd!) relationer mellan objekt lättare att rita än att beskriva i ord

generalisering lyckas man formulera det generella problemet faller ofta en rekursion ut (vilket är ett mönster vi är vana vid att implementera) detta underlättar också framtida återanvändning

dagens ämne: läsbarhet, vilket främst innefattar principerna: –läsbarhet –dokumentation

läsbarhet kort och tydligt: –korta klausuler –korta procedurer –följer ofta automatiskt om ’sub- problemen’ är noggrant definierade

läsbarhet (forts.) bra namn (indikera vad procedurer och variabler har för mening) ett ’bra’ namn är också lätt att komma ihåg välj en ”standard” och håll fast den!

exempel a(X,Y,Z)% säger inte speciellt mycket append(List1,List2,Result)%tydligare

läsbarhet (forts.) luft och vitutrymme –använd tabbar –använd blanka rader

exempel s(N,N,N).s(N,M,S):-N<M,N1 is N+1,s(N1,M,DSU),S is N+DSU. s(N,N,N). s(N,M,S):- N<M,N1 is N+1,s(N1,M,DSU),S is N+DSU. s(N, N, N). s(N, M, S) :- N < M, N1 is N+1, s(N1, M, DSU), S is N+DSU. summera(N, N, N). summera(N, M, Summa) :- N < M, N1 is N+1, summera(N1, M, Delsumma), Summa is N + Delsumma.

kommentering % enradig kommentar /* flerradig kommentar */ fokusera på vad programmet gör, och hur man använder det därefter förklara individuella predikats funktionalitet

kommentering (forts.) vilket predikat används först? –förväntade resultat –exempel på körningar speciella systemkrav –operativsystem –prolog-version –hårdvarukrav (varna för långa körningar, hög minnesåtgång, …)

kommentering (forts.) kort summering av grundläggande koncept i systemet hänvisning till dokumentationen

kommentering (forts.) beskriv predikatnamn etc. konsekvent: ”PredikatNamn / Aritet” append/3

kommentering (forts.) använd kommentarer för att förklara kod som inte är självklar! –dvs glöm inte att förklara! –men förklara heller inte självklarheter behövs mycket förklaringar? –kommentera inte dålig kod – skriv om den istället!

kommentering (forts.) författare + e-post versionsnummer datum (’timestamp’) ev. copyright och licensinformation (t ex

readme readme-filen: –mellanting mellan kommentarer och dokumentation tillägg till dokumentation (senaste ändringar)

generellt allmänna riktlinjer för programmering (datalingvistiskt perspektiv):

vanliga misstag glömt punkten, eller ersatt med ’,’ inget whitespace efter punkten (t ex glömt trycka return efter sista punkten i filen…) mismatchade par. (t ex ’[’ och ’]’ eller ’/*’ och ’*/’). felstavnign av predikat (speciellt inbyggda är svåra att hitta) –likartade namn som matchar (t ex råkar skriva ’appends’ för append, och jag har definierat ett predikat som heter appends som gör nåt helt annat!)