Objektorientert Programmering

Huskeliste

Etter å ha skrevet en klasse er det nyttig å sjekke at man har:

Java Grensesnitt

Collection og List

Iterator og Iterable

Metoder

Iterator-grensesnittet har metodene

Iterable-grensesnittet har metoden

Man kan altså alltid får en Iterator fra en Iterable.

Iterasjon

Å iterere gjennom en iterator

Iterator<T> iterator;
while (iterator.hasNext()) {
  T element = iterator.next();
}

Å iterere gjennom en iterable

Iterable<T> iterable;
for (T element : iterable) {
}

2

Java Funksjonelle Grensesnitt

Predicate

// TODO

Comparator og Comparable

Klasser som implementerer Comparator-grensesnittet har en metode int compare().\Eksempel:

public int compare(Person o1, Person o2) {
  return o1.getAge()- o2.getAge()
}

Man kan også definere en Comparator som en funksjon:

Comparator<Book> comparator = (book1, book2) ->
  book1.getName().compareTo(book2.getName());

Klasser som implementerer Comparable har en metode compareTo(). En Collection med objekter som er Comparable kan sorteres ved Collections.sort(collection). String og Integer er eksempler på klasser som er Comparable.

Java Klasser

Scanner

Lese fra fil

File file = new File(filename);
try {
  Scanner scanner = new Scanner(file);
  while(scanner.hasNextLine()) {
    String line = scanner.nextLine();
    // Do something with the line
  }
  scanner.close();
} catch (FileNotFoundException e) {
  e.printStackTrace();
}

Lese fra stream (og user input)

Stream stream = System.in; // For user input
Scanner scanner = new Scanner(stream);
while(scanner.hasNextLine()) {
  String line = scanner.nextLine();
  // Do something with the line
}

String

Strengmanipulasjon

Man kan dele opp strenger ved bruk av s.substring(pos).

Skal man samle sammen strenger bruk StringBuilder. Her kan man ta builder.append(s)

Random

Math.random()

Math.random() returnerer en tilfeldig double mellom 0 og 1.

Random double [min,max]\in [min,\,max]

public static double random_range(double min, double max) {
  return Math.random() _ (max - min + 1) + min;
}

Random int [min,max]\in [min,\,max]

public static int random_range(int min, int max) {
  return (int) (Math.random() _ (max - min + 1)) + min;
}

Stream

Ved hjelp av streams kan man forenkle en rekke problemer som har å gjøre med sett av objekter.\ Stream fra Collection:

Collection<Object> objects;
objects.stream()...

Stream fra array:

Object[] objects;
Arrays.stream(objects)...

collect - fra liste til stream og tilbake

books = books.stream()
  .collect(Collectors.toList());

filter - bestemme et kriterium

List<Book> longBooks;
longBooks = books.stream()
  .filter(book -> book.getPages() > 500)
  .collect(Collectors.toList());

findAny - hente ut et element

Book myBook;
Person me;
myBook = books.stream()
  .filter(book -> book.getOwner() == me)
  .findAny()
  .orElse(null);

count - telle antall i streamen

int numberOfBooksIOwn;
Person me;
numberOfBooksIOwn = (int) books.stream()
  .filter(book -> book.getOwner() == me)
  .count();

sorted - sortere en stream

Comparator<Book> comparator = (book1, book2) -> {
return book1.getName().compareTo(book2.getName());
};
List<Book> sortedBooks;
sortedBooks = books.stream()
  .sorted(comparator)
  .collect(Collectors.toList());

anyMatch

boolean doesHarryPotterExist;
doesHarryPotterExist = books.stream()
  .anyMatch(book -> book.getName().equals("Harry Potter"));

Teknikker

Observeratør og observert

Denne teknikken sørger for at informasjon oppdateres i nødvendige objekter slik at den er konsistent. Man lager gjerne en interface for observatøren. Merk: Observer og listener omtaler det samme. Nyttige metoder i observert:

Nyttige metoder i observatør:

JUnit 5 - Tester

Importering av junit skal gjerne være på formen:

import static org.junit.jupiter.api.Assertions._;
import org.junit.jupiter.api._;

Metoder

Annotasjoner

FXML

Gettere og settere

For de fleste klasser i JavaFX gjelder det at en henter verdi/tekst ved .getValue()/.getText() og setter verdi/tekst ved .setValue()/.setText().

Rullegardin

Hvis det er flere valgmuligheter så må man bruke en metode for å hente den

Eksempel

char item = typeSelector.getSelectionModel().getSelectedItem();