Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:



Samankaltaiset tiedostot
Olio-ohjelmointi Javalla

Metodien tekeminen Javalla

Mikä yhteyssuhde on?

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

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

Periytyminen (inheritance)

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

YHTEYSSUHDE (assosiation)

Luokat ja oliot. Ville Sundberg

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Ohjelmoinnin jatkokurssi, kurssikoe

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

9. Periytyminen Javassa 9.1

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

C# olio-ohjelmointi perusopas

ITKP102 Ohjelmointi 1 (6 op)

Luokan sisällä on lista

Listarakenne (ArrayList-luokka)

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Javan perusteita. Janne Käki

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

7. Näytölle tulostaminen 7.1

KOHDELUOKAN MÄÄRITTELY

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

1 Tehtävän kuvaus ja analysointi

9. Periytyminen Javassa 9.1

1. Omat operaatiot 1.1

Java-kielen perusteet

Rajapinta (interface)

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

4. Luokan testaus ja käyttö olion kautta 4.1

Web järjestelmän ohjelmointi Kevät 2012 Hans Nieminen

17. Javan omat luokat 17.1

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

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

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

Olio-ohjelmointi Syntaksikokoelma

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

14. Poikkeukset 14.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Ohjelmointi 2, välikoe

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

20. Javan omat luokat 20.1

Metodien tekeminen Javalla

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

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

19. Olio-ohjelmointia Javalla 19.1

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmoinnin perusteet, kurssikoe

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Java-kielen perusteita

7. Oliot ja viitteet 7.1

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Ohjelmoinnin perusteet, 1. välikoe

public static void main (String [] args)

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

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

16. Javan omat luokat 16.1

ITKP102 Ohjelmointi 1 (6 op)

14. Poikkeukset 14.1

Java-kielen perusteet

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Java-kielen perusteita

Taulukoiden käsittely Javalla

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

Java kahdessa tunnissa. Jyry Suvilehto

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

17. Javan omat luokat 17.1

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

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Tietokannat II -kurssin harjoitustyö

Lista luokan sisällä

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Taulukot. Jukka Harju, Jukka Juslin

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

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Ohjelmistotekniikan menetelmät, koe

8. Näppäimistöltä lukeminen 8.1

13. Loogiset operaatiot 13.1

ITKP102 Ohjelmointi 1 (6 op)

Rinnakkaisohjelmointi, Syksy 2006

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Javan GUI Scratchaajalle

1. Mitä tehdään ensiksi?

Transkriptio:

Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int SiivenPituus get return _siivenpituus; set _siivenpituus = value; public virtual double AivojenKoko get return _aivojenkoko; set _aivojenkoko = value; public bool OsaakoLentaa get return _osaakolentaa; set _osaakolentaa = value; //Konstruktorit public Lintu() _siivenpituus = 11; _aivojenkoko = 100; _osaakolentaa = false; class Pelikaani : Lintu //Kentät private int _nokankoko; private int _ika; //Ominaisuudet public override double AivojenKoko get return _aivojenkoko; set _aivojenkoko = value * 2; public int NokanKoko get return _nokankoko; set _nokankoko = value; //Konstruktorit public Pelikaani() // TEHTÄVÄN b-kohdan SISÄLTÖ TÄHÄN 1

class Program static void Main(string[] args) Lintu isolintu; Pelikaani petteri; isolintu = new Lintu(); petteri = new Pelikaani(); // TEHTÄVÄN a-kohdan SISÄLTÖ TÄHÄN a. Mitkä seuraavista lauseista ovat mahdollisia metodissa Main(): a. petteri._aivojenkoko = 3.2; b. petteri._siivenpituus = 7; c. petteri.osaakolentaa = true; d. petteri._ika = 3; e. petteri.nokankoko = 4; f. petteri.siivenpituus = 7; b. Mitkä seuraavista lauseista ovat mahdollisia konstruktorissa Pelikaani(): a. _aivojenkoko = 3.2; b. _siivenpituus = 7; c. OsaakoLentaa = true; d. _ika = 3; e. _nokankoko = 4; f. AivojenKoko = 1.2; g. SiivenPituus = 4; h. Lintu(); i. base(); 2. Olkoon olemassa seuraava luokka Piste: class Piste //Kentät private int _x; private int _y; //Ominaisuudet public int X get return _x; set _x = value; public int Y get return _y; set _y = value; //Konstruktorit public Piste(int x, int y) 2

