# Øving 5: Grensesnitt

## Øvingsmål

- Lære hva grensesnitt er og hvordan disse defineres
- Lære hvordan man implementerer et grensesnitt
- Kjenne til grunnleggende funksjonelle grensesnitt

## Øvingskrav

- Kunne lage grensesnitt og implementere disse med andre klasser
- Kunne bruke grensesnittene `Comparable<T>` og `Comparator<T>`
- Kunne bruke grensesnittene `Iterable<T>` og `Iterator<T>`

## Dette må du gjøre

### Del 1: Programmering

Gjør **minst to** av oppgavene under, for å få 2 poeng må det gjøres **minst fire** av oppgavene under, og minst en av dem må være markert som vanskelig. Oppgavene skal lagres i [`src/main/java/oving5`](../../src/main/java/oving5).

- [TicketControl](./TicketControl.md) (Lett)
- [CardContainer](./CardContainer.md) (Lett)
- [CardPredicate](./CardPredicate.md) (Lett)
- [CardComparison](./CardComparison.md) (Medium)
- [Twitter](./Twitter.md) (Medium)
- [Named](./Named.md) (Medium)
- [BinaryComputingIterator](./BinaryComputingIterator.md) (Vanskelig)
- [StringGrid](./StringGrid.md) (Vanskelig)
- [RPNKalkulator med funksjonelle grensesnitt](./RPNCalc.md) (Vanskelig)

Alle oppgavene er høyst eksamensrelevante. Vi har imidlertid valgt å trappe ned kravene for `Iterator`, så spesielt `StringGrid` går dypere i temaet enn dere kan forvente å se på eksamen.

### Del 2: Debugging

Gjør følgende oppgave om debugging og vis frem løsningen til studass på sal:

- [StringMergingIterator](./StringMergingIterator.md)

### Del 3: Sekvensdiagram

Lag et [sekvensdiagram](https://www.ntnu.no/wiki/display/tdt4100/Sekvensdiagrammer) som viser samhandlingen mellom et `StringMergingIterator`-objekt og dens argumenter. Dvs. lag et [sekvensdiagram](https://www.ntnu.no/wiki/display/tdt4100/Sekvensdiagrammer) som viser hvordan `StringMergingIterator` gjennom metodekall fletter verdiene fra de to gitte iteratorene (som blir tatt inn som argumentene til `StringMergingIterator`-objektet). Du trenger ikke å levere inn diagrammet på Blackboard.

### Hjelp / mistanke om bugs

Ved spørsmål eller behov for hjelp konsulter studassen din i saltiden hans / hennes. Du kan også oppsøke andre studasser på sal eller legge ut et innlegg på [Piazza](https://piazza.com/ntnu.no/spring2025/tdt4100).

### Godkjenning

Last opp kildekode på Blackboard innen den angitte innleveringsfristen. Innlevert kode skal demonstreres for en læringsassistent innen én uke etter innleveringsfrist. Se for øvrig Blackboard-sidene for informasjon rundt organisering av øvingsopplegget og det tilhørende øvingsreglementet.
