Olio-ohjelmointi

Tässä harjoituksessa opiskellaan vahvaa koostetta(kompositiota) ja UML-luokkakaavion tulkintaa. Harjoituksessa Car-luokan olio luo Engine-luokan olion ja neljä Wheel-luokan oliota. Car-luokka on siis koosteluokka.

Miksi tässä käytetään koostetta eikä perintää?

  • Ei voida sanoa, että auto on rengas tai rengas on auto, joten perintä ei tule kysymykseen.
  • Voidaan sanoa, että autossa on rengas, ja autossa on moottori, siksi siis kooste.

HUOM! Luo kullekin luokalle erillinen h-tiedosto ja cpp-tiedosto.

Harjoitus4 (kompositio)

Tässä tehtävässä tarkoituksena on mallintaa yksinkertainen auton rakenne C++:ssa käyttämällä kompositiota. Luo luokat Engine, Wheel ja Car siten, että Car-olio koostuu yhdestä Engine-oliosta ja neljästä Wheel-oliosta. Nämä osat kuuluvat autoon ja tuhoutuvat sen mukana.

Sovelluksen luokkakaavio on seuraava:
classDiagram
  class Engine {
    -horsepower: int
    -displacement: double
    +Engine()
    +Engine(int, double)
    +getHorsepower() int
    +setHorsepower(int)
    +getDisplacement() double
    +setDisplacement(double)
  }
  class Wheel {
    -size: int
    -type: string
    +Wheel()
    +Wheel(int, string)
    +getSize() int
    +setSize(int)
    +getType() string
    +setType(string)
  }
  class Car {
    -objEngine: Engine
    -objWheel1: Wheel
    -objWheel2: Wheel
    -objWheel3: Wheel
    -objWheel4: Wheel
    -model: string
    -brand: string
    +Car()
    +Car(string, string)
    +setEngine()
    +setWheels()
    +getModel() string
    +setModel(string)
    +getBrand() string
    +setBrand(string)
    +printDetails()
  }
  Engine --* Car
  Wheel --* Car
    

Luo C++-projekti nimeltään h4

  1. Luokan Engine toteutus:
    • Lisää projektiin luokka Engine, joka sisältää seuraavat ominaisuudet:
      • int horsepower: moottorin hevosvoimat.
      • double displacement: moottorin tilavuus litroissa.
    • Luo konstruktori ja kaaviossa esitetyt getterit ja setterit yllä oleville ominaisuuksille.
  2. Luokan Wheel toteutus:
    • Lisää projektiin luokka Wheel, joka sisältää seuraavat ominaisuudet:
      • int size: renkaan koko (esim. tuumina).
      • string type: renkaan tyyppi (esim. "kesärengas" tai "talvirengas").
    • Luo konstruktori ja kaaviossa esitetyt getterit ja setterit yllä oleville ominaisuuksille.
  3. Luokan Car toteutus:
    • Lisää projektiin luokka Car, joka koostuu seuraavista osista:
      • Yksi Engine-olio.
      • Neljä Wheel-oliota.
      • string model: auton malli.
      • string brand: auton merkki.
    • Luo konstruktori ja kaaviossa esitetyt getterit ja setterit yllä oleville ominaisuuksille.
    • Aseta metodissa setEngine moottorille ominaisuudet: hevosvoimia=150 ja moottorintilavuus=2.0
    • Aseta metodissa setWheels, kullekin renkaalle ominaisuudet: koko=17 ja tyyppi=kesarengas
    • Toteuta metodi void printDetails(), joka tulostaa auton tiedot, mukaan lukien moottorin ja renkaiden tiedot (katso mallia esimerkkitulosteesta alla).
  4. Pääohjelma:
    • Luo mainissa
      • Car-olio (brand Toyota ja model Corolla)
      • Kutsu Car-olion setEngine metodia
      • Kutsu Car-olion setWheels metodia
      • Tulosta tiedot, jolloin tuloksena tulisi olla seuraavaa:
        terminal



Toggle Menu