CoMa - Ohjelmoinnin tyyliohje

Samankaltaiset tiedostot
Java-kielen perusteet

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

ITKP102 Ohjelmointi 1 (6 op)

Listarakenne (ArrayList-luokka)

1. Omat operaatiot 1.1

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmoinnin perusteet Y Python

14. Hyvä ohjelmointitapa 14.1

ITKP102 Ohjelmointi 1 (6 op)

1 Tehtävän kuvaus ja analysointi

Rajapinta (interface)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

16. Javan omat luokat 16.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

Java-kielen perusteet

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

5. HelloWorld-ohjelma 5.1

ITKP102 Ohjelmointi 1 (6 op)

5. HelloWorld-ohjelma 5.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin jatkokurssi, kurssikoe

19. Olio-ohjelmointia Javalla 19.1

OHJELMOINNIN TYYLISÄÄNTÖJÄ

Olio-ohjelmointi Syntaksikokoelma

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Javan perusteita. Janne Käki

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Harjoitus 5 (viikko 41)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

A TIETORAKENTEET JA ALGORITMIT

13. Hyvä ohjelmointitapa (osa 1) 13.1

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Java kahdessa tunnissa. Jyry Suvilehto

Osa VII. Mitä mallit ovat ja kuinka niitä käytetään Miksi mallit tarjoavat paremman vaihtoehdon makroille Kuinka luokkamalleja luodaan

TIETORAKENTEET JA ALGORITMIT

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

T Henkilökohtainen harjoitus: FASTAXON

Java-kielen perusteita

Metodien tekeminen Javalla

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

9. Periytyminen Javassa 9.1

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

1. Mitä tehdään ensiksi?

Tässä dokumentissa kuvataan Keimo-projektissa sovellettavia ohjelmointikäytäntöjä. Päivämäärä Projektiryhmä Keimo

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

15. Ohjelmoinnin tekniikkaa 15.1

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Java-API, rajapinnat, poikkeukset, UML,...

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

17. Javan omat luokat 17.1

4. Luokan testaus ja käyttö olion kautta 4.1

Olio-ohjelmointi Javalla

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

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

Osio2: Taulukot Jukka Juslin

14. Poikkeukset 14.1

Tietorakenteet, laskuharjoitus 8, malliratkaisut

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

ITKP102 Ohjelmointi 1 (6 op)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

13. Loogiset operaatiot 13.1

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Sisältö. 2. Taulukot. Yleistä. Yleistä

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisältö. 22. Taulukot. Yleistä. Yleistä

Ohjelmoinnin perusteet Y Python

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmointi 2, välikoe

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

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

Ohjelmointi 2 / 2011 Välikoe / 25.3

Mikä yhteyssuhde on?

Luokan sisällä on lista

Groovy. Niko Jäntti Jesper Haapalinna Group 31

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Harjoitus 6 (viikko 42)

4. Lausekielinen ohjelmointi 4.1

Ohjelmoinnin perusteet, syksy 2006

Oliot viestivät metodeja kutsuen

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

12. Monimuotoisuus 12.1

Transkriptio:

CoMa - Ohjelmoinnin tyyliohje Mindmap - Valtteri Tyrsky Helsinki 16.12.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Antti Kavonen Ilari Nieminen Tiina Torvinen Valtteri Tyrsky Kari Velling Antti Vähäkotamäki Asiakas Anni Rytkönen Johtoryhmä Juho Teuho (ohjaaja) Juha Taina Kotisivu http://www.cs.helsinki.fi/group/mindmap Versiohistoria Versio Päiväys Tehdyt muutokset 1.0 16.12.2005 Ensimmäinen versio

Sisältö 1 Tyyliohje 1 1.1 Java-tiedostojen alkukommentit...................... 1 1.2 Metodien kommentointi........................... 1 1.3 Import-lauseet................................ 1 1.4 Sarkain................................... 1 1.5 Koodirivin pituus.............................. 2 1.6 Pitkän lausekkeen jakaminen riveille.................... 2 1.7 Kommentit koodin seassa.......................... 2 1.8 Muuttujien määrittely............................ 3 1.9 Castin jälkeen ei tarvitse aina välilyöntiä.................. 3 1.10 Tyhjät rivit metodien välissä........................ 4 1.11 Metodien parametrilista........................... 4 1.12 Muuttujien nimeäminen........................... 5 1.13 Taulukoiden ja listojen nimeäminen.................... 5 1.14 Listojen tyyppi............................... 6 1.15 Aksessoi rajapinnan kautta aina kun mahdollista.............. 6 1.16 Listojen läpikäynti............................. 6 1.17 Päättymättömät silmukat.......................... 7 i

