58160 Ohjelmoinnin harjoitustyö Johdanto

Samankaltaiset tiedostot
58160 Ohjelmoinnin harjoitustyö (4 op, 2ov)

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

13/20: Kierrätys kannattaa koodaamisessakin

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

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Hakemistojen sisällöt säilötään linkitetyille listalle.

Ohjelmistojen mallintaminen, mallintaminen ja UML

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

A4.1 Projektityö, 5 ov.

Sopimuspohjainen olio-ohjelmointi

58160 Ohjelmoinnin harjoitustyö

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia

Ohjelmistotekniikan menetelmät, kevät 2008

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Verkkopokerijärjestelmä. Loppuraportti Ryhmä Kanat Ohjelmistotuotantoprojekti, syksy 2008

15. Ohjelmoinnin tekniikkaa 15.1

Kurssin tavoitteista uennot. 4.1 Projektityö, 5 ov. Esitietovaatimukset

P e d a c o d e ohjelmointikoulutus verkossa

8/20: Luokat, oliot ja APIt

Sisältö. Työn idea Protokollat. Harjoitustyön käytäntöjä. Työn demoaminen. Etäisyysvektori Linkkitila. Palvelin Moodle SSH-tunnelit

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Oleelliset vaikeudet OT:ssa 1/2

Opettajatuutorointi-kurssin syksyn 2006 kyselyjen tulokset

Test-Driven Development

Harjoitustyö. Jukka Larja T Tietokoneverkot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

TIEY1 Opintojen ohjattu suunnittelu (2 op) eli LuK-vaiheen HOPS-ohjaus eli Opettajatuutorointi

Test-Driven Development

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

Suunnitteluvaihe prosessissa

TIE Ohjelmistojen suunnittelu

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori


T Harjoitustyöluento

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

TOIMINNALLINEN MÄÄRITTELY MS

Tehtävän lisääminen ja tärkeimmät asetukset

ehops Henkilökohtainen opintosuunnitelma

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmoinnin perusteet Y Python

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Kurssin aihepiiri: ohjelmistotuotannon alkeita

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA

T harjoitustehtävät, syksy 2011

Tietotekniikan kandidaattiseminaari

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Pauliina Munter / Suvi Junes Tampereen yliopisto/tietohallinto 2013

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Ohjelmistotekniikan menetelmät, kesä 2008

Ohjelmistojen mallintaminen, mallinnustekniikat käytännössä

1. Mitä tehdään ensiksi?

T Harjoitustyöluento

Tietokoneverkot. T Tietokoneverkot (4 op) viimeistä kertaa CSE-C2400 Tietokoneverkot (5 op) ensimmäistä kertaa

Ohjelmointi 1 / syksy /20: IDE

Ohjelmointi 2 / 2010 Välikoe / 26.3

Opinnäytetyön prosessikuvaus

19/20: Ikkuna olio-ohjelmoinnin maailmaan

PLA Mobiiliohjelmointi. Mika Saari

2. luento. CS-C2110 Ohjelmointistudio 1: mediaohjelmointi Syksy 2016 [Studio 1] Antti Tolppanen, Sanna Suoranta, Lauri Savioja

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

Ohjelmistojen suunnittelu

OHJ-7400 Graafisen käyttöliittymän ohjelmointi, Harjoitustyö

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Olioiden yhteistyön mallintaminen

ITKP102 Ohjelmointi 1 (6 op)

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori

Jypelin käyttöohjeet» Ruutukentän luominen

Projektisuunnitelma Nero-ryhmä

PLA Mobiiliohjelmointi. Mika Saari

TIE Ohjelmistojen testaus 2016 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

Määrittelyvaihe. Projektinhallinta

Myös opettajaksi aikova voi suorittaa LuK-tutkinnon, mutta sillä ei saa opettajan kelpoisuutta.

Ohjelmoinnin jatkokurssi, kurssikoe

T Käyttäjäkeskeisen tuotekehityksen harjoitustyö kevät 2005

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

T Ohjelmistojen määrittely- ja suunnittelumenetelmät

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

