Skip to content

ohjelmointi1/swd4tn032-3009

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ohjelmointi 1, syksy 2020 ☀️

Tervetuloa Haaga-Helian ohjelmointi 1 -opintojaksolle!

Kurssin opettajana toimii Teemu Havulinna (etunimi.sukunimi@haaga-helia.fi). Kurssi järjestetään etätyösuosituksen mukaisesti etäopetuksena.

Tämä GitHub-repositorio toimii toteutuksen swd4tn032-3009 kotisivuna, materiaalipankkina sekä lähdekoodien jakelukanavana.

Oppitunnit

Kurssin opetus järjestetään lukujärjestyksen mukaisesti 1. periodilla maanantaisin klo 8-10:45 ja keskiviikkoisin klo 9-11:45 MS Teamsissa. Osa oppitunneista tallennetaan myös myöhempää katselua varten. Lisäksi käytettävissänne on tallenteita aikaisemmilta ohjelmointikursseilta sekä tekstimuotoiset muistiinpanot kultakin oppitunnilta.

Aikataulu

  PVM Aiheet ja linkit
Ma 24.8. Kurssin järjestelyt ja osallistumisen vahvistaminen
Eclipse-sovelluskehitin
Perustietotyypit

🔗 Viope-rekisteröityminen (valitse Ohjelmointi 1, SWD4TN032-3009 ☀️)
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Eclipse-sovelluskehitin ja tehtävän palauttaminen Viopeen
📼 Java-kääntäjä, tavukoodi ja ohjelman suorittaminen
📼 Laskuoperaatiot, int, long, double ja laskuvirheet
📼 Muuttujat (int), niiden määrittely ja käyttäminen
📼 Tietotyypit long, double ja String
📼 Merkkijonojen yhdistäminen (String) ja kokonaislukujen jako-operaatiot
📼 Syötteiden lukeminen (Scanner) ja HeiEtunimi-tehtävä
Ke 26.8. Ehtolauseet
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Kokonaislukujen jakaminen ja liukulukujen pyöristäminen (Juhlat-tehtävä)
📼 Totuusarvot ja boolean-muuttujat
📼 Ehtojen yhdistäminen: ja- sekä tai-operaatiot
📼 If-ehtolause ja Eclipsen varoitusten korjaaminen
📼 Vertailut useilla vaihtoehtoisilla tavoilla: ==, !=, !
📼 else ja else if -rakenteet: kangaskassi-esimerkki
📼 Kellonajan selvittäminen: LocalTime ja Tervehdys-tehtävä
Ma 31.8. Toistorakenteet
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Sisäkkäiset ehtorakenteet ja Math-luokka / MatkalippujenHinnat.java
📼 While-toistorakenne
📼 While-toistorakenne ja toiston neskeyttäminen (break)
📼 For-toistorakenne
📼 FizzBuzz-esimerkki, ehtorakenteiden soveltaminen toistorakenteessa
Ke 2.9. Merkkijonot
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Toistorakenteet ja kotitalousvähennys-tehtävä
📼 Merkkijonojen vertailu, ==, equals ja equalsIgnoreCase
📼 Merkkijonot: merkkijonojen vertailu equals ja equalsIgnoreCase
📼 Merkkijonojen metodit ja muuttumattomuus
📼 Merkkijono-operaatiot ja metodikutsujen ketjuttaminen
📼 Erikoismerkit merkkijonoissa
📼 Osamerkkijonot ja merkkijono läpikäynti + palindromi-esimerkki
📼 Ohjelman suorituksen tutkiminen Java visualizerilla
📼 Säännölliset lausekkeet
Ma 7.9. Listat
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Lisämateriaali (Ohjelmoinnin MOOC):
Listamuuttujan käyttö useamman arvon tallentamiseen
Tehtäväpohjat

Oppitunnin videot:
📼 Tehtäväpohjien kloonaaminen GitHubista
📼 Javan listatyypit ja listojen luominen
📼 Listojen operaatiot: add, get, size...
📼 Listamuuttujien määrittely ja listatyyppien yhteensopivuus
📼 Listan sisällön tutkiminen ja sisällön läpikäynti
📼 Listan järjestäminen ja kopioiminen
Ke 9.9. Taulukot
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit
🔗 Java Visualizer -työkalu
🔗 Kaupungit-esimerkki Visualizerissa (taulukon kopioiminen)

Oppitunnin videot:
📼 Taulukkomuuttujat, arvojen lisääminen ja taulukon tulostaminen
📼 Taulukon luominen valmiilla arvoilla + Java Visualizer
📼 Merkkijonojen pilkkominen merkkijonotaulukoiksi
📼 Taulukon arvojen läpikäynti: for ja for-each
📼 Viittaustyyppisten arvojen muuttaminen + Java Visualizer

