1.04k likes | 1.1k Views
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 lagras Mikroprocessor: söker programkod och data ur minnet och utför operationer med dem
E N D
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 lagras • 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
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.
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 kompilering: pseudo-instruktioner (byte-codes)
Virtualmaskin • Pseudo-instruktionerna är maskin-instruktioner för en “virtuell maskin” • En virtual maskin är oftast i praktiken ett program som kan tolka pseudo-instruktioner till maskininstruktioner • Kompilerade Java-program är inte maskinspecifika, men virtualmaskinerna är det
Minimalt Java-program public class Hello { public static void main(String[] args) { System.out.println("Kalles kaviar is good"); } }
Vad ä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
Javas historia • ca. 1990: Sun börjar utveckla ett “lätt” språk för handdatorer och liknande • ca. 1993: WWW uppkommer, Sun siktar in sig på dess tillämpningar • 1995: Java version 1.0 publiceras • 1997: Java version 1.1 publiceras • 1998: Java version 1.2 (Java 2) publiceras • 2000: Java version 1.3 publiceras
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. */
Variabeldeklarationer • En variabel har • ett namn • en typ • ett värde • Variabelnamn börjar med liten bokstav • Exempel: int i = 56; // Obs semikolon!
Variabeltyper • Heltal (int) • Flyttal (double eller float) • Sann/falsk information (boolean) • Teckensträngar (String) • Tecken (char)
Matematiska operationer • Operatorer: + - * / % • Användning: hojd = 5; bredd = 10; area = hojd*bredd; tal = 34/3;
Kortare skrivsätt • Även ++tal eller tal-- kan användas tal++; // tal = tal + 1; • Notationer += -= *= /=, exempel: tal *= 2; // tal = tal *2;
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
Logiska operatorer && // OCH || // ELLER ^ // Exklusiv ELLER (xor) ! // Negation
Valsituationer (IF-satsen) • Enkel: if ( villkor) sats • Alternativ: if ( villkor ) sats1 else sats2
Programblock • Grupperar ihop flera programsatser • Startar med en öppnande klammer och avslutas med en stängande klammer • Inget semikolon efter block!
Klasser och objekt • En klass är en “fabrik” som skapar objekt • Klassen beskriver objektens egenskaper samt funktioner • Exempel: alla fönster på dataskärmen är objekt som skapats med “fabriken” (klassen) fönster • Ett objektorienterat program består av objekt som kommunicerar med varandra
Objekt • Har egenskaper som sparas i instansvariabler (instance variable) • Har funktionalitet som definieras av dess metoder
Instansvariabler • Instansvariabler deklareras i klassdefinitionen • Lokala variabler deklareras inne i metoder • Variabeldeklarationen likadan för båda (typ, namn) • Instansvariablers synlighet kan också definieras (private, protected, public) • Nyckelordet final tillåter variabeln att ges värde en enda gång under programmets körning • Varje objekt har egen kopia av instansvariabler
Skapande av objekt • Ett nytt objekt skapas med nyckelordet new • Exempel: Window w = new Window() • där Window är namnet på en klass • där variabeln w är en “referens” eller “pekare” till det skapade objektet
Metoder • Kallas “underprogram”, “funktioner” eller “procedurer” i icke objektorienterade språk • Definition: deklarationer värdetyp namn(parametrar) { algoritm }
Metoddeklarationens delar • Deklarationer: • synlighet (public, private, protected) • 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
Metoders användning • Programmets struktur blir enklare att förstå då det delats upp i metoder • Programmet blir kortare eftersom upprepning av kod undviks • Modifiering av programmet blir lättare eftersom algoritmen finns på ett enda ställe
Parametrar • För att metoderna skall kunna göra olika saker i olika situationer • Exempel: metod för att räkna ut medelvärdet av talen i en tabell • Formella parametrar existerar endast under metodens utförande • Aktuella parametrar ger startvärdet för de formella parametrarna
Då programmet startas, laddas program-instruktionerna i minnet Också ”globala variablers” minne reserveras Stack: minne som används för lokala (metod-)variabler samt metodparametrar ”heap”: minne som kan reserveras dynamiskt, i Java med operatorn new. Minneshantering i ett program Typisk illustration av minnesanvändning för ett program ”heap”, växer neråt, nuförtiden ofta i ”globala minnet” fritt minne stack, växer uppåt programinstruktioner, globala variabler (i Java klassvariabler)
Metoder som returnerar ett värde • Innehåller åtminstone en “return”-sats • Kan användas direkt t.ex. i matematiska uttryck: double k = f(x) + g(y - 3.14) - 1; • Både funktionerna f() och g() returnerar realtal (double)
Konstruktormetoder • En speciell konstruktormetod kan initialisera det nya objektet, exempel: public Window() { width = 100; height = 100; } • Konstruktormetoder har samma namn som klassen, ingen returvärdestyp • Konstruktormetoder kan även ha parametrar för att initialisera instansvariabler till givna värden
”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
Överlagring av metoder • “Overloading” på engelska • Flera metoder med samma namn, men med olika formella parametrar (typ eller antal) • Den metod som används beror på de aktuella parametrarnas typ och antal
Nyckelordet this • Refererar till “detta” objekt • En instansmetod refererar till ett visst objekt, det som finns framför punkten då metoden kallas på, exempel: a.visaPaSkarmen()// a “detta” objekt för // metoden “visaPaSkarmen()”
Användning av this • Om klassen Rectangle har egenskapen height, så kan metoden “setHeight” skrivas: public void setHeight(double h) { this.height = h; // Samma som height = h } • Orsaker till användning av this: • Klarare när instansvariabler används • Returnera en referens till “detta” objekt
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)
Objekt som returvärden • Objekt kan returneras på samma sätt som standard datatyper • En referens returneras
Klassdiagram enligt UML-notation • Sätt att beskriva klassers och objekts relationer i ett objekt-orienterat program • Använder ”lådor” med tre sektioner: • Klassens namn • Instansvariablers namn och typ • Metoders namn, parametrar och deras typ samt returvärdets typ • Linjer mellan olika klasser indikerar referens-relation mellan objekt av olika klasser samt referensernas antal
Klass • Har egenskaper som sparas i klassvariabler (class variable) • Har viss funktionalitet som definieras av klassmetoder (class method) • Nyckelordet static identifierar dem • Både klassvariabler och klassmetoder kan vara privata eller allmänna (private eller public) • Med nyckelordet final deklareras konstanter, vilka egentligen är klassvariabler vars värde inte kan ändras
Klassvariabler och klassmetoder • Objekts egenskaper definieras med hjälp av instansvariabler och instansmetoder • Även klasser kan ha egenskaper, som definieras med hjälp av klassvariabler och klassmetoder • Instansvariabler och –metoder kallas på med notationen objref.varNamn och objref.metNamn() • Klassvariabler och–metoder kallas på via klassens namn, såsom System.in, Math.PI och Math.sin()
Initialisering av klassvariabler • Kan göras i ett specialblock, exempel: public class StaticExample { static int statiskVariabel; static { statiskVariabel = 50; } } • Utförs då klassen laddas in i minnet (vanligtvis då programmet startar)
Klasser som funktionsbibliotek • Exempel: klassen Math • Används endast för mycket specifika behov, t.ex. globala konstanter, variabler och metoder • En klass som deklarerats med final kan inte härledas (metoder kan inte ersättas) • En privat konstruktor gör att inga objekt av klassen kan skapas
Matematiska funktioner i Java • Statiska metoder/konstanter i klassen Math • Exempel: Math.E // talet ‘e’ Math.PI // talet pi Math.abs // absoluta värdet Math.sin(); Math.cos(); Math.tan; Math.exp() o.s.v.
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
Ändring av värde i tabell • 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];
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
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
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
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
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, ...)
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
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
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);