PROGRAMMERINGSMETODIK 1 Metaforer för programmering Hierarki, modularitet, överblick Programbyggnadskunskap Utvecklingsprocessen Kategorier av programspråk Programmering som allmän konst Metaforer för programmering Instruktion programmering: att instruera datorn vad som ska göras lära sig programmera som att lära sig italienska? Konstruktion (av programmet) programmering: som att bygga ett hus botten-upp instrumentalism Problemlösning programmering: att lösa problem Strukturerad Programmering (föranledd av mjukvarukrisen) strukturella ideal: hierarki, modularitet, överblickbara kontrollstrukturer toppen-ned, stegvis detaljering, arbetsdelning software engineering konst/hantverk eller industri? jfr Taylorism, scientific management realism några komplikationer: ofullständig information svårspecificerbara villkor lösningen förändrar problemet Adaptation programmering: att gradvis anpassa ett beteende (program-met) till sin slutliga kontext ej väldefinierat slut Demonstration programmering genom att med exempel visa det avsedda beteendet ett stort problem: avgränsning, abstraktion, induktion gemensamt med ostensiva definitioner och radikal översättning (Quine) gavagai -exemplet 2 1
Hierarki, modularitet, överblick 3 ej modulärt modulärt Hierarki Modularitet olika delar av ett program bör vara så löst kopplade, så oberoende av varandra som möjligt Notera: viss modularitet följer naturligt ur toppen-ned-ansatsens stegvisa nedbrytning av problemet Överblickbara kontrollstrukturer Go To Statement Considered Harmful (Dijkstra 1968) Fördelarna med att följa dessa strukturella ideal är i huvudsak kognitiva: de underlättar att förstå hur programmet fungerar validera programmet lokalisera fel korrigera fel anpassa programmet till förändringar i uppgiften anpassa programmet till förändringar i driftsmiljön (både mjukvara och hårdvara) utnyttja programmet eller dess komponenter för nya ändamål Vad behöver man kunna för att bygga ett program? 4 Förståelse för hur den färdiga konstruktionen ska utnyttjas, vilken uppgift den fyller, driftsförhållanden, framtida behov, etc. speciellt för programmering är att uppgifterna kan gälla nästan vad som helst Materialkännedom, teknikkunskap, kunskap i bakomliggande teorier grundläggande datatyper och kontrollstrukturer grundläggande algoritmer (standardlösningar) designmönster programspråk Kunskap och färdighet i att använda olika hjälpmedel och verktyg editorer, språkprocessorer, felsöknings- och mätverktyg komponentbibliotek operativsystem Metodkunskap, förmåga att utvärdera konstruktionsförslag, kvalitetskriterier, kreativitet problemanalys, problemlösningsmetodologi effektiva arbetsmönster, arbetsorganisation valideringsmetoder utvärderingskriterier 2
Den klassiska utvecklingsprocessen 1. Uppgiftsformulering, problemspecifikation 2. Algoritmkonstruktion (problemlösning) 3. Verifikation (att algoritmen uppfyller specifikationen) 4. Kodning (programskrivning) 5. Testning och avlusning 6. Validering (att programmet löser uppgiften) 7. Dokumentering (löper parallellt med de andra momenten) 8. Underhåll, förvaltning (sträcker sig över programmets hela livslängd) Problemspecifikationen är viktig, så viktig att en del har menat att när man har den rätta specifikationen av problemet så har man också lösningen Notera att man vill skjuta på kodningen och arbeta mer abstrakt och programspråksoberoende så länge det går Verifikation: idealiskt ett strikt bevis, men mycket mödosamt för icketriviala program Varför behövs Dokumentering? programmet beskriver ju beteendet? Varför behövs Underhåll? program ruttnar väl inte? Verkligheten är inte fullt så rätlinjig 5 Kategorier av programspråk Manipulativa / imperativa språk Ex: Fortran, Cobol, Algol, Pascal, Basic, c hantverksmetafor: beskriv hur dataobjekten ska bearbetas och manipuleras steg för steg i kronologisk ordning Funktionella och relationella språk Ex: Lisp, APL, ML; Prolog (logikbaserat) matematiska funktioner resp. relationer som förebild Objektorienterade och agentorienterade Ex: Simula, Smalltalk, c++, Java objektmetafor; agentmetafor 6 3
Programspråk 7 Programmering som allmän konst Läsa, skriva, räkna borde programmera läggas till listan av grundläggande färdigheter som den ordinära medborgaren bör kunna förutsättas behärska i det 21:a århundradet? (Andrea disessa) Lämpliga programmeringsmetoder, lämpliga programspråk? Är existerande typer av programspråk bra nog, eller måste något bättre till? Behövs andra slags symbolsystem? t.ex. visuella språk? 8 4
Visuella programspråk Exemplet Janus 9 5