Programmeringsbegrepp Elektronisk publicering
Idag Programspråk Algoritmer Operatorer Programblock och satser Objektorientering
Programspråk… …kräver en exakt syntax …kräver en exakt semantik Känns det bekant?
Programspråk Maskinkod Assembleringsspråk Högnivåspråk Ettor och nollor Assembleringsspråk Enklare kommandon Högnivåspråk Mer likt människans sätt att uttrycka sig på Dagens programmeringsspråk
Flödet… Algoritm skapas Programmerare kodar algoritmen i ett högnivåspråk En kompilator kompilerar koden till assemblerspråk/maskinkod
Programspråk FORTRAN – 50-talet, främst anpassat för numeriska beräkningar (t ex simuleringar av en kärnreaktion) COBOL – sent 50-tal, främst anpassat för affärer, banker, företag PASCAL – tidigt 70-tal, generellt språk LISP – 60, populärt inom AI PROLOG – 70, bygger på logik
Nyare språk Java C++ C# Programspråk anpassade för webben: PHP ASP Visual Basic JavaScript …och XSLT
Många programspråk finns… …varför? Två skäl: 1 - Teknologisk utveckling kräver nya språk 2 - Nya områden och nya tillämpningar kräver nya språk
Programmering... ...handlar om problemlösning Problemlösning kan liknas vid ett recept... ...men det något vackrare ordet algoritm används nog mest frekvent i de här sammanhangen
Algoritmer En algoritm ≈ Ett recept Steg för steg-instruktioner för att lösa ett problem
Ett exempel på en algoritm 1 Notera 0, peka på första lönen i listan 2 Öka aktuellt värde med lönen som är utpekad 3 Om slut på listan 3.1 Skriv ut summan 4 Annars 4.1 Peka på nästa lön
Ett exempel på en algoritm Start Note 0; Point to first salary Add salary pointed at noted number At end of list? YES NO Output noted number Point to next salary stop Harel, D. (1992) Algorithmics – The spirit of computing
Alla problem kan lösas med… Sekvens – en serie instruktioner som alltid utförs i samma ordning Selektion – vägval, ett styrt val av en operation Iteration – upprepning av en eller flera operationer, styrs i regel av ett avbrottsvillkor Rekursion – ett problem delas upp systematiskt i mindre, likartade delar (egentligen en typ av iteration)
I slutändan… En dator är bra på att fatta enkla beslut och göra beräkningar Komplicerade beslut måste delas upp i enkla delar som datorn kan förstå För att göra detta skapas algoritmer Hur fantastiskt ett program än må vara så består det fortfarande bara av funktioner och variabler
Programblock och satser Vid det här laget är ni ju redan bekanta med krullparenteserna { } Allt mellan två krullparenteser hör ihop Det som finns mellan dem är satser En sats är ett kommando som får något att hända Satser som ger ett värde kallas för uttryck
Programblock och satser if (pris>40) { document.write "Oj, vad dyrt!"; } else if ((pris<40) && (pris>20)) { document.write "Priset är OK!"; else { document.write "Oj, vad billigt!";
Variabler och konstanter Variabel – ett utrymme där man lagrar data En variabel är av en datatyp Variabeln och dess datatyp deklareras vanligtvis innan den ska användas Konstant – en variabel vars värde aldrig ändras
Datatyper Heltal (byte, short, int, long) Decimaltal (float, double) Text (char, string) Datum (date, datetime) Boolesk (boolean)
Deklarera variabler ActionScript C# var pos_x:Number = 0; var pos_y:Number = 8; var str:String = "en sträng text"; C# int pos_x = 0; int pos_y = 8; string str = "en sträng text";
Namnge variabler Beskrivande namn Följ tumreglerna: kalle är inte ett bra namn på en heltalsvariabel som lagrar längd Följ tumreglerna: Inled alltid med en bokstav Första bokstaven är gemen Varje följande ord börjar med versal Alla andra bokstäver är små Efter första tecknet kan vanligtvis siffror samt understreck förekomma
NULL NULL är ett värde som är ingenting NULL är ett värde som är odefinierat NULL är inte lika med 0, "" (tomma strängen) eller empty Kort och gott: vi vet inte vad värdet ska vara
Konkatenering Att sammanfoga något till en serie Två ihopslagna textsträngar är resultatet av en konkatenering s1 = 'Detta är en sträng'; s2 = ' som snart ska slås ihop med denna sträng'; print s1 + s2;
Kommentarer /* klassisk C-kommentar */ // C++-kommentar <!-- HTML-kommentar --> Används för att lägga in kommentarer i koden eller kommentera bort kod
Operatorer Specialtecken för jämförelser a == b a är ekvivalent med b a != b a är inte ekvivaltent med b a > b a är större än b a < b a är mindre än b a >= b a är större än eller ekvivaltent med b a <= b a är mindre än eller ekvivalent med b
Operatorer… …fungerar egentligen som funktioner där argument tas emot och returvärden skickas tillbaka Argumenten a och b skickas till funktionen som returnerar resultatet av jämförelsen
Aritmetiska operatorer a + b addition a – b subtraktion a * b multiplikation a / b division a % b modulusdivision
Logiska operatorer a > b || a > c a är större än b eller c a > b && a > c a är större än b och c ! a a är falskt Tänk på att resultatet av en jämförelse alltid har något av värdena sant eller falskt
Tilldelningsoperatorn = a = b a tilldelas värdet av b a = a * b a tilldelas värdet av a multiplicerat med värdet av b a += b a tilldelas värdet av a plus värdet av b Tilldelningsoperatorn kan användas med alla aritmetiska operatorer
Öka på och minska Inkrementering och dekrementering a ++ a ökas på med 1 a -- a minskas med 1
Villkor, uttryck och operatorer Vägval Om det här gäller, gör a Annars om det här gäller gör b Annars gör c
Vägval om (uttryck) sats annars om (uttryck) annars
Vägval, if – else if - else if (pris>40) { print "Oj, vad dyrt!"; } else if ((pris<40) && (pris>20)) { print "Priset är OK!"; else { print "Oj, vad billigt!";
Vägval, switch switch (veckodagNr) { case '1': print "Det måste vara måndag"; case '2': print "Det måste vara tisdag"; case '3': print "Det måste vara onsdag"; case '4': print "Det måste vara torsdag"; case '5': print "Det måste vara fredag"; default: print "Det måste vara helg"; }
Slingor: for for (kontrollvariabel initieras ; villkor ; ändring av kontrollvariabelns värde) sats
For-loopen, exempel for (pris; pris<40; pris++) { if (pris%2==0) { print pris; } else { print "Priset är inte jämnt delbart med 2";
While-loopen while (pris<40) { if (pris%2==0) { document.write pris; else { document.write "Priset är inte jämnt delbart med 2"; } pris++;
While-loopen while (cont=='j') { ... print "Kör igen (j/n)?"; cont = userInput; }
Rekursion Rekursion är en... …lösningsteknik där ett större problem löses genom att reducera det till ett mindre problem av samma form En subrutin, eller procedur, anropar sig själv Förvirrande? "För att förstå rekursion så måste man förstå rekursion."
Rekursion static void countDown(int n) { if (n < 1) { print "Start!"; } else { print "T minus " n " seconds"; countDown(n - 1); countDown(60);
Vektor (array) En lista av likadana typer Varje position i listan har en egen adress, ett eget index vektor[0]='David' Matris = flera vektorer på rad vektor[0][0]='David' vektor[0][1]='1981' vektor[1][0]='Kalle' vektor[1][1]='1984'
Vektorer En vektor kan vara flerdimensionell (matris) twoDimArray[2][1] = 'x' Här fungerar vektorn som en tabell threeDimArray[2][1][4] = 'x' Här fungerar vektorn mer som ett 3-dimensionellt rum En vektor kan innehålla andra vektorer, som i sin tur kan innehålla andra vektorer Här finns möjligheten att ha olika längd på vektorerna inom en viss vektor
Metoder och funktioner En svart låda som tar emot n antal värden som argument och returnerar (vanligtvis) max ett värde I objektorienterad programmering är metod namnet som används En metod definieras i en klass och alla objekt i klassen kan "använda" metoden Värden som tas emot benämns som argument
Metoder och funktioner Funktioner skall... ha lämpliga namn utföra en sak kommenteras
Funktion… function showHide(x) { var e = document.getElementById(x); if (e.style.display=='none') { e.style.display='block'; } else { e.style.display='none';
…och dess anrop <a href="javascript:showHide('e1')"> Visa/dölj
Strukturell programmering Programmet ses som en serie instruktioner som utförs i en sekvens Problemet bryts ned i en serie enkla steg Pascal, Basic mfl
Objektorientering En modell för modern programmering Fokuserar på de delar som programmet är uppbyggt av samt relationen mellan dessa delar Exempel på språk som har stöd för ett objektorienterat angreppssätt: C++, C#, Java och Simula Med ett objektorienterat synsätt ser man på ett datorprogram som en slags modell av den verklighet som programmet ska samverka med Stegvis förfining
Stegvis förfining 1. Problem: Du är hungrig Förfining 1... 1. Skaffa mat 1.1 Om du känner dig lat 1.1.1 Beställ pizza 1.2 annars 1.1.2 Laga maten själv
Förfining 2... 1. Skaffa mat 1.1 Om du känner dig lat 1.1.1 Beställ pizza 1.1.1.1 Ring pizzerian 1.1.1.2 Vänta tills pizzan är färdig 1.1.1.3 Hämta pizzan 1.2 annars 1.1.2 Laga maten själv
Fortsättning: 1.1.2 Laga maten själv 1.1.2.1 För varje ingrediens; kontrollera att tillräcklig mängd finns 1.1.2.2 Om tillräcklig mängd inte finns 1.1.2.2.1 Skriv ingrediens och mängd på en inköpslista 1.1.2.3 Om inköpslistan är tom 1.1.2.3.1 Börja laga maten 1.1.2.4 annars 1.1.2.4.1 Handla ingrediens 1.1.2.4.2 Stryk ingrediens från listan 1.1.2.4.3 Gå till 1.1.2.3
Objektorientering Allt är objekt Allt har egenskaper Ett objektorienterat språk bygger på klasser Klasserna inkapslar i sig data i form av variabler samt metoder/funktioner
Vad är en klass? Här: något som beskriver något annat class="text" .text { egenskaper } En mall för likartade objekt som har likartade egenskaper men (ofta) olika egenskapsvärden Klassen människa har egenskaper som längd, vikt, hårfärg, hudfärg etc En specifik människa har längden 179 cm, vikten 75 kg, hårfärgen mörkblond, hudfärgen vit etc
En klass innehåller också metoder Vad kan en människa göra? Gå Springa Köra bil Kommunicera etc…
Bakgrund till objektorientering Simuleringsprojekt i Oslo på 60-talet Biltrafik Kassaköer i butiker …och liknande Grundtanke: det skulle vara lätt att prata om bilar, kunder och liknande samt deras beteenden Därför infördes begreppen klasser, objekt och attribut (även arv)
Klasser, objekt och attribut Klass = den allmänna mallen för ett objekt Objekt = en instans av klassen Attribut = egenskaper hos objektet Glasklart, eller hur?
Exempel: boksamling Klass = den allmänna mallen för en bok Objekt = en instans av klassen, det vill säga en bok i det här fallet Attribut = egenskaper hos objektet bok
Tänkbara metoder för boksamlingen Skapa ny bok Ge titel Ge författare Ge lånestatus Ändra titel Ändra författare Ändra lånestatus
En viss koppling till XHTML… p.text { color: black; font-family: georgia; } <p class="text">Detta HTML-element är en instans av klassen text. Det har egenskaper i form av svart text och teckensnittet georgia.</p>
Fler exempel När vi talar om en bok i allmänhet talar vi om en klass När vi talar om en specifik bok talar vi om ett objekt Eftersom en klass är en mall för ett objekt kan vi använda mallen för att skapa nya objekt
Kod- och stilkonventioner Sätt aldrig mer än en sats på en rad Om en sats blir för lång låter du den fortsätta på nästa rad, sätt en extra tabb för den delen som hamnar på nästa rad Använd ny rad för klamrarna som inleder och avslutar ett programblock Gör indrag för varje nytt programblock som påbörjas innan det föregående blocket är slut (indentering)
Indentering <receptsamling> <recept> <namn>Pasta Bolognese</namn> <ingrediens> <namn>Köttfärs</namn> <kategori>Kött</kategori> <mangd enhet="gram">400</mangd> </ingrediens> <namn>Krossade tomater</namn> <kategori>Grönsaker</kategori> </recept> </receptsamling>
Indentering static void countDown(int n) { if (n < 1) { print "Start!"; } else { print "T minus " n " seconds"; countDown(n - 1); countDown(60);