Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

----- Utkast -----

 

Excerpt
I denne oppgaven skal du lage  Denne oppgaven handler om en begrenset klone av Twitter. Du skal ha , med to klasser: , TwitterAccount og Tweet.

En Twitter-konto kan følge andre Twitter-kontoer og motsatt: en twitterTwitter-konto kan bli fulgt av andre Twitter-kontoer. Dette er altså en gjensidig kobling: Hvis konto A følger konto B, så er konto B fulgt av konto A. I tillegg har hver Twitter-konto ingen, en eller flere tweets. Der tweets mengde tweets, som er små, korte tekster. En tweet hører til den kontoen den ble sendt fra. Hvis noen finner en annen sin tweet interessant har man muligheten til å retweete denne. Da lager man en tweet med samme tekst, men som også husker den opprinnelige tweeten. Hvis som refererer til originalen, og (implisitt) får original-tweeten sin tekst. Merk at i en kjede av retweets, så vil alle referere til samme original-tweet. Mao., hvis tweet B er en retweet av A og tweet C er en retweet av B vil fremdeles A regnes opprinnelsestweeten til både B og C., vil både tweet B og C ha A som original-tweet, slik det er vist til venstre under.

PlantUML Macro
object "A: Tweet" as tweet1 {
	text = "Kvitre-kvitre"
}

object "B: Tweet" as tweet2 {
	text = "Kvitre-kvitre"
}

object "C: Tweet" as tweet3 {
	text = "Kvitre-kvitre"
}

tweet2 -down-> tweet1: "originalTweet"
tweet3 -down-> tweet1: "originalTweet"

Riktig objektstruktur, når #2 er en retweet av #1 og #3 er en retweet av #2

PlantUML Macro
object "A: Tweet" as tweet1 {
	text = "Kvitre-kvitre"
}

object "B: Tweet" as tweet2 {
	text = "Kvitre-kvitre"
}

object "C: Tweet" as tweet3 {
	text = "Kvitre-kvitre"
}

tweet2 -down-> tweet1: "originalTweet"
tweet3 -down-> tweet2: "originalTweet"

Feil objektstruktur, når #2 er en retweet av #1 og #3 er en retweet av #2

Tweet skal ha to konstruktører, en for hver måte å tweete på:

  • Tweet(TwitterAccount, String) - En ny original-tweet

  • Tweet(TwitterAccount, Tweet) - En retweet av Tweet-argumentet. Utløser IllegalStateException et passende unntak, hvis en konto retweeter seg selvoriginal-tweeten er fra samme konto.

Tweet skal ha metodene:

  • String getText() - returnerer teksten til en tweet

  • TwitterAccount getOwner() - returnerer eieren til kontoen som tweeten kom fra

  • Tweet getOriginalTweet() - returnerer original-tweeten den stammer fra. Hvis ikke en tweet , hvis den er en retweet stammer den fra seg selv, ellers null.

TwitterAccount skal ha konstruktøren:

...

TwitterAccount skal ha metodene:

  • getUsernamegetUserName() - returnerer brukernavnet

  • follow(TwitterAccount account) - start denne (this) kontoen starter å følge account

  • unfollow(TwitterAccount account) - slutt å følge account

  • isFollowing(TwitterAccount account) - returnerer om denne kontoen følger account

  • isFollowedBy(TwitterAccount account) - returnerer om account følger denne kontoen

  • tweet(String) - lager en ny tweet for denne kontoen

  • retweet(Tweet ttweet) - retweeter ttweet fra denne kontoen

  • getTweet(int i) - returner tweet nummer i, der 1 er den nyeste, 2 den nest nyeste, … (merk rekkefølgen!)

  • getTweetCount() - returner antall tweets til kontoen

...

  • Implementer Tweet-klassen.
  • For å teste klassen må du sende inn TwitterAccount-objekter i konstruktøren. Lag en mock forenklet versjon av TwitterAccount-klassen for dette formålet, der du kun implementerer konstruktøren og evt. en passende toString(). Dette gjør det mulig å teste Tweet-klassen din uten at du må implementere hele TwitterAccount-klassen først.

...

  • Implementer TwitterAccount-klassen.
  • Test klassen og dens samspill med Tweet-klassen ved å lage Twitter-konto for deg selv og noen av vennene dine. La noen av kontoene følge hverandre, tweete og retweete.

Det kommer JExercise-tester etterhvert...

Frivillig utvidelse

På Twitter kan man markere en annen sin tweet som en favoritt. Implementer passende metoder for å kunne gjøre dette. En konto må ha oversikt over hvilke tweets den har markert som favoritter, og en tweet må vite hvem og hvor mange som har markert den som favoritt. Hva synes du burde skje hvis man markerer en retweet som en favoritt?