Lisämateriaali:
📼 Taulukot osa 1
📼 Taulukot osa 2: Arrays-apuluokka
📼 Malliratkaisu (SanojenVaihtaminen, Arrays.toString, String.join)
Ma 14.9. Staattiset luokkametodit, parametrit ja paluuarvot
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Metodien terminologia ja main-metodi
📼 Oman metodin määrittely ja kutsuminen
📼 Parametrien välittäminen omille metodeille
📼 Paluuarvojen palauttaminen ja vastaanottaminen
📼 Toisissa luokissa olevien metodien kutsuminen ja metodien näkyvyys
📼 Demo: Listan muuttaminen metodissa muuttaa sen kaikkialla
📼 Extra: satunnaisen nimen generointi omassa metodissa
Ke 16.9. Ajan käsitteleminen Javassa
Ohjelman paketointi ja suorittaminen Eclipsen ulkopuolella
Komentoriviparametrit

📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Ajan käsitteleminen Javassa: vanha ja nykyinen tapa + Aikaluokat ja aikaoliot
📼 Ajan laskeminen ja vertaileminen
📼 Karkausvuosi itse laskettuna vs. Javan valmiilla metodilla
📼 Ajanjaksot: Period, DAYS...
📼 Ajan esittäminen ja käsittely merkkijonona
📼 Ohjelman kääntäminen, paketoiminen ja suorittaminen Eclipsen ulkopuolella
📼 Komentoriviparametrit ja String[] args

Lisämateriaali:
🔗 Java API: LocalDate
📼 Ajan käsittely Javassa
Ma 21.9. Olio-ohjelmoinnin alkeet
Käsitteet luokka ja olio
Oliometodit ja -muuttujat
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Olio-ohjelmoinnin perusidea ja -käsitteet
📼 Oman luokan ja oliomuuttujien määritteleminen
📼 Oliomuuttujat ja -metodit sekä 'this'
📼 Extra: Lähdekoodien vieminen GitHubiin
📼 Konstruktorin määrittely ja konstruktorikutsut
📼 Getterit ja setterit
📼 Kahden saman luokan olion välinen logiikka metodissa
📼 toString-metodi ja olioiden merkkijonoesitykset

Lisämateriaali:
📼 Olio-ohjelmoinnin teoriaosuus
📼 Auto-tehtävän malliratkaisu
📼 Debuggerin käyttäminen ohjelman suorituksen tutkimiseksi
📼 null-viittaukset, NullPointerException ja viittausten kopiointi
Ke 23.9. Olio-ohjelmointi jatkuu:
Luokkien yhteyssuhteet
Olioita listoilla ja listoja olioissa

📝 Tunnin esimerkin lyhyt kuvaus
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Olioiden yhteyssuhteet ja null-arvojen käsittely
📼 Olioita listoilla ja listoja olioissa 1 / 2
📼 Olioita listoilla ja listoja olioissa 2 / 2

Lisämateriaali (Viope-vinkkejä):
📼 Kokoojamuuttujan hyödyntäminen Playlist-tehtävän kaltaisessa ongelmassa
📼 Pelaajat listalla / "olioiden summan laskeminen"
Ma 28.9. Olioiden vertailu ja järjestäminen
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Olioiden kertaus: olioiden läpikäyntiä listoilla
📼 Olioiden "samanlaisuus" ja equals-metodi
📼 Olioiden hakeminen listalta: equals, contains ja indexOf
📼 🌶️ Extra: omien olioiden järjestäminen listalla
📼 Merkkijonot: merkkijonojen vertailu equals ja equalsIgnoreCase

Lisämateriaali:
📼 Viittaukset, alkeistietotyypit ja null
Ke 30.9. Poikkeukset
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Ohjelmointikurssin pisteidenlasku ja arvosanat
📼 Poikkeusten peruskäsitteet, try ja catch
📼 Rinnakkaiset tietovirrat ja race condition
📼 Useiden eri tyyppisten poikkeusten käsittely
📼 Poikkeuksien heittäminen: throw
📼 Tarkastetut poikkeukset: kaupungit verkosta