10 teesiä verkko-opetuksen suunnittelusta. Leena Hiltunen Tutkijatohtori Tietotekniikan Aineenopettajankoulutus

Uudelleenkäytön jako kahteen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

käyttötapaukset mod. testaus

15. Ohjelmoinnin tekniikkaa 15.1

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 2: Vaiheet 3 & 4. Antti Jääskeläinen Matti Vuori


Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Kurssijärjestelyt. CS-1180 Verkkojulkaisemisen perusteet (5 op) Hanna Hämäläinen Informaatioverkostot / Mediatekniikan laitos

Joustavasti verkossa ERIVERIA.FI

T Loppukatselmus

Projektisuunnitelma. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

Pedacode Pikaopas. Web-sovelluksen luominen

Transkriptio:

58160 Ohjelmoinnin harjoitustyö Johdanto 9.3.2009 Tuntiop. Sami Nikander sami.nikander@helsinki.fi 1

Aloitusluento I Kurssin sisältö: Mitä vaaditaan? II Työvaiheet: Mitä tehdään? III Työvälineet: Millä tehdään? IV Java-vinkkejä: Miten tehdään? V Ryhmiinjako ja jonottajien karsinta 2

Ohjelmoinnin harjoitustyö Suunnittele, toteuta ja dokumentoi vuorovaikutteinen sovellus (~vapaavalintaisesta aiheesta) Laajuus n. 500-2000 koodiriviä, dokumentaatio n. 10-30 sivua (ml. kuvat) Suoritustapa: n. 6 viikon itsenäinen työskentelyjakso (myös ryhmätapaamisia) 3

Asema opinnoissa Ohjelmoinnin harjoitustyö kuuluu tietojenkäsittelytieteen perus- ja aineopintoihin Pääaineopiskelijalle pakollinen Pakolliset esitiedot: (tarkistetaan opintosuoritusotteesta) Ohjelmoinnin perus- ja jatkokurssi Ohjelmistojen mallintaminen (tai vastaava) 4

Kurssin tavoitteet Ohjelmointityöskentelyn harjoittelu Projektityöskentelyn harjoittelu suunnittelu dokumentointi ohjelmointi testaus tuotteen viimeistely ratkaisuista neuvotteleminen ja niiden demoaminen aikatauluissa pysyminen Itsenäisen työskentelyn harjoittelu Ohjelmoinnin jatkokurssin ja Ohjelmistojen mallintamisen oppien omatoiminen soveltaminen 5

Arvosteluperusteet Dokumentaatio 40% Toteutus 40% 12p Tekninen dokumentti 6p Käyttöohje 6p Kieliasu, jäsentely 12p Toiminnallisuus, luotettavuus, käytettävyys 12p Tehokkuus, ylläpidettävyys, siirrettävyys Työprosessi 10% 6p Aikataulussa pysyminen, säntillisyys, kommunikointi Yht. 60 p Testaus 10% 6p Systemaattisuus, kattavuus Pisterajat 30 35 40 45 50 Arvosanat 1 2 3 4 5 6

Tuotokset Valmis, asennuskelpoinen ajettava ohjelma Ohjelman toimittava TKTL:n Linux/Windows-koneissa Palautetaan lähdekoodi Paketoidaan tarvittavat tiedostot yhdeksi tiedostoksi (esim. zip, gz, tar, jar...) Dokumentaatio (15-40 s?) Aiheen rajaus, määrittelydokumentti Käyttöliittymäsuunnitelma Ratkaisujen perustelut, algoritmien ym. kuvaus Luokkakaavio, kutsukaavio, luokkien tarkempi kuvaus Testaussuunnitelma ja testiraportti Käyttöohje Asennusohjeet, ylläpito-ohjeet ym. 7

Dokumentoinnista... Ohjaajasi päättää vaadittavan dokumentaation muodon (ryhmäkohtaisia pieniä eroja) Dokumentaatiosta suuri osa kannattaa tehdä suunnitteluvaiheessa Dokumentaatiolla on suuri vaikutus arvosteluun. Jätä dokumentin kirjoittamiselle riittävästi aikaa! Palautettava paperimuodossa (arkistointia varten) 8

