prog5Java Flashcards
Vad är polymorfi? I java kan det åstadkommas med overloading och interface, vad är skillnaden?
Polymorfi innebär att vi kan hantera klasser och gränssnitt på ett likadant sätt.
Överlagring innebär att en klass har flera metoder med samma namn men olika parametrar. Gränssnitt definierar en gemensam uppsättning metoder som olika klasser kan implementera. Skillnaden ligger i tidpunkten för polymorfism: överlagring sker vid kompileringstid, medan gränssnitt möjliggör dynamisk polymorfism vid körning.
Hur skapas och startar en tråd? Vilken roll har interfacet Runnable ? Vad innebär det att varje tråd har en egen stack, men alla trådar har en gemensam heap? Varför använder PSC flera trådar?
Vi kan skapa en tråd genom att extenda Thread eller genom att implementa interfacet Runnable.
Varje tråd i Java har sin egen trådstack (stack) där lokala variabler och delresultat sparas. Detta inkluderar metodanrop och lokala variabler för varje tråd.
Å andra sidan delar alla trådar samma heap, som är området för dynamiskt allokerad minne där objekt och deras data lagras. Heapen är gemensam för alla trådar i en Java-applikation.
Med trådar kan vi utföra saker samtidigt, och göra programmet mer responsivt.
Vad innebär nondeterminism och data race? Hur kan man förhindra race ? I PSC finnd ett potentiellt race eftersom spelaren kan göra ett drag precis samtidigt som ett drag tas emot av motståndares. Hur säkerställer PSC att det inte blir något race i det fallet?
Nondeterminism sker när två spelare gör ett drag exakt samtidigt, då kan fel och osäkerheter uppstå.
Datarace är när två trådar försöker skriva till samma del av minnet samtidigt.
Vi kan motverka datarace med syncronized i metoder.
Vad är en abstrakt metod och en abstrakt klass? Varför vill man ibland ha sådana? Kan man istället låta abstrakta metoder returnera null och få samma effekt? Ge exempel på abstrakta klasser i PSC.
En abstrakt metod deklareras utan att ge en implementation, en abstrakt klass är en klass som innehåller minst en abstrakt metod och kan även innehålla vanliga (icke-abstrakta) metoder och egenskaper.
Abstrakta metoder och klasser möjliggör skapandet av abstraktioner och definierar gemensamma gränssnitt för besläktade klasser.
Att låta abstrakta metoder returnera null är inte en rekommenderad praxis eftersom det bryter mot idén med att ha en abstrakt metod. Abstrakta metoder används för att definiera ett kontrakt som måste uppfyllas av subklasser, och att returnera null innebär inte en korrekt implementation av kontraktet. Du kan också få nullpointer exception.
Varför vill man ibland ha en klass inuti en annan klass? Ge exempel på sådana nästlade klasser i PSC. Vad är en anonym inre klass, och när vill man ha en sådan
Logiskt gruppering: Nästlade klasser möjliggör en logisk gruppering av klasser där den inre klassen är direkt relaterad till och används av den yttre klassen. Det kan förbättra kodens organisation och läsbarhet.
Åtkomstkontroll: En inre klass har tillgång till medlemsvariabler och metoder i den yttre klassen, även om de är privata. Det kan vara användbart när en klass är tänkt att användas enbart av den yttre klassen.
Kodåteranvändning: Nästlade klasser kan vara användbara för att strukturera och dela upp kod på ett sätt som främjar återanvändning. Den inre klassens kod kan vara specifik för den yttre klassen och återanvändas bara där.
Anonym klass: Den används ofta när du behöver implementera ett gränssnitt eller skapa en underklass för en klass, men du behöver bara använda den på en specifik plats och inte på flera ställen i koden.
I PSC finns klassen StartServer i klassen Server.