TIE-20200 Ohjelmistojen suunnittelu Luento 0: Kurssin esittely TIE-20200 Samuel Lahtinen 1
Mitäs tänään on tarjolla? Käytännön juttuja: Mistä tietoa löytyy Kurssin henkilökunta Kurssin rakenne Käytännönjärjestelyt Oppimistavoitteet Mitä kurssin läpäiseminen vaatii? Varsinaista asiaa: Tentti! TIE-20200 Samuel Lahtinen 2
Kurssin henkilökunta vastuuhenkilö: Samuel Lahtinen (luennot, harkkatyöt,jne) Assarit: Sampo Suonsyrjä Aki Hänninen Henri Terho TIE-20200 Samuel Lahtinen 3
TIE-20200 yleistiedot Kolmas versio kurssista, esitiedot jatkavat edelleen väistelyä Kurssin koko 5 op, 133 tuntia ~28 tuntia luentoja (+itseopiskelu 0,5t /luentotunti) 12 tuntia viikkoharjoituksia (esitehtävät) ~70 tuntia budjetoitu harjoitustyölle TIE-20200 Samuel Lahtinen 4
Mistä löydän tietoa kurssista? Kurssin kotisivu: http://www.cs.tut.fi/~ohjsuun Materiaali myös versiohallinnassa, työohjeet jne. Slack tulossa käyttöön Käyttäkää tut-sähköpostia, ei mitään hotmalesähköposteja (suorituksiin liittyviä asioita ei saa lähetellä muualle kuin koulun osoitteisiin) Kurssin virallinen sähköposti, yleiset kurssiin liittyvät kysymykset tänne: ohjsuun@cs.tut.fi Näin kysyt -ohjeistus: http://www.cs.tut.fi/~ohjsuun/sahkopostiohje.shtml
Aikataulutusta Luennot ma 14:15-16 TB109 periodit 1 & 2 Viikkoharjoitukset alkavat syyskuussa 14.9. alkavalla viikolla (viikko 38) Ilmoittautuminen aukeaa tällä viikolla, POP-spämmiä asiasta 6 viikkoharjoituskertaa, pidetään tietokoneluokassa Tentit???, ehkä joku arpoo tämmöset kurssille (spämmään ku selviää) Harkkatyön vaiheistusta: Prototyyppi syyskuun lopulla, 22.9- Suunnitelma, lokakuun alku 7.-14.10. Osatoteutuksen esittely, suunnitelmassa luvattuja asioita marraskuu Lopullinen palautus, työn esittely jne. joulukuun alku Vertaisarviointi, joulukuun lopussa
Kurssimateriaali Kurssin kotisivuilta löytyy http://www.cs.tut.fi/~ohjsuun/kurssikirjallisuus.shtml
Kurssin ja luentojen aihealueita Perintää ja perintähierarkioita, perinnän suunnittelu, virtuaalifunktiot syvällisemmin Kopiointi ja sijoittelu, viipaloituminen, rakennuttajat, siirtosemantiikka yms. Luokkataso vs. oliotaso, UML-käppyrä vs. koodi Moniperiytyminen Rajapintasuunnittelu Geneerisyyttä (templatet sun muut) Olio-ohjelmoinnin periaatteita SOLID: (Single responsibility principle, Open/closed principle, Liskov substitution principle, Interface segregation, Dependency inversion principle) Ohjelmistojen suunnittelu luokkatason yläpuolella Kirjastot: käännösaikaiset, ajoaikaiset. liitännäiset ja niiden toteuttaminen Koodin katselmoinnit, aikaisemman koodin päivittäminen Ohjelmistojen asennusasioita Suunnittelumallit/toteutusmallit (Design patterns): MVC/MVVM/MVP, abstraktit tehtaat, kompositio jne. Erilaisia lähestymistapoja perusoliomaailman ulkopuolelta : Entity component system (komponentti-orientoitunut lähestyminen), single page application, funktionaaliset jutut hieman graafisista käyttöliittymistä toteutusprosessiin liittyviä asioita (versiohallinta ja isommat ohjelmistoprojektit)
Viikkoharkat Neljä kertaa ykkösperiodin aikana, kaksi kakkosperiodilla Yksi kerta normiluokassa, muuten tietokoneluokassa, koodataan/käytellään Qt:ta Ennen harkkaan könyämistä erittäin suositeltavaa vilkaista läpi luentokalvot/käydyt asiat & harkka-aihe niin tapahtumassa pystyy keskittymään varsinaiseen harjoituksen aiheeseen eikä asioiden uudelleen opetteluun
Viikkoharjoitusten alustavat aiheet 1.Suunnitteluharkka 2.Qt-kali osa 2: oma erikoistettu komponentti 3.Kopioinnit, sijoitukset, siirtosemantiikkaa yms. C++ -aiheista 4.Kirjasto/plugin 5.Abstrakti tehdas
Viikkoharkka-ajat, alustavat TI 14:15-16 KE 9:15-11, kakkosperiodin harkat 10:15-12 To 12:15-14 PE 12:15-14
Harjoitustyön vaiheet 1. Prototyyppi ja tuotteen esittely 2. Suunnitelma, rakenne, vastuualueet, työnjakoa jne. 3. Ensimmäinen toteutusosa, toteutettuna suunnitteluvaiheessa valittuja ominaisuuksia 4. Lopullinen valmis työ ja sen esittely 5. Vertaisarviointi
Harjoitustyön vaiheet, prototyyppi Ensimmäisessä vaiheessa toteutetaan ohjelman prototyyppi, jonka tarkoituksena on esitellä tuotetta tilaajalle ja saada todellinen kauppa syntymään. Prototyypin esittelyn lomassa ja sen jälkeen asiakas kertoo tarkemmin mitä tuotteelta haluaa. (eli vaatimukset voivat muuttuja ja tarkentua hieman projektin aikana). Prototyyppitoteutus sisältää jotain demottavissa olevaa käyttöliittymätason toimintaa ja antaa kuvan siitä, millainen lopullinen tuote voisi olla.
Harjoitustyön vaiheet, suunnitelu Seuraavassa vaiheessa luodaan tarkempi suunnitelma toteutettavasta pelistä. Miltä peli suunnittelutasolla näyttäisi? Mitä eri osakokonaisuuksia siihen tulee? Miten käyttöliittymä ja muu ohjelma on erotettu toisistaan? Minkälaista työnjakoa eri osien välille on mietitty? Jne.
Harjoitustyön vaiheet, valittujen ominaisuuksien toimittaminen Kolmannessa vaiheessa käydään esittelemässä työtä, jossa on toteutettuna ainakin suunnitteluvaiheessa toimitettavaksi luvatut ominaisuudet (suunnitteluvaiheessa assarin kanssa sovitaan mitä ollaan toteuttamassa). Lisäksi tässä vaiheessa on mahdollisuus kysellä assarilta käytetyistä ratkaisuista ja varmistua siitä, että työssä ollaan menossa oikeaan suuntaan.
Harjoitustyön vaiheet, lopullinen palautus Neljännessä osassa tavataan loppudemon merkeissä oman assarin kanssa. Joko pidetään tapahtuma oman assarin kanssa kahden kesken, jolloin opiskelijat uskaltavat varmasti kertoa ohjelmastaan vapaammin tai sitten järjestetään demotapahtuma saman assarin kaikkien ryhmien kanssa, jolloin pääsee näkemään muiden toteutuksia ja tulee paineita tehdä vähän parempaa jälkeä kun tietää, että työtä saa esitellä puolijulkisesti.
Harjoitustyön vaiheet, vertaisarviointi Vertaisarvioinnissa käydään läpi toisen ryhmän työ ja annetaan siitä palautetta. Tähän on oma erillinen lyhyt ohjeensa. (versiohallinnassa)
Harjoitustyöstä lisää Toteutuskieli C++, ympäristö Qt (5 ) Mahdollisuus käyttää virtuaalikonetta, voi säästää asentelutuskaa Tietokoneluokka käytössä Tai sit ihan millä tahansa muulla kielellä ja ympäristöllä Tehdään parityönä tai kolmen hengen ryhmässä Git versiohallintana Aiheena taas peli(suunnittelua ja toteutusta: samoja ratkaisuja ei löydy suoraan googlaamalla)
Qt:sta Tuttu keväällä ohjelmoinnin tekniikat tai alkuolion käyneille Jolla valloittaa ihan just maailman, voi sitten koodailla sille ohjelmistoja Alustariippumaton (tai toimii Window, Mac, Linux ympäristöissä)
Toteutuspuolesta lisää Käyttöliittymän toteuttaminen itse Qt:n omia tietotyyppejä käytössä (merkkijono)
Työkaluista lisää Qt:n kirjastot ja IDE http://qt-project.org/downloads,qt 5.5 (tällä hetkellä uusin) Visual Studio 20xx https://www.dreamspark.com/ Piirtelyohjelmia, MagicDraw (http://www.cs.tut.fi/software/win32/magicdraw/) Online,esimerkiksi https://www.draw.io Git Slack
Kurssin sisällöstä Ohjelmistojen suunnittelu Koodaillaan joo Vähän ohjelmistotuotantoakin kyllä Hivenen kurssin edeltäjää, olio-ohjelmoinnin jatkokurssia Vähän arkkitehtuurijuttuja Hippunen yleisestä suunnittelua Kohtuullisen paljon vähän isomman oman ohjelman rakenteen suunnittelua ja toteuttamista Tavoitteena antaa kuva ohjelman rakenteen ja suunnitelman ja varsinaisen toteuttamistyön välisestä suhteesta
Oppimistavoitteista Opitaan suunnittelemaan ja toteuttamaan sovellus kera graafisen käyttöliittymän Opitaan jakamaan ohjelma osakokonaisuuksiin Saadaan yleissivistävää tietoa erilaisista tavoista toteuttaa ohjelmistoja ja erilaisista ratkaisuista, joita ohjelmien rakentelussa käytetään Oppia tekemään jotain muuta kun esim
Kurssin arvostelu Hyväksytty suoritus harjoitustyöstä ja tentistä Viikkoharjoituksiin osallistumalla voi kerätä maksimissaan yhden arvosanan verran pisteitä Arvosana määräytyy tentti-, viikkoharkka ja harjoitustyöpisteiden kokonaissummana. Tentistä ja harkkatyöstä pitää päästä läpi. 0-15 pts tentti, 0-15pts harkkatyö, 0-5 pts viikkoharkat, alustavat pisterajat: 1 15-2 18-3 21-4 27-5 30-
Harjoitustyön arvostelu Pisteytyksestä: 9 pistettä lopullinen palautus 2 pistettä vertaisarviointi 4 pistettä välivaiheet Arviointiperusteista: Toteutusaikataulu, suunnittelu, laajennettavuus/muokattavuus (vaadituissa asioissa), tyyli, rajapinnat, dokumentaatio jne.
Yleistä oppimistapahtumista Luennot, jonkin verran viikkoharkkatehtävän kaltaisia juttuja Viikkoharkat, koodausta Harjoitustöiden palautukset: Suunnitteluvaihe, tapaaminen assarin kanssa Ensimmäinen pyrähdys, tapaaminen assarin kanssa Lopullinen palautus, demotaan omalle assarille
Kysymyksiä käytännönjärjestelyistä?