TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)



Samankaltaiset tiedostot
SYSTEEMITYÖ. Tärkeitä sanoja

OHJELMOINNIN TYYLISÄÄNTÖJÄ

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

14. Hyvä ohjelmointitapa 14.1

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet, syksy 2006

Ohjelmointi 1 / syksy /20: IDE

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

8. Näppäimistöltä lukeminen 8.1

Ohjelmoinnin perusteet Y Python

13. Hyvä ohjelmointitapa (osa 1) 13.1

Test-Driven Development

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

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

Ohjelmoinnin perusteet Y Python

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {

CoMa - Ohjelmoinnin tyyliohje

Toiminnan laadunvarmistus SYSTEEMITYÖ. Laatu

Harjoitus 5 (viikko 48)

Harjoitus 4 (viikko 47)

Harjoitus 2 (viikko 45)

1. Omat operaatiot 1.1

MITÄ JAVASCRIPT ON?...3

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

Ohjelmoinnin perusteet Y Python

Test-Driven Development

Ohjelmoinnin peruskurssi Y1

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

4. Lausekielinen ohjelmointi 4.1

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Koodaamme uutta todellisuutta FM Maarit Savolainen

Harjoitus 5 (viikko 41)

Tietueet. Tietueiden määrittely

Osoitin ja viittaus C++:ssa

5. HelloWorld-ohjelma 5.1

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

Alkukartoitus Opiskeluvalmiudet

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

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmointi 2 / 2010 Välikoe / 26.3

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

5. HelloWorld-ohjelma 5.1

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Verkkokirjoittaminen. Verkkolukeminen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Harjoitus 5 (viikko 41)

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

Automaattinen yksikkötestaus

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

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

TIE Principles of Programming Languages CEYLON

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

COTOOL dokumentaatio SEPA: Refaktorointi

Java-kielen perusteet

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

8. Näppäimistöltä lukeminen 8.1

Johdatus L A TEXiin. 10. Matemaattisen tekstin kirjoittamisesta. Matemaattisten tieteiden laitos

Verkkokirjoittaminen. Anna Perttilä Tarja Chydenius

Apuja ohjelmointiin» Yleisiä virheitä

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmointi 1. Kumppanit

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Ohjelmoinnin perusteet Y Python

C++ Ohjelmoijan käsikirja. Johdanto

Ohjelmoinnin perusteet Y Python

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

9. Periytyminen Javassa 9.1

Eclipse ja JUnit-ohjelmoijatestit

ITKP102 Ohjelmointi 1 (6 op)

Osaamistavoitteiden asettaminen omalle opintojaksolle - Flipparit

Ohjelmoinnin perusteet Y Python

METROPOLIAN PILVIPALVELUT OPETUKSESSA Google Apps for Education (GAFE)

Interaktiivinen LTS -esittely

Sangen lyhyt L A T E X-johdatus

Python-ohjelmointi Harjoitus 5

Tavutusohjelman toimintapa...3. Tavutussääntöjä...3. Keinoja...3. Vihjetavu...3. Katkeamaton väli...4. Katkeamaton tavuviiva...4

Python-ohjelmointi Harjoitus 2

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Ohjelmointi 1 C#, kevät 2013, 2. tentti

KIELENOPPIJOITA TIEDONHANKINTA KESKIÖSSÄ KUUNTELEMALLA OPPIJA (AUDITIIVINEN) KIELEN KÄYTTÖ, VUOROVAIKUTUS NÄKEMÄLLÄ

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

ITKP102 Ohjelmointi 1 (6 op)

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

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Transkriptio:

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1

Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu 4) Nimeäminen 5) Funktiot 6) Koodin kommentointi 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 2