Ohjaus ja ryhmäopetus Henkilökohtainen ohjaus Työn esittely ryhmässä N. 15 min / vko, pakollista (sovi poikkeukset erikseen) Työ tulkitaan keskeytetyksi, jos et ota yhteyttä viikkoon Jos työ ei ole edistynyt, tule silti vastaanotolle Ohjaajalla 2 roolia: asiakas / opettaja. Asiakas valvoo, että ohjelma täyttää vaatimukset projekti pysyy aikataulussa vko 3 (suunnitelmat) ja vko 6 (valmis ohjelma) omassa harjoitusryhmässä, n. 10 min/esitys Neuvontapäivystys (työviikot 4-6) Ks. ajankohdat --> http://www.cs.helsinki.fi/opintoneuvonta/ 2. krs, B- ja C-siipien välisessä syvennyksessä drive in -neuvontaa, tule ja kysy vapaasti 9

Rankka projekti! 4 op (2 ov) = 80 h työtä! 80 h / 6 vkoa = 3 h / vrk (arkisin) Työmäärä vaihtelee yksilöllisesti, n. 40-120h Jos esitiedot hatarat/ruosteessa, työtä on enemmän Jos osaat koodata ennestään, työtä voi olla vähemmän Jos pääosa työstä jää viimeisen 2 vkon ajalle: 8h päivässä viikon ympäri! Terveisiä kurssin suorittaneilta: Aloita nyt ihmeessä se homma ajoissa! Ei tosiaan kannata jättää viime tinkaan! Tein puolet tunneista yhdessä viikonlopussa 10

Rankka projekti! Harjoitustyön keskeyttäneille uusi mahdollisuus vain jonotuslistan kautta! Jos voimat loppuvat kesken, keskeytä jokin muu kurssi, jolla ei ole keskeytyssanktioita Älä katoa aina voidaan neuvotella! Limeksen Älä Hätäile -opas: Harjoitustyön keskeyttäminen on ehkä tyhmin asia, minkä voit opiskeluaikanasi tehdä 11

Malliaikataulu Vko Työvaihe 1 Aihevalinta, määrittelyä, Java-kertausta 2 Oliosuunnittelua, koodauksen harjoittelua 3 Suunnittelua, alustavaa koodausta, demo 4 Koodausta, testausta, dokumentointia 5 Koodausta, testausta, dokumentointia 6 Viimeistelyä, testausta, demo 12

Aikataulu todellisuudessa? ;-) Vko Työvaihe 1 Yleistä pihallaoloa; aihevalinta helppo mutta miten jatkaa tästä eteenpäin? 2 Suunnittelu tökkii, Javaakaan ei ole ehtinyt opetella... 3 Oman raakileen demo hermostuttaa, ohjaaja pistää oliosuunnitelmat uusiksi, koko työ tuntuu käsittämättömältä 4 Koodaus osoittautuu luultua hankalammaksi... 5 Koodi ei toimi, dokumentti ei vastaa todellisuutta, kantapään kautta alkaa oppia. Kunpa olisi vielä 3 vkoa aikaa! 6 Proto ei toimi demossa. Viim. viikolla 3 yötä epätoivoista bugikorjausta ja Open Officen kanssa taistelua. Voitto! 13

Ohjeita verkossa http://courses.cs.helsinki.fi/ -> Ohjelmoinnin harjoitustyö, kevät 2009 Ohjeita ja linkkejä, aihekuvaukset Työn palautus (joissain ryhmissä) http://www.cs.helsinki.fi/kurssit/perus/58160-8/ -> linkki Syksy 2005 Kurssin viralliset tiedot: neuvontapäivystysajat, arvosteluperusteet aihe-ehdotuksia ym. 14

Aloitusluento I Kurssin sisältö: Mitä vaaditaan? II Työvaiheet: Mitä tehdään? III Työvälineet: Millä tehdään? IV Java-vinkkejä: Miten tehdään? V Ryhmiinjako ja jonottajien karsinta 15