_x = x; _y = y; //Metodit public override string ToString() return "(" + _x + ", " + _y + ")"; Ohjelmoi C# kielellä luokka PiirtoElementti: Kentät: _sijainti, johon tallettuu tieto piirtoelementin sijainnista koordinaatistossa (eli arvoksi tulee Piste olio) Ominaisuudet: Sijainti, jolla kapseloidaan kenttä _sijainti. Konstruktorit: PiirtoElementti(), jossa Piste tyyppinen parametri sijainti konstruktori asettaa kentän _sijainti arvoksi parametrissa sijainti välitetyn olion Metodit: ToString(), joka ylikirjoitetaan (määre override) perimässä (luokasta object) tulevasta ToString() metodista o palauttaa paluuarvonaan sijainnin koordinaatit merkkijonona muodossa sijainti: (x koordinaatti, y koordinaatti) esim. sijainti: (2, 5) Piirra(), joka määritellään ylikirjoitettavaksi määreellä virtual o sisältö jätetään toistaiseksi tyhjäksi 3. Ohjelmoi C# kielellä luokat Nelio ja Viiva, jotka erikoistetaan luokasta PiirtoElementti: 3

Luokka Nelio: kenttä _sarma sisältää neliön särmän (sivun) pituuden perimässä tuleva ominaisuus Sijainti kertoo neliön vasemman yläkulman koordinaatit ominaisuus Sarma on kentän _sarma käsittelyyn konstruktori Nelio(), jossa on kaksi parametria sijainti (Piste) ja sarma (int) o kutsuu kantaluokkansa konstruktoria antamalla argumentiksi parametrinsa sijainti o sijoittaa kenttään _sarma parametrin sarma arvon metodi ToString(), jolla ylikirjoitetaan (override) kantaluokan vastaava metodi o palauttaa arvonaan merkkijonona neliön tiedot muodossa: sijainti: (xkoordinaatti, y koordinaatti), sivun pituus: sarma esim. sijainti: (2, 5), sivun pituus: 4 huomaa, että paluuarvon osuus sijainti: (x koordinaatti, y koordinaatti) voidaan tuottaa kantaluokan ToString() metodilla. metodi Piirra(), jolla ylikirjoitetaan (override) kantaluokan vastaava metodi o sisältö jätetään toistaiseksi tyhjäksi Luokka Viiva: kenttä _loppupiste sisältää viivan loppupisteen koordinaatit (Piste olio) perimässä tuleva ominaisuus Sijainti kertoo viivan alkupisteen koordinaatit (Piste olio) ominaisuus LoppuPiste on kentän _ loppupiste käsittelyyn konstruktori Viiva(), jossa on kaksi parametria alkupiste (Piste) ja loppupiste (Piste) o kutsuu kantaluokkansa konstruktoria antamalla argumentiksi parametrinsa alkupiste (Piste olio) o sijoittaa kenttään _ loppupiste parametrin loppupiste arvon (Piste olio) metodi ToString(), jolla ylikirjoitetaan (override) kantaluokan vastaava metodi o palauttaa arvonaan merkkijonona neliön tiedot muodossa: alkupiste: (xkoordinaatti, y koordinaatti), loppupiste: (x koordinaatti, y koordinaatti) esim. alkupiste: (2, 5), loppupiste: (2, 9) alkupiste saadaan ominaisuudesta Sijainti. metodi Piirra(), jolla ylikirjoitetaan (override) kantaluokan vastaava metodi o sisältö jätetään toistaiseksi tyhjäksi 4

4. Tee luokka Osoite: merkkijonokentät _katuosoite, _postinro ja _postitoimipaikka ja niitä kapseloivat ominaisuudet Katuosoite, Postinro ja Postitoimipaikka konstruktori Osoite(), jossa ei parametreja eikä toiminnallisuutta ylikirjoitettu metodi ToString(), joka palauttaa Osoite olion merkkijonona muodossa: <katuosoite>, <postinumero> <postitoimipaikka> (esim. Tiedepuisto 3, 28600 PORI ). Tee abstrakti luokka Myyntikohde kentät _kohdeid (merkkijono), _osoite (Osoite), _rakennusvuosi (kokonaisluku) ja _arvo (desimaaliluku). Näkyvyysmääreenä kaikilla näillä on protected. konstruktori MyyntiKohde(), jossa parametrin os sisältämä Osoite olio sijoitetaan kenttään _osoite. abstrakti metodi TulostaTiedot() ( abstraktissa metodissa kirjoitetaan vain otsikko osa). 5. Periytä edellä tehdystä luokasta MyyntiKohde luokat OmaKotiTalo ja OsakeHuoneisto: 5