1 Tyyliohje Koodaustyylin pohjana käytetään Sun:in määrittämiä java-koodauskonventioita, jotka ovat luettavissa osoitteessa http://java.sun.com/docs/codeconv Näistä konventioista käytetään jatkossa nimitystä javakonventiot. Koodaus tehdään kokonaan englannin kielellä. Tämä koskee sekä varsinaista koodia että kommentteja. Javakonventioita ei oteta sellaisenaan käyttöön tässä projektissa, vaan niitä täydennetään tarkemmilla tai kokonaan uusilla ohjeilla, ja toisaalta joitakin kohtia jätetään pois tai lievennetään. Seuraavissa kappaleissa kuvaillaan nämä lisäykset ja poikkeamat javakonventioista. 1.1 Java-tiedostojen alkukommentit Tiedoston alkukommentin versionumero ja päiväys automatisoidaan käyttäen CVS:n keywordeja "Revision : 1.2"ja "Date : 2005/12/1613 : 52 : 47". Kommentin muoto on seuraava: /* * Classname.java * * $Revision: 1.2 $ * $Date: 2005/12/16 13:52:47 $ * * Copyright (c) 2005 Mindmap Group / University of Helsinki * + tietoa lisenssistä */ 1.2 Metodien kommentointi Metodia ei tarvitse kommentoida jos se on nimensä puolesta rittävän yksiselitteinen. Jos metodi kuitenkin kommentoidaan, se tehdään javadoc-tyylisesti. 1.3 Import-lauseet Kooditiedostossa importoidaan vain ne luokat ja rajapinnat joita koodi tarvitsee. Kokonaista pakkausta ei siis koskaan importoida, joten * -symbolia ei käytetä import-lauseissa. 1.4 Sarkain Sarkainta (TAB) ei käytetä koodin sisennykseen eikä mihinkään muuhunkaan. Koodi sisennetään neljä (4) välilyöntiä kerrallaan. 1

