Tehtävät : Olio-ohjelmoinnin perusteet - kapselointi ja perintä

UML-luokkakaaviot

Alla olevissa tehtävissä voit käyttää webistä löytyvää Flow Chart Maker & Online Diagram Software -palvelua luokkakaavioiden suunnittelussa.

Syötteenlukeminen näppäimistöltä

Muista käyttää Console-luokkaa näppäimistöltä lukemiseen ja näyttölaitteelle tulostamiseen.


    // ask number from the user (read one line)
    Console.Write("Give a number > ");
    string line = Console.ReadLine();
    // try to read number from the given line
    int number;
    bool result = int.TryParse(line, out number);
    // number (integer) was given correctly, use it..
    if (result) {
        Console.WriteLine("Number was " + number);
    }
    

Luokkien ja luokan jäsenten suunnitteluperiaatteista

Ennen kuin lähdet toteuttamaan omia luokkia niin lue huolellisesti läpi nämä yleiset olioitten suunniteluperiaatteet MSDN:stä Member Design Guidelines

Tehtävä 1

Tee luokka, jolla on seuraavat staattiset metodit:
bool OnkoLuku(string syote) ja bool OnkoPvm(string syote)
Metodi OnkoLuku tutkii annetun merkkijonon ja palauttaa true jos syöte on muunnettavissa luvuksi (kokonaisluku tai desimaaliluku erottimena pilkku, pistettä ei hyväksytä).
Metodi OnkoPvm tutkii annetun merkkijonon ja palauttaa true jos syöte on suomalaisessa päivämäärämuodossa siis joko muotoa "pp.kk.vv" tai "pp.kk.vvvv", eli metodi esimerkiksi tunnistaa seuraavat merkkijonot päivämääriksi "1.2.13", "1.10.2017", "12.12.2017", "24.12.17"
Seuraavia syötteitä ei kelpuuteta: "12,12,2016" --> väärä erotin, tai "12.13.2017" --> väärä kuukausi tai "30.2.2017" --> helmikuussa ei ole kolmeakymmentä päivää!
Tee testausta varten luokka TestiPeti, ja sinne sopiva metodi jolla testaat erilaisia vaihtoehtoja.
Alla esimerkin omainen Metodin OnkoLuku testaus kelvollisilla ja epäkelvoilla syötteillä.

Knoppikysymys:
Jos vertaat yllä olevaa kuvaa ja alla olevaa kuvaa huomaat että opettajalta on jäänyt yksi tarkistus vielä tekemättä. Mikä? Miten korjaisit algoritmin?

Tehtävä 2

Tehtävänäsi on ohjelmoida Dynamon hissin kerroksen ohjaukseen liittyvä säädin. Toteutetun ohjelman tulee pystyä kysymään käyttäjältä haluttu kerros ja siirtämään hissi haluttuun kerrokseen (tässä tapauksessa ohjelma kertoo käyttäjälle missä kerroksessa hissi on). Muista, että Dynamon hissi voi olla vain kerroksissa 1-5. Käytä Hissi-luokassa get- ja set-aksessoreita suojamaan olion tila.

Esimerkkitoiminta:

 
    Elevator is now in floor : 1
    Give a new floor number (1-5) > 2
    Elevator is now in floor : 2
    Give a new floor number (1-5) > 3
    Elevator is now in floor : 3
    Give a new floor number (1-5) > 5
    Elevator is now in floor : 5
    Give a new floor number (1-5) > -1
    Floor is too small!
    Elevator is now in floor : 5
    Give a new floor number (1-5) > 6
    Floor is too big!
    Elevator is now in floor : 5
    Give a new floor number (1-5) > 2
    Elevator is now in floor : 2
    

Tehtävä 3

Tehtävänäsi on ohjelmoida yksinkertaisen vahvistimen toiminta, jolla voidaan kontrolloida äänenvoimakkuutta välillä 0-100. Toteuta Vahvistin-luokka ja tee pääohjelma, jolla luot olion Vahvistin-luokasta. Säädä ja kokeile vahvistinta eri äänenvoimakkuuksilla. Käytä Vahvistin-luokassa get- ja set-aksessoreita. get-aksessori palauttaa äänenvoimakkuuden ja set-aksessori rajaa äänenvoimakkuuden arvoa.

Esimerkkitoiminta:

    
    Give a new volume value (0-100) > 100
    -> Amplifier volume is set to : 100
    Give a new volume value (0-100) > 40
    -> Amplifier volume is set to : 40
    Give a new volume value (0-100) > 0
    -> Amplifier volume is set to : 0
    Give a new volume value (0-100) > -10
    -> Too low volume - Amplifier volume is set to minimum : 0
    Give a new volume value (0-100) > 200
    -> Too much volume -  Amplifier volume is set to maximum : 100
    Give a new volume value (0-100) > 35
    -> Amplifier volume is set to : 35
    

