Objektorientert Programmering
Huskeliste
Etter å ha skrevet en klasse er det nyttig å sjekke at man har:
- Arvet og/eller implementert riktige superklasser/grensesnitt.
- Valgt riktig av class, abstract class og interface.
- Gjort felter private (eller protected ved arv).
- Gjort felter som ikke skal endres final.
- Initialisert felter som ikke skal være null, enten ved deklarasjon eller i konstruktør.
- For hver metode:
- Gjort private dersom den bare brukes internt, public ellers.
- Validert argumentene.
- Kastet hensiktsmessige exceptions.
- Innkapsling: returnere kopi av f.eks. liste
- Gjort static dersom den er helt uavhengig av objektets tilstand.
- Skrevet @Override dersom den overskriver.
- Gjort abstract dersom den ikke er implementert og klassen er abstract.
- Fikset alle error (rød strek).
- Testet metodene vha. en main-metode.
- Importert riktig og fjernet ubrukte importeringer.
Java Grensesnitt
Collection og List
Iterator og Iterable
Metoder
Iterator-grensesnittet har metodene
- boolean hasNext();
- T next();
Iterable-grensesnittet har metoden
- IteratorT iterator();
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).
- String s.substring(pos)
- boolean s.endsWith("]")
- boolean s.startsWith("[")
- String[] s.split(",")
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
public static double random_range(double min, double max) {
return Math.random() _ (max - min + 1) + min;
}
Random int
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:
- addListener
- removeListener
- notifyListeners
Nyttige metoder i observatør:
- receiveUpdate
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
- assertTrue
- assertFalse
- assertEquals
- assertNotEquals
- assertThrows
- assertNull
- fail
Annotasjoner
- @BeforeAll
- @BeforeEach
- @Test
- @AfterEach
- @AfterAll
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();