Työvaiheet Ohjelmistotuotannon perinteiset työvaiheet (vesiputousmalli): 1. 2. 3. 4. 5. 6. (Kartoitus) Määrittely Suunnittelu Toteutus Testaus (Käyttöönotto, ylläpito) ~ Aiheenvalinta ~ Aiheen rajaus ja tarkennus ~ Käyttöohje, asennuspaketti Todellisuudessa työvaiheita tehdään yleensä limittäin ja iteratiivisesti (myös tässä työssä) Dokumentointi osana jokaista työvaihetta 16

Työvaiheiden ajoituksesta Tyypillinen kokeneen ohjelmoijan virhe on sännätä heti koodaamaan, koska siihen on rutiinia Tyypillinen aloittelevan ohjelmoijan virhe on lykätä koodausta, koska siihen ei ole rutiinia Ohjelma voikin valmistua nopeasti, mutta se ei välttämättä täytä vaatimuksia ja sen jälkikäteen dokumentoiminen ei suju Suunnitteluvaihe on oikea vaihe tehdä tutkimustyötä On hyödyllistä kirjoittaa pieniä testikoodinpätkiä, joilla varmistaa ymmärtäneensä oppimansa oikein Jos dokumentointi ei ole tuttua tai se on vastenmielistä, sitäkään ei kannata lykätä... 17

Aiheenvalinta Aihe-ehdotuksia http://www.cs.helsinki.fi/group/alabra/aiheita.html (linkki myös Moodlessa) Ajanviete- ja pulmapelejä Miinaharava, Master Mind, muistipeli, laivanupotus... Hyötyohjelmia Budjetinseuranta, HOPS-laskuri, CD-kortisto... Oma aihe Tarkista ohjaajalta, soveltuuko ideasi harjoitustyöaiheeksi Jos epäilet taitojasi, ota helppo aihe! Hyvin tehty helppo aihe tuottaa yleensä paremman arvosanan kuin viimeistelemätön, liian kunnianhimoinen työ 18

Aiheen rajaus Täydennä valmiiksi annettu aihekuvaus itse: ne ovat (tarkoituksella!) hiukan ympäripyöreitä Kuvaa tehtävä/ongelma omin sanoin ja määrittele itse, mitä toimintoja, ominaisuuksia ja piirteitä ohjelmaan tulee mukaan Jos teet esim. laivanupotuksen, täsmennä millaisilla säännöillä ja minkä kokoisella ruudukolla peliä pelataan, onko kyseessä 1 vai 2 pelaajan peli jne. Jos teet budjettiohjelman, päätä millaisia raportteja ohjelmasta pitää saada, mitä tietoa siihen syötetään jne. 19

Aiheen rajaus Graafinen vai tekstipohjainen käyttöliittymä? Vapaavalintaista; molemmilla voi saada täydet pisteet Tekstipohjainen vaatii vähemmän uuden opiskelua, mutta mielekkään/laajan tekstipohjaisen käyttöliittymän suunnittelu ja koodaus on Javalla työlästä GUI vaatii Javan Swing-komponenttien opiskelua, mutta käyttöliittymäratkaisut ovat (osin) helpompia toteuttaa Sovellus vai sovelma? Molemmat periaatteessa sallittuja, mutta... Kurssivaatimuksiin kuuluu tiedostojen lukemista ja kirjoittamista, joissa sovelmalla on rajoitteita! On mahdollista tehdä myös ohjelma, joka toimii kumpana tahansa, käynnistystavasta riippuen 20

Määrittely (vaatimusanalyysi, vaatimusmäärittely, speksaus...) Vastaa kysymykseen: Mitä projektissa tehdään? Voit lähteä liikkeelle esim. sanaston laatimisesta Mikä on ohjelman käyttötarkoitus? Kuka sitä käyttää? Missä (laite)ympäristössä sitä käytetään? Minkälainen käyttöliittymä siinä on? Mitä ohjelmalla tulee voida tehdä? Sanastossa (glossary) määritelty tärkeimmät käsitteet mahdollisimman yksikäsitteisesti ja ristiriidattomasti Ei välttämätön, mutta voi helpottaa omaa työtäsi Älä kiinnitä suunnitteluratkaisuja tässä vaiheessa! 21