Mitä on hyvä koodi? "Any fool can write code that a computer can understand. Good Programmers write code that humans can understand - Martin Fowler Ohjelmakoodin lukemiseen käytetään vähintään 10 kertaa enemmän aikaa kuin sen kirjoittamiseen! Ero kasvaa ajan kuluessa suuremmaksi. Ohjelmoijat lukevat koodia jatkuvasti tehdessään siihen muutoksia Koodin luettavuuden parantaminen nopeuttaa koodin kirjoittamista! Luettavuuden parantaminen voidaan siis tehdä kirjoittamisen kustannuksella. 21/3/11 Ohjelmistotuotanto (Mikko Vuorinen) Metropolia Ammattikorkeakoulu 3

Mitä on hyvä koodi? Hyvä ohjelmakoodi? Koodia pystyy lukemaan ymmärrettävinä lauseina Koodi tekee sen, mitä olettaa sen tekevän, eikä mitään muuta. (Koodi ei sisällä yllätyksiä!) Koodi läpäisee kaikki testit, mukaan lukien kääntäjän ja katselmoinnin. Koodi on yhtenäinen muun koodin kanssa. 21/3/11 Ohjelmistotuotanto (Mikko Vuorinen) Metropolia Ammattikorkeakoulu 4

Ohjelmointikäytännöt Miten lähdekoodi kirjoitetaan ja jäsennetään luettavaksi: Nimeämiskäytännöt, vertikaalinen ja horisontaalinen muotoilu, sisennykset, koodin kommentointi Virheidenkäsittely, luokkarakenteet ja muut projektin ohjelmointikäytännöt Ohjelmointikäytännön tarkoituksena on: Lähdekoodin yhtenäisyyden säilyttäminen, siten että se on aina luettavaa. Rajoittavat huonojen tapojen käyttöä Lisäävät ennustettavuutta lähdekoodiin. Auttavat ohjelmoijaa keskittymään olennaiseen. Kompensoidaan ohjelmointikielien rajoitteita. 21/3/11 Ohjelmistotuotanto (Mikko Vuorinen) Metropolia Ammattikorkeakoulu 5

Ohjelmointikäytännöt Pitää sopia jokaisessa ohjelmistoprojektissa ennen koodauksen aloittamista Jos koodaus on jo ehditty aloittaa, on liian myöhäistä. Kirjataan ylös, jotta voidaan tarkistaa myöhemmin. Käytännöt vaihtelevat: Eri ohjelmointikielien välillä Eri ohjelmoijien välillä Tärkeintä on sopia kulloisessakin projektissa käytettävä käytäntö. Kaikkien pitää noudattaa sovittua käytäntöä! Tarkistus: Muotoilu automatisoidaan IDE:llä Automaattinen tarkistus buildi serverillä Huonolaatuinen koodi == build failed!!! 21/3/11 Ohjelmistotuotanto (Mikko Vuorinen) Metropolia Ammattikorkeakoulu 6

Ohjelmointikäytännöt Googlen C/C++ ohjelmointikäytännöt: http://googlestyleguide.googlecode.com/svn/trunk/cppguide.xml 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 7

Koodin asettelu Sisennys: { aaltosulun jälkeen lisää sisennystä } aaltosuluin jälkeen sisennys pois Sisennys = 4 merkkiä (tab) 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 8

Koodin asettelu Vertikaalinen etäisyys: Mitä vähemmän koodia luettaessa täytyy skrollata pystysunnassa sen parempi. Lyhyitä funktiota ei tarvitse skrollata. Muuttujien esittely mahdollisimman lähelle niiden käyttöpaikkaa. Horisontaalinen etäisyys: Sivusuunnassa ei pidä joutua skrollaamaan. ~80-100 merkkiä max. rivinpituus. Käytä välilyöntiä erottimena! for(i=0;i<5;i++) -> for( i = 0; i < 5; i++ ) 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 9

Nimeäminen Hyvät nimet muodostavat 90% ohjelmakoodin luettavuudesta! Käytä nimien miettimiseen aikaa! Nimeä, uudelleennimeä ja vielä kerran uudelleennimeä! Nimet: Kuvaavia! Kertovat kaiken tarpeellisen! Perustuvat sovittuun ohjelmointikäytäntöön! Yksiselitteisiä! 21/3/11 Ohjelmistotuotanto (Mikko Vuorinen) Metropolia Ammattikorkeakoulu 10