1.5 Koodirivin pituus Koodirivin pituus ei saa ylittää 80 merkkiä. (Vihje: Eclipsestä saa näkyviin "print marginapuviivan, joka on oletusarvoisesti 80 merkin kohdalla). 1.6 Pitkän lausekkeen jakaminen riveille Javakonventioissa esitetyt ohjenuorat ovat hyviä, mutta niitä ei tarvitse noudattaa orjallisesti. 1.7 Kommentit koodin seassa Kahdella vinoviivalla alkavaa kommentointia käytetään a) koodin poistamiseen käytöstä, b) koodirivin perään kirjoitettavassa kommentissa. Esimerkkejä: //int x; <--- nämä koodirivit on kommentoitu pois käytöstä //int y; Point location; Animal a = AnimalFactory.createAnimal( Animal.CAT, "Misse", null // owner not known, thus null ); Muissa tapauksissa koodin sekaan kirjoitettavissa kommenteissa käytetään muotoa: /* Check animal type */ if (animal instanceof Cat) { /* * For cats, we need to make sure that * blaablaa... blaa blaa... * blaablaa blaa */ Toisin kuin Sun:in konventioissa esitetään, yksirivistä kommenttia edeltämään ei tarvitse laittaa tyhjää riviä. 2

1.8 Muuttujien määrittely Yhdellä rivillä määritellään vain yksi muuttuja. int x, y; int x; int y; // ei näin! //..vaan näin! Ryhmää muuttujamäärittelyitä voi selkiyttää sijoittamalla muuttujan tyypin ja nimen väliin välilyöntejä (EI tabeja), kuten seuraavassa esimerkissä: int number; double fraction; MyObject entry; Tällöin välilyöntien määrä määräytyy pisimmän tyypin nimen mukaan, jota tulee seurata kaksi välilyöntiä kuten esimerkissä. Käytä kuitenkin ryhmittelyä välttääksesi todella pitkiä välejä: AbsolutelyFarTooLongClassName instance1; AbsolutelyFarTooLongClassName instance2; int n; // Näitä ei järkeä siirtää long delta; long price; 1.9 Castin jälkeen ei tarvitse aina välilyöntiä Esimerkkejä: Node n = (Node) iterator.next(); // Välilyönti OK docomputing((int) (a / b)); // Välilyönti outo docomputing((int)(a / b)); // Parempi ilman 3

1.10 Tyhjät rivit metodien välissä Luokassa metodien väliin sijoitetaan yleensä yksi tyhjä rivi. Tyhjä rivi voidaan kuitenkin jättää pois, jos näin saavutetaan ohjelmoijan mielestä selkeämpi lopputulos. 1.11 Metodien parametrilista Metodin parametrilistassa parametreja erottavien pilkkujen jälkeen täytyy sijoittaa yksi välilyönti, mikäli seuraava parametri sijaitsee samalla rivillä. Parametrilistaa ympäröivien sulkeiden ja itse parametrien väliin SAA sijoittaa yhden välilyönnin. Välilyöntejä on tällöin oltava tasan yksi kummassakin päässä parametrilistaa. Esimerkki: public void dostuff( Object obj ) { /* Välilyönnit parametrilistan päissä: OK*/ int result = calculateresult( somevalue, someothervalue ); /* Ei välilyöntejä parametrilistan päissä: MYÖS OK */ int result2 = calculateresult(somevalue, someothervalue); Jos metodin määrityksessä parametrilista ylittää rivin maksimipituuden, täytyy parametrit jakaa riveille. Tällöin parametrit sijoitetaan alekkain, ja erotetaan sulkeista välilyönneillä. Esimerkki: public static void calculatesomething( SomeObject something, SomeOtherObject other, int integervalue ) {... Myös metodikutsun jakautuessa usealle riville, olisi suositeltavaa pyrkiä sijoittamaan parametrit alekkain. Esimerkki: /* EI NÄIN: */ SomeResultObject result = calculateresult(object firstparam, Object secondparam, Object thirdparam); /* VAAN ESIM NÄIN: */ SomeResultObject result = calculateresult( Object firstparam, 4

); Object secondparam, Object thirdparam /* TAI NÄIN: */ SomeResultObject result = calculateresult( Object firstparam, Object secondparam, Object thirdparam ); 1.12 Muuttujien nimeäminen Muuttujat nimetään pääsääntöisesti tyyliin: undostackpointer eli aloitetaan pienellä alkukirjaimella ja siitä eteenpäin jokainen sana alkaa isolla kirjaimella. Kuitenkin myös alaviivaa voidaan käyttää sanoja erottamaan silloin kun luettavuus sitä vaatii. Tämä tulee vastaan erityisesti tapauksia joissa loppuosa muuttujan nimestä on vain yhden tai kaksi merkkiä pitkä: member_id // memberid näyttää sekavalta count_a // counta näyttää sekavalta Lyhenteiden kohdalla myös pelkkien isojen kirjaimien käyttäminen on sallittua: memberid 1.13 Taulukoiden ja listojen nimeäminen Taulukot ja listat nimetään monikossa, esim: int[] numbers; List objects; 5

1.14 Listojen tyyppi Dynaamista listaa tarvittaessa käytetään normaalisti luokkaa ArrayList. Vector-luokkaa voidaan käyttää jos listalta vaaditaan säieturvallisuutta. LinkedList-luokkaa voidaan käyttää jos listaan tullaan kohdistamaan paljon insertointeja tai deletointeja (muualle kuin listan loppuun). 1.15 Aksessoi rajapinnan kautta aina kun mahdollista Olioita käytetään mahdollisimman korkealla tasolla Esimerkki: List nodes = new Vector(); // OK Vector nodes = new Vector(); // EI NÄIN, ELLEI PAKKO 1.16 Listojen läpikäynti Listoja käydään läpi iteraattoreiden avulla while- tai for-silmukassa, ellei tilanne vaadi muuta. Esimerkkejä: Iterator iter = nodes.iterator(); while (iter.hasnext()) { Node n = (Node) iter.next(); n.dosomething(); for (Iterator i=nodes.iterator(); i.hasnext();) { Node n = (Node) i.next(); n.dosomething(); Seuraavassa esimerkissä tarvitaan tieto indeksistä, joten iteraattori ei ole paras ratkaisu: public int getindexof(node n) { for (int i=0; i<nodes.size(); i++) { if (nodes.get(i).equals(n)) { return i; return -1; 6

1.17 Päättymättömät silmukat Silmukalle tulisi aina pyrkiä määrittämään poistumisehto. Joissakin harvinaisissa tilanteissa on kuitenkin luontevampaa jättää silmukan poistumisehto pois, ja huolehtia silmukasta poistumisesta silmukan sisällä, kutsuen break-lausetta jollakin ehdolla. Tällöin silmukka toteutetaan while-lauseella seuraavasti: while (true) {... Muita muotoja, kuten for-lausetta, ei sallita: for (;;) {... // ei näin! 7