Grundläggande datavetenskap, 4p Kapitel 6 Programmeringsspråk Utgående från boken Computer Science av: J. Glenn Brookshear 2004-11-29 ITM 1 Innehåll • • • • • 2004-11-29 Historik Programmeringsmönster Subrutiner Kodning OOP – Objektorienterad programmering ITM 2 Första generationens språk • Maskinspråk 156C 166D 5056 306E C000 2004-11-29 ITM 3 Andra generationens språk • Assembler • Identifierare (variabler) – PRICE – TAX – TOTAL 2004-11-29 ITM LD R5,PRICE LD R6,TAX ADDI R0,R5 R6 ST R0, TOTAL HLT 4 Andra generationens språk II • Assemblator – Översätter från ”mnemonics” till maskinkod • Assemblerspråk – Lågnivåspråk – Processorberoende språk 2004-11-29 ITM 5 Tredje generationens språk • Högnivåspråk – – – – FORTRAN COBOL Pascal assign Total theValue Price + Tax C++ Total = Price + Tax • Kompilerare: C, C++, Pascal – Översättare till maskinspråk • Interpreterare: BASIC, (Cint) 2004-11-29 ITM 6 Maskinoberoende och framtiden • 3:e generationens språk ”mer maskinoberoende” • Standardiseringsorgan för programmeringsspråk – ANSI: American National Standards Institute – ISO: International Organisation for Standardisation • Visioner om nya programspråk där man kunde ange en algoritm snarare är koden för algoritmen 2004-11-29 ITM 7 Programspråksutveckling • Programspråkens generationsutveckling från maskinspråk till mänskligt språk 1:a 2:a 3:e 4:e . . . ?? Människan anpassar sig till maskinen 2004-11-29 Maskinen anpassar sig till människan ITM 8 Programmeringsparadigmer (programmvaruutvecklingsparadigmer) 2004-11-29 ITM 9 Imperativt programmeringsmönster • • • • Sekvens av kommandon Traditionella programmeringsmönstret Används av CPU (fetch-decode-execute) Man löser problem med algoritmer Data som ska används i programmet deklareras här. Imperativa satser som beskriver vad som ska hända i programmet 2004-11-29 ITM 10 Deklarativt programmeringsmönster • ”Vad är problemet?” • Man testar hypoteser • Tillämpas vid simulering av t ex ekonomiska system • Programmeraren anger relationer mellan parametrar som ska testas • Nya problemlösande algoritmer inom logiken har gett ett uppsving till detta programmeringssätt 2004-11-29 ITM 11 Funktionsbaserat programmeringsmönster • Black box y = f (x1, x2, x3,...) 16,666… 13, 47, -10 2004-11-29 ITM 12 Funktionsbaserat programmeringsmönster En funktion kan bestå av flera nästlade funktioner som argument till andra funktioner (Find_diff (Find_sum Old_balance Credits) (Find_sum Debits)) 2004-11-29 ITM 13 Objektorienterat Programmeringsmönster • Aktiva objekt – Objektet består av data – Objektet kan själva manipulera data • • • • Moduler Färdiga komponenter Objekt kan kommunicera med varandra Dagens trend 2004-11-29 ITM 14 Traditionell programmering • Behandlar imperativa språk och OOP – Ada, C, C++, C#, FORTRAN, Java, (Pascal) – Appendix D: Bakgrund med ett exempel • Ett program består av ett antal instruktioner (statements) • Tre sorters instruktioner: – Deklarationer – Satser som utför något – Kommentarer 2004-11-29 ITM 15 Datatyper • Heltal int short int 32 bitar 16 bitar • Flyttal float double 32 bitar 64 bitar • Tecken char 8 bitar • Sträng string n · 8 bitar • Boolsk bool 1 bit (16 bitar) 2004-11-29 ITM 16 Variabler och konstanter • Variabel int antal; antal = 75; • Konstant const float moms=0.25; totalPris = pris * (1+moms); • Direktkodning totalPris = pris * 1.25; 2004-11-29 ITM 17 Datastruktur – arrangemang av data • Vektor (array) Index Data 0 1 2 3 4 5 6 7 11,3 13,6 14,8 5,6 5,4 -2,3 -3,4 2,0 float tal[8] tal[0] = 11.3; tal[7] = 2.0 • Sammansatt datatyp 2004-11-29 struct Person { string namn; string adress; int age; }; ITM 18 Aritmetik Tilldelning totalPris = pris *(1+moms); // C++ totalPris := pris *(1+moms); {Pascal} totalPris <- pris *(1+moms); // APL Precedens 2·4 + 6/2 = 11 ”vä till hö” = 7 ”hö till vä” = 14 (Prioritet) Överlagring 2004-11-29 2·(4 + 6)/2 = 10 ”abra” + ”cadabra = ”abracadabra” ITM 19 Kontroll av programflödet: val if if(B) s1; else s2; 2004-11-29 if(tal==3) s1; else s2; ITM 20 Programflöde: Upprepning while while(B) s1; 2004-11-29 ITM 21 Kontroll av programflödet: val II switch switch (N) { case C1: s1; case C2: s2; case C3: s3; }; 2004-11-29 ITM 22 Programflöde: Upprepning II for for(int Count=1; Count<4;Count++) body; 2004-11-29 ITM 23 Strukturerad programmering If, while,switch, for m.fl. används för att skapa strukturerade program Ostrukturerat Strukturerat 2004-11-29 10 20 30 40 50 60 70 Goto 40 total = price +10; Goto 70 if price < 50 then goto 60 Goto 20 total = price + 5 stop if price< 50 then Total = price + 5 else Total = price + 10 stop ITM 24 Kommentarer • Kommentarer ökar programmets läsbarhet int tal = 9/6; // OBS! Heltalsdivision // moms ges som ett decimaltal t ex moms = 0.25) float totalpris = pris*(1+moms); /* Dessa tecken kommenterar ett avsnitt. Inte bara en rad */ // Dessa tecken kommenterar resten av raden 2004-11-29 ITM 25 Subrutiner • Procedurer – – – – void PrintCheck(”Stefan”, 2000); Delprogram Lokala variabler Globala variabler Parametrar • Funktioner int PrintCheck(”Stefan”, 2000); – En funktion returnerar ett svar – För övrigt som en procedur 2004-11-29 ITM 26 Anrop av en procedur/funktion 2004-11-29 ITM 27 In- och utmatning Pascal ReadLn(tal); WriteLn(tal); C++ cin >> tal; cout << tal; 2004-11-29 ITM 28 Kompilera, länka och ladda 1. Kompilera en eller flera källkodsfiler till maskinkod (objektkod) 2. Länka och ladda en eller flera objektkod-moduler till exekverbar kod 3. Ladda den exekverbara koden till arbetsminnet a.cpp Kompilering b.cpp Kompilering 2004-11-29 a.obj b.obj ITM Länkning a.exe Ladda Körning 29 Översättningsprocessen 1. Källkoden läses teckenvis tills en token är bildad 2. Token skickas till Parsern 3. Parsern frågar efter nya tokens tills att en sats har bildats 4. Kodgeneratorn översätter satsen till maskinkod 2004-11-29 ITM 30 Programutvecklingsmiljöer • • • • • • Editor Kompilator Körning Debug Administration av stora program Exempel på utvecklingsmiljöer – – – – 2004-11-29 C++ Builder Visual C++ Delphi Visual Basic ITM 31 Objektorienterad programmering • I objektorienterad programmering (OOP) används enheter som kallas objekt • Ett bankkonto: – – – – – Kontonummer Saldo Uttag Insättning Visa saldo 2004-11-29 Olles konto kontoNr: "121314" saldo: 120,45 uttag() insättning() visaSaldo() ITM Evas konto kontoNr: "112233" saldo: 3200,00 uttag() insattning() visaSado() 32 OOP II • Bankkontot är ett objekt – Data • Kontonummer • Saldo – Operationer på data - metoder • Uttag • Insättning • Visa saldo • En klass är en mall för hur ett objekt är uppbyggt 2004-11-29 ITM 33 Klass • Klassdefinition ( C++ ) class Konto { private: int kontoNr; float saldo; Evas konto kontoNr: "112233" saldo: 3200,00 uttag() insattning() visaSaldo() public: void uttag(float ut); void insattning(float in); void visaSaldo(void); }; 2004-11-29 ITM 34 Klass II • Klassens metod-definitioner void Konto::uttag(float ut) { saldo = saldo – ut; } void Konto::insattning( float in) { saldo = saldo + in; } void Konto::visaSaldo(void) { cout << ”Kontots saldo är ” << saldo; } 2004-11-29 ITM 35 Klass och objekt • Skapa och använd objekt Konto olle; Konto eva; olle.insattning(120.45); eva.insattning(3200); olle.visaSaldo(); eva.visaSaldo(); 2004-11-29 // -> 120.45 kr // -> 3200.00 kr ITM 36 Kännetecken för OOP • Inkapsling – – – – Endast objektet kommer åt en skyddad egenskap. private, public cout << konto1.saldo är INTE tillåtet. konto1.visaSaldo() är tillåtet. • Arv – En klass kan ärva egenskaper från en annan klass. – Klassen Personbil kan ärva från t.ex Fordon. • Polymorfism – Samma meddelande (metod) ger olika svar från olika klasser. – Triangel.rita() – Kvadrat.rita() 2004-11-29 ITM 37