Nimeäminen Vältä enkoodauksia ja lyhennyksiä! strcbacdata* _ptr_bacdata; WTF??? Nykyaikaiset kääntäjät osaavat selvittää tyypeistä kaiken tarpeellisen, tätä tietoa ei tarvitse kirjata itse ylös. Nimien maksimipituus ei enää ole 8 merkkiä. Valitse aina yksi sana / käsite fetch, get ja retrieve tarkoittavat samaa, mutta sotkevat koodia, jos niitä käytetään ristiin. Käytä nimiä, jotka liittyvät ongelmaan, jota yritetään ratkaista. Jos käsitellään listaa opiskelijoista, kuvaava nimi on silloin esim. students, eikä data. 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 11

Funktiot Hyviä ohjelmointitapoja SRP = Single Responsibility Principle Funktioiden pitää tehdä vain yksi asia! Nimeäminen: Funktion nimen pitäisi kertoa selvästi mitä funktio tekee: do(int *r, int s); calculatecoursegrades(int examresults[], int size); Suosi pientä kokoa: Funktioiden pitäisi olla mahdollisimman pieniä. Parametrien määrä myös on syytä pitää pienenä. Jos joudut kommentoinnilla erottamaan erillisiä osia koodista, tee mieluummin tällöin uusi funktio. Liian pitkä funktio tai pitkä parametrilista kertoo usein sen, että rikotaan SRP sääntöä. 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 12

Funktiot Hyviä ohjelmointitapoja Vältä sivuvaikutuksia: Funktion pitäisi tehdä vain yksi asia, joka pitää käydä selville funktion nimestä. (SRP!) Jos funktio tekee jotain muuta, mikä ei selviä funktion nimestä, on koodia heti vaikeampi ymmärtää. Esim. funktio laskee saamansa taulukon arvoista halutun tuloksen, mutta samalla muuttaa taulukon arvoja. Sivuvaikutuksista johtuvia virheitä on todella vaikea selvitellä. 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 13

Funktiot Hyviä ohjelmointitapoja Älä käytä lippu-parametreja (flags) Eli parametreja joiden perusteella funktion toiminnallisuus muuttuu. Tällöin on vaikea pysyä selvillä mitä funktio milloinkin tekee, koska koodia luettaessa joudutaan myös pitämään mielessä miten parametri vaikuttaa funktion suoritukseen. Esim. void printcheck(int outputtype); => void printcheckxml(); void printcheckplaintext(); 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 14

Koodin kommentointi C-kielessä: // yhden rivin kommentti /* usean rivin kommentti */ 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 15

Koodin kommentointi Kommentteja käytetään usein selittämään huonoa koodia! Kertovat, että koodissa on jotain vikaa, koska sitä täytyy selitellä. Turhat kommentit vaikeuttavat koodin lukemista. Itsestään selvät kommentit int number; // number char studentname[20]; // opiskelijan nimi Asiaankuulumaton tieto: Kuuluu muualle kuin koodin sekaan Versiohistoriaa, muutoshistoriaa, todo-listat Vanhentuneet kommentit Kommentit jotka eivät enää pidä paikkaansa Vaikeuttavat koodin ymmärtämistä! 21/3/11 Ohjelmistotuotanto (Mikko Vuorinen) Metropolia Ammattikorkeakoulu 16

Kodin kommentointi Kommenttia kirjoittaessa: Mieti miten korjaat koodin siten, että kommentointi on turhaa. Jos kuitenkin tarvetta kommentoida, kirjoita kommentti huolellisesti! Mitä kielioppivirheet yms hätäiset kommentit kertovat kommentoidun koodin laadusta? Entä kirjoittajasta? Hyödyllisin kommentti kertoo koodista miksi jokin asia on tehty, ei miten. 21/3/11 Ohjelmistotuotanto (Mikko Vuorinen) Metropolia Ammattikorkeakoulu 17

Kysymyksiä? 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 18