Määrittely (vaatimusanalyysi, vaatimusmäärittely, speksaus...) Sopimus ohjelman tilanneen asiakkaan ja toteuttajan välillä Jos (ja kun!) ohjelma poikkeaa määrittelydokumentissa luvatusta, lupa muutoksiin on kysyttävä asiakkaalta (tässä: ohjaajalta!) Vesiputousmallin ongelmat näkyvät tässä Määrittelyjä täytyy käytännössä lähes aina palata muuttamaan, oli se virallista tai ei Ns. ketterät prosessimallit ottavat muuttuvat vaatimukset huomioon Käytännössä tälläkin kurssilla on runsaasti joustonvaraa 22

Suunnittelu Vastaa kysymykseen: Miten tehdään? Säästää toteutuskustannuksia: mitä paremmin suunniteltu, sitä suoraviivaisempi toteutus Kannattaa aikatauluttaa muita vaiheita pidemmäksi Konkreettisen toteutuksen suunnittelu: Algoritmit: miten ristinolla-peli päättelee voittorivin? Tietorakenteet: miten budjettiohjelma organisoi tiedot? Ajonaikainen toiminta: miten tieto kulkee ohjelmassa? Käyttöliittymä: miten käyttäjä komentaa ohjelmaa? Valmiin koodin käyttö (sallittua ohjaajan hyväksyessä ja oikeellisesti dokumentoituna) 23

Suunnittelu Muista suunnittelun käytännöt: näistä puhuttiin jo Johdatus TKT:hen -kurssilla! Kehitettävyys mitä oletuksia teet; miten varaudut ohjelman muuttamiseen jälkeenpäin? Yksinkertaisuus pyri siistiin rakenteeseen, vältä trikkejä Luotettavuus vähintään ohjelmasi tulee kaatua nätisti Suorituskyky tässä työssä korkeintaan harjoittelumielessä Tietoturva tässä työssä lähinnä tiedon eheys (mitä se on?) 24

Suunnittelu Kertaa Ohjelmistojen mallintaminen -kurssin materiaali! Erityisesti UML-tekniikka, sitä tarvitaan suunnittelussa: Käyttötapaukset Luokkakaaviot! Sekvenssikaaviot Voit aloittaa esim. kevyillä käyttötapauskuvauksilla Ohjaaja ei välttämättä vaadi UML-käyttötapauksia, mutta ne voivat auttaa aihepiirin ja vaatimusten hahmottamista Käyttötapauksia ei näin pienissä aiheissa (varsinkin pelit) tule yleensä kuin muutama 25

Suunnittelu Luokat, metodit ja muuttujat määrätään, tuloksena luokkakaavio (ja API-kuvaus) Noudata oliolähestymistapaa: abstraktit tietotyypit: olio tarjoaa sovittuja palveluita muille kapselointi: muuttujien ja metodien näkyvyys perintä Mieti suunnitellessasi, miten jatkokehittäjä vaihtaisi luokan toiseen Tee tarvittaessa abstrakteja yliluokkia ja rajapintaluokkia 26

Suunnittelu Tietorakenteiden kuvaus: UML:n luokkakaavio Visualisoi ohjelman rakennetta ja helpottaa sen hahmottamista Lähinnä itse tehdyistä luokista myös Swing-luokkia ym. tilanteen mukaan 27

Suunnittelu Olioiden yhteistyön kuvaus: UML:n sekvenssikaavio Kertoo ajonaikaisesta toimintalogiikasta Erityisesti monimutkaisten metodikutsujen dokumentointiin Kuva: Wikimedia Commons / GFDL license 28

