Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Samankaltaiset tiedostot
Ohjelmoinnin jatkokurssi, kurssikoe

Rajapinta (interface)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Listarakenne (ArrayList-luokka)

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Tietorakenteet, laskuharjoitus 8, malliratkaisut

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmistojen mallintaminen, syksy 2010, laskuharjoitus 5

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

Hakemistojen sisällöt säilötään linkitetyille listalle.

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

Java kahdessa tunnissa. Jyry Suvilehto

15. Ohjelmoinnin tekniikkaa 15.1

16. Javan omat luokat 16.1

Ohjelmoinnin perusteet, kurssikoe

Java-API, rajapinnat, poikkeukset, UML,...

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Tietorakenteet, laskuharjoitus 7,

Avainsanat: peli, matematiikka, polynomi, yhteen- ja vähennyslasku, kertolasku

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Olio-ohjelmointi Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton. 1. Proxy (Edustaja)

Luento 2. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Algoritmit 2. Luento 3 Ti Timo Männikkö

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

7/20: Paketti kasassa ensimmäistä kertaa

Javan perusteita. Janne Käki

1 Tehtävän kuvaus ja analysointi

Algoritmit 2. Luento 3 Ti Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

Muusta kuin vesisioista

Javan GUI Scratchaajalle

8/20: Luokat, oliot ja APIt

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

18. Abstraktit tietotyypit 18.1

Osio2: Taulukot Jukka Juslin

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Algoritmit 2. Luento 2 Ke Timo Männikkö

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

UML ja luokkien väliset suhteet

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Algoritmit 2. Luento 2 To Timo Männikkö

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Ohjelmistojen mallintaminen. Luento 3, 9.11.

Java-kielen perusteet

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmistojen mallintaminen. Luento 4,

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Tietorakenteet ja algoritmit - syksy

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Luokan sisällä on lista

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Impedanssitomografia-peli

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

19/20: Ikkuna olio-ohjelmoinnin maailmaan

Taulukot. Jukka Harju, Jukka Juslin

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

1. Olio-ohjelmointi 1.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Algoritmit 2. Luento 7 Ti Timo Männikkö

Testivetoinen ohjelmistokehitys

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Pakkauksen kokoaminen

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Harjoitustehtävät ja ratkaisut viikolle 48

Sarjallistaminen. Juha Järvensivu 2007

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

TyontekijaOhjelma. +main() (käyttää) + = public - = private

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

Transkriptio:

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia Tehtävä 1 Tehtävässä 1 mallinnettiin Monopolipeliä. Alla olevassa esimerkissä peliin liittyy aina 2 noppaa, peliä pelataan pelilaudalla, eikä pelilautaa voi olla ilman peliä. Peliin liittyy aina 1 pelilauta. Pelilauta koostuu 40 ruudusta, joista jokainen tietää seuraavan ruutunsa. Pelinappula, joita pelissä on yhteensä pelaajien määrä, sijaitsee aina jollain ruudulla. Pelaajia monopolipelissä on 2-8. Tehtävä 2 Tehtävässä 2 tarkasteltiin yliopiston kursseihin, niiden esitietovaatimuksiin, kurssitoteutuksiin ja opettajiin liittyviä tilanteita. Kurssilla voi olla esitietovaatimuksina muita kursseja, ja siitä tehdään kurssitoteutuksia. Kurssilla on siis aina kattokäsite, joka sisältää kurssin nimen ja muita yleisiä tietoja. Kurssitoteutukset taas ovat konkreettisia kurssista pidettäviä luentosarjoja, joihin liittyy muuta tietoa kuten luento- ja laskariajat. Kurssia luennoi 1 henkilö, ja siihen liittyy 1 tai useampi laskariryhmä. Laskariryhmillä on myös aina 1 assistentti Henkilö. Kurssitoteutusta ei voi olla ilman kurssia. Ilman kurssitoteutusta ei ole siihen liittyviä laskariryhmiä eikä kokeita.

