# Programmering 2 - Instuderingsfrågor kursprov
### Objektorienterad programmering
1. Förklara följande begrepp:
* klass
* attribut
* konstruktor
* objekt
* arv
* inkapsling
* åtkomstmodifierare
* polymorfism
2. Vad kommer följande kod skriva ut?
```java
public class NumberClass{
public int number;
}
public class Main{
public static void main(String[] args) {
NumberClass numberClass = new NumberClass();
numberClass.number = 5;
System.out.println(numberClass.number);
}
}
```
3. Vad är felet i koden nedan?
```java
public class School{
private int numberOfClasses = 5;
}
public class Main{
public static void main(String[] args) {
School s = new School();
s.numberOfClasses = 1;
}
}
```
4. Vad är felet i koden nedan?
```java
public class Fruit{
public String name;
public String taste;
public Fruit(String name, String taste){
this.name = name;
this.taste = taste;
}
}
public class Main{
public static void main(String[] args) {
Fruit f = new Fruit("Apple");
}
}
```
5. Vad kommer följande kod skriva ut?
```java
public class A {
public void print(){
System.out.println("A");
}
}
public class B extends A{
@Override
public void print(){
System.out.println("B");
}
}
public class C extends A{
}
public class D extends B{
}
public class Main {
public static void main(String[] args) {
A obj1 = new A();
B obj2 = new B();
A obj3 = new C();
A obj4 = new D();
obj1.print();
obj2.print();
obj3.print();
obj4.print();
}
}
```
6. Nedan är en klass som har en metod för att slå en sexsidig tärning.
```java
public class Dice{
public String roll(){
Random random = new Random();
int randomNumber = random.nextInt(1,7); // Blir en siffra mellan 1 och 6
return randomNumber;
}
}
```
Skriv en *subklass* till `Dice` som heter `CheatingDice` som overridar metoden `roll` med en metod som alltid returnerar `6`.
### Internetkommunikation
7. Förklara vad som menas med en *request* när man kommunicerar över internet i java.
8. Förklara vad en *statuskod* är för något.
9. Förklara vad en API är för något, och ge ett exempel på hur de kan användas.
10. När man kör följande kod får man felet *"unreported exception java.io.IOException; must be caught or declared to be thrown"* på rad 8. Förklara vad som menas med det och hur man löser problemet.
```java=
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://numbersapi.com/75"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
```
### Generiska klasser
11. `ArrayList` är ett exempel på en *generisk klass*. Förklara vad det är som gör att den är generisk.
12. Hur skapar man en generisk klass?
13. Ge ett exempel på i vilket sammanhang generiska klasser är användbara
### Läsa och skriva filer
14. När man läser filer kan man använda sig av klassen `BufferedReader`. Den har en metod `readLine()`. Förklara vad metoden gör och ge ett exempel på hur man kan använda den.
15. Skriv några rader kod som läser igenom en hel fil med namnet "example.txt" med hjälp av en BufferedReader och en loop.
16. Vad kommer stå i filen "output.txt" efter att följande kod har körts?
```java
String fileName = "output.txt";
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write("HEJ!");
writer.newLine();
for(int i = 0; i < 3; i++){
writer.write(" " + i + " ");
}
writer.close();
} catch (Exception e) {
System.err.println("Det uppstod ett fel vid skrivning till filen: " + e.getMessage());
}
```