Lisämateriaali:
📼 Poikkeukset osa 1: try, catch, throw, finally
📼 Poikkeukset osa 2: KysyUudestaan
📼 Poikkeukset osa 3: Stack trace, poikkeustyypit ja poikkeusten heittäminen
📼 Poikkeukset osa 4: omat poikkeusluokat (vapaaehtoinen lisäsisältö)
Ma 5.10. Tekstitiedostojen lukeminen ja tallentaminen
📝 Muistiinpanot
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Tekstitiedoston lukeminen ja merkistökoodaukset
📼 CSV-tiedoston lukeminen ja olioiden luonti
📼 Tiedoston tallentaminen ja CSV-tiedoston generointi
📼 Tiedostonkäsittely osana ohjelmaa ja AddressBook-tehtävä

Lisämateriaali:
📼 Tiedostojen käsittely
Ke 7.10. Oppitunti peruttu Bite-valintakokeen valvonnan vuoksi
Ma 12.10. Kurssin sisällön kertaus
📁 Oppitunnin esimerkkikoodit

Oppitunnin videot:
📼 Kurssin kertaus: merkkijonot, metodit, ehtorakenteet, poikkeukset
📼 Kurssin kertaus: olio-ohjelmointi
Ke 14.10. Kurssin loppukoe
Viope-tehtävien DL 14.10. klo 9.

Kurssin sisältö

Tunneilla opetellaan ohjelmoinnin perusteita sekä hyviä ohjelmointikäytäntöjä ja käydään läpi esimerkkejä. Lisäksi opiskelijat ohjelmoivat tuntitehtäviä ja saavat niihin ohjausta. Kurssin suorittamiseksi sinun tulee palauttaa hyväksytysti automaattisesti arvioitavia harjoitustehtäviä Viope-järjestelmään sekä suorittaa kurssin lopuksi järjestettävä koe. Koe sisältää harjoitustehtävien kaltaisia ohjelmointitehtäviä ja se tehdään tietokoneella.

Kehitys ohjelmistokehittäjänä

"The biggest mistake I see new programmers make is focusing on learning syntax instead of learning how to solve problems."

V. Anton Spraul

Tällä kurssilla opetellaan Java-kielen syntaksia, mutta erityisesti pyrimme opettelemaan ohjelmistokehityksen kannalta hyödyllisiä ajatusmalleja ja ongelmanratkaisutapoja. Ajatusmallit ja ongelmanratkaisukyky ovat myöhemmin sovellettavissa eri ohjelmointikielillä ja eri tyyppisissä sovelluksissa.

1. Think like a computer

  • Opimme ymmärtämään "miten tietokone" toimii ja mitkä ovat Javan peruspilarit
  • Osaamme tuottaa tietokoneen näkökulmasta järkeviä ratkaisuja

2. Think like a programmer

  • Opimme soveltamaan oppimaamme ja tuottamaan myös ihmisen näkökulmasta järkeviä ratkaisuja
  • Ymmärrettävyys, jatkokehitettävyys, ylläpidettävyys, testattavuus

3. Work like a programmer

  • Opimme hyödyntämään ammattimaisen ohjelmistokehittäjien työkaluja kuten kehitysympäristöä, versionhallintaa ja yksikkötestausta (opettelu jatkuu Ohjelmointi 2:lla)

Kurssin arviointi

  1. Automaattisesti arvioitavat Viope-tehtävät (50 % loppuarvosanasta)

    • tehtäviä saa tehdä pareittain, mutta molempien on osallistuttava aktiivisesti työskentelyyn ja palautettava oma ratkaisu Viopeen

    • vähintään 40 % tehtävistä on oltava tehty kurssikokeeseen mennessä

    • arvostellaan asteikolla 0-5 (40 % - 100 % tehtävistä)

    • Viopessa on tarjolla myös syventäviä ja kertaavia bonustehtäviä, joiden tekeminen kasvattaa pistekertymään, mutta joiden tekemättä jättäminen ei laske arvosanaa

    • kaikkien Viope-tehtävien DL on ke 14.10. klo 9 (kurssikokeen alku)

  2. Kurssikoe (50 % loppuarvosanasta)

    • sisältää harjoitustehtävien kaltaisia ohjelmointitehtäviä

    • arvostellaan asteikolla 0-5

package arviointi;

import static arviointi.OsasuoritustenArviointi.*;

public class KurssinArviointi {
    // tehtävien ja kokeen maksimipisteet lukitaan kurssin aikana:
    private static int viopeMaksimi = 58; // bonukset huomioiden maksimi on 73
    private static int kokeenMaksimi = 25;

    public static int laskeLoppuarvosana(int tehtavienPisteet, int kokeenPisteet) {
        double viopeArvosana = laskeArvosana(tehtavienPisteet, viopeMaksimi);
        double kokeenArvosana = laskeArvosana(kokeenPisteet, kokeenMaksimi);

        if (viopeArvosana > 0 && kokeenArvosana > 0) {
            double keskiarvo = (viopeArvosana + kokeenArvosana) / 2;
            return (int) Math.round(keskiarvo);
        } else {
            return 0;
        }
    }
}
package arviointi;