Huomio esitietovaatimuksista: Kurssien välinen yhteys esitietovaatimukset on oikeastaan kaksisuuntainen. Tietty kurssi, esim. Ohjelmoinnin jatkokurssi on esitietovaatimus esim. kurssille Tietorakenteet. Ohjelmoinnin jatkokurssilla on esitietovaatimuksena kurssi Ohjelmoinnin perusteet. Kuvassa yksi yhteysviiva siis pitää sisällään kaksi suuntaa. Oikealta vasemmalle tarkasteltaessa liitetään kurssi niihin kursseihin jotka edellytettään suoritetuksi ennen kurssia. Vasemmalta oikealle tarkasteltaessa yhteys taas liittää kurssin niihin kursseihin joihin osallistumisen edellytyksenä sen suoritus on. Tehtävä 3 Tehtävässä 3 pyydettiin oliokaaviota tehtävän 5 luokkakaavion pohjalta. Alla esitettynä syksyn 2010 tilanne ohjelmistojen mallintaminen-kurssin osalta.

Tehtävä 4: Tehtävä 5:

Tehtävä 6: Luokkien ArrayList ja HashSet paikka Javan luokkahierarkiassa. Ohjelmoijan kannalta tärkeämpään osaan nousevat kuitenkin rajapinnat, joita joukot toteuttavat. Tarkastellaan seuraavaksi niitä. ArrayList HashSet Serializable x x Cloneable x x Iterable x x Collection x x List RandomAccess Set x x Serializable tarkoittaa, että olio on lupa tallettaa levylle tai lähettää esim. verkon yli toiselle ohjelmalle. Cloneable tarkoittaa, että olioista voi ottaa pintakopion clone()-metodilla. Jos ArrayList tai HashSet kopioidaan clone():lla, eivät niiden sisältämät oliot kopioidu. Iterable tarkoittaa, että säiliöluokassa olevat oliot on mahdollista käydä läpi for-each-komennolla tai ns. Iteraattorilla. Collection tarkoittaa, että kyseessä on kokoelma alkoita. Rajapinta määrittelee esim. Metodit add ja remove. Koska sekä HashSet että ArrayList toteuttavat Collection (ja Iterable) -rajapinnan, voidaan niitä käsitellä samalla tavalla. Esim. koodi: sanat.add( eka ); sanat.add( toka ); sanat.add( otm ); for ( String sana : sanat ) { x

} System.out.println( sana ); sanat.remove( otm ); toimii kummallekin seuraavista: ArrayList<String> sanat; HashSet<String> sanat; List tarkoittaa, että alkiot on talletettu rajapinnan toteuttaviin kokoelmiin järjestyksessä, eli kokoelmilla on mm. Metodi get(int i), jolla saadaan kokoelmassa i:ntenä oleva alkio. HashSet ei toteuta rajapintaa List. RandomAccess tarkoittaa, että alkiot ovat List:in vaatimaan tapaan tietyissa paikoissa, ja, että metodin get(int I) suoritus on nopea. (Tarkemmin sanottuna operaatio vakioaikainen, List:issä se on lineaarinen. Näistä enemmän kevään kurssilla Tietorakenteet). Set tarkoittaa, että kyseessä on joukko. Kuten matematiikasta muistamme tietyn alkion voi tallettaa joukkoon vaan kertaalleen. Eli jos luku 1 on joukossa, ja se lisätään joukkoon uudelleen, tuloksena on edelleen sama joukko. HashSet toteuttaa rajapinnan Set. ArrayList taas ei toteuta, eli ArrayList:issä voi samaa alkiota olla useita. Tehtävä 7: HashMap, TreeMap ja EnumMap toteuttavat siis rajapinnan Map koska abstrakti yliluokka AbstractMap toteuttaa sen. Luokat toteuttavat myös kuvaan merkitsemättömät rajapinnat Serializable ja Cloneable. Rajapinta Map määrittelee "mappien" toiminnallisuuden, eli kaikki tallettavat avain-arvo-pareja, ja mahdollistavat mm. avainten sekä arvojen läpikäynnin.

Kaikki mapit eroavat huomattavasti sisäiseltä toteutukseltaan. Tehokkain kaikista on EnumMap, mutta se on myös rajoitetuin, avainten on oltava Enumeja. HashMap on keskimääräisissä tapauksissa hieman nopeampi kuin TreeMap. TreeMapin etuna on se, että avain-arvoparit tallentuvat treemapin sisälle avainten mukaan järjestettynä. Järjestys taas määrittyy avaimena olevan luokan luonnollisen järjestyksen, eli compareto-metodin mukaan ellei treemapin konstruktorissa anneta erilaista järjestyskriteerioa.