Suunnittelu Luokkien sisäisen toiminnan kuvaus: esim. pseudokoodia, vapaamuotoisia kaavioita... Käy läpi koko pelilauta Jos ruudussa on oma nappula... Jos ruudussa on vastustajan nappula... Jos ruutu on tyhjä... Käyttöliittymäsuunnitelma kannattaa piirtää vapaamuotoisesti (esim. käsin paperille) kuvitteellisena screenshottina Kuva: Sari A. Laakso 29

Kaavioiden piirtäminen Kynä ja paperi ovat hyödyllisiä Suositellaan aitoa kaavionpiirto-ohjelmaa Luonnosvaiheessa suttupaperi ja kynä erittäin hyvä työkalu Puhtaaksipiirtovaiheessa kannattaa siirtyä piirto-ohjelmaan... Esim. Visual Paradigm, ArgoUML, Umbrello, Dia... http://www.cs.helsinki.fi/u/ruohomaa/jss/jss_kaaviot.html Ilmaisohjelmat ovat hieman kankeita/bugisia (tallenna usein!) Toimisto- ja piirto-ohjelmat eivät sovellu Toimisto-ohjelmien tai piirto-ohjelmien perustoiminnot: viivoja ja pallukoita Ei tukea esim. luokkakaavion piirrolle (perintä, assosiaatiot...) Piirrosten muokkaus työlästä (miten siirrät laatikkoa?) 30

Toteutus Aloita Javalla leikkiminen ja koodauskokeilut heti työn alussa Kokeile ja muokkaa esim. Java Tutorialien esimerkkejä Saat tuntumaa ohjelmointiin, koodaustyökalut tulevat tutuksi Älä kirjoita ohjelmaa valmiiksi ennen kuin ohjaaja on hyväksynyt oliosuunnitelmat Alkuvaiheen koodikokeiluista osa joutaa roskiin Tämä on aivan normaalia ohjelmistonkehitystä! Vanhaan koodiin takertuminen vaatii usein enemmän työtä kuin sen uusiksi kirjoittaminen: muista kehitettävyys/yksinkertaisuus 31

Toteutus Jos suunnittelu on tehty huolellisesti, toteutusvaihe on lyhyt ja sisältää vain valmiin oliosuunnitelman kirjoittamisen Java-koodiksi Yleensä kuitenkin toteutuksen aikana huomataan suunnittelussa ongelmia = palataan korjaamaan suunnitelmaa Valmistakin koodia joudutaan usein kirjoittamaan uudestaan, mahdollisesti useaan otteeseen Tähän kannattaa varautua sekä henkisesti että aikataulullisesti... 32

Koodaustyyli Noudata ohjaajasi antamia tyyliohjeita olio-ohjelmoinnista koodinkirjoituksesta kommentoinnista Arvostelussa koodin toimivuuden lisäksi vaikuttaa myös ainakin: luettavuus (selkeä jäsentely, järkevä nimeäminen,...) johdonmukaisuus (oikea asia tehdään oikeassa paikassa) kommentoinnin laajuus ja informatiivisuus (suurin osa kommentaatiosta metodien ja luokan esittelyn yhteyteen, muuten vain tarpeen mukaan) 33

Koodaustyyli Ohjeita Jari Juslinin Java-ohjeita (vanhoja mutta toimivia!) http://zds.iki.fi/zds/java/ http://zds.iki.fi/zds/java/tyyliohje.shtml <- koodin kirjoitus http://zds.iki.fi/zds/java/oliotyyliohje.shtml <- oliosuunnittelu Arto Wiklan tyyliohje http://www.cs.helsinki.fi/u/wikla/johdohj/tyyli.html 34

Koodaustyyli Defensiivinen ohjelmointi: Metodeita kirjoittaessa varaudu epäkelpoihin parametreihin, vaikka olisitkin varma ettei todellinen parametri saa epäkelpoa arvoa. Esim. jos parametri on: int-tyyppinen: varaudu nollaan, negatiivisiin ja positiivisiin arvoihin sekä mahdollisiin ongelma-arvoihin String-tyyppinen: varaudu "normaaliin" sekä tyhjään merkkijonoon, null-arvoon, sekä mahdollisiin ongelmaarvoihin oliotyyppinen: varaudu aina null-arvoon (Javan API:sta löytyy useimmiten tieto, voiko käyttämäsi Javan valmiin luokan metodi palauttaa null-arvon) 35

