1 / 116

Grundkurs i programmering

Grundkurs i programmering. Kursens WEB-sidor: http://www.cs.hut.fi/Opinnot/T- 106 . 217. Vad är en dator?. Minne: det ställe där program och data finns under körning av program Mikroprocessor: söker programkod och data ur minnet och utför operationer med dem

odin
Download Presentation

Grundkurs i programmering

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Grundkurs i programmering • Kursens WEB-sidor:http://www.cs.hut.fi/Opinnot/T-106.217

  2. Vad är en dator? • Minne: det ställe där program och data finns under körning av program • Mikroprocessor: söker programkod och data ur minnet och utför operationer med dem • (körbart) Program: en serie binära instruktioner som utförs av mikroprocessorn • Operativsystem: tillåter olika program att köras

  3. Skapande och körning av program • Program skrivs med ett icke-binärt språk som är förståeligt för människor men inte för datorn • Programmeringsspråk: “C”, C++, Java, ADA, Pascal, Fortran, APL, COBOL, ... • För att program skall kunna köras, måste programmeringsspråkets instruktioner överföras till maskininstruktioner.

  4. Kompilering vs. tolkning • Ett kompilerat program är färdigt att köras på en viss datamaskin • I ett tolkat program skapas maskin-instruktionerna under programmets körning • Java är en blandning av kompilation och tolkning • Resultatet av Java-kompilering: pseudo-instruktioner (byte-codes)

  5. Virtualmaskin • Pseudo-instruktionerna är maskin-instruktioner för en “virtuell maskin” • En virtuell maskin är oftast i praktiken ett program som kan tolka pseudo-instruktioner till maskininstruktioner • Kompilerade Java-program är inte maskinspecifika, men virtualmaskinerna är det

  6. Minimalt Java-program public class Hello { public static void main(String[] args) { System.out.println("Kalles kaviar is good"); } } • Bör sparas i fil vid namn “Hello.java” (enligt klassnamnet) • Kompileras med kommandot “javac” följt av namnet på filen/filerna, e.g. “javac Hello.java” • Körs med kommandot “java” följt av klassens namn, e.g. “java Hello” • Programkörning startas alltid från main-metoden i den givna klassen

  7. Vad är Java? Varför Java? • Objektorienterat • Lätt att lära sig (bl.a. få instruktioner, automatiskt frigörande av minne, ...) • Java-program kan köras på s.g.s. alla operativsystem samt i WEB-program • Standardiserade klassbibliotek • Integrerar ny teknologi genom nya klassbibliotek

  8. Objekt • Har egenskaper som sparas i fält (field) eller instansvariabler (instance variable) • Har funktionalitet som definieras av dess metoder • Ett objektorienterat program består av objekt som kommunicerar med varandra • Objekts egenskaper definieras med hjälp av klasser. T.ex. klassen “Stol” skulle definiera stolars egenskaper, klassen “Flygplan” flygplans egenskaper etc.

  9. Klassdiagram • Klassdiagram används för att beskriva ett programs objekt samt objektens kopplingar till varandra • Standarden UML (Unified Modeling Language) den mest använda • Objekt beskrivs med ”lådor” som innehåller tre delar: • Klassnamn (objekt är s.k. instanser av en klass) • Lista på objektets egenskaper (fält) • Objektets metoder

  10. Klassdiagram: exempel 1 public class Flight { private int flightNumber; private Date departureTime; private int flightDurationMinutes; public Date delayFlight(int numberOfMinutes) {/*...*/} public Date getArrivalTime() {/* code here */} } Flight flightNumber: Integer departureTime: Date flightDurationMinutes: Integer delayFlight(numberOfMinutes: int): Date getArrivalTime(): Date

  11. Klassdiagram: exempel 2 public class AirPort { private String name; private Flight[] flights; // Från 0..* referensen! public void addFlight(Flight f) {/*...*/} public int getNumberOfFlights() {/* code here */} } Flight AirPort flightNumber: Integer departureTime: Date flightDurationMinutes: Integer name: String 1 0..* addFlight(f: Flight) getNumberOfFlights(): int delayFlight(numberOfMinutes: int): Date getArrivalTime(): Date OBS! Måste läggas till ”Flight”

  12. Kommentarer • Flera rader eller i mitten av en rad /* Kommentar */ • I slutet av en rad // Kommentar • För dokumentation menad kommentar /** Kommentar för dokum. */

  13. Variabeldeklarationer • En variabel har • ett namn • en typ • ett värde • en “synlighet”, t.ex. “private” • Variabelnamn börjar med liten bokstav • Exempel: int i = 56; // Obs semikolon!

  14. Variabeltyper • Grundtyper (primitive type): • Heltal (int, long, short, byte) • Flyttal (double eller float) • Sann/falsk information (boolean) • Teckensträngar (String) • Tecken (char) • Andra typer med hjälp av Javas standardklasser eller egna klasser, t.ex. String, Date, Flight etc.

  15. Metoder • Definierar objekts funktionalitet • Kallas “underprogram”, “funktioner” eller “procedurer” i icke objektorienterade språk • Definition: deklarationer värdetyp namn(parametrar) { algoritm }

  16. Metoddeklarationens delar • Deklarationer: • synlighet (public, private, protected), mera om detta senare • klass- eller objektspecifik (static eller inte) • Värdetyp: typen på det resultat som metoden returnerar. “void” om ingenting. • Namn: fritt valbart, börjar med liten bokstav • Parametrar: namn och typ för formella parametrar • Metodens namn, parametrarnas typ och antal definierar metodens signatur

  17. Parametrar • För att metoderna skall kunna göra olika saker i olika situationer • Exempel: ändra på ett flygs starttid, den nya starttiden ges som parameter • Formella parametrar existerar endast under metodens utförande, deklareras i metodens signatur • Aktuella parametrar ger startvärdet för de formella parametrarna då man kallar på en metod

  18. Planering av klasser • ”Substantiv-metoden”: • Formulera fritt, men så utförligt som möjligt vad programmet skall göra • Använd alla substantiv som kandidater för klasser • Överblivna substantiv blir ofta egenskaper • Verbala beskrivningen är s.g.s. aldrig komplett • Exempel: Reservationssystem för klassrum: Skolor innehåller klassrum som kan reserveras av skolans lärare. Lärare reserverar klassrum för en viss klass och för ett visst tidsintervall. Klassrum har en given kapacitet som måste vara större än klassens storlek.

  19. Substantiv-metoden, exempel • Reservationssystem för klassrum: Skolor innehåller klassrum som kan reserveras av skolans lärare. Lärare reserverar klassrum för en viss klass och för ett visst tidsintervall. Klassrum har en given kapacitet som måste vara större än klassens storlek. • Lämpliga klasser märkta med fet stil, egenskaper utan kursivstil • Relationer mellan klasser samt deras kardinalitet framgår inte ur denna beskrivning • Egenskaper såsom lärares och klassers namn finns inte med i beskriviningen även om de s.g.s. säkert behövs

  20. Implementering av metoder • Skrivs inom programblocket som följer metodens signatur • Programblock: • Startar med en öppnande klammer och avslutas med en stängande klammer • Grupperar ihop flera programsatser, t.ex. alla satser som hör till en metod • Inget semikolon efter block! • Klamrar används även för att markera början och slutet på en klassdeklaration

  21. Programsats • Innehåller ett antal instruktioner, avslutas alltid med semikolon ’;’ • Exempel: int var = 50; // Deklarera variabel “var”, // initialisera värde till 50 var = var + 10;// Öka variabelns värde med 10

  22. Metoder som returnerar ett värde • Innehåller åtminstone en “return”-sats • Instruktionen ”return” returnerar metodens resultat och avslutar metoden, exempel: return var; // Returnera “var”:s värde • Kan anropas direkt t.ex. i matematiska uttryck: double k = f(x) + g(y - 3.14) - 1; • Både funktionerna f() och g() returnerar talvärden • Ifall metodens returtyp är “void” behövs ingen “return”-sats, men ifall metoden avslutas före den sista instruktionen används “return;” utan värde

  23. Nyckelordet this • Refererar till fält eller metoder hos det objekt som metoden anropats för, exempel: public class Flight { private int flightDurationMinutes; public int getFlightDurationMinutes() { return this.flightDurationMinutes; } } • Användning av “this” är inte obligatoriskt här, men rekommenderas för bättre läsbarhet! • Metoder anropas via “punkt-notationen”, exempel: Flight f = new Flight(); // “new” skapar nytt objekt /* Skriv ut på skärmen flygtiden för flyg “f” System.out.println(f.getFlightDurationMinutes());

  24. Skapande av nya objekt • Nya objekt skapas med nyckelordet ”new”, exempel public class FlightTest { public static void main(String[] args) { Flight f1; // Deklarera lokal variabel /* Annan lokal variabel, skapa objekt */ Flight f2 = new Flight(); f1 = new Flight(); // Skapa nytt flyg int ftime = f1.getFlightDurationMinutes(); ftime = ftime + f2.getFlightDurationMinutes(); System.out.print(“Sammanlagd flygtid:”); System.out.println(ftime); } } • Nya objekts egenskaper har ”default”-värden • f1 och f2 är referenser till Flight-objekt

  25. Konstruktormetoder • En speciell konstruktormetod kan initialisera det nya objektet, exempel: public Flight() { width = 100; height = 100; } • Konstruktormetoder har samma namn som klassen, ingen returvärdestyp • Den s.k. ”default-konstruktorn” har inga parametrar, existerar ”by default”. • ”default-konstruktorn” kan ersättas genom att skapa en egen konstruktor utan parametrar • Konstruktormetoder kan även ha parametrar för att initialisera instansvariabler till givna värden

  26. ”Accessor” metoder • Metoder för att komma åt och ändra på värdet på en instansvariabel • Deras namn börjar med get och set, vanligtvis följt av instansvariabelns namn • Get-metoder returnerar instansvariabelns värde • Set-metoder tar en parameter, vars värde blir det nya värdet för instansvariabeln

  27. Lokala variabler och parametrar • Lokala variabler skapas och existerar endast under en metods körning (medan instansvariabler existerar så länge objektet existerar) • Metodens parametrar är automatiskt lokala variabler • Metoders parametrar initialiseras till de värden som ges då metoden kallas, exempel: Flight f = new Flight(); // skapa nytt objekt /* Ändra flygtiden till 90 minuter */ f.setFlightDurationMinutes(90); • Lokala variabler deklareras på samma sätt som instansvariabler, men utan synlighet, exempel: int localVariable = 22; • “this” kan användas för att skilja mellan lokala variabler och instansvariabler med samma namn

  28. Objekt som parametrar • Egna klasser kan användas på samma sätt som standardtyper • Objektparametrar är referenser till objekt (referensparametrar) • Objekt som förmedlas som parametrar kan modifieras inne i metoden • Grundtypsparametrar (int, char, double, ...) är värdeparametrar (endast kopior)

  29. Objekt som returvärden • Objekt kan returneras på samma sätt som standard datatyper • En referens returneras • Använd this för att returnera metodens “aktuella” objekt (det objekt som metoden anropats för)

  30. Överlagring av metoder • “Overloading” på engelska • Flera metoder med samma namn, men med olika formella parametrar (typ eller antal), vilket ger dem unik signatur • Den metod som används beror på de aktuella parametrarnas typ och antal • Används ofta för konstruktormetoder • En konstruktormetod kan kalla på en annan med nyckelordet “this”, exempel: public Flight(int flightTime) { this(); // Kalla på default-konstruktorn … // Gör annat nyttigt }

  31. Matematiska operationer • Operatorer: + - * / % • Användning: hojd = 5; bredd = 10; area = hojd*bredd; tal = 34/3;

  32. Kortare skrivsätt • Även ++tal eller tal-- kan användas tal++; // tal = tal + 1; • Notationer += -= *= /=, exempel: tal *= 2; // tal = tal *2;

  33. Logiska uttryck • Ger resultat som är sanna/falska, typ boolean • Jämförelseoperatorer: > // Större än >= // Större än eller lika med < // Mindre än <= // Mindre än eller likamed == // Lika med != // Inte lika med

  34. Logiska operatorer && // OCH || // ELLER ^ // Exklusiv ELLER (xor) ! // Negation

  35. Valsituationer (IF-satsen) • Enkel: if ( villkor) sats • Alternativ: if ( villkor ) sats1 else sats2 • Programsatser kan alltid ersättas av programblock (inte endast för “if”)!

  36. Villkorssats • Exempel: int a = 1; int b = ( a > 0 ? 5 : 10); // b får värdet 5 • Parenteserna rekommenderade, inte obligatoriska • Praktiskt i många situationer, kortare än if-satser

  37. “switch”-satsen • Exempel: int antal; switch ( antal ) { case 0: System.out.println(“noll”); break; case 1: System.out.println(“ett”); break; case 2: System.out.println(“två”); break; } • Även “default” möjligt • Kom ihåg “break”!

  38. Tabeller • För att spara flera värden av samma typ • Deklaration av tabellvariabel med [], exempel: int[] itab = new int[10] //Heltalstabell med 10 element • int[] itab: deklaration av variabel • new int[10]: skapar tabell som kan innehålla 10 heltal

  39. Ändring av värde i tabell • I Java startar indexeringen från noll • Exempel: itab[5] = 55; // Ändrar värdet på SJÄTTE elementet • Åt andra hållet: int a = itab[2] // “a” får värdet på TREDJE elementet • Möjligt att räkna ut index med uttryck: a = itab[a*2];

  40. Initialisering av tabeller • Exempel: int[] itab = {5, 10, 15, 10, 25}; // Skapar en tabell med 5 heltal • Om ingen initialisering görs är alla värden noll från början

  41. Tabeller är objekt • Alla tabeller har en egenskap “length” som anger dess storlek • Exempel: int[] itab = new int[100]; System.out.println(itab.length); // Skriver ut 100

  42. Matriser • Exempel: int[][] matrisA = new int[2][2]; // Skapar 2x2 matris • Initialisering: int[][] matrisB = {{1, 2}, {3, 4}, {5,6}}; // Skapar 3x2 matris • matrisB[0] betyder första raden • matrisB[0][1] betyder andra elementet i första raden

  43. Flerdimensionella tabeller • Hakparentesernas placering i deklarationen har ingen betydelse: double[][][] rymd = new double[10][10][10]; // som double[][] rymd[] = new // double[10][10][10]; // och double rymd[][][] = new // double[10][10][10]; • Flerdimensionella tabeller kan innehålla element av olika storlek

  44. Tabeller av objekt • Tabeller av objekt av egna klasser, exempel: Rectangle[] rtab = new Rectangle[5]; // Tabell av 5 referenser till // Rectangle-objekt • OBS! Inga rektanglar skapades, endast en tabell av referenser till rektanglar. • Tabeller är objekt -> möjligt att göra tabeller av tabeller (matriser, ...)

  45. Tabeller av teckensträngar • Exempel: String[] tabell = new String[5]; // Deklarerar tabellvariabel och // skapar tabellen • Initialisering: String[] stab = {“kalle”, “ville”, “pelle”}; • String[] args i main-metoden är alltså en tabell av teckensträngar

  46. Metoder som returnerar tabeller • Returnerar i praktiken en referens till ett tabellobjekt • Tabellobjektet kan ha skapats i metoden eller dess referens kan ha givits som parameter till metoden

  47. Upprepning med for-sats for ( startoperationer ; forts.test ; framskridning) det som skall upprepas • Exempel: int i; for ( i = 0 ; i < 6 ; i++ ) System.out.println(i); • Annan version med lokal räknarvariabel, synlig endast inom upprepningen: for ( int i = 0 ; i < 6 ; i++ ) System.out.println(i);

  48. Om variablers synlighet • Grundprincip: variabler är synliga endast inom det programblock där de deklarerats! • Den “senast deklarerade variabeln” kör över andra variabler med samma namn • Exempel, “x” deklarerad som instansvariabel samt som två olika lokala variabler i skilda programblock : public class A { private int x = 45; public void m() { { int x = 12; System.out.println(x); // Skriver ut 12 } { int x = 6; System.out.println(x); // Skriver ut 6 System.out.println(this.x); // Skriver ut 45 } } }

  49. Upprepning med while-sats while ( fortsättningstest ) programsats eller programblock • Exempel: int i = 0; while ( i < 6 ) { System.out.println(i); i++; }

  50. “do-while” upprepning do programsats eller programblock while ( fortsättningsvillkor); • Exempel: int i = 0; do { System.out.println(i); i++; } while ( i < 6 ); // OBS! “;”

More Related