Javaprogrammering 5p examinator: Ragnar Nohre, labass: Lasse Öberg Lektioner med Ragnar Ca 3 veckor kravspec Projektarbete med Lasse Ca 4 veckor Proj redovisning Tentamen (inkluderar ej grafiska klassbibliotek etc) 3 betyg: tentamen, projekt, kursen som helhet
idag Java och C++ Javaprogrammering en elementär introduktion övningar
Ett programmeringsspråk från SUN som påminner om C++ Java och C++ Ett programmeringsspråk från SUN som påminner om C++ JAVA är plattformsoberoende säkrare enklare Å andra sidan är C++ snabbare mer hårdvarunära fler finesser
Plattformsoberoende Kompileras till byte-code kan exekveras av JVM (java virtual maskin). En emulator som finns implementerad på alla betydande plattformar Innehåller standardklasser för GUI (graphical user interface) Trådhantering Kommunikation
Säkrare Man kan konfigurera JVM så att det blir omöjligt att läsa/skriva från hårddisken, etc Förenklad minneshantering gör att programmen ofta innehåller färre buggar
Enklare Ingen pekararetmetik Inga templates Ingen operatoröverlagring Ingen delete, istället finns Garbage Collection
eftersom allt är pekare Objekt allokeras alltid på heapen Alla objektvariabler är egentligen pekare C++ Java Complex val(2, 3); // Går ej i java Complex* pVal = new Complex(2, 3); // ytlig kopia Complex* pSamma = pVal; float r = (*pSamma).real( ); Complex val = new Complex(2, 3); // ytlig kopia Complex samma = val; float r = samma.real( ); eftersom allt är pekare behövs inga *stjärnor
Objekt allokeras alltid på heapen Alla objektvariabler är egentligen pekare C++ Java Complex arr[100]; // Går ej i java Complex** pArr=new Complex*[100]; for (int i=0 ; i<100; ++i) pArr[i] = new Complex( ); Complex [ ] arr=new Complex[100]; for (int i=0 ; i<100; ++i) arr[i] = new Complex( );
C++ programmerare undviker ofta ytliga kopieringar... ”Homer Simpson” B pStr Farhågor: Tänk om B deletar strängen. Då kommer A:s container att peka på ett ogiltigt objekt! Tänk om B ändrar strängen. Då kanske A:s container pekar på ett felaktigt namn!
Java programmerare kopierar nästan alltid ytligt.. ”Homer Simpson” B Ingen deletar strängen. Den tas bort först då ingen längre pekar på den. Ingen ändrar strängen. Strängar är omuterbara. pStr
Sammanfattning av de Största skillnaderna Javaobjekt allokeras alltid från heapens fria minne om de lades på stacken skulle de ju försvinna vid return Javaobjekt deletas aldrig manuellt Garbage collection Javaobjekt är ofta immutable (ej ändringsbara) Riskfritt med ytliga kopieringar
idag Java och C++ Javaprogrammering en elementär introduktion övningar
Javaprogrammering En elementär introduktion Hello world / enklast möjliga program / kompilering och exekvering Sekvenser / exekveringsordning / krullparanteser /variabelscoop Selektion / vilkorliga satser Iteration / while- och for- looparna Matriser (vektor array fält tabell) Klasser och objekt new skapar objekt exempel på objekt medlemsfunktioner konstruktor- och toString- metoderna static: saker som tillhör klassen istället för objektet
Ett enkelt program MyProg.java class MyProg { public static void main(String[] args) System.out.println(”Hello, world”); } Ett program består normalt av många klasser En klass/fil Klassnamn = filnamn Exakt en main-funktion Skillnad på versaler och gemener javac MyProg.java java MyProg Hello, world
in-parametrar class Test { public static void main(String[] args) System.out.println(”Hello” + args[0] + ”! How are you?”); } javac Test.java java Test Ragnar Hello Ragnar! How are you?
Sekvens class Seq { public static void main(String[] args) int a = 7; int b = a; a = 100; System.out.println(”variablen a har värdet ” + a ); System.out.println(”variablen b har värdet ” + b ); } // a är en ny heltalsvariabel som får värdet 7 // b är en ny heltalsvariabel som får värdet 7 // a får ett nytt värde javac Seq.java java Seq variabeln a har värdet 100 variabeln b har värdet 7
Sekvens class Seq { public static void main(String[] args) int a = 7; int b = a; a = 100; System.out.println(”variablen a har värdet ” + a ); System.out.println(”variablen b har värdet ” + b ); } Sekvensen utförs rad för rad, uppifrån och ned Sekvensen står innanför krullparanteser
scope = giltighet Förbjudet! variabeln a finns ju redan! { int a = 7; int b = 100; } Förbjudet! variabeln a finns ju redan!
scope = giltighet { variabler som deklareras efter denna krullparantes } variabler som deklareras efter denna krullparantes glöms bort här { variabler som deklareras här glöms nu }
Selketion / vilkorliga satser princip: if (vilkor) sats; else sats; myndig = false; if (ålder>=18) myndig = true; exempel: if (ålder>=18) myndig = true; else myndig = false;
En sats kan alltid bytas ut mot en sekvens if (a>b) { c = 33; a = 0; } else { c = 15; b= 10; exempel: Överkurs: switch-sats
while-loop utför sats så länge vilkor är sant dvs noll eller flera gånger princip: while (vilkor) sats; exempel: while (ix<100) { ... ... ix++; } // Då vi når denna rad är ix>=100
for-loop Överkurs: do-loop, break, continue for (int ix = 7 ; ix<100 ; ++ix ) { ... ... } int ix = 7; while ( ix<100 ) { ... ... ix++; } int ix = 7; ix<100 int ix = 7 ix<100 ++ix ... ... ++ix Överkurs: do-loop, break, continue
matriser (vektor, fält, array) en-dimensionell matris minMatris[0] n st element minMatris[n-1]
matriser Exempel Skapa en en-dimensionell heltalsmatris med 20 element och fyll den med 5:ans multiplikationstabell (5,10,...100) myMat[0] int [ ] myMat = {5,10,15,20,25,30,35,40,45,50, 55,60,65,70,75,80,85,90,95,100 }; bra: 5 10 15 20 25 30 90 95 100 int [ ] myMat = new int[20]; for (int i=0 ; i<20 ; ++i) myMat[i] = (i+1)*5; bättre: 20 int [ ] myMat = new int[20]; for (int i=0 ; i<myMat.length ; ++i) myMat[i] = (i+1)*5; ännu bättre: myMat[19]
matriser Exempel Spelkort: Om färg=0 och valör =1 : skriv ut hjärter Ess om färg =1 och valör=2 : skriv ut spader två om färg =2 och valör =11: skriv ut klöver knekt osv String [ ] strFärg = { ”hjärter”, ”spader”,”klöver”,”ruter” }; String [ ] strValör= {”??”, ”Ess”, ”två”, ”tre”, ”fyra”, ”fem”, ”sex”, ”sju”, ”åtta”, ”nio”, ”tio”, ”knekt”, ”dam”, ”kung”}; System.out.println( strFärg[färg] + ” ” + strValör[valör] );
klasser och objekt class Person objekt av typ Person boy class Person m_name = Bart m_born = 1993 age(..) m_name = Lisa m_born = 1995 m_name = Homer m_born = 1968 boy girl man class Person { String m_name; int m_born; ... int age(int dettaÅr) { return dettaÅr - m_born } } Varje objekt av typ Person innehåller dessa variabler och funktioner
objekt skapas med new int i = 777; double length = 132.5; ”Bart” objekt int i = 777; double length = 132.5; booleaan ok = false; String name = new String(”Bart”); Kortlek toy = new Kortlek(); i length ok name toy 777 132.5 00000
Övningsexempel på objekt Ett objekt av typ Kortlek Representerar en kortlek Innehåller Spelkortsobjekt Enkel att använda giveCard() -returnerar ett Spelkort-objekt size() -returnerar antalet kvarvarande kort shuffle() -blandar leken Kortlek giveCard() size() shuffle() ev krånglig innuti Enkel utanpå! med objektorientering kapslar man in krångliga detaljer
Andra exempel på objekt String Ett objekt av typ String Representerar en textsträng innehåller funktioner som: -Hittar delsträngar -Gör om till versaler -etc, se String.html Color Ett objekt av typ Color Representerar en färg innehåller funktioner som: -Gör färgen ljusare -mörkare -etc, se Color.html
Konstruktor- och toString-metoderna En normal metod kan heta vad som helst och den anropas manuellt av programmeraren Men vissa metoder anropas automatiskt vid speciella tillfällen tex konstruktor-metoden -Måste ha samma namn som klassen -Anropas automatiskt då ett objekt skapas -Uppgift: att initiera objektet toString() – metoden -Måste heta toString() -Anropas tex då man skriver ut ett objekt på skärmen -Uppgift: att returnera en ”sträng representation” av objektet
Repetition: klasser och objekt class Person objekt av typ Person m_name = Bart m_born = 1993 age(..) m_name = Lisa m_born = 1995 m_name = Homer m_born = 1968 boy girl man class Person { String m_name; int m_born; ... int age(int dettaÅr) { return dettaÅr-m_born } }
static–variabler är klassvariabler class Person m_nbr = 6000000000 boy.m_nbr girl.m_nbr man.m_nbr Person.m_nbr 6000000000 OK att skriva namnet på klassen här! class Person { static int m_nbr = 6000000000; String m_name; int m_born; ... } static variabeln lagras inte i objekten utan i klassen (6 miljarder människor på planeten)
Andra exempel på static–variabler class Spelkort HJÄRTER = 0 RUTER = 1 SPADER = 2 KLÖVER = 3 class Spelkort { static final int HJÄRTER = 0; static final int RUTER = 1; osv... int m_färg; int m_valör; ... } Nu kan vi skriva Spelkort.HJÄRTER i stället för 0 Lättare att förstå
static–metoder, klassmetoder class Math PI = 3.1415926 static – metoder Accessar inga objektvariabler utan bara (static) klassvariabler int r = Math.random(); double d = Math.sqrt(2); class Math { static final double PI = 3.1415926; ... static int random() { .... } static double sqrt(double x) { ..... } } OK att skriva namnet på klassen här!
idag Java och C++ Javaprogrammering en elementär introduktion övningar