Tehtävä 4

Ohjelmassa tulee pystyä käsittelemään työntekijöiden tietoja (Employee). Työntekijöiden osalta seuraavia tietoa pitää pystyä käsittelemään: työntekijän nimi (Name), työntekijän ammatti (Profession) ja palkka (Salary). Samassa ohjelmassa pitää pystyä käsittelemään myös johtajien tietoja (Boss), heillä on edellisten lisäksi myös auto (Car) ja palkkabonus (Bonus).

Tutki tehtävän tavoitetta/kerrontaa ja toteuta tarvittavat UML-luokkakaaviot. Toteuta tämän jälkeen vaaditut luokat, luo ja käytä olioita pääohjelmasta. Tulosta vaadittujen luokkien olioiden tietoja output-ikkunaan. Tietoja ei tarvitse kysyä sovelluksen käyttäjältä, vaan voit alustaa ne suoraan pääohjelmassa.

Esimerkkitoiminta: (huomaa, että Kirsi Kernelin tietoja on muutettu ohjelman suorituksessa)


    Employee:
    - Name:Kirsi Kernel Profession:Teacher Salary:1200
    
    Boss:
    - Name:Jussi Jurkka Profession:Head of Institute Salary:9000 Car:Audi Bonus:5000
    
    Employee:
    - Name:Kirsi Kernel Profession:Principal Teacher Salary:2200

    

Tehtävä 5

Toteutettavassa sovelluksessa tulisi pysyä käsittelemään erilaisia kulkuneuvoja. Kaikilla kulkuneuvoilla on löydettävissä yhteisinä ominaisuuksina: nimi, malli, vuosimalli ja väri. Erikoistapauksina pitää pystyä käsittelemään polkupyöriä ja veneitä. Polkupyörän osalta pitää pystyä erottelemaan se, että onko kyseessä vaihdepyörä vai ei sekä mahdollisen vaihteiston mallinimi. Veneiden osalta tietoina pitää ainakin olla veneen tyyppi (soutuvene, moottorivene, kajakki, ...) ja kuinka monta istuinpaikkaa veneestä löytyy.

Tutki tehtävän tavoitetta/kerrontaa ja toteuta tarvittavat UML-luokkakaaviot. Toteuta tämän jälkeen vaaditut luokat, luo ja käytä olioita pääohjelmasta. Tulosta vaadittujen luokkien olioiden tietoja output-ikkunaan. Tietoja ei tarvitse kysyä sovelluksen käyttäjältä, vaan voit alustaa ne suoraan pääohjelmassa.

Esimerkkitoiminta:


    Bike info 
    - Name:Jopo Model:Street ModelYear:2016 Color:Blue GearWheels:False Gear Name:
    
    Bike2 info 
    - Name:Tunturi Model:StreetPower ModelYear:2010 Color:Black GearWheels:True Gear Name:Shimano
    
    Boat info 
    - Name:Suvi Model:S900 ModelYear:1990 Color:White SeatCount:3 BoatType:Rowboat
    
    Boat2 info 
    - Name:Yamaha Model:Model 1000 ModelYear:2010 Color:Yellow SeatCount:5 BoatType:Motorboat
    

Tehtävä 6 home

Tehtävässä tulee toteuttaa C#-ohjelma radion perustoimintojen testaamiseen.

Kannettavassa radiossa on vain kolme säädintä: päälle/pois-kytkin, äänen voimakkuuden säädin (arvot 0, 1, 2,..., 9) ja kuunneltavan kanavan taajuusvalinta (2000.0 - 26000.0). Laadi luokka kannettavan radion toteutukseksi. Käytä tekemääsi luokkaa pääohjelmasta käsin, eli testaile radion toimivuutta erilaisilla voimakkuuden ja taajuuden arvoilla. Jätä asetus- ja tulostuslauseet näkyville pääohjelmaan, jotta radio-olion käyttö voidaan todentaa.

Tehtävä 7 home

ICT-opiskelijan kirjahyllystä löytyy vaikka mitä erilaisia tavaroita: kirjoja, lehtiä, cd-levyjä, dvd-levyjä, bluray-levyjä, puhelimia, tabletteja, läppäreitä, ... jne. Pohdi UML-kaaviota käyttäen millaisia luokkarakenteita (ainakin luokkien ja ominaisuuksien osalta) esiintyy ja käytä apua perintää, jos tavaroille löytyy yhteisiä ominaisuuksia. Toteuta tämän jälkeen muutamia luokkia, joissa perintää esiintyy. Tee myös pääohjelma, jossa käytät tekemiäsi luokkia ja luot olioita.

Tehtävä 8 home

Pohdi jokin reaalimaailman asia, jonka kautta voit toteuttaa pienimuotoisen C#-ohjelman/toteutuksen, joka käyttää perintää.