MyyntiKohde #_kohdeid : string #_osoite : Osoite #_rakennusvuosi : int #_arvo : double +MyyntiKohde(in os : Osoite) +TulostaTiedot() OmaKotiTalo -_omatontti : bool -_tontinkoko : double +KohdeId : string +Osoite : Osoite +RakennusVuosi : int +Hinta : double +OmaTontti : bool +TontinKoko : double +OmaKotiTalo(in os : Osoite) +TulostaTiedot() OsakeHuoneisto -_kerros : int -_yhtiovastike : double +KohdeID : string +Osoite : Osoite +RakennusVuosi : int +Hinta : double +Kerros : int +YhtioVastike : double +OsakeHuoneisto(in os : Osoite) +TulostaTiedot() Luokka OmaKotiTalo: periytetään abstraktista luokasta MyyntiKohde kentät _omatontti (totuusarvo) ja _tontinkoko (desimaaliluku) ominaisuudet kaikkien kenttien kapselointiin (eli sekä kantaluokan että varsinaisen luokan kenttien): KohdeId, Osoite,RakennusVuosi, Hinta, OmaTontti ja TontinKoko. o ominaisuuden KohdeId get metodissa palautetaan joko kentän _kohdeid arvo tai merkkijono N/A. Jälkimmäinen siinä tapauksessa, että kentän _kohdeid arvona on tyhjä merkkijono. konstruktori OmaKotiTalo(), jossa parametrina Osoite tyyppinen os ja toimintana kutsutaan kantaluokan (base) konstruktoria argumentilla os sekä asetetaan kentän KohdeId arvoksi tyhjä merkkijono. metodi TulostaTiedot(), joka tulostaa komentokehotteeseen olion tiedot seuraavasti: Omakotitalo: kohdeid: ominaisuuden KohdeId arvo osoite: ominaisuuden Osoite sisältämän olion ToString() rakennusvuosi: ominaisuuden RakennusVuosi arvo merkkijonona hinta: ominaisuuden Hinta arvo merkkijonona oma tontti: omin. OmaTontti arvon perusteella joko kyllä tai ei tontin koko: ominaisuuden TontinKoko arvo merkkijonona Luokka OsakeHuoneisto: periytetään abstraktista luokasta MyyntiKohde kentät _kerros (kokonaisluku) ja _yhtiovastike (desimaaliluku) ominaisuudet kaikkien kenttien kapselointiin (eli sekä kantaluokan että varsinaisen luokan kenttien): KohdeId, Osoite,RakennusVuosi, Hinta, Kerros ja YhtioVastike. o ominaisuuden KohdeId get metodissa palautetaan joko kentän _kohdeid arvo tai merkkijono N/A. Jälkimmäinen siinä tapauksessa, että kentän _kohdeid arvona on tyhjä merkkijono. (SAMOIN KUIN luokassa OmaKotiTalo) konstruktori OsakeHuoneisto(), jossa parametrina Osoite tyyppinen os ja toimintana kutsutaan kantaluokan (base) konstruktoria argumentilla os sekä asetetaan kentän KohdeId arvoksi tyhjä merkkijono. (SAMOIN KUIN luokassa OmaKotiTalo) metodi TulostaTiedot(), joka tulostaa komentokehotteeseen olion tiedot seuraavasti: 6

Osakehuoneisto: kohdeid: ominaisuuden KohdeId arvo osoite: ominaisuuden Osoite sisältämän olion ToString() rakennusvuosi: ominaisuuden RakennusVuosi arvo merkkijonona hinta: ominaisuuden Hinta arvo merkkijonona kerros: ominaisuuden Kerros arvo merkkijonona yhtiövastike: ominaisuuden YhtioVastike arvo merkkijonona 6. Jatka edellistä tehtävää toteuttamalla Main metodiin seuraava toiminnallisuus: Määrittele OmaKotiTalo tyyppinen muuttuja kohde 1 ja OsakeHuoneisto tyyppinen muuttuja kohde 2. Aseta molempiin arvoksi null. Ohjelma kysyy käyttäjältä haluaako tämä tehdä 1) Omakotitalo vai 2)Osakehuoneistokohteen. o jos käyttäjä valitsee 1, tehdään OmaKotiTalo olio (ks. alla) o jos käyttäjä valitsee 2, tehdään OsakeHuoneisto olio (ks. alla) o jos käyttäjä valitsee jotain muuta, tulostetaan teksti Et valinnut kumpaakaan OmaKotiTalo olion perustaminen: o pyydetään käyttäjältä omakotitalon osoite ja luodaan Osoite olio o luodaan OmaKotiTalo olio muuttujaan kohde1 o pyydetään loput tiedot lukuunottamatta KohdeId tietoa ja asetetaan ne OmaKotiTalo olion ominaisuuksiin Huomaa oman tontin kysymisen kohdalla, että käyttäjä syöttää merkin (K tai E). Tämän perusteella sijoitetaan ominaisuuteen OmaTontti arvoksi joko true tai false. OsakeHuoneisto olion perustaminen: o pyydetään käyttäjältä osakehuoneiston osoite ja luodaan Osoite olio o luodaan OsakeHuoneisto olio muuttujaan kohde2 o pyydetään loput tiedot lukuunottamatta KohdeId tietoa ja asetetaan ne OsakeHuoneisto olion ominaisuuksiin Lopuksi ohjelma tulostaa joko OmaKotiTalo olion tai OsakeHuoneisto olion sisällön metodilla TulostaTiedot() riippuen siitä, mikä olio on olemassa. Jos kumpaakaan ei ole olemassa, ei tulosteta enää mitään. 7

8