360 likes | 557 Views
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.
E N D
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 grafiskaklassbibliotek etc) • 3 betyg: • tentamen, • projekt, • kursen som helhet
idag Java och C++ Javaprogrammering en elementär introduktion övningar
Java och C++ • JAVA är • plattformsoberoende • säkrare • enklare • Å andra sidan är C++ • snabbare • mer hårdvarunära • fler finesser Ett programmeringsspråk från SUN som påminner om C++
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
Objekt allokeras alltid på heapenAlla objektvariabler är egentligen pekare Java C++ 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å heapenAlla objektvariabler är egentligen pekare Java C++ 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( );
A B pStr C++ programmerare undvikerofta ytliga kopieringar... ”Homer Simpson” • 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 kopierarnästan alltid ytligt.. A ”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
Sammanfattningav 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
JavaprogrammeringEn 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?
// 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 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 ); } } • javac Seq.java • java Seq variabeln a har värdet 100 variabeln b har värdet 7
Sekvensen utförs rad för rad, uppifrån och ned Sekvensen står innanför krullparanteser 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 ); } }
scope = giltighet { int a = 7; int b = 100; int a = 7; } Förbjudet! variabeln a finns ju redan!
{ variabler som deklareras här glöms nu } scope = giltighet { } variabler som deklareras efter denna krullparantes glöms bort här
Selketion / vilkorliga satser if (vilkor) sats; else sats; princip: myndig = false; if (ålder>=18) myndig = true; if (ålder>=18) myndig = true; else myndig = false; exempel:
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 santdvs noll eller flera gånger while (vilkor) sats; princip: while (ix<100) { ... ... ix++; } // Då vi når denna rad är ix>=100 exempel:
for-loop 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]
bra: int [ ] myMat = {5,10,15,20,25,30,35,40,45,50, 55,60,65,70,75,80,85,90,95,100 }; 5 10 15 20 bättre: 25 30 int [ ] myMat = new int[20]; for (int i=0 ; i<20 ; ++i) myMat[i] = (i+1)*5; ännu bättre: 90 int [ ] myMat = new int[20]; for (int i=0 ; i<myMat.length ; ++i) myMat[i] = (i+1)*5; 95 100 matriserExempel Skapa en en-dimensionell heltalsmatris med 20 element och fyll den med 5:ans multiplikationstabell (5,10,...100) myMat[0] 20 myMat[19]
matriserExempel 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] );
objekt av typ Person m_name = Bart m_born = 1993 age(..) boy girl man m_name = Lisa m_born = 1995 age(..) m_name = Homer m_born = 1968 age(..) klasser och objekt class Person 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
i lengthok name toy 777 132.5 00000 objekt skapas med new ”Bart” objekt int i = 777; double length = 132.5; booleaan ok = false; String name = new String(”Bart”); Kortlek toy = new Kortlek();
Ett objekt av typ Kortlek • Representerar en kortlek • Innehåller Spelkortsobjekt • Enkel att använda giveCard() size() shuffle() • giveCard() • -returnerar ett Spelkort-objekt • size() • -returnerar antalet kvarvarande kort • shuffle() • -blandar leken Övningsexempel på objekt Kortlek ev krånglig innuti Enkel utanpå! med objektorientering kapslar man in krångliga detaljer
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 • Ett objekt av typ Color • Representerar en färg • innehåller funktioner som: • -Gör färgen ljusare • -mörkare • -etc, se Color.html Andra exempel på objekt String Color
Konstruktor- och toString-metoderna En normal metod kan heta vad som helst och den anropas manuellt av programmeraren • Men vissa metoder anropas automatiskt vidspeciella 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
objekt av typ Person m_name = Bart m_born = 1993 age(..) boy girl man m_name = Lisa m_born = 1995 age(..) m_name = Homer m_born = 1968 age(..) Repetition: klasser och objekt class Person class Person { String m_name; int m_born; ... int age(int dettaÅr) { return dettaÅr-m_born } }
boy.m_nbr girl.m_nbr man.m_nbr Person.m_nbr 6000000000 OK att skriva namnet på klassen här! static–variabler är klassvariabler class Person m_nbr = 6000000000 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