En Twitter-konto kan følge andre Twitter-kontoer og motsatt: en Twitter-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. En kan selvsagt ikke følge seg selv.
I tillegg har hver Twitter-konto en 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 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 både tweet B og C ha A som original-tweet, slik det er vist til venstre under.
Tweet-klassen
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 et passende unntak, hvis original-tweeten er fra samme konto.
Tweet skal ha metodene:
String getText() - returnerer teksten til en tweet
TwitterAccount getOwner() - returnerer kontoen som tweeten kom fra
Tweet getOriginalTweet() - returnerer original-tweeten, hvis den er en retweet, ellers null
- int getRetweetCount() - returnerer antall ganger denne tweeten har blitt retweetet
Riktig objektstruktur, når B er en retweet av A og C er en retweet av B | Feil objektstruktur, når B er en retweet av A og C er en retweet av B |
TwitterAccount-klassen
TwitterAccount skal ha konstruktøren:
TwitterAccount(String) - som tar inn brukernavnet
TwitterAccount skal ha metodene:
String getUserName() - returnerer brukernavnet
void follow(TwitterAccount account) - denne (this) kontoen starter å følge account
void unfollow(TwitterAccount account) - slutt å følge account
boolean isFollowing(TwitterAccount account) - returnerer om denne kontoen følger account
boolean isFollowedBy(TwitterAccount account) - returnerer om account følger denne kontoen
void tweet(String) - lager en ny tweet for denne kontoen
void retweet(Tweet tweet) - retweeter tweet fra denne kontoen
Tweet getTweet(int i) - returner tweet nummer i, der 1 er den nyeste, 2 den nest nyeste, … (merk rekkefølgen!)
int getTweetCount() - returner antall tweets til kontoen
int getRetweetCount() - returner antall retweets av tweets fra denne kontoen
Trinn 1
- Implementer Tweet-klassen.
- For å teste klassen må du sende inn TwitterAccount-objekter i konstruktøren. Lag en 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.
Trinn 2
- 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.
JExercise-testkode for denne oppgaven finner du her: objectstructures/TweetTest.java og objectstructures/TwitterAccount.java. Original-koden (jextest) finner du her: objectstructures/Tweet.jextest og objectstructures/TwitterAccount.jextest.
.ex for bruk med Exercise-panelet finner du her: Twitter.ex.
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?
JExercise lar deg sjekke din egen kode vha. forhåndslagde JUnit-tester og JExercise-panelet.
Bruk av JExercise:
- Sørg for at jexercise-standalone.jar er lagt til i ditt prosjekts Build Path. Dette må gjøres hver gang du oppretter et nytt prosjekt, og det er derfor lurt å gjenbruke samme prosjekt til alle oppgaver.
- JExercise-tillegget må være installert. Installer tillegget fra følgende oppdateringsadresse: http://folk.ntnu.no/hal/dev/updatesite.
- Åpne JExercise-panelet via Window -> Show View -> Other, og navigere deg fram til JExercise i vinduet som kommer opp, velge det og klikke OK.
- Klikke og dra oppgavens testklasse, <oppgavenavn>Test.java fra pakkeoversikten og slippe den i JExercise panelet.
- Testene kan så kjøres ved å dobbeltklikke på testen som ønskes kjørt.
Ved trøbbel, se først om du finner løsningen i Løsninger på trøbbel med JExercise.
Twitre gjerne om oppgaven når du er ferdig: <a href="https://twitter.com/share" class="twitter-share-button" data-hashtags="jexercise">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>