public class OsasuoritustenArviointi {

    public static double laskeArvosana(int omatPisteet, int maksimiPisteet) {
        // hyväksyttyyn arvosanaan vaaditaan 40 % pisteistä
        double minimiPisteet = maksimiPisteet * 0.4;

        if (omatPisteet < minimiPisteet) {
            return 0;
        } else {
            // minimipisteillä saa arvosanan 1, maksimipisteillä arvosanan 5
            double arvosana = 1 + 4 * (omatPisteet - minimiPisteet) / (maksimiPisteet - minimiPisteet);

            // arvosana voi olla korkeintaan 5 bonuspisteet huomioiden
            return Math.min(5, arvosana);
        }
    }
}

Kurssin työkalut

Java ja Eclipse IDE

Tarvitset Java-ohjelmien kehittämiseksi ja suorittamiseksi Java JDK:n (vähintään versio 9). Lähdekooditiedostojen editointiin ja ohjelmien suorittamiseen käytämme tällä kurssilla Eclipse-kehitysympäristöä, jonka voit ladata itsellesi täältä. Ole tarkkana ja valitse versio Eclipse IDE for Enterprise Java Developers.

Saat käyttää myös muita työkaluja, mutta niihin ei voida tarjota käyttötukea.

Viope

Kurssin harjoitustehtävien tehtävänannot löytyvät Viope-järjestelmästä, jonne tehtävät myös palautetaan, ja joka tarkistaa tehtävät automaattisesti.

Rekisteröidy Viopeen osoitteessa: https://vw4.viope.com/login?org=hh. Huomaa että rekisteröitymisosoitteessa on oltava parametri ?org=hh, jotta pääset käsiksi Haaga-Helian kurssitarjontaan. Rekisteröityessäsi valitse tämä toteutus swd4tn032-3009 ☀️.

Teknisistä syistä johtuen Viopeen palautettavista lähdekoodeista täytyy aina poistaa mahdolliset package -lauseet luokan yläpuolelta. Viope on myös muilla tavoin erittäin tarkka ohjelmien oikeellisuudesta, mikä saattaa aiheuttaa ensimmäisillä viikoilla hämmennystä. Tyypillisiä Viope-virhetilanteita ja niiden ratkaisuja on dokumentoitu erilliselle wiki-sivulle, jota päivitetään kurssin edetessä.

Teams

Tällä kurssilla käytetään viestintään ja oppitunteihin Microsoftin Teams -palvelua. Jos jäät jumiin koodisi kanssa tai et ymmärrä materiaaleja tai tehtävänantoja, kysy rohkeasti vinkkejä Teamsissa oppitunnin aikana ja käytä Teamsin chattia oppituntien ulkopuolella. Todennäköisesti samaa ongelmaa pohtii kanssasi myös moni muu, joten kysymykset ovat erittäin tervetulleita.

Teamsissa voi myös esittää toivomuksia kurssin kehittämiseksi jo kurssin aikana yksityisviesteinä opettajalle tai yhteisillä kanavilla. Tämä kurssi ei ole "valmis", vaan sitä kehitetään kurssin etenemisen mukaan.

Teams on saatavilla puhelimien sovelluskaupoista sekä työpöytäsovelluksena, tai voit käyttää sitä selaimen web-käyttöliittymässä ilman asennuksia. Kirjautuminen Teamsiin tapahtuu Haaga-Helian @myy.haaga-helia.fi-tunnuksella.

GitHub

Kurssin tehtäväpohjien ja malliratkaisujen jakelussa hyödynnetään ohjelmistokehityksen alalla erittäin vakiintunutta Git-versionhallintaa ja GitHub-palvelua. Voit kloonata itsellesi tämän projektin repositorion ylälaidassa olevien painikkeiden avulla. Kurssin edetessä projektiin lisätään uusia tiedostoja, jotka voit myös päivittää itsellesi Git:in avulla.

Gitin käytön opetteluun voit käyttää esimerkiksi Helsingin yliopiston erinomaista "Tietokone Työvälineenä"-kurssin Git-materiaalia: https://tkt-lapio.github.io/git/. Vaikka Git tuntuisi aluksi vaikealta tai ahdistavalta, sinun ei tarvitse opetella kaikkea kerralla, vaan tee vain sen verran mistä on sinulle välitöntä hyötyä. Voit hyvin suorittaa tämän kurssin myös perehtymättä erikseen Gittiin.

About

Ohjelmointi 1, syksy 2020 ☀️

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%