1/104
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced |
---|
No study sessions yet.
Objektorienterad modellering och OOP i allmänhet
Definition: En metodik för att designa och strukturera mjukvarusystem genom att representera systemets komponenter som objekt. Objekt kan interagera med varandra och bilda komplexa system.
Exempel: Att modellera ett bibliotekssystem där "Bok", "Läsare" och "Utlåning" kan vara objekt.
Önskade egenskaper hos mjukvarusystem
Definition: Kvaliteter och egenskaper som gör ett mjukvarusystem robust, pålitligt, underhållbart och effektivt.
Exempel: Skalbarhet, säkerhet, effektivitet, återanvändbarhet.
Kännetecken och fördelar med objektorienterad programmering (OOP)
Definition: OOP är en programmeringsparadigm där programmerare definierar datatyperna av en datastruktur samt de typer av operationer (metoder) som kan tillämpas på datan.
Fördelar: Ökad återanvändbarhet, lättare underhåll, större modularisering, och bättre modellering av verkliga världen.
Hög kohesion
Definition: En princip där en klass eller modul har ett väldefinierat och fokuserat ansvar. Det innebär att klassens eller modulens funktioner och egenskaper är tätt relaterade till varandra och syftar till att uppfylla en specifik uppgift eller uppgifter som är nära relaterade.
Motsatsen till hög kohesion är "låg kohesion", där en klass eller modul tar hand om många olika uppgifter som inte nödvändigtvis är relaterade till varandra. Detta kan göra koden mer komplicerad att förstå, underhålla och testa.
Låg koppling
Definition: Låg koppling refererar till idén om att hålla systemkomponenter oberoende av varandra. Genom att minska beroendet mellan klasser ökar man systemets flexibilitet, gör det lättare att underhålla och minska risken för fel när en komponent ändras. Detta förbättrar systemets skalbarhet och gör det enklare att förstå och ändra i efterhand.
Modellering av "real world"
Definition: Förmågan att representera verklighetsbaserade scenarier och objekt i ett programmeringssammanhang.
Exempel: Att modellera ett bankkonto som ett objekt med egenskaper som balans och innehavare.
Modularisering
Definition: Processen att dela upp ett mjukvarusystem i mindre, hanterbara moduler eller komponenter.
Dataabstraktion
Definition: Att representera komplicerade datastrukturer på ett enklare sätt så att endast relevant information visas.
Inkapsling
Definition: Begreppet att begränsa direkt åtkomst till vissa komponenter av ett objekt och endast tillåta interaktion via väldefinierade gränssnitt.
Exempel: En klass Bil kan ha privata attribut som hastighet och bränsle. Andra klasser kan inte direkt ändra dessa attribut. Istället kan Bil-klassen tillhandahålla metoder som ökaHastighet() eller minskaBränsle() för att interagera med dessa attribut.
Återanvändning
Definition: Möjligheten att använda befintlig kod eller komponenter i nya sammanhang utan att behöva skriva om dem.
Exempel: Om du tidigare har skapat en klass Fordon, kan du återanvända den som en bas för andra klasser som Bil eller Motorcykel utan att behöva skriva om all kod.
Paket
Definition: En sätt att organisera relaterade klasser och gränssnitt i Java.
Exempel: java.util är ett paket som innehåller många användbara klasser och gränssnitt.
Import
Definition: Ett sätt att inkludera klasser eller hela paket i din Java-kod.
Exempel: import java.util.ArrayList; ger dig tillgång till ArrayList klassen.
Klass
Definition: En blueprint eller mall för att skapa objekt (instanser).
Objekt
Definition: En instans av en klass.
Datamedlem (dataattribut)
Definition: Variabler som definieras inom en klass och representerar objektets tillstånd.
Metod (medlemsfunktion/operation)
Definition: Funktioner som är definierade inom en klass och beskriver vad ett objekt kan göra.
Accessmetod
Definition: Metod som ger åtkomst till ett objekts datamedlemmar utan att ändra dem.
Mutator-metod
Definition: Metod som ändrar värdet av ett objekts datamedlemmar.
Tillgänglighet/synlighet
Definition: Bestämmer vilka andra klasser eller objekt som kan se eller interagera med en given klass eller dess medlemmar.
private: Medlemmen kan endast nås inom den klass där den är definierad.
(default, ingen modifierare): Medlemmen kan nås inom samma paket (a.k.a. "package private").
protected: Medlemmen kan nås inom samma paket och av alla subklasser.
public: Medlemmen kan nås från vilken klass som helst.
Poängen: Att skydda data och säkerställa att bara tillåtna operationer kan utföras på det.
Interface/Gränssnitt för en klass
Definition: Ett kontrakt som specificerar vilka metoder en klass måste implementera.
Notera: Skiljer sig från nyckelordet "interface" i Java, där det är en datatyp som kan innehålla metods deklarationer men inte deras implementationer.
Beroende/Dependency
Definition: När ett objekt eller en klass är beroende av ett annat objekt eller klass, oftast för en kort tid.
Grafisk notation: En streckad pil.
Association
Definition: En relation mellan två klasser på något sätt.
Exempel: En Lärare-klass och en Kurs-klass.
1. En lärare kan undervisa i en kurs, och en kurs kan ha en lärare som undervisar i den.
2. Här har vi en association eftersom en lärare är associerad med en kurs genom undervisningen.
2. Men kursen kan fortfarande existera även om läraren slutar eller byter jobb, och läraren kan fortfarande existera även om kursen avslutas.
Grafisk notation: En solid linje.
Aggregation (delad)
Definition: Om associationen rent semantiskt är en del av helhet & del, t.ex. att man har en "container"-klass med underordnande objekt. Obs: I en delad aggregation kan de underordnande objekten existera utan "containern".
Exempel: En Bibliotek-klass och en Bok-klass.
1. Ett bibliotek kan ha många böcker, men varje bok är inte nödvändigtvis bunden till ett specifikt bibliotek för alltid.
2. Om ett bibliotek stänger ner, kan böckerna flyttas till ett annat bibliotek eller säljas. Böckerna fortsätter att existera oberoende av det ursprungliga biblioteket.
3. Här representerar biblioteket "helheten" och varje bok representerar en "del". Men eftersom varje "del" (bok) kan existera oberoende av "helheten" (biblioteket), är det en aggregation.
Grafisk notation: En tom diamant vid ägarskapets ände av associationen.
Aggregation (komposition)
Definition: Om det är en aggregation men de underordnande objekten inte kan existera utan containern, så är det en komposition.
Exempel: En Dator-klass och en Operativsystem-klass.
1. En dator kan ha ett operativsystem installerat på den.
2. Om datorn förstörs (t.ex. om den krossas eller bränns upp), kommer operativsystemet inte att kunna fortsätta existera på egen hand eftersom det var installerat på datorns hårddisk.
3. Här representerar datorn "helheten" och operativsystemet representerar en "del". Eftersom "delen" (operativsystemet) inte kan existera oberoende av "helheten" (datorn) när den förstörs, är det en komposition.
Grafisk notation: En fylld diamant vid ägarskapets ände av associationen.
Arv
Definition: Ett sätt att skapa en ny klass baserad på en befintlig klass.
Vad ärvs: De flesta medlemmar (metoder, variabler) från basklassen.
Vad ärvs inte: Konstruktorer från basklassen.
Grafisk notation: En triangel pekande mot den överordnade klassen.
Implementation av interface
Definition: Implementation av ett interface innebär att en klass måste följa ett specifikt kontrakt av metoder.
Grafisk notation: En streckad linje som leder till ett kantigt hörn.
Val mellan arv och composite aggregation
Definition: Valet mellan att använda arv (som representerar ett "är ett"-förhållande) och sammansättning eller aggregation (som representerar ett "har ett"-förhållande) beror på problemets natur. Om relationen starkt kan beskrivas som "är ett", är arv lämpligt. Å andra sidan, om relationen mer passande beskrivs som "har ett", bör man överväga att använda sammansättning eller aggregation.
Exempel (arv): Antag att vi har en överklass Fordon och en underklass Bil. Eftersom en bil är ett fordon, är detta ett "är ett"-förhållande och kan representeras med arv.
Exempel (sammansättning): Tänk dig en klass Student och en annan klass KaffeKopp. Många studenter är kända för att dricka mycket kaffe, särskilt under tentaperioder. Men även om en student har en kaffekopp, är studenten inte en kaffekopp. Så det här skulle vara ett "har ett"-förhållande.
Analys
Definition: Processen att förstå och definiera vad som krävs av ett system.
Exempel: Identifiera vilka funktioner ett bibliotekssystem bör ha, såsom att låna ut och returnera böcker.
Design
Definition: Processen att bestämma hur systemet ska byggas, baserat på kraven från analysfasen.
Exempel: Besluta om databasstrukturen och användargränssnittet för bibliotekssystemet.
UML (Unified Modeling Language)
Definition: Ett standardiserat grafiskt språk för att specificera, visualisera, konstruera och dokumentera artefakter av objektorienterad programvara.
Exempel: Om du vill designa en biluthyrningstjänst, kan du använda UML för att visa relationerna mellan klasserna Kund, Bil och Uthyrningsavtal.
Användningsfall (use cases)
Definition: Beskriver specifika sätt som systemet kommer att användas på av en aktör (ofta en användare eller ett annat system).
Exempel: Ett användningsfall kan vara "Låna en bok" i ett bibliotekssystem.
Scenarios
Definition: En specifik sekvens av händelser som beskriver interaktionen mellan en aktör och systemet.
Exempel: För användningsfallet "Låna en bok" kan ett scenario vara stegen en användare tar för att söka efter en bok, välja den och sedan checka ut den.
Klassdiagram
Definition: Visar systemets klasser, deras attribut och metoder samt relationerna mellan klasserna.
Exempel: Ett diagram som visar klasserna "Bok", "Läsare" och "Utlåning" samt deras relationer i ett bibliotekssystem.
Sekvensdiagram
Definition: Visar hur objekt interagerar med varandra, i synnerhet sekvensen av interaktion över tid.
Exempel: Ett diagram som visar stegen och interaktionen mellan objekt när en bok lånas ut från ett bibliotek.
Designmönster
Definition: Beprövade lösningar på återkommande problem inom mjukvarudesign.
Exempel: Singleton-mönstret säkerställer att en klass bara har en instans och tillhandahåller ett sätt att komma åt den från vilken punkt i koden som helst.
Analysfas
Definition: Identifiera och klargöra systemkrav.
Exempel: Att ta reda på vilka funktioner användarna vill ha i en ny mobilapp.
Designfas
Definition: Skapa en lösning för kraven som identifierats under analysfasen.
Exempel: Skissa gränssnittet för mobilappen baserat på användarkrav.
Implementationsfas
Definition: Realisera designen genom att skriva programkod.
Exempel: Koda mobilappen i Java eller Swift baserat på designskisserna.
Singleton (designmönster)
Definition: Singleton-mönstret säkerställer att en klass endast har en instans och tillhandahåller ett globalt sätt att få tillgång till denna instans.
Exempel: En konfigurationshanterare för en applikation. Istället för att skapa nya instanser av konfigurationsobjektet varje gång det behövs, använder du Singleton-mönstret för att använda samma instans överallt.
Iterator (designmönster)
Definition: Iterator-mönstret tillhandahåller ett sätt att komma åt elementen i en samling utan att exponera dess underliggande representation.
Exempel: Tänk dig en bokhylla-klass med en samling av böcker. Istället för att ge direkt tillgång till boksamlingen, kan bokhyllan tillhandahålla en iterator som låter dig gå igenom varje bok i tur och ordning.
Composite (designmönster)
Definition: Composite-mönstret ger dig möjlighet att bygga objekt i hierarkiska trädstrukturer för att illustrera förhållandet mellan helhet och del. Det unika med detta mönster är att det låter dig interagera med enskilda objekt och deras sammansättningar på exakt samma sätt.
Exempel: I en applikation för grafisk design kan en "Grafikkomponent" representeras som en enskild form, exempelvis en cirkel eller en rektangel. Men den kan också representera en sammansatt grupp av former, som en kombination av cirklar och rektanglar. Tack vare Composite-mönstret kan denna applikation hantera båda scenarierna – den enskilda cirkeln och den sammansatta gruppen av former – på samma enhetliga sätt. Därmed blir det enklare att bygga och skala upp grafiska strukturer i programmet.
Proxy (designmönster)
Definition: Designmönstret "Proxy" representerar en platshållare för ett annat objekt för att styra åtkomsten till detta objekt. I det givna klassdiagrammet används "Proxy" för att kontrollera åtkomsten till ett resurskrävande bildobjekt.
- Image: Ett gränssnitt som definierar operationerna getFileName och draw.
- ImageProxy: En platshållare för det verkliga bildobjektet. Om klienten enbart begär bildens namn är det ImageProxy som svarar. Det verkliga bildobjektet skapas endast när all information, till exempel att rita bilden, behövs.
- ImageFile: Det verkliga bildobjektet som laddas när det är absolut nödvändigt, till exempel för att rita upp bilden.
I praktiken kan detta mönster vara användbart i situationer där objekt är resurskrävande att skapa, som i fallet med att ladda en stor bild från fil. Istället för att direkt ladda bilden kan en proxy användas för att skjuta upp laddningen tills det verkligen behövs. Det sparar resurser och optimerar prestanda genom att undvika onödiga operationer.
Strategy (designmönster)
Definition: Strategy-mönstret definierar en familj av algoritmer, kapslar in varje algoritm och gör dem utbytbara. Detta mönster låter algoritmen variera oberoende av klienterna som använder den.
Exempel: Ett betalningssystem där användarna kan välja att betala med kreditkort, PayPal, banköverföring etc. Varje betalningsmetod kan representeras av en annan strategi, men användningen av dessa strategier kan vara enhetlig i systemet.
Façade (designmönster)
Definition: Façade-mönstret tillhandahåller ett förenklat gränssnitt till en större kodbibliotek, en modul eller en klass. Det definierar en högre nivå av implementering som gör den underliggande koden enklare att använda.
Exempel: Ett system som hanterar olika ljud- och videokodningar. En façade kan erbjuda en enkel "spela upp"-metod som döljer den komplexa logiken för att välja rätt kodningsalgoritm, dekodera mediet och spela upp det.
Model-View-Controller (MVC)
Definition: Ett designmönster som separerar en applikation i tre interkopplade komponenter: Model (data), View (presentation) och Controller (logik).
Modell: Hanterar data och affärslogik.
Vy: Presenterar data för användaren.
Controller: Hanterar användarinteraktion och uppdaterar Modell/Vy som svar.
Poänger: Separation av ansvar, vilket leder till bättre modularitet, lättare underhåll och större flexibilitet.
Exempel: I en webbapplikation kan Model representera databaslogiken, View kan vara det som användaren ser (webbsidan), och Controller hanterar användarinput och uppdaterar Model och View därefter.
API (Application Programming Interface)
Definition: Ett set av fördefinierade metoder, klasser och gränssnitt som ett programmeringsspråk eller bibliotek tillhandahåller.
Exempel: Java Standard Library är ett exempel på en API.
Overloading
Definition: Flera metoder i samma klass med samma namn men olika parametrar.
Exempel: I en Matematik-klass kan du ha två metoder med namnet addera - en som tar två heltal och en annan som tar två flyttal. Beroende på vilka argument du skickar kommer rätt metod att kallas.
Protected
Definition: En access modifier som gör att en variabel eller metod kan åtkommas av subklasser och klasser inom samma paket.
Polymorfism
Definition: En variabels förmåga att referera till objekt av flera olika typer.
Exempel: Om du har en basklass Djur med en metod görLjud(), kan subklasser som Hund och Katt ha egna implementeringar av denna metod. Så, när du kallar görLjud() på en Djur-referens som pekar på en Hund-instans, får du ljudet av en hund.
Ström (Stream)
Definition: En abstraktion som representerar en sekvens av data och tillhandahåller mekanismer för att läsa eller skriva data.
Poäng: Strömmar kan användas för olika typer av datakällor eller mål, såsom filer, nätverksanslutningar eller minnesbuffertar.
Tråd (Thread)
Definition: En exekveringsenhet i ett program som kan köras parallellt med andra trådar.
Exempel på skapande: En tråd kan skapas genom att ärva från Thread klassen eller implementera Runnable interfacet i Java.
Race Conditions
Definition: Ett tillstånd där flera trådar försöker tillgå och modifiera samma data samtidigt, vilket kan leda till oförutsägbara resultat.
Lösning i Java: Använda synchronized nyckelordet för att säkerställa att endast en tråd åt gången kan exekvera en specifik kodsektion.
Monitor (Lås)
Definition: Ett verktyg för att säkerställa att endast en tråd kan utföra en viss kodsektion åt gången.
Synkroniserade metoder: I Java, när en metod är deklarerad som synchronized, fungerar det objekt som metoden tillhör som monitor.
Synkroniserade metoder
Definition: En metod som är markerad med synchronized nyckelordet, vilket garanterar att endast en tråd kan exekvera den metoden på ett specifikt objekt samtidigt.
Monitor (lås) för metoden: Det aktuella objektet som metoden tillhör fungerar som monitor. Om en tråd redan utför en synkroniserad metod på ett objekt, måste andra trådar vänta tills den tråden är klar innan de kan exekvera samma (eller någon annan synkroniserad) metod på det objektet.
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
I exemplet ovan är både increment() och getCount() synkroniserade metoder. Om en tråd kallar increment() på ett Counter-objekt, kommer inga andra trådar att kunna kalla varken increment() eller getCount() på samma objekt tills den första tråden är klar. Objektet av Counter-klassen fungerar som monitor (lås) för dessa metoder.
Plattformsoberoende
Definition: Förmågan för kod att köras på olika operativsystem eller plattformar utan ändringar.
Exempel: Java-program köras på både Windows- och Linux-system utan att behöva rekompilera koden.
Fördelar och nackdelar med interpreterade språk
Fördelar:
"Omedelbar" feedback: Eftersom koden körs rad för rad får programmeraren direkt feedback på fel eller resultat (dock så kan fel som vanligtvis inte skulle kompilera i ett kompilerat språk bara upptäckas vid körning om man inte först använder ett verktyg för statisk analys, vilket är en nackdel).
Plattformsoberoende: Koden behöver inte kompileras för varje målplattform. Istället krävs bara en tolk för varje plattform.
Flexibilitet: Möjlighet att köra enstaka kommandon eller små kodsnuttar utan att behöva kompilera hela programmet.
Dynamiska egenskaper: Interpreterade språk kan ofta hantera dynamiska egenskaper vid körning, som dynamisk typning eller att exekvera kod som genereras i realtid (detta kan dock vara en nackdel då det är lätt att skjuta sig själv i foten).
Nackdelar:
Lägre prestanda: Interpreterad kod är ofta långsammare än kompilerad kod eftersom varje instruktion tolkas vid körning.
Större beroende av tolken: Om tolken (interpreter) innehåller buggar eller säkerhetsbrister påverkar detta hela programmet.
Mindre optimering: Tolkar kan ha svårare att utföra vissa optimeringar som kompilatorer kan göra.
Fördelar och nackdelar med kompilerade språk
Fördelar:
Högre prestanda: Kompilerade program omvandlas till maskinkod innan de körs, vilket ofta leder till snabbare exekvering.
Optimering: Kompilatorer kan utföra avancerade optimeringar på koden för att förbättra prestanda.
Säkerhet: Källkoden exponeras inte direkt, vilket kan göra det svårare för obehöriga att förstå eller ändra programmet.
En gång, kör överallt: Efter kompilering kan binärfilen (exekverbar fil) köras på vilken dator som helst (obs: med samma arkitektur) utan behov av ytterligare verktyg.
Nackdelar:
Ingen omedelbar feedback: Programmeraren måste kompilera koden varje gång en ändring görs för att testa den (obs: detta är ganska snabbt och effektivt i moderna utvecklingsmiljöer).
Plattformsberoende: Kompilerad kod är oftast specifik för en viss arkitektur eller plattform. För att köras på en annan plattform måste koden kompileras igen.
Större binärfiler: Kompilerade program kan resultera i större exekverbara filer jämfört med tolkade scripts.
Fördelar och nackdelar med JVM
JVM (Java Virtual Machine) är en virtuell maskin som kör Java-bytekod. Den gör Java plattformsoberoende eftersom den fungerar som en adapter mellan din kod och det underliggande operativsystemet. När en Java-källkodsfil (.java) kompileras skapas en bytekodsfil (.class).
Fördelar:
Plattformsoberoende: Eftersom Java-koden kompileras till bytecode istället för specifik maskinkod, kan samma bytecode köras på vilken maskin som helst med en JVM. Detta leder till Javas motto: "Skriv en gång, kör överallt" (Write Once, Run Anywhere).
Optimeringar: Med JIT-kompilering kan JVM göra optimeringar vid körningstid baserat på hur programmet faktiskt körs, vilket kan leda till bättre prestanda i vissa fall.
Nackdelar:
Overhead: JVM lägger till ett extra lager av overhead, vilket kan göra att Java-program kör långsammare än program som är direkt kompilerade till maskinkod.
Minnesanvändning: JVM kan vara krävande när det gäller minnesanvändning.
Beroende av JVM: Java-program är beroende av JVM för att köras, vilket kan vara en begränsning i miljöer där JVM inte är tillgänglig eller där dess overhead inte är acceptabelt.
Livstid för primitivt data och referensvariabler
Definition: Primitiv data (t.ex. int, char) har en livstid som varar så länge den inneslutande metoden körs. Referensvariabler (t.ex. objekt) har en livstid som bestäms av när de skapas och när de inte längre är tillgängliga eller refererade.
Objekts livstid
Definition: Tiden från när ett objekt skapas (via konstruktor) till när det inte längre är tillgängligt och kan samlas in av skräpsamlaren.
Exempel: Ett objekt skapat inom en metod kommer att förstöras när metoden avslutas, om inga andra referenser till objektet finns.
Garbage Collection
Definition: Processen där JVM automatiskt frigör minne genom att radera objekt som inte längre är tillgängliga eller refererade.
Exempel: Om två objekt refererar till varandra men inte längre är tillgängliga från huvudprogrammet kommer skräpsamlaren att radera dem båda.
Primitiva datatyper
Definition: Grundläggande datatyper i Java som inte är objekt och lagrar enkla värden.
Exempel: int (heltal), float (flyttal), char (tecken).
Skillnaden mellan primitivt data och data av klasstyp
Definition: Primitivt data lagrar enkla värden direkt, medan data av klasstyp lagrar en referens till ett objekt i minnet.
Exempel: int i = 10; lagrar värdet 10, medan String s = "hello"; lagrar en referens till en strängobjekt. Omvandling mellan int (primitiv typ) och Integer (klasstyp) sker automatiskt, så det går att använda dem omväxlande (dock så tar en klasstyp upp mer minne, vilket bör beaktas).
Referensvariabel
Definition: En variabel som lagrar en referens (adress) till ett objekt i minnet snarare än själva objektets värde.
Exempel: String s; - s är en referensvariabel.
Objekt skapas med new
Definition: Nyckelordet new används i Java för att instansiera (skapa) ett nytt objekt av en specifik klass.
Exempel: Object o = new Object(); skapar ett nytt objekt av typen Object.
Livstid för ett objekt
Definition: Tiden från när ett objekt skapas till när det inte längre är tillgängligt och kan samlas in av skräpsamlaren.
Exempel: Ett objekt skapat inom en metod kommer att förstöras när metoden avslutas, om inga andra referenser till objektet finns.
Alias
Definition: När två eller flera referensvariabler pekar på samma objekt i minnet.
Exempel: Efter Object o1 = new Object(); och Object o2 = o1;, både o1 och o2 refererar till samma objekt.
Jämförelse med ==
Definition: När == operatören används mellan två objektreferenser, jämförs objektens minnesadresser snarare än deras faktiska innehåll.
Exempel: Om du har två objekt, o1 och o2, och du jämför dem med o1 == o2, kontrollerar du om båda referenserna pekar på exakt samma minnesplats. Detta betyder att o1 och o2 är två referenser till samma objekt.
För att jämföra det faktiska innehållet i objekten rekommenderas det ofta att använda equals()-metoden (om den är implementerad för de aktuella objekten). Till exempel kan a.equals(b) användas för att se om två objekt är semantiskt identiska baserat på något specifikt kriterium, som ett unikt ID.
Jämförelse av innehåll
Definition: För att jämföra innehållet i två objekt, bör man använda en metod som equals().
Exempel: o1.equals(o2) kan användas för att kontrollera om två strängobjekt har samma innehåll.
Referensvariabler vs. Objekt
Definition: Referensvariabler lagrar adressen till ett objekt, medan ett objekt är en instans av en klass med tillstånd (state) och beteende.
Exempel: String s = "hello"; - s är en referensvariabel, och den faktiska strängen "hello" är objektet.
Referensen null
Definition: En speciell referens som inte pekar på något objekt och representerar "ingenting".
Immutable/Oföränderligt objekt
Definition: Ett objekt vars tillstånd inte kan ändras efter att det har skapats.
Poäng: Bidrar till ökad säkerhet och förutsägbarhet i programmet.
Exempel: String i Java är oföränderlig; varje operation som verkar ändra en sträng skapar faktiskt en ny sträng.
String-operationer
Definition: Operationer som kan utföras på en String för att manipulera dess innehåll.
Exempel: s1.toUpperCase() konverterar alla bokstäver i strängen till versaler.
Skapa en array för heltal
Definition: Ett sätt att lagra en samling av primitiva datatyper eller objekt.
Exempel: int[] numbers = new int[5]; skapar en array som kan lagra upp till 5 heltal.
Skapa en array för objekt
Definition: Ett sätt att lagra en samling av objektreferenser.
Exempel: Object[] objects = new Object[10]; skapar en array som kan lagra upp till 10 objektreferenser.
All kod i klasser (Java)
Definition: I Java skrivs all kod inom klasser.
Exempel: Ett enkelt program i Java börjar med public class MyProgram { ... }.
Datamedlemmar och metoder
Definition: Variabler och funktioner som definieras inom en klass.
Tillgänglighetsnivåer: public, private, protected, inget modifieringsord (paketprivat).
Om inget anges: Medlemmen är paketprivat, vilket innebär att den endast är tillgänglig inom sitt eget paket.
Konstruktorer
Definition: En speciell metod i en klass som kallas när ett objekt av klassen skapas.
Uppgift: Initiera objektets tillstånd.
Exempel: public MyClass() { ... } är en konstruktor.
Överlagring/Overloading av en metod
Definition: När två eller flera metoder i samma klass har samma namn men olika parametrar.
Exempel: void print(int a) och void print(String s).
Datamedlemmar vs. lokala variabler
Definition: Datamedlemmar är variabler definierade på klassnivå, medan lokala variabler definieras inom metoder.
Livslängd: Datamedlemmar lever så länge objektet existerar, medan lokala variabler lever endast under metodens körning.
Initiering: Datamedlemmar får standardvärden om de inte initieras, medan lokala variabler måste initieras innan användning.
Referensen this
Definition: En referens inom en instansmetod eller konstruktor som hänvisar till det aktuella objektet. Ofta utelämnar man this när man använder andra datamedlemmar eller metoder i en klassmetod om namnet på datamedlemmen eller metoden inte står i konflikt med givna parametrar.
Static för datamedlem/metod
Definition: Anger att en datamedlem eller metod tillhör klassen snarare än en specifik instans av klassen.
Exempel: En static variabel kommer att ha samma värde i alla instanser av klassen. Används ofta för att representera konstanter eller liknande.
Final
Definition: Ett nyckelord som, när det används med en variabel, gör variabeln oföränderlig. När det används med en klass förhindrar det arv, och när det används med en metod förhindrar det att metoden blir överstyrd.
Parameteröverföring och returvärden
Definition: Java använder "pass-by-value", vilket innebär att en kopia av variabeln skickas till metoden. För objektreferenser innebär detta att referensen (minnesadressen) kopieras, inte själva objektet.
Alias-problem: Två referenser som pekar på samma objekt kan orsaka oönskade sidoeffekter.
Lösning: Använda kloning eller skapa nya objekt för att undvika aliasing.
Nyckelorden interface och abstract
Definition:
Interface: Ett interface definierar en uppsättning metoder (utan implementation) som måste implementeras av den klass som väljer att använda interfacet. Det är som ett kontrakt som en klass lovar att uppfylla när den implementerar interfacet.
Abstrakt klass: En abstrakt klass är en klass som inte kan instansieras direkt. Den kan ha både fullständigt implementerade metoder och abstrakta metoder (metoder utan implementation). Abstrakta klasser är avsedda att vara basklasser som andra klasser ärver ifrån.
Exempel (interface):
Detta interface Drivable definierar en metod drive() som alla klasser som implementerar Drivable måste implementera.
public interface Drivable {
void drive();
}
Exempel (abstrakt klass):
Här är Vehicle en abstrakt klass med en abstrakt metod startEngine() och en fullständigt implementerad metod honk(). Andra klasser kan ärva Vehicle, men de måste ge en implementation av startEngine().
public abstract class Vehicle {
public abstract void startEngine();
public void honk() {
System.out.println("Honk honk!");
}
}
Felhantering
Definition: Ett sätt att hantera oväntade händelser eller fel som kan uppstå under programkörning.
Poäng: Enhetlig felhantering gör programmet mer robust och förbättrar användarupplevelsen genom att undvika krascher.
Throw
Definition: Nyckelordet som används för att generera exceptions.
Exempel: throw new Exception("Error message");
Try, Catch, Finally
Definition: En struktur för att fånga och hantera exceptions.
Exempel:
try {
// kod som kan kasta exception
} catch (ExceptionType name) {
// hantera exception
} finally {
// kod som körs oavsett om en exception kastades eller inte
}
Checked vs. Unchecked Exceptions
Definition: Checked exceptions måste fångas eller deklareras, medan unchecked exceptions (oftast RuntimeException och dess underklasser) inte behöver det.
Generics
Definition: Ett sätt att tillhandahålla typsäkerhet i Java samtidigt som man behåller återanvändbar kod.
Poäng: Ökad typsäkerhet, undviker typomvandling och ger möjlighet till återanvändbar kod.
Exempel: List
I detta exempel så kan man använda vilken kompatibel klass man vill (inte nödvändigtvis ArrayList), och samtidigt säkerställer man att enbart strängar får finnas i listan.
Nyckelordet super
Definition: Används inom en subklass för att referera till basklassen.
Exempel: super() kallar på basklassens konstruktor.
Subtyper och Polymorfism
Definition: Subtyper är klasser som ärver från en annan klass. Polymorfism är förmågan för ett objekt att anta många former, oftast genom arv.
Exempel: En Dog-klass kan ärva från en Animal-klass och kan därför behandlas som en Animal.
class Animal {}
class Dog extends Animal {}
Animal a = new Dog(); // En Animal-referens kan referera till ett Dog-objekt.
Metodanrop
Definition: När en metod anropas från en referensvariabel, bestäms den metodens signatur som ska anropas vid "compile time" baserat på referenstypen. Men den faktiska implementationen av metoden som körs (i fallet med en överriden metod) bestäms vid "runtime". Detta är kärnan i polymorfism.
class Animal {
void makeSound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
public static void main(String[] args) {
Animal a = new Dog();
a.makeSound(); // Skriver ut "Bark" eftersom den faktiska metoden avgörs vid runtime.
}
Casting
Definition: Casting är processen att omvandla en typ till en annan. En "down cast" i Java sker när du omvandlar en referens av en supertyp till en subtyp. Eftersom Java är ett strikt typat språk, kan du inte direkt tilldela en supertypreferens till en subtypreferens utan en explicit cast. Down casting måste hanteras med försiktighet, eftersom det kan kasta en ClassCastException vid "runtime" om objektet inte faktiskt är av den önskade subtypen
Animal a = new Dog();
Dog d = (Dog) a; // Down casting från Animal till Dog.
Override vs. Overload
Definition: Override innebär att ändra beteendet på en metod i en subklass. Overload innebär att ha flera metoder med samma namn men olika parametrar.
Dynamisk bindning
Definition: En teknik där metoden som ska köras bestäms vid körningstid snarare än kompileringstid.
Interface
Definition: En kontrakt som definierar vilka metoder en klass måste implementera.
Exempel: public interface Drivable { void drive(); }
Nyckelordet instanceof
Definition: Ett sätt att kontrollera om ett objekt är en instans av en specifik klass eller interface.
Exempel: if (obj instanceof String) { ... }
Basklassen Object i Java
Definition: Alla klasser i Java ärver implicit från klassen Object, vilket ger dem tillgång till vissa grundläggande metoder som toString(), equals(), och hashCode().
Enum i Java
Definition: En enum är en särskild datatyp som representerar en uppsättning konstanter. Fördelen med att använda enums framför konstanter är att de är tydligare, ger en bättre typsäkerhet och kan gruppera relaterade konstanter tillsammans. Enums kan också ha metoder, konstruktorer och instansvariabler, vilket ger dem mer funktionalitet än vanliga konstanter. Exempelvis kan man ange en egen strängrepresentation av enum-medlemmar genom att overrida toString.