Mallinnustavat
Kuinka formaaleja menetelmät ovat? Informaalit Esim. seinätaulutekniikka Puoliformaalit Ylesti käytetyt SA, OMT, UML Formaalit Työläitä Kommunikointi vaikeaa
Oliolähestymistavan etuja Tuottavuuden parantuminen Selkeys, esitystavan luonnollisuus -> kommunikaatio Ylläpidon helpottuminen Kapselointi Uudelleenkäytettävyyden helpottuminen Komponenttipohjaisuus Vaatii lisätyötä!
Oliolähestymistavan keskeiset periaatteet Abstrahointi Voidaan käsitellä ilman yksityiskohtia Kapselointi vähentää riippuvuutta parantaa ylläpidettävyyttä ja uudelleenkäyttöä Tiedon ja käyttäytymisen yhdistäminen Reaalimaailman mallintaminen Perintä Monimuotoisuus, polymorfismi
UML yleisesti Visuaalinen -> parantaa kommunikointia Tavoitteena yksiselitteiset ja kattavat määrittelyt Riippumattomuus ohjelmointikielestä Dokumentointiin – tukee koko prosessia
Luokan perusominaisuudet 1. Nimi Eläin Nimi Sukupuoli liiku() syö() 2. Attribuutti 3. Operaatio (metodi) 4. Vastuu (kuvataan vapaamuotoisena tekstinä)
Edistyksellinen luokka Abstraktin luokan nimi kursivoitu Eläin nimi sukupuoli + setNimi(nimi: String) # liiku() - syö() Paikallinen attribuutti alleviivattu Julkinen (public, +) Suojattu (protected, #) Yksityinen (private, -) Miksi attribuutille ie ole protected-vaihtoehtoa?? Nimeämiskäytäntö!
Hyvän luokan ominaisuudet Täsmällinen abstraktio, hyvin nimetty Suppeat ja hyvin määritellyt vastuut (”delegointi” laajoissa luokissa) Ymmärrettävä, yksinkertainen, laajennettavissa Vain tärkeät ominaisuudet vs. yleiskäyttöisyys
Luokkakaavio Yritys Osasto nimi: String Toimisto osoite: String 1 * 1..* 1..* Osasto nimi: String Toimisto osoite: String puhelinnro: String sijainti 0..1 * * 1 * työntekijä 1..* 1 johtaja Yhteystiedot id osoite puhelinnro Henkilö nimi: String ikä: Integer setNimi() getTunnus() Työntekijä asema: String id: Integer getYhteystiedot()
Hyvin määritellyn luokkakaavion ominaisuudet Keskittyy kuvaamaan yhden aspektin Sisältää ymmärtämisen kannalta vain oleelliset piirteet Pysytään asianmukaisella abstraktiotasolla vs. ei liian minimalistinen Kuvaava nimi Risteävien viivojen määrä minimoitu Loogisesti toisiin liittyvät luokat lähekkäin
Perintä Eläin saika: Time kuole() Nisäkäs nimi: String ääntele() Kala kutupaikka: String ui() Koira rotu: String kuolaa() Hevonen nimi: String ravaa() Hauki pituus: Integer getPituus() Hai vaarallinen: boolean syö()
Tietokantakaavio Koulu nimi: String osoite: Integer Puhelinnro: String Osasto nimi: String osoite: Integer Puhelinnro: String omistaa 0..1 1 1..* 1..* 1..* 1..* työskentelee * 1..* 1..* 0..1 Opiskelija nimi: String ID: Integer sotu: String Kurssi nimi: String ID: Integer ov: Integer Opettaja nimi: String osallistuu opettaa * * * 1..*
Käyttötapauskaavio (kauppa) Rekiste-röidy Lisää tuote Myyjä Kirjaudu sisään Myyjä Selaa tuotteita Vastaa kysymykseen Tuki Tilaa
Sekvenssikaavio (tapahtumakaavio) Tilaus KL l: Lomake tilaa(……: String) luoUusi() tkk: TKKäsittelijä teeTilaus(t: tilaus) onnistuminen: boolean palaute onnistumisesta
Formaalit menetelmät VDM ja Z Vaatii matemaattisen tarkkaa määrittelyä Perustuu esi- ja jälkiehtoihin Ohjelman suoritus Vaati- mukset esi- ehdot jälki- ehdot