Kommentointi ja JavaDoc Suositeltavin kommentointitapa on javadoc /** Kuten java-kommentit, mutta avataan 2 tähdellä */ Em. kommenteista voit generoida javadoc-ohjelmalla automaattisesti API-kuvauksen (HTML-muotoisena) API-kuvaus on hyvä liite tekniseen dokumenttiin: kertoo mm. metodien parametreista ja toimintalogiikasta API-kuvausta varten kirjoittaminen pakottaa miettimään luokkien ja metodien kommentteja API-kuvaus ei riitä yksinään tekniseksi dokumentiksi! http://java.sun.com/j2se/javadoc/writingdoccomments/index.html 36

Kommentointi ja JavaDoc ja va do c /** * luo Supertankkerin, jolla on kpl kappaletta tyhjiä öljytankkeja, joiden * kunkin vetoisuus on tankinkoko. Jos kpl on ykköstä pienempi, luodaan * yksitankkinen alus. Jos tankinkoko on pienempi kuin 100.0, tankkien * vetoisuudeksi asetetaan 100.0. */ public SuperTankkeri(int kpl, double tankinkoko) {... 37

Testaus Käsitellään erillisellä luennolla 3. työviikolla 38

Aloitusluento I Kurssin sisältö: Mitä vaaditaan? II Työvaiheet: Mitä tehdään? III Työvälineet: Millä tehdään? IV Java-vinkkejä: Miten tehdään? V Ryhmiinjako ja jonottajien karsinta 39

Sovelluskehitin Eclipse: NetBeans: http://www.eclipse.org http://www.netbeans.org Sovelluskehittimen etuja: uusien luokkien generointi sujuu helposti koodin syntaksitarkistus lennossa automaattitäydennys metodien ym. nimille automaattitäydennys parametrilistoille navigointiapuja koodissa kahlaamiseen debug-työkalut sisäänrakennettuna kunnon koodieditori osaa sisennykset, sulkujen täsmäykset, avainsanojen korostuksen ym. 40

Editori vai sovelluskehitin? Jos haluat maksimoida työtehosi... Kunnon sovelluskehittimen (esim. Eclipse, NetBeans) opettelu vie joitakin tunteja, mutta maksaa itsensä takaisin jo tämän harjoitustyön aikana Jos jatkat TKT:n opintoja yhtään pidemmälle, tämä on suositeltavin vaihtoehto Jos haluat minimoida uuden opettelemisen... Koodauksesta selviää myös käyttämällä samaa tuttua tekstieditoria kuin tähänkin asti Jos et aio opiskella TKT:tä kuin minimimäärän (perusopinnot), tämä voi olla realistinen vaihtoehto 41

Aloitusluento I Kurssin sisältö: Mitä vaaditaan? II Työvaiheet: Mitä tehdään? III Työvälineet: Millä tehdään? IV Java-vinkkejä: Miten tehdään? V Ryhmiinjako ja jonottajien karsinta 42

Java-ohjeita TTY:n Java-sivut http://javala.cs.tut.fi/ Jaakko Nenosen linkkilista http://www.cs.helsinki.fi/u/jnenonen/alabra/linkit.html Ohj. perusteet / Java-ohjelmointi -kurssien sivut http://www.cs.helsinki.fi/u/wikla/ohjelmointi/ http://www.cs.helsinki.fi/u/tapasane/kurssit/javaohjelmointi/kevat2008/ Ohjelmointitekniikka (Java) -kurssin sivu http://www.cs.helsinki.fi/u/wikla/otj/ Sunin Java-ohjeiden koostesivu http://java.sun.com/javase/6/docs/ 43

Aloitusluento I Kurssin sisältö: Mitä vaaditaan? II Työvaiheet: Mitä tehdään? III Työvälineet: Millä tehdään? IV Java-vinkkejä: Miten tehdään? V Ryhmiinjako ja jonottajien karsinta 44

45