Övningsuppgifter, avsnitt 2

Sven-Olof Nyström
OOP med Java våren -25
Informationsteknologi
Uppsala Universitet

Här är andra omgången av övningsuppgifter. Kom ihåg att det är OK att diskutera övningsuppgifterna i forumet.

Installera och provkör

Kontrollera att Java finns installerat på din dator. Om inte, gå till Oracles sidor och installera. Skansholm ger fler tips på sidan 8.

Börja med att provköra nåt enkelt, tex programmet Hej.java som beskrivs i avsnitt 2.

Modifiera programmet! Gör en liten ändring och kontrollera att programmet fortfarande fungerar.

Skansholm, kapitel 1

Skansholm har några lämpliga uppgifter i kapitel 1. Uppgifterna använder dialogrutor som jag inte har tagit upp, men Skansholm förklarar dem i kapitel 1.

Jag föreslår att du tittar på någon eller några av uppgifterna 2-5.

Referenssemantik

Försäkra dig om att du kan besvara frågorna nedan. Om du är osäker, skriv enkela testprogram och provkör.

Koden utgår från att det finns en klass K definierad sen tidigare. Ge en lämplig definition av klassen K. (Det kan vara en bra idé att lägga till en instansvariabel i klassen K så du kan skilja på olika objekt av samma klass.)

Två variabler

Vad händer om man tilldelar två variabler samma objekt?

K x = new K();

K y = x;

Parameter

Vad händer om man passar ett objekt som parameter?

void m(K x) { ... }

K y = new K();

m(y);

Returnera ett objekt

Vad händer om en metod returnerar ett objekt?

  K m() {
    K x = new K();
    return x;
  }
  

Upprepad tilldelning

Vad händer om en variabel som tilldelas redan har ett värde?

  K x = new K();
  K y = new K();
  y = x;
  

Vad händer med det gamla objektet? Vad händer med det nya? Kombineras de två objekten på nåt sätt?

Dynamisk typning, bra och dåligt

Jag skriver (om programspråk med dynamisk typning) "det kan gå bra att köra ett program trots att det innehåller typfel."

Ge exempel på när det kan vara en fördel att kunna köra ett program med typfel. När kan det vara en nackdel?

Kodningsstandarder

Avsnittet om kodningsstandarder avslutas med några frågor. Jag upprepar dem här:

Statisk och dynamisk typning.

Några exempel

Betrakta programmen nedan. (E3 och E4 använder klassen Object som jag inte har tagit upp ännu.)

Vilka av programmen kan köras utan fel?

När fel uppstår, är det kompileringsfel eller uppstår felen först vid körning?

Förklara felen.

Javas felmeddelanden innehåller en hel del värdefull information. Studera gärna de felmeddelanden du får.

public class E1 {
    public static void main(String[] arg) {
	int x;
	int y;
	x = 3;
	y = 4;
	System.out.println(x*y);
    }
}
public class E2 {
    public static void main(String[] arg) {
	int x;
	int y;
	x = 3;
	y = "4";
	System.out.println(x*y);
    }
}
public class E3 {
    public static void main(String[] arg) {
	Object x;
	int y;
	x = 3;
	y = 4;
	System.out.println((int)x*y);
    }
}
public class E4 {
    public static void main(String[] arg) {
	Object x;
	int y;
	x = "three";
	y = 4;
	System.out.println((int)x*y);
    }
}

Variabler och värden

Ge ett program där den statiska typen för en variabel inte är densamma som typen av det värde den lagrar.