OLIO-OHJELMOINTI Object programming versio:

Koko: px
Aloita esitys sivulta:

Download "OLIO-OHJELMOINTI Object programming versio:"

Transkriptio

1 PLA OLIO-OHJELMOINTI Object programming versio:

2 Kurssin suoritus Kummastakin tentistä saa enintään 10 pistettä. Harjoituksista enintään 10 pistettä. Eli kurssin maksimipistemäärä on 30. Arvosana määräytyy oheisen taulukon mukaan. Tentit tenttiakvaariossa. Tenttiohjelman arviointikriteerit ovat: toimii 2, tekee annetun tehtävän 3, ratkaisutapa 3 ja ulkoasu 2. Harjoituksia on 20 ja niillä on eräpäivät. Opiskelija lähettää harjoitusten vastaukset sähköpostin liitteenä osoitteeseen mika.saari@tut.fi. Harjoitus- ja tenttipisteet huomioidaan vain vuoden 2016 aikana. Kurssista on kaksi uusintatenttiä, joilla voi korottaa heikoimman tentin arvosanaa. Luentoesitys ja luennolla rakennetut ohjelmat löytyvät osoitteesta Harjoitusten mallivastaukset löytyvät osoitteesta eräpäivän jälkeen. Kurssimateriaalina käytetään kirjaa Vesterholm-Kyppö: Javaohjelmointi (joka oletetaan opiskelijalla olevan käytettävissään) PISTEET ARVOSANA <15 0 Mika.saari@tut.fi 3

3 Kurssin kirjoja Mika Vesterholm, Jorma Kyppö: Java-ohjelmointi, Talentum 2008 Simo Silander, Vesa Ollikainen, Juha Peltomäki, : Java, Docendo 2010 Kai Koskimies: Oliokirja Verkkoaineistot The Java Tutorials Mika.saari@tut.fi 4

4 Miksi luokkia? EDUT Suurten ohjelmistojen rakentaminen (mallintaminen, työnjako, koodin ryhmittely ) Koodin uudelleenkäyttö (luokkahierarkia, rajapinta, geneerisyys, oliot) Muutosten rajaaminen (projektit, paketit, luokat) PERUSOMINAISUUDET Kapselointi Periyttäminen Monimuotoisuus Mika.saari@tut.fi 6

5 Luokkatyyppejä Sovellusluokat Tekniset luokat Suoritettava luokka Luokkakirjasto Konkreettinen luokka Abstrakti luokka Ilmiö luokka MITEN LÖYDÄN LUOKAT? Toimintakuvauksen substantiivit ja tapahtumat, joista talletetaan tietoa. Miksa 7

6 Luokka ja olio Luokka Luokan data Luokan metodit Olion data Olion data Olion data new-lauseella luodaan olioita Luokka class Asiakas { static int kpl; String nimi; static int montako( ) { return kpl; Olion metodit Olion metodit Olion metodit String annanimi() { return nimi; Oliot Mika.saari@tut.fi 8

7 KAPSELOI tieto ja toiminta private private public ROCK Opiskelija opno jäsenmaksu tarkista annanro Rekisteröinti uusiopiskelija op Suoritus päivitä lisääop kirjaatentti 9

8 Koodin sijoittelu Sovellus Projekti Pakkaus (hakemisto) Käännösyksikkö (tiedosto) Luokka Metodi Make 10

9 Koodin sijainti metodi ja luokka public class Opiskelija { // Dataa mutta ei koodia public void annanro() { // Dataa ja koodia public static int main() { Käännösyksikkö (tiedosto) class Opiskelija { public void annanro() { public class Opettaja { public void tarkastatentti() { projekti pakkaus (hakemisto) package hakemistopolku public class Opiskelija { public void annanro() {. package hakemistopolku public class Opettaja { public void tarkastatentti() { Make 11

10 Käännösyksikkö (compilation unit) Käännösyksikössä (java-tiedostossa) on vain yksi publicluokka, jonka nimi on tiedoston nimi Käännösyksikön (java-tiedosto) kukin luokka kääntyy omaksi class-loppuiseksi tiedostokseen Käännösyksikön alussa package-määre ilmoittaa, mihin projektin koodihakemiston (src) alihakemistoon kooditiedostot tallennetaan Käännösyksikön käännetyt tiedostot (class-loppuiset) tallentuvat annetun hakemiston (bin) package-määreen mukaiseen alihakemistoon Jos ei package-määrettä, tiedostot tallennetaan nyky- eli oletushakemistoon (default package) Jotkin editorit saattavat vaatia class-tiedoston lisäksi java-loppuisen tiedoston olemassaolon Make 12

11 Pakkaus (package) A package is a collection of related classes and interfaces providing access protection and namespace management. Pakkaukset muodostavat hierarkkisen rakenteen (hakemistohierarkia) Pakkaukset otetaan käyttöön käännösyksikön alussa olevilla import-lauseilla Import lauseessa hierarkkisesti määritetään pakkaushakemiston taso Alipakkaukset tarvitsee tuoda omalla import-lauseellaan Pakkauksesta voi ottaa nimetyn luokan tai kaikki luokat (*) Pakkauksessa ei saa olla saman nimisiä luokkia Luokkaa haetaan import- tai oletuspakkauksista Pakkausta haetaan CLASSPATH-poluista Koodi tallennetaan lähdekoodihakemiston package-määreen nimiseen alihakemistoon (pakkaukseen) Oletuspakkauksia ovat käännösyksikön pakkaus ja java.lang-pakkaus (String ja System luokat), jotka eivät tarvitse import-lausetta Oletuspaketista voidaan viitata toiseen oletuspakettiin ilman import- lausetta! (classpath-polku oltava kunnossa.) Make 13

12 Esimerkki: koodin sijainti Ryhma.java package pori.tty; import java.swing.*; import java.util.arrays; import omat.jutut.*; //classpath:sta eteenpäin class Opiskelija {. public class Ryhma { //yksi public luokka tiedostossa Make 14

13 Luokasta olioita public class Opiskelija { private String opno; private String nimi; // luokkamuuttujia // alustettuja public void annanro() { // olio on tietue jos ei metodeita public class Luokka { public static void main(string[ ] args) { Opiskelija uusi = new Opiskelija(); uusi.annanro(); uusi.nimi= Timo Teekkari ; // Virhe: ei suoraan ominaisuuteen Make 15

14 Laadi Pankkitili-luokka. Luentoharjoitus 1 Luokkien välinen kutsu ja luokkatason data Luokassa on nosto- ja talletus-metodit. Kansion toisessa tiedostossa on main-metodi, joka antaa käyttäjän valita toiminnon ja sen perusteella kutsuu pankkitili-luokan metodeja. Täydennä pankkitililuokkaa sisäänkirjoittautumissekä uloskirjautumismetodilla. Jos käyttäjä ei osaa antaa oikeaa salasanaa ei nosto- eikä talletusmetodit toimi. Make 16

15 PERIYTÄ luokkahierarkiassa Yläluokat kuvaavat yleisiä käsitteitä, joissa kuvataan perustiedot ja yleiset toiminnot Yläluokista periytetään aliluokkia (johdettuja luokkia), jotka perivät yläluokan tiedot ja toiminnot Aliluokka voi lisätä uusia tietoja ja toimintoja (tarkentaa yläluokkaa) korvata yläluokan tietoja ja toimintoja (kuormittaminen) kehittää yläluokan palveluja (nostaa abstraktiotasoa) Näin muodostuu luokkien hierarkia (vrt. käsitehierarkia), joka helpottaa ohjelmien muuttamista ja säästytään samojen asioiden moninkertaiselta koodaamiselta Luokat, metodit ja tiedot ovat virtuaalisia eli periytyvät, mikäli ei erikseen estetä (final, private) Ei moniperiytyvyyttä, mutta voi toteuttaa useita rajapintaluokkia Make 17

16 Luokkahierarkiaesimerkki Luokka Olio Opiskelija muuta() nimi nro Amk Matti Oja Akateeminen muuta() suunnitelma() valmistumisvuosi maksa() maksettu Pia Mäki Kari Elo muuta() 1234 muuta() 1399 suunnitelma() 2013 suunnitelma() 2012 Make 18

17 Muuttujan näkyvyysmääreet Näkyvyysmääre private 4 protected ei mitään public Sama luokka kyllä kyllä kyllä kyllä Näkyvyysalue Luokan jälkeläinen ei kyllä 1 ei 3 kyllä Pakkauksen luokissa ei ei 2 kyllä kyllä Kaikkialla ei ei ei kyllä 1. Viitteen oltava viittaavan luokan tyyppiä 2. Virheellisesti näkyy pakkauksessa 3. Näkyy samassa pakkauksessa 4. Private muuttujaan saantimetodit (set/get, accessor) Make 19

18 Muuttujan näkyvyys public class Opiskelija { // alustuu automaatt. public String nimi; // kaikkialla String ohjelma= Tite ; // hakemistossa static final int TUTKINTO=180;// luokan olioista protected int aloitusvuosi;// aliluokissa private String opno; // luokassa public double keskiarvo(int kpl) {// ei alkuarvoa double ovt = 0; // metodissa for(int i=0; i<kpl; i++) // lohkossa ovt += nro[i]; return ovt maailma pakkaus luokka aliluokka olio metodi lohko Make 20

19 Metodin näkyvyys public class Akateeminen extends Opiskelija { static int nro() { // käyttää staattisia muuttujia ja metodeita public String nimi() { private boolean opintotuki( ) { protected void maksu() { // jos ei määrettä, näkyy pakkauksessa Make 21

20 Luokan näkyvyys public luokka ei määrettä final luokka abstract luokka interface luokka // käytettävissä ulkopuolelta // käytettävissä paketissa // ei aliluokkia // osa/kaikki implementoinnit aliluokissa // (rajapinta, liittymä) // kaikki implementoinnit toteuttavassa // luokassa 22

21 Kuormittaminen, korvaaminen, peittäminen Samassa luokassa metodi voidaan (yli)kuormittaa samannimisellä metodilla kunhan vain parametrit ovat määrältään tai tyypiltään erilaiset Aliluokassa metodi voidaan korvata samannimisellä metodilla kunhan sekä paluuarvo että parametrit täsmäävät Kenttä tai metodi voidaan peittää luokkahierarkian alimmilta tasoilta määrittelemällä se private-tyyppiseksi Miksa 23

22 Esimerkki: näkyvyydet class Koululainen { double summa, keskiarvo; int kpl; String opiskelijatunnus = "Olli Oppivainen"; public void arvosana(double numero){ summa += numero; kpl++; keskiarvo = summa/kpl; class Perusopiskelija extends Koululainen { int opiskelijatunnus; double opintopisteet; public void kirjaus () { ++opiskelijatunnus; public void suoritus (double viikot) { opintopisteet += 1.5*viikot; public void suoritus (int pisteet){ opintopisteet += pisteet; class Jatko_opiskelija extends Perusopiskelija { public void tulosta () { System.out.println (opiskelijatunnus); System.out.println (opintopisteet); System.out.println (keskiarvo); public void suoritus (double ov) { opintopisteet += 1.2*ov; public class Opiskelijasovellus { public static void main (String[] args) { Jatko_opiskelija opp = new Jatko_opiskelija(); opp.kirjaus(); opp.arvosana(3.5); opp.suoritus(2.5); opp.arvosana(4); opp.suoritus(3); opp.tulosta(); Metodi suoritus kuormitettu ja korvattu. Muuttuja opiskelijatunnus peitetty. Mitä tulostuu? Mikä toteutuksessa huonoa? (korjataan Make harjoituksessa 24 2)

23 Kirjasto Luokassa final luokka // estää aliluokat private konstruktori // estää olion luonnin public metodeja // tarjottavat palvelut static metodit // ei tarvita kopioita static muuttujat // ei tarvita kopioita Make 25

24 KONSTRUKTORI Konstruktori (rakentaja) on luokan metodi, joka halutaan suorittaa olion synnyn yhteydessä (tarkkaan ottaen konstruktori ei ole luokan metodi, koska ei periydy) Konstruktorikoodilla on sama nimi kuin luokalla Konstruktorilla ei ole paluuarvoa Oletuskonstruktori Luodaan automaattisesti Ei tee mitään Parametriton Ei yleensä tarvitse kirjoittaa Tarvitsee kirjoittaa jos kirjoitetaan omakin konstruktori Esim. Opiskelija(){ Javassa ei ole destruktoria (roskien keruu finalize) Make 26

25 Konstruktoriesimerkki public class Luokka { public static void main(string[ ] args) { Opiskelija uusi = new Opiskelija( , 60); public class Opiskelija{ private String opno; private double ov; // luokkamuuttujia public Opiskelija(String opno, double hyvitys) { this.opno=opno; ov=hyvitys; Make 27

26 this, super, this(), super() this-sanalla viitataan olioon, jonka sisällä ollaan this viittaa myös luokan toiseen konstruktoriin super-sana viittaa isään super viittaa myös isän konstruktoriin Jos konstruktorissa halutaan suorittaa toinen konstruktori on se tapahduttava konstruktorin ensimmäisenä lauseena Make 28

27 Konstruktorin kuormittaminen public class Opiskelija{ private String opno; // luokkamuuttujia private double ov; public Opiskelija(String opno){ this.opno=opno; public Opiskelija(String opno, double hyvitys) { this(opno); ov=hyvitys; public Opiskelija(){ // parametriton olio Make 29

28 Konstruktorien kutsujärjestys public class Opiskelija { private String opno; private double ov; public Opiskelija (String opno, double hyvitys) { this(opno); ov = hyvitys; public class Lasnaoleva extends Opiskelija { static private int nextopno; private int vuosi; public Lasnaoleva () { opno = nextopno++; System.out.println( Tervetuloa +opno); public Opiskelija (String opno){ this.opno = opno; public void kirjaus (int aika) { vuosi = aika; public Opiskelija(){ Korjaa esimerkin virheet! // Välttämätön missä tilanteessa? 1. new varaa luokille muistin ja alustaa luokkien muuttujat tyyppinsä alkuarvoihin 2. alustetaan Opiskelija-luokan muuttujat annettuihin alkuarvoihinsa 3. suoritetaan Opiskelija-konstruktori 4. alustetaan Lasnaoleva-luokan muuttujat annettuihin alkuarvoihinsa 5. suoritetaan Lasnaoleva-konstruktori Make 30

29 Luentoharjoitus 2 Parametroidut oliot ja konstruktori Laadi monisteen Jatko_opiskelija-, Perusopiskelija- ja Koululainen luokille järkevät kentät näkyvyysmääreineen. Lisäksi laadi konstruktorit, jolla alustat kentät. Luo samassa luokassa olevalla main-metodilla kaksi opiskelijaa ja tulosta opiskelijoiden tiedot. Make 31

30 MONIMUOTOISUUS polymorfismi Dynaaminen viittaus Abstrakti yliluokka Aliluokka Aliluokka täydentää abstraktin luokan puuttuvat osat Sovellus Rajapintaluokka A Yliluokka Rajapinta- Aliluokka Aliluokka lisää yliluokkaan tietoja tai metodeja luokka B Make 32

31 Dynaaminen viittaus public class Opiskelija { protected String nimi; public class Akateeminen extends Opiskelija { private int ov; public Opiskelija(){ public Opiskelija (String nimi) { this.nimi = nimi; public void annanimi (String opnimi) { nimi = opnimi; public void tulosta() { System.out.print(nimi); Mitä tulostuu? // Suorittaa Opiskelija()-konstruktorin public Akateeminen (int hyvitys, String nimi) { ov = hyvitys; this.nimi = nimi; //annanimi (nimi); public void tulosta() { // Olisiko tämä parempi? System.out.print(nimi+ov); // Miten korjataan // jos nimi private? Opiskelija ins = new Opiskelija ( Kalle Hovi ); Akateeminen di = new Akateeminen (60, Matti Mäki ); ins.tulosta(); di.tulosta(); ins = di; ins.tulosta(); Make 33

32 Abstrakti luokka Abstrakti luokka määrittelee korkean tason käsitteen, jonka toiminnot on (täysin) määritelty, mutta ei välttämättä toteutettu Abstrakti luokka siis antaa kutsujalle (täydellisen) kuvan käsitteestä ja mahdollistaa sen käytön ennen kuin kaikki varsinaiset implementaatiot on tehty (mahdollistaa siis ajan mukaan tapahtuvan käsitteiden kehittelyn ja säästää perusasioiden uudelleen koodaamiselta) Abstraktista luokasta periytyvän aliluokan pitää toteuttaa kaikki isänsä ei-toteutetut metodit (lupaus kutsujalle) Aliluokka perii ja voi syrjäyttää abstraktin isänsä metodit ja muuttujat Aliluokka luonnollisesti voi lisätä uusia muuttujia ja metodeja Abstraktista luokasta ei voi luoda ilmentymiä (olioita) Luokka ja abstraktit metodit merkitään sanalla abstract Make 34

33 Abstrakti luokka - esimerkki abstract class AbstractOpiskelija { private String etunimi; private String sukunimi; public AbstractOpiskelija(String enimi, String snimi){ etunimi = enimi; sukunimi = snimi; public String nimi(){ return etunimi+" "+sukunimi; class Opiskelija extends AbstractOpiskelija{ private double[] arvosanat; public Opiskelija(String enimi, String snimi, double[] ov){ super (enimi, snimi); arvosanat = ov; public double keskiarvo(){ double summa=0; int kpl=0; abstract double keskiarvo(); public class AbstraktiEsimerkki{ public static void main(string[] args){ double[] tulokset = {1, 2.5, 0, 4, 5; for (int i=0; i<arvosanat.length; i++){ if (arvosanat[i]>0){ summa += arvosanat[i]; kpl++; return summa/kpl; AbstractOpiskelija di = new Opiskelija("Kalle","Koivu,tulokset); System.out.println(di); public String tostring(){ return nimi()+" "+keskiarvo(); Make 35

34 Rajapintaluokka (käyttöliittymä, interface) Rajapintaluokka on täysin abstrakti eli ei lainkaan koodia -pelkkiä metodimäärittelyjä Luokassa pitää olla toteutukset kaikille käyttämänsä rajapinnan metodeille Luokka voi toteuttaa useita rajapintoja Rajapinta voi toteuttaa toisia rajapintoja Jos määritellään muuttujia tulee niistä luokan vakioita (static final) Abstrakti luokka on olion abstraktio, rajapintaa voidaan pitää palvelujen mallina Make 36

35 Rajapintaluokka esimerkki interface Opintotoimisto{ public void annaarvosana(int kurssi, double numero); public void tulostaarvosanat(); public String tostring(); interface Suoritukset{ public void tulostaarvosanat(); abstract class AbstractOpiskelija { private String etunimi; private String sukunimi; public AbstractOpiskelija(enimi, snimi){ etunimi = enimi; sukunimi = snimi; public String nimi(){ return etunimi+" "+sukunimi; abstract double keskiarvo(); public class ImplementsEsimerkki{ public static void main(string[] args){ double[] tulokset = {1, 2.5, 0, 4, 5; Opintotoimisto di = new Opiskelija("Kalle", "Koivu", tulokset); di.tulostaarvosanat(); di.annaarvosana(3, 4); di.tulostaarvosanat(); class Opiskelija extends AbstractOpiskelija implements Opintotoimisto, Suoritukset{ private double[] arvosanat; public Opiskelija(String enimi, String snimi, double[] ov){ super (enimi, snimi); arvosanat = ov; public void annaarvosana(int kurssi, double numero){ arvosanat[kurssi-1] = numero; public void tulostaarvosanat(){ System.out.println(toString()); for (int i=0; i<arvosanat.length; i++) System.out.println(arvosanat[i]); public double keskiarvo(){ double summa=0; int kpl=0; for (int i=0; i<arvosanat.length; i++){ if (arvosanat[i]>0){ summa += arvosanat[i]; kpl++; return summa/kpl; public String tostring(){ return nimi()+" keskiarvo= "+keskiarvo(); Make 37

36 Geneerisyys Viitetyyppejä (olioita) voidaan korvata geneerisellä muuttujalla Geneerinen määritys: ArrayList <E> (); Tyypittäminen olioilla: new ArrayList <Asiakas> (); Perustietotyyppejä ei voida korvata geneerisellä muuttujalla Parametrina on tapana käyttää isoa kirjainta T (tyyppi), E (elementti), Geneerinen metodi Geneerinen luokka Geneerinen rajapinta MetodinKuormitus.java MetodiGeneerinen.java GeneerinenArray.java GeneerinenRajapinta.java Make 38

37 Geneerisyys ArrayList<Asiakas> lista = new ArrayList<>(); public interface Pino <E> { public void laita(e olio); public E ota(); public class RajattuPino <E> implements Pino <E> { private koko; private E[ ] oliot = (E[ ]) new Object[10]; public void laita (E olio) { oliot[koko++]= olio; public E ota() { return oliot[--koko]; Sovellus Pino <Asiakas> luettelo = new RajattuPino <>(); Sovellus public static <T> void laitapinoon(t olio, Pino<T> pino){ pino.laita(olio); Make 39

38 OLIOIDEN KÄYTTÖTILANTEITA Make 40

39 Olioita kokoelmassa public class Oliotaulukko { public static void main(string[] args) { Henkilo[] tekijät = new Henkilo[5]; tekijät[0] = new Henkilo("Liisa", 2000); tekijät[1] = new Henkilo("Teija", 3000); tekijät[2] = new Henkilo("Kalle", 1500); tekijät[3] = new Henkilo("Risto", 1900); tekijät[4] = new Henkilo("Marko", 1800); int summa = 0; for (Henkilo ihminen: tekijät) { summa += ihminen.annapalkka(); System.out.println(ihminen); System.out.println("\nPalkkasumma "+summa); class Henkilo { static int id=100; private int hlonro; private String nimi; private double palkka; Henkilo (String nimi, double rahaa){ this.nimi = nimi; palkka = rahaa; hlonro = id++; public double annapalkka(){ return palkka; public String tostring(){ return hlonro+": "+nimi; Make 41

40 Olioita parametrina public class Olioparametri { public static void main(string[] args) { Henkilo1[] tekijät = new Henkilo1[5]; tekijät[0] = new Henkilo1("Liisa", 2000); tekijät[1] = new Henkilo1("Teija", 3000); tekijät[2] = new Henkilo1("Kalle", 1500); tekijät[3] = new Henkilo1("Risto", 1900); tekijät[4] = new Henkilo1("Marko", 1800); int summa = 0; for (Henkilo1 ihminen: tekijät) tulosta (ihminen); private static void tulosta(henkilo1 henkilo){ System.out.println(henkilo); class Henkilo1 { static int id=100; private int hlonro; private String nimi; private double palkka; Henkilo1 (String nimi, double rahaa){ this.nimi = nimi; palkka = rahaa; hlonro = id++; public String tostring(){ return hlonro+": "+nimi+" "+palkka; Make 42

41 Olion tulostaminen Tulostettaessa olio tulostaa tostring()-metodin palauttama arvon Yleensä Object-luokan tostring() palauttama arvo ei ole riittävä, vaan olioon kannattaa ohjelmoida oma tostring()-metodi Samoin toimivat rajapintamekanismin callback-metodit (käyttöliittymissä, lajittelussa, ) palvelu Palvelu p= new Palvelu(); p.laske(this); public void kaava(){... public laske(object a){... a.kaava();... Make 43

42 Olioiden vertailu Make 44

43 Olioiden vertailu Make 45

44 Olio-ohjelmointi ohjeita 1. Kaunis ohjelma 2. Ensin toimimaan, sitten nopeuta 3. Hajota ja hallitse (olioita) 4. Palveluluokka / käyttäjäluokka (sovellus) 5. Luokan nimet itsedokumentoivia 6. Luokka hoitaa yhden selkeän käsitteen 7. Suunnittelu tuottaa luokat, liittymät, suhteet 8. Johdettu luokka yksinkertaistaa ennemmin kuin laajenta 9. Kätke monimutkaisuus luokan käyttäjältä (ohjelmoija) 10. Toistuva koodi metodiksi (bottomup-suunnittelu) Make 46

45 Olio-ohjelmointi ohjeita 11. Parametrilistan pitäisi olla lyhyt 12. Aloita yksinkertaisella luokalla 13. Luo testikoodi ennen luokan koodia? 14. Jätä luokkaan testimetodit (main) 15. Korvaa switch ja tyypintutkinta (instanceof) ylimäärittelyllä ja monimuotoisuudella 16. Käytä poikkeushierarkiaa odottamattomille tilanteille (ei harvinaisille) 17. Sun coding conventions java.sun.com/docs/codeconv/index.html 18. Älä käytä unkarilaista nimiöintitapaa (ilaskunumero) 19. Metodi lyhyt ja hoitaa yhden tehtävän 20. Pidä asiat private Make 47

46 Olio-ohjelmointi ohjeita 21. Korvaa vakiot symbolisilla vakioilla 22. Konstruktorissa aseta olio kuntoon; vältä kutsumasta metodeita Make 48

47 Luentoharjoitus 4 Olioita taulukossa Laadi autokauppa, joka hallitsee annettua määrää autoja. Kauppaan voidaan lisätä ja poistaa uusia autoja, laskea kaupan autojen keskihinta, listata kalliit (yli keskihintaiset) autot ja etsiä autoja värin mukaan. Make 51

48 Luentoharjoitus 5 Periytyminen ja monimuotoisuus Alla oleva Lainaus sovellus käyttää Kirja ja Lainakirja luokkia. Kirjoita Kirja ja Lainakirja luokat. import java.util.*; public class Lainaus { public static void main(string[] args) { ArrayList lainassa = new ArrayList(); // add-metodin parametrit ovat teoksen tekijä, nimi ja eräpäivä lainassa.add(new Kirja("Vesterholm", "Java-ohjelmointi")); lainassa.add(new Kirja("Lafore", "Data Structures")); lainassa.add(new Kirja("Haikala", "Käyttöjärjestelmät")); lainassa.add(new Lainakirja("Disney", "Aku Ankan vuosikirja 2007", " ")); lainassa.add(new Lainakirja("Lordi", "Hard Rock Hallelujah", " " )); lainassa.add(new Lainakirja("Vesterlund", "Jääkiekon pelitaktiikat", " ")); // tulostaa olioiden kaikki tietokentät for (Object teos: lainassa) ((Kirja)teos).tulosta(); Make 52

49 Luentoharjoitus 6 Abstraktisuus ja rajapinta Kirjoita alla olevan koodin luokat Pankkitili, Asunto ja Sijoitus a. jos Sijoitus on rajapinta luokka b. jos Sijoitus on abstrakti luokka Make 53

50 SWING KÄYTTÖLIITTYMÄ I don t mean a thing if it ain t got that swing OtaTaiJata.java Make 55

51 GRAAFISET KOMPONENTIT Make 56

52 Perusnäyttö JFrame JMenuBar ContentPane JMenu JMenu JToolbar JButton JButton JSplitPane JScrollPane JList JPanel JPanel JLabel JPanel JScrollPane JEditorPane JLabel Make 57

53 Swing komponentteja JComponent AbstractButton JButton JMenuItem JCheckBoxMenuItem JMenu JRadioButtonMenuItem JToggleButton JCheckBox JRadioButton JTextComponent JTextArea JEditorPane JTextPane JTextField JFormattedTextField JPasswordField JComboBox JLabel JList JPopupMenu JProgressBar JScrollBar JSeparator JSlider JSpinner JTable JToolTip JTree JFileChooser JColorChooser JOptionPane JPanel JScrollPane JSplitPane JTabbedPane JMenuBar JToolBar JFrame JDialog JApplet JInternalFrame JRootPane JLayerPane JDesktopPane Katso tutorial-sivu verkosta: docs.oracle.com/javase/tutorial/uiswing/index.html SwingComponents.java ja SwingSet3.jnlp Make 58

54 Perusikkuna import javax.swing.*; import java.awt.*; public class Perusikkuna extends JFrame { JLabel selite; public Perusikkuna() { settitle("tervehdysikkuna"); selite = new JLabel("Terve"); add(selite); setdefaultcloseoperation(jframe.exit_on_close); public static void main(string[] args) { Perusikkuna ikkuna = new Perusikkuna(); ikkuna.setsize(200,100); // voisi olla Perusikkuna-konstruktorissa ikkuna.setvisible(true); Perusikkuna.java Make 59

55 Asettelijat A Visual Guide to Layout Managers Asettelijat.java Make 60

56 Layout-ikkuna import javax.swing.*; import java.awt.*; public class Layoutikkuna extends JFrame { JLabel selite; public Layoutikkuna() { settitle("tervehdysikkuna"); selite = new JLabel("Terve"); // BorderLayout sisältöpanelin oletusasettelija // setlayout(new BorderLayout()); add(selite, BorderLayout.EAST); // getcontentpane().add(selite, BorderLayout.EAST); setdefaultcloseoperation(jframe.exit_on_close); public static void main(string[] args) { Layoutikkuna ikkuna = new Layoutikkuna(); ikkuna.setsize(200,100); ikkuna.setvisible(true); Layoutikkuna.java Make 61

57 SpringLayout jdk1.4 Komponenttien suunta ja välit määritellään SpringAsettelu.java Make 62

58 GroupLayout jdk1.6 Komponenttien ryhmät vaaka ja pystysuunnassa määritellään (myös välit). Vaakaryhmät Pystyryhmät GroupAsettelu.java Make 63

59 TAPAHTUMIEN KÄSITTELY Make 64

60 Kuuntelija Kuuntelijaksi ilmoittautuminen ja tapahtuman vastaanotto (AWTn event delegation model) jvm / WindowListener sovellus Komponentti addwindowlistener() tapahtumien postituslista käyttöjärjestelmä windowclosing() metodi EventObject Close Make 65

61 Ikkunan kuuntelija Jokainen olio, joka haluaa ottaa vastaan tietyn tapahtuman, ilmoittautuu ko. tapahtuman kuuntelijaksi addwindowlistener(new Kuuntelija()) ja toteuttavat liittymän vaatimat metodit, jotka reagoivat tapahtumaan suorittamalla käyttäjän haluamat toimenpiteet, esimerkiksi windowclosing(). Make 66

62 Kuuntelija vai adapteri Koska kuuntelijaksi kirjautuvan sovelluksen pitää toteuttaa kaikki rajapinnan metodit, tarvitsee laatia metodit myös tapahtumille, joista sovellusohjelmassa ei olla kiinnostuneita. Tämän helpottamiseksi on laadittu Adapterikuuntelijaluokat, jossa on tyhjät metodit kaikille pakollisille rajapintametodeille, joten sinun pitää ylikuormittaa sovelluksessa vain tarvitsemasi metodit. Miksa 67

63 Esimerkki (kuuntelija) Kuuntelija ulkoisena luokkana import java.awt.event.*; Import java.awt.*; import javax.swing.*; public class Kuuntelijatesti1 extends JFrame{ public static void main(string[] args){ Kuuntelijatesti1 testi = new Kuuntelijatesti1(); testi.setvisible(true); public Kuuntelijatesti1 (){ addwindowlistener(new Kuuntelija()); // Kuuntelija ulkoisena luokkana class Kuuntelija implements WindowListener{ public void windowclosing(windowevent e){ System.exit(0); public void windowactivated(windowevent e){ public void windowclosed(windowevent e){ public void windowdeactivated(windowevent e){ public void windowdeiconified(windowevent e){ public void windowiconified(windowevent e){ public void windowopened(windowevent e){ import java.awt.event.*; Import java.awt.*; import javax.swing.*; public class Kuuntelijatesti2 extends JFrame{ public static void main(string[] args){ Kuuntelijatesti2 testi = new Kuuntelijatesti2(); testi.setvisible(true); public Kuuntelijatesti2 (){ addwindowlistener(new Kuuntelija()); Kuuntelija sisäluokkana // Kuuntelija sisäluokkana class Kuuntelija implements WindowListener{ public void windowclosing(windowevent e){ System.exit(0); public void windowactivated(windowevent e){ public void windowclosed(windowevent e){ public void windowdeactivated(windowevent e){ public void windowdeiconified(windowevent e){ public void windowiconified(windowevent e){ public void windowopened(windowevent e){ Make 68

64 Esimerkki (adapteri) Kuuntelijan laajentaminen adapteriluokasta public class Adapteritesti1 extends JFrame{ public static void main(string[] args){ Adapteritesti1 testi = new Adapteritesti1(); testi.show(); Kuuntelija nimettömänä sisäluokkana public class Adapteritesti2 extends JFrame{ public static void main(string[] args){ Adapteritesti2 testi = new Adapteritesti2(); testi.show(); public Adapteritesti1 (){ addwindowlistener(new Kuuntelija()); class Kuuntelija extends WindowAdapter{ public void windowclosing(windowevent e){ System.exit(0); public Adapteritesti2 (){ addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); Make 69

65 Kuuntelijarajapintoja ja niiden metodeja WindowListener WindowAdapter windowopen windowclosing windowsclosed windowactivated windowdeactivated windowiconified windowdeiconified Ikkunan avaamisesta, sulkemisesta, aktivoimisesta syntyvät tapahtumat Kuuntelijatesti2.java Adapteritesti2.java ActionListener actionperformed Komponentin tapahtumat AjanArviointi.java FocusListener FocusAdapter focusgained focuslost Komponentti saa tai menettää fokuksen KeyListener KeyAdapter keytyped keypressed keyreleased Näppäimistön näppäimen painamiseen liittyvät tapahtumat MouseListener mouseclicked mousepressed mousereleased mouseentered mouseexited Tapahtuvat hiirellä klikattaessa, painettaessa nappi pohjaan, vapautettaessa, tullessa komponentin päälle ja poistuttaessa MouseMotionListener MouseMotionAdapter mousedragged mousemoved Hiirtä vedetään nappi pohjassa tai liikutetaan MouseAdapter MouseListener MouseMotionListener MouseWheelListener Hiiri.java JDK-help java.awt.event Make 70

66 Sisäluokka Sisäluokka Pääsy vain ympärillä olevasta luokasta Voi käyttää ympärillä olevan luokan muuttujia ja metodeja myös private määriteltyjä Anonyymi sisäluokka New lauseella luotu luokka Yleinen tapahtuman kuuntelijoissa Make 71

67 MVC-arkkitehtuuri Osat Malli huolehtii järjestelmän sovellusaluekohtaisen tiedon tallentamisesta, ylläpidosta ja käsittelystä. Näkymä määrittää käyttöliittymän ulkoasun ja mallin tietojen esitystavan käyttöliittymässä. Ohjain eli kontrolleri vastaanottaa käyttäjältä tulevat käskyt sekä muuttaa mallia ja näkymää vastauksena niihin. Etuja Malli ei riipu näkymästä eikä ohjaimesta. Malli voidaan suunnitella, ohjelmoida ja testata riippumatta järjestelmän muista osista. Samaan malliin voidaan tehdä erilaisia käyttöliittymiä. Saman järjestelmän tietoon voi olla pääsy esimerkiksi merkki-, graafisella ja webbikäyttöliittymällä. Näkymän ja ohjaimen toimintaan voidaan tehdä muutoksia muuttamatta mallia. Näkymän ja ohjaimen riippuvuus toisistaan on verrattain pieni. Käyttöliittymän ulkoasu eli näkymä on mahdollista vaihtaa muuttamatta ohjainta. Ohjainta voidaan muuttaa muuttamatta näkymää. Käyttöliittymän asynkronointi on helppoa. Myös muita monitasomalleja. Make 72

68 Loton MVC-esimerkki NÄKYMÄ (VIEW) OHJAIN (CONTROL) MALLI (MODEL) interface luo näkymäolio luo malliolio Rekisteröi viite ohjaimeen arvo tarkista tyhjennä Make 73

69 Luentoharjoitus 7 Tee rahanvaihtosovellus, jolla voit laskea antamasi euromäärän dollareina ja päinvastoin. Make 75

70 Luentoharjoitus 8 Suunnittele GUI-editorilla sovellus, joka laskee kahden kentän arvon yhteen ja pistää tuloksen kolmanteen kenttään. Make 76

71 Luentoharjoitus 9 Laadi alla olevan näköinen näyttö, jolla lisäät puhelinluetteloon nimi- ja numerotietoja. Lisää-nappi lisää näyttöön syötetyt tiedot luetteloon. Edellinen-nappi näyttää edellisen numeron luettelosta. Seuraava-nappi näyttää seuraavan numeron luettelosta. Poista-nappi poistaa seuraava- ja edellinen-napeilla haetun nimi- ja numerotiedon luettelosta. Näyttö pitää koodata käsin eli koodia ei saa generoida graafisella näytönsuunnitteluvälineellä. Make 77

72 Luentoharjoitus 10 Ohjelmoi graafinen nelilaskin. Make 78

73 Luentoharjoitus 11 Ohjelmoi ListBox ja ComboBox käyttäen Model -luokkaa Make 79

74 POIKKEUSKÄSITTELY Lesson: Exceptions (The Java Tutorials > Essential Classes) Make 83

75 Virheistä Ennen hoidettiin paluuarvolla, nykyisin poikkeuksilla Käännösaikaiset virheet Editorin löytämät syntaksivirheet Ajoaikaiset virheet virhetilanne ympäristössä: muisti loppu, tietoväline rikki tietovirtavirheet taulukon rajojen ylitys nollalla jako null-viitteet ohjelmoijan looginen virhe Odottamattomiin virheisiin reagoidaan poikkeuksilla Make 84

76 Virheen käsittely poikkeuksen sieppaaminen ja hoitaminen try { // koodi, jossa poikkeus saattaa tapahtua catch (poikkeustyyppi poikkeustapahtumaolio) { // koodi, joka suoritetaan poikkeustilanteessa // voi olla useita catch-osia, joista ensimmäinen sopiva valitaan // poikkeukset pitäisi tutkia tarkimmasta epätarkimpaan finally { // ei yleensä käytetä // koodi, joka suoritetaan aina // yleensä siivoustoimenpiteitä // (tiedoston sulkeminen, resurssien vapauttaminen) jatketaan tästä Make 85

77 Poikkeusluokkahierarkia Throwable Error Exception (ei-tarkisteta) (tarkistettava) RuntimeException (ei-tarkisteta) Make 86

78 Virhetyyppejä Error (virheitä, joista ohjelma ei voi toipua) OutOfMemory StackOverFlowError NoSuchMethodError NoSuchFieldError InstantiationError //olio liittymästä tai abstraktista luokasta IllegalAccessError //metodi tai kenttä johon ei oikeutta NoClassDefFoundError RuntimeException (virheitä, joihin voi reagoida mutta mitä tehdä?) ArithmeticException ArrayIndexOutOfBoundsException ArrayStoreException //väärän tyyppinen olio taulukkoon ClassCastException //laiton tyyppimuunnos IllegalArgumentException //laiton metodiparametri NullPointerException NumberFormatException StringIndexOutOfBoundsException Exception (virheitä, joista ohjelmoija voi toipua ja jotka on hoidettava) Make 87

79 Javan Exception-poikkeuksia IOException BadStringOperationException DataFormatException FontFormatException GeneralSecurityException ParseException PrinterException SQLException TimeoutException UnsupportedAudioFileException XMLParseException Make 88

80 Poikkeuksen heittäminen try { virhe catch (poikkeus){ try { laske(); catch (poikkeus){ laske() { virhe try { laskutus(); catch (poikkeus){ laskutus () throws poikkeus { laske(); laske() throws poikkeus { virhe Metodin otsikossa luetellaan throws sanan jälkeen kutsujalle heitettävät poikkeukset throws-sana pitää olla jos metodi heittää Exception-luokan poikkeuksen (kutsuvan metodin pitää hoitaa se: catch tai throws) Metodi voi hoitaa kutsumansa metodin Error ja RuntimeException poikkeuksen vaikkei se sitä throwssanalla vaatisikaan Kutsuva metodi voi heittää poikkeuksen edelleen omalle kutsujalleen Kumpi osaa hoitaa kutsuja vai kutsuttu? Make 89

81 Pakollinen poikkeuskäsittely try { FileInputStream tiedosto = avaa(); catch (FileNotFoundException e) { System.out.println( Tiedostoa ei löytynyt ); System.out.println( Antoi virheen: +e.getmessage()); public FileInputStream avaa() throws FileNotFoundException, SecurityException { return new FileInputStream( dataa.txt ); Poikkeustapahtumasta saadaan lisää tietoa Throwable- tai sen aliluokan metodeilla, esim: e.getmessage() Mitä tapahtuu SecurityExceptionille? Make 90

82 Vapaaehtoinen poikkeus Taulukkokäsittelyn suojaus: public class Pelaajat1 { private String[] asiakkaat = {"Kalle","Ville","Matti","Jaska"; public static void main(string[] args) { Pelaajat1 lista = new Pelaajat1(); lista.tulostajoukkue(); public void tulostajoukkue() { for (int i=0; i<=asiakkaat.length; i++) System.out.println(asiakkaat[i].toUpperCase()); Ohjelmassa virhe! Pitäisikö hoitaa poikkeuksilla vai if-lauseella? Miten poikkeuksella hoitaisit virheen? Jatkuu harjoituksessa 12 Make 91

83 Omat poikkeukset Tilanne, joka ei hoidu tavanomaisilla ohjausrakenteilla Odotettavissa olevat tilanteet if-lauseella Poikkeuskäsittely raskasta Metodi heittää poikkeuksen kutsujametodille, jos vain metodin kutsuja tietää tilanteen käsittelytavan Poikkeukset olioita periytyen java.lang.throwable luokasta Oma poikkeus kannattaa periyttää Exception-luokasta Oman poikkeusluokan nimi olisi hyvä päättyä Exception-sanaan Dokumentoinnissa mainitse metodin mahdollisesti aiheuttamat poikkeukset Make 92

84 Omat poikkeukset esimerkki try { nostarahaa(1000); catch (TiliTyhjaException tilipoikkeus) { System.out.println( Tililläsi ei ole riittävästi rahaa. ); System.out.println(tilipoikkeus.getMessage()); void nostarahaa(int summa) throws TiliTyhjaException { if (saldo < summa) throw new TiliTyhjaException(saldo); else saldo -= summa; public class TiliTyhjaException extends Exception { public TiliTyhjaException(saldo) { super( Nosto ei onnistu.tilisi saldo on +saldo+ euroa. ); Make 93

85 finally-lauseke public class TryFinal { public static void main(string[] args) { try { arvontarkastus(5); // Parametrin arvo määrää mikä poikkeus syntyy catch (IllegalArgumentException e) { System.out.println( Väärä parametrin arvo"); public static void arvontarkastus (int arvo) { try { int tulos = 100 / arvo; if (tulos < 0) throw new IllegalArgumentException(); catch (ArithmeticException e) { System.out.println("Nollalla jakoa ei saa tehdä"); finally { System.out.println("Olen aivan finaalissa"); Make 94

86 Luentoharjoitus 11 a) Minkälaisia poikkeuksia pyydystää seuraava koodin pätkä catch (Exception e) { koodia b) Mikä vikana seuraavanlaisessa poikkeuskäsittelyssä try { catch (Exception e) { catch (ArithmeticException a) { c) Minkä tyyppisiä virheitä (1-4) seuraavat tilanteet (a-d) ovat a. int[] a; 1. error a[0] = 0; 2. tarkistettava virhe b. JVM ei löydä Javan luokkia. 3. kääntäjän virhe c. Ohjelma saavuttaa tiedoston loppumerkin. 4. ei ole virhe d. Ohjelma yrittää lukea tiedostoa vaikka on jo sen lopussa. Make 95

87 Luentoharjoitus Lisää Pelaaja1 luokan tulostajoukkue() metodiin taulukon takarajan ylitys poikkeuskäsittely 2. Lisää myös puuttuvan pelaajan poikkeuskäsittely 3. Siirrä taulukon ylitys poikkeuskäsittely Pelaaja1 luokan main-metodiin Make 96

88 TIEDOSTOT Make 97

89 Tietovirta Tieto keskusmuistissa Tietue Avaaminen Kirjoittaminen Lukeminen Sulkeminen Tietovirta Merkkivirta Binäärivirta Tieto pysyvässä muistissa Tiedosto Make 98

90 Kirjoitusluokat MERKKIVIRTA Writer FileWriter BufferedWriter BINÄÄRIVIRTA OutputStream FileOutputStream BufferedOutputStream Make 99

91 Esimerkki merkkien kirjoittamisesta import java.io.*; public class Tiedostoonmerkit { public static void main(string[] args){ Writer ulos; BufferedWriter puskuri; try { ulos = new FileWriter("Merkit.txt"); puskuri = new BufferedWriter(ulos); puskuri.write("tässä on tulostettavia merkkejä ); puskuri.newline(); puskuri.close(); catch (IOException ioe) { ioe.printstacktrace(); Make 100

92 Esimerkki binääridatan kirjoittamisesta import java.io.*; public class Tiedostoontavut { public static void main(string[] args){ OutputStream virta; Writer ulos; BufferedWriter puskuri; try { virta = new FileOutputStream("Tavut.txt"); ulos = new OutputStreamWriter(virta); puskuri = new BufferedWriter(ulos); puskuri.write("tässä on tulostettavia tavuja"); puskuri.newline(); puskuri.close(); catch (IOException ioe) { ioe.printstacktrace(); Make 101

93 Lukemisluokat MERKKIVIRTA Reader FileReader BufferedReader BINÄÄRIVIRTA InputStream FileInputStream BufferedInputStream Make 102

94 Esimerkki merkkien lukemisesta import java.io.*; public class Tiedostostamerkit { public static void main(string[] args) { BufferedReader puskuri; String rivi; try { puskuri = new BufferedReader(new FileReader("Merkit.txt")); while ((rivi=puskuri.readline())!= null){ System.out.println(rivi); puskuri.close(); catch (IOException ioe){ ioe.printstacktrace(); Make 103

95 Esimerkki binääridatan lukemisesta import java.io.*; public class Tiedostostatavut { public static void main(string[] args) { BufferedReader puskuri; String rivi; try { puskuri = new BufferedReader(new InputStreamReader( new FileInputStream("Tavut.txt"))); while ((rivi=puskuri.readline())!= null){ System.out.println(rivi); puskuri.close(); catch (IOException ioe){ ioe.printstacktrace(); Make 104

96 Esimerkki try-with-resource import java.io.*; public class TryWithResource { public static void main(string[] args) throws IOException { String rivi; try (BufferedReader lukija = new BufferedReader(new FileReader("Merkit.txt"))) { while ((rivi = lukija.readline())!= null) System.out.println(rivi); // Heittää poikkeuksen jos tiedostoa ei löydy tai // tiedoston sulkemisessa tapahtuu virhe Jokainen olio, joka täytyy sulkea on resurssi Try sulkee resurssin try-lauseen jälkeen Suljettavien resurssien täytyy toteuttaa AutoCloseable tai Closeable rajapinta Useita resursseja: try (InputStream fis = new FileInputStream(source); OutputStream fos = new FileOutputStream(target)){... Make 105

97 Olioiden lukeminen ja kirjoittaminen (sarjallistaminen) Sarjallistamisella olio kokonaisuudessaan kirjoitetaan tiedostoon ja se pystytään myös palauttamaan ohjelmaan entiseen muotoonsa. Luokat: ObjectInputStream ObjectOutputStream Make 106

98 Olion sarjallistaminen public class Auto implements Serializable { String merkki; public Auto(String m){ merkki = m; try { FileOutputStream out = new FileOutputStream( kulkuneuvot.dat ); ObjectOutputStream olioout = new ObjectOutputStream(out); Auto oma = new Auto( Volvo ); olioout.writeobject(oma); olioout.close(); catch (IOException ioe){ System.out.println(ioe.getMessage()); try { FileInputStream in = new FileInputStream( kulkuneuvot.dat ); ObjectInputStream olioin = new ObjectInputStream(in); Auto car = (Auto)olioin.readObject(); olioin.close(); catch (IOException ioe){ ioe.printstacktrace(); Make 107

99 File-luokka Käsittelee tiedostoja ja hakemistoja. File(String), File(String, String) boolean exists() boolean isdirectory() boolean isfile() boolean delete() boolean mkdir() boolean mkdirs() boolean renameto() Make 108

100 Luentoharjoitus 13 Lue rivejä kahdesta tiedostosta ja kirjoita ne kolmanteen tiedostoon. Luettavien tiedostojen tietueiden alussa on numerokenttä, jonka mukaan ne ovat järjestyksessä. Make 109

101 Luentoharjoitus 14 Serialisoi olioiden taulukko tiedostoon. Make 110

102 Luentoharjoitus 14.2 Testaa JFileChooser komponenttia. Make 111

103 TIETOKANTALIITTYMÄ Make 112

104 Tietokanta ja rajapinta Java-ohjelma Java-ohjelma JDBC API JDBC-ODBC silta Access- ODBC ajuri Oracle- ODBC ajuri Oracle ajuri MySQL ajuri Acess Oracle MySQL Make 113

105 Tietokanta -palvelinsovellukset Miksa 114

106 MySQL asennus Win -koneeseen 1. Asenna MySQL sivulta* Hallinta: Control panel+adminstrative tools+services Automatic/manual/start/stop 2. Asenna joku graafinen hallintatyökalu MySQL workbench (MySQL Administrator + MySQL Query Browser) HeidiSQL Sql-Front Netbeans Workbench 3. Luo tietokanta Käynnistä / MySQL / MySQL Server 5.0 / MySQL Command Line Client ja kirjoita CREATE DATABASE javatesti; GRANT ALL PRIVILEGES ON javatesti.* to testaaja@localhost identified by sala ; *Win7: Administrator-oikeuksilla Make 115

107 Työskentely tietokannan kanssa 1. Testaa /phpmyadmin palvelua Yhteys toimimaan Sisäänkirjautuminen Tietokanta taulu rivi -käsitteet Tietokannan rakenne TUOTTEET -taulu ja sen sisältö. ASIAKKAAT, TILAUS, TRIVI 2. Miten edellä olevat taulut kytkeytyvät toisiinsa? Jos SQL ja tietokantojen rakenne on tuntematonta niin tutustu aiheeseen(tiedonhallinnan perusteet) 3. Tiedon lisääminen tietokantaan Kokeilen tiedon lisäämistä tauluihin. Miksa 116

108 Yhteys tietokantaan MySQL JDBC-ajurin lataaminen ja rekisteröinti(add to Buildpath): Class.forName( com.mysql.jdbc.driver ).newinstance(); // tai lataa mysql-connector-java bin.jar MySQL-sivuilta // projektin library-polkuun (ajoaikana CLASSPATH) JDBC-ODBC-sillan lataaminen: Class.forName( sun.jdbc.odbc.jdbcodbcdriver ).newinstance(); Yhteys tietokantaan: // jdbc:driverityyppi://kone:portti/tietokanta String url = jdbc:mysql://localhost/javatesti ; con = DriverManager.getConnection(url, testaaja, sala ); // DriverManager luokka voidaan korvata uudemmalla DataSource // rajapinnalla (joka käyttää yhteysallasta) Make 117

109 Yhteys tietokantaan Opiskelijoiden käyttöön tarjolla Linux palvelin. String url = "jdbc:mysql:// /javatesti"; con = DriverManager.getConnection(url, "testaaja", "salasana"); Tietokanta: javatesti Tunnus: testaaja Salasana: salasana Tietokantaa saa vapaasti käyttää TTY:n verkosta Tietokannan ylläpitäjältä (Mika) saa uusia tunnuksia mikäli tarpeen. Tietokannan ylläpitäjä ei vastaa tietojen säilymisestä Make 118

110 Luo SQL- taulu CREATE TABLE TUOTTEET ( TID INTEGER NOT NULL PRIMARY KEY, NIMI VARCHAR(40) NOT NULL, HINTA FLOAT, LKM INTEGER DEFAULT 0 ); Make 119

111 Luo SQL-indeksit CREATE INDEX TNIMI ON TUOTTEET(NIMI); Make 120

112 SQL-tietuetoiminnot LISÄYS INSERT INTO TUOTTEET VALUES (1, Korppu, 2.50, 10); INSERT INTO TUOTTEET (TID, NIMI, HINTA) VALUES (2, Romppu, 7.50); PÄIVITYS UPDATE TUOTTEET SET HINTA = 6.50, LKM = 100 WHERE TID = 2; POISTO DELETE FROM TUOTTEET WHERE TID = 1; Make 121

113 SQL-kysely Kaikki tietueet, kaikki kentät Kaikki tietueet, tietyt kentät Ehdon tietueet Tietueet järjestyksessä SELECT * FROM TUOTTEET; SELECT TID, NIMI, HINTA FROM TUOTTEET; SELECT * FROM TUOTTEET WHERE HINTA < 10 AND LKM >100; SELECT * FROM TUOTTEET ORDER BY HINTA, NIMI; Tietueita useasta taulusta SELECT A.ENIMI, A.SNIMI, T.PVM FROM ASIAKKAAT A, TILAUKSET T WHERE A.ANO = T.ANO; Make 122

114 Kysely Statement Connection.createStatement() executeupdate() // muuttaa kantaa executequery() // palauttaa tietoa kannasta Close() // sulje statement finallylohkossa Make 123

115 Tulosjoukko ResultSet ResultSet rs = stmt.executequery( Select ); while (rs.next()) Getxxx() // numerolla tai nimellä Statement-oliolla vain viimeinen resultset-joukko Metadatalla yleisiä resultset-käsittelijöitä createstatement() antaa resultsetille ominaisuuksia Selaustapa, päivitettävyys, yhteyskantaan Suoraan tiettyyn riviin Kannan päivitys resultsetin kautta Uusia/omia tietotyyppejä Tietolähde (DataSource) erikseen yhteydestä (Connection) Tietokanta2.java, Tietokanta3.java Make 124

116 Valmistellut kyselyt PreparedStatement PreparedStatement kysely = Connection.prepareStatement( Select?... ); Kysely.setInt(1, arvo); ResultSet rs = kysely.executequery(); Make 125

117 Tapahtumat Tapahtuma alkaa: Connection.setAutoCommit(false); Tapahtuma päättyy: Connection.commit(); Tapahtuman peruutus: Connection.rollback(); Tapahtumien eristyvyystasot: Connection.setTransactionIsolation(Connection.TRANSACTION_NONE); TRANSACTION_NONE A constant indicating that transactions are not supported. TRANSACTION_READ_UNCOMMITTED A constant indicating that dirty reads, non-repeatable reads and phantom reads can occur. This level allows a row changed by one transaction to be read by another transaction before any changes in that row have been committed (a "dirty read"). If any of the changes are rolled back, the second transaction will have retrieved an invalid row. TRANSACTION_READ_COMMITTED A constant indicating that dirty reads are prevented; non-repeatable reads and phantom reads can occur. This level only prohibits a transaction from reading a row with uncommitted changes in it. TRANSACTION_REPEATABLE_READ A constant indicating that dirty reads and non-repeatable reads are prevented; phantom reads can occur. This level prohibits a transaction from reading a row with uncommitted changes in it, and it also prohibits the situation where one transaction reads a row, a second transaction alters the row, and the first transaction rereads the row, getting different values second time (a "non-repeatable read"). TRANSACTION_SERIALIZABLE A constant indicating that dirty reads, non-repeatable reads and phantom reads are prevented. This level includes the prohibitions in TRANSACTION_REPEATABLE_READ and further prohibits the situation where one transaction reads all rows that satisfy a WHERE condition, a second transaction inserts a row that satisfies that WHERE condition, and the first transaction rereads for the same condition, retrieving the additional row ("phantom ) in the second read. Make 126

118 Luentoharjoitus 17 Luodaan Tietokanta -luokka - avaayhteys() - metodi, jossa otetaan yhteys tietokantaan - kysely() - metodi tekee kyselyn TUOTTEET taulun sisällölle - suljeyhteys() -metodi sulkee tietokanta yhteyden. Make 131

119 Luentoharjoitus 18 Listaa asiakkaat. Make 132

120 Luentoharjoitus 19 Listaa asiakkaan tilaamat tuotteet. (Ei duplikaatteja.) Make 133

121 Luentoharjoitus 20 Luodaan tietokantaa käyttävä sovellus eläinkaupalle. Tekstipohjainen käyttöliittymä: Elainkauppa.java Tietokannassa Pet-taulu: int PetID NOT NULL AUTO_INCREMENT Name varchar(255) AnimalName varchar(255) PRIMARY KEY(PetID) Tietokanta.java LuoYhteys() ja suljeyhteys() luotietokanta(), TuhoaTietokanta() Lisaa(), Poista(), muuta() TulostaKaikki(), Tulostajarjestyksessa() Tulokset hakemistossa: luento9tietokanta Make 134

122 OHJELMIEN DOKUMENTOINTI Make 135

123 Javadoc Voit lisätä erikoiskommentteja ohjelmaasi, joista javadoc-ohjelma pystyy laatimaan dokumentaation html-muotoisena. /** * Kuvataan dokumentoitavan kokonaisuuden toiminta * (luokka, metodi, tietokenttä) * kuvausta tagin osoittamasta asiasta * <i>tekstiä voi muotoilla html tageilla</i> */ Make 136

124 Javadoc tageja Luokat Integer#MAX_VALUE Javadoc sourcepath <hakemistot> -d <hakemistot> tiedostot Make 137

125 Esimerkki luokkakommenteista /** * Laskee lainan kuukausimaksun tasaeräperiaatteella * Markku Nevanranta alv-muutosten jälkeen * */ Make 138

126 Esimerkki metodikommenteista /** * Laskee jakson koron pääomalle * velka Lainan määrä pros Vuosikorko väliltä jaksot Maksukausien määrä Koron osuus kauden lyhennyksestä * */ Make 139

127 Javadoc Eclipsessä Dokumentaatio syntyy oletusarvoisesti projektin dochakemistoon Javadoc-näkymä näyttää dokumentaation hiirellä valitulle komponentille Popup-ikkuna näyttää kun osoitin on komponentin päällä Selain näyttää komponentin dokumentaation SHIFT+F2 Eclipsen selain-ikkuna aukeaa index.html valinnasta Esimerkki: Pankkitili2.java Make 140

128 Javadoc Netbeansissä Dokumentaatio syntyy oletusarvoisesti projektin disthakemistoon Osoita editorissa elementtiä, josta haluat dokumettitietoa ja käytä jotakin seuraavista tavoista 1. Hiiren oikealla näppäimellä > Show Javadoc 2. Source > Show documentation (Ctrl+Shift+space) 3. Alt+F1 4. Window > Other > Javadoc Esimerkki: Pankkitili2.java Make 141

129 Luentoharjoitus 21 Lisää javadoc-tagit johonkin luokkaasi ja aja javadoc. Make 142

130 VERSIONHALLINTA Make 143

131 Ohjelmiston versionhallinta Versionhallinta osana ohjelmistoprojektia Version hallinta järjestelmiä on useita(mm. Cvs, subversion, git, bitbucket) Edellisiin liittyviä työkaluja vielä enemmän( client, jolla pääsee kiinni versionhallinta järjestelmään) Seuraavissa esimerkeissä käsitellään Git -versionhallintaa Palvelimena käytetään ilmaista GitHub-palvelu (Voi ostaa kuukausimaksulla lisää ominaisuuksia).( Git-palvelimen voi pystyttää myös itselle, jolloin tietoturva, ominaisuudet ja hinta ovat kohdallaan.) 144

OLIO-OHJELMOINTI Object programming versio: 15.1.2015

OLIO-OHJELMOINTI Object programming versio: 15.1.2015 PLA-32100 OLIO-OHJELMOINTI Object programming versio: 15.1.2015 Mika.saari@tut.fi 1 Kurssin suoritus Kummastakin tentistä saa enintään 10 pistettä. Harjoituksista enintään 10 pistettä. Eli kurssin maksimipistemäärä

Lisätiedot

JAVA-OHJELMOINTI 3 op A274615

JAVA-OHJELMOINTI 3 op A274615 JAVA-OHJELMOINTI 3 op A274615 JFC & Swing, Look & Feel, Events Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Olio-ohjelmointi Virhetilanteiden käsittely

Olio-ohjelmointi Virhetilanteiden käsittely Olio-ohjelmointi 2016 Virhetilanteiden käsittely Poikkeustilanteet n Java-järjestelmässä voidaan ottaa kiinni ohjelman suoritusaikana tapahtuvia virhetilanteita, joita ei saada kiinni tavanomaisilla ohjausrakenteilla

Lisätiedot

Java ja tietokannan käsittely (JDBC)

Java ja tietokannan käsittely (JDBC) Java ja tietokannan käsittely (JDBC) Javan tietokannan käsittely luokat (java.sql.*) Yhteys tietokantaan Tietokannan yhteyden sulkeminen Tiedon haku tietokannasta Tiedon päivitys tietokantaan Transaktio

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

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

Java-API, rajapinnat, poikkeukset, UML,... Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

Lisätiedot

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance) Sisällys JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys Periytyminen (inheritance) Näkyvyys (visibility) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa

Lisätiedot

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC) HAAGA-HELIA ICT1TA006: Ohjelmointi 1 /5 Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC) (Lähteet: Oracle java jdbc Tutorial, Arvo Lipitsäinen: Tietokannan käsittely JDBC:n

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Esimerkki: Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Luo tietokanta Koulu. Tietokantaan lisätään 3 taulua. Kurssit-taulu: kurssiid not null primary key INTEGER aineid not

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

16. Javan omat luokat 16.1

16. Javan omat luokat 16.1 16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat

Lisätiedot

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden

Lisätiedot

Poikkeustenkäsittely

Poikkeustenkäsittely 1 Poikkeustenkäsittely Mitä poikkeustenkäsittely tarkoittaa? Poikkeuksen käsitteleminen Poikkeusluokkien hierarkia Poikkeuksen heittäminen 1 Mitä poikkeustenkäsittely tarkoittaa? Poikkeus (Exception) on

Lisätiedot

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING Käyttöliittymäkomponentteja Sovelluksen pääikkunan luominen Rinnakkainen toiminnallisuus Miten käyttöliittymä lopetetaan? Ikkunan peruskomponentit Mihin

Lisätiedot

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 HSMT Tietokannoista Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöteja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 26. Tiedostot 26.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki Tehtävä 1 Koherentti selitys Koherentti esimerkki ½p ½p Tehtävä 2 Täysiin pisteisiin edellytetään pelaajien tulostamista esimerkin järjestyksessä. Jos ohjelmasi tulostaa pelaajat jossain muussa järjestyksessä,

Lisätiedot

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream Tietovirrat ja niiden suunnat Output stream Koodi Tiedosto OutputStream ja InputStream OutputStream (abstrakti) FileOutputStream Tallennus tavuina ObjectOutputStream Olioiden tallennus FilterOutputStream

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

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

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet Pakkaukset ja määreet Toisiinsa liittyvät luokkatiedostot voidaan koota pakkauksiksi. Luo hierarkiaa ja järjestystä ohjelmistotuotteeseen.

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin

Lisätiedot

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

Lisätiedot

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

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma. Välikoe / 20.3 Vastaa neljään (4) tehtävään. Jos vastaat 5:een, 4 huonointa arvostellaan. Kunkin tehtävän vastaus eri konseptille. 1. Pöytätesti Pöytätestaa seuraava ohjelma. Tutki ohjelman toimintaa pöytätestillä

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

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

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

Java Swing. Juha Järvensivu 2007

Java Swing. Juha Järvensivu 2007 Java Swing Juha Järvensivu juha.jarvensivu@tut.fi 2007 Sisällys Java ympäristöt Java kirjastot Java Foundation Classes (JFC) Hello Java Swing-kirjasto Grafiikan piirto Tapahtumankäsittely Java ympäristö

Lisätiedot

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet Metodit Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin return; -lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua Metodi voi palauttaa alkeistyypin tai olion Tällöin

Lisätiedot

JUnit ja EasyMock (TilaustenKäsittely)

JUnit ja EasyMock (TilaustenKäsittely) OHJELMISTOJEN TESTAUS JA HALLINTA Syksy 2015 / Auvo Häkkinen JUnit ja EasyMock (TilaustenKäsittely) Tehtävässä tarvittava koodi löytyy osoitteella http://users.metropolia.fi/~hakka/oth/mockesimerkki.zip

Lisätiedot

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

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

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Olli Opiskelija (123), olli.opiskelija@foo.fi Maija Mallioppilas (321), maija.mallioppilas@foo.fi 13.3. 2007 1 Sisältö 1 Tietokannan kuvaus 3 1.1 Tietokannan rakenne..................................

Lisätiedot

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokantaohjelmointi 23.2.2000. Harri Laine 1. SQL:n käyttö ohjelmissa

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokantaohjelmointi 23.2.2000. Harri Laine 1. SQL:n käyttö ohjelmissa SQL:n käyttö ohjelmissa Tietokannan käyttö ohjelmasta Miksi vuorovaikutteinen käyttö ei riitä? kielen hallinta: maallikot? yhdistetään yleiskielen ja tietokantakielen edut, mm.» monimutkaisempi laskenta»

Lisätiedot

Mitä poikkeuskäsittely tarkoittaa?

Mitä poikkeuskäsittely tarkoittaa? Poikkeuskäsittely Mitä poikkeuskäsittely tarkoittaa? Poikkeuskäsittelyluokkien hierakkia Poikkeuksen sieppaaminen Mihin järjestykseen try-catch-lauseen ExceptionType-poikkeukset laitetaan? Poikkeuksen

Lisätiedot

Osio 4: Graafinen käyttöliittymä

Osio 4: Graafinen käyttöliittymä Javan Swing-tekniikan perusteet: Muistutus: Tarvitset seuraavia komponentteja harjoituksissa: otsikkoteksti (label) muokkausruutu (text field) komentopainike (button) yhdistelmäruutu (combo box) paneeli

Lisätiedot

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter Olio-ohjelmointi Suunnittelumallit Adapter ja Composite Rakennemalleissa päähuomio kohdistetaan siihen, miten luokkia ja olioita yhdistellään muodostamaan laajempia rakenteita. Rakenteelliset luokkamallit

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap Tietorakenneluokkia ja -rajapintoja Java tarjoaa laajan kokoelman tietorakennerajapintoja ja - luokkia. Aiemmin

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1 Oliot ja luokat Javaohjelmoinnissa Vesa Laakso 22.9.2012 Sisällysluettelo Sisällysluettelo... 1 Johdanto... 2 1. Luokka... 2 2. Olio... 2 3. Luokan

Lisätiedot

Olio-ohjelmointi Käyttöliittymä

Olio-ohjelmointi Käyttöliittymä Olio-ohjelmointi 2016 Käyttöliittymä n Javalla on helppo toteuttaa yksinkertainen graafinen käyttöliittymä n AWT/Swing n JFC (Java Foundation Collection) n AWT-sisältää Javan grafiikka GUI-komponmentit

Lisätiedot

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty

Lisätiedot

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä. Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä. JUnit-ympäristö 1. Luo tests -pakkaukseen uusi luokka. Nimeä VHTestit. 2. Laita VHTestit periytymään TestCase:sta

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Java Swing. Juha Järvensivu 2008

Java Swing. Juha Järvensivu 2008 Java Swing Juha Järvensivu juha.jarvensivu@tut.fi 2008 Sisällys Java ympäristöt Java kirjastot Java Foundation Classes (JFC) Hello Java Swing-kirjasto Grafiikan piirto Tapahtumankäsittely Java ympäristö

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

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

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java) Tavoite Opiskelija ymmärtää olio-ohjelmoinnin problematiikan. Opiskelija osaa määritellä ja käyttää itse

Lisätiedot

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen package-määrettä käyttäen. Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa importlauseen avulla. Pakkaukset ja näkyvyys.

Lisätiedot

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi. 11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen

Lisätiedot

Mikä yhteyssuhde on?

Mikä yhteyssuhde on? 1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String

Lisätiedot

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: Linux-harjoitus 6 Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: http://www.mysql.com/, MySQL-tietokantaohjelman kotisivu. http://www.mysql.com/doc/en/index.html,

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Luokat ja oliot. Ville Sundberg

Luokat ja oliot. Ville Sundberg Luokat ja oliot Ville Sundberg 12.9.2007 Maailma on täynnä olioita Myös tietokoneohjelmat koostuvat olioista Σ Ο ω Μ ς υ φ Ϊ Φ Θ ψ Љ Є Ύ χ Й Mikä on olio? Tietokoneohjelman rakennuspalikka Oliolla on kaksi

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

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

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Periytyminen (inheritance)

Periytyminen (inheritance) 1 Periytyminen (inheritance) Mitä periytyminen on? Yli- ja aliluokka Konstruktorit Get- ja set-metodi Muut metodit tostring Yksinkertainen pääohjelma 1 Mitä periytyminen on? Periytymisen avulla olemassa

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VIII Poikkeusten ja tapahtumien käsittely Sisältö 1. Poikkeusten käsittelyn käsitteitä ja suunnittelukriteerejä 2. Poikkeusten käsittely C++:ssa 3. Poikkeusten

Lisätiedot

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

Graafinen käyttöliittymä, osa 3

Graafinen käyttöliittymä, osa 3 Graafinen käyttöliittymä, osa 3 Hiiritapahtumat, valikot, Look and Feel Taustaa: painikkeen käsittely Painikkeen tapahtumalähde on JButton-komponentti. Tapahtuma synnyttää aina tapahtumaolion. painikkeelle

Lisätiedot

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

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen Ohjelmointitaito (ict1td002, 12 op) Kevät 2009 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-kehitysympäristö Java-ohjelma ja luokka

Lisätiedot

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Myöhäinen ja aikainen sidonta. Parametrinvälitys

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Pedacode Pikaopas. Tietokantaa hyödyntävän sovelluksen luominen

Pedacode Pikaopas. Tietokantaa hyödyntävän sovelluksen luominen Pedacode Pikaopas Tietokantaa hyödyntävän sovelluksen luominen Pikaoppaan sisältö Pikaoppaassa kuvataan, Netbeans-työkalulla luodaan uusi yksinkertainen Java DB -tietokantaa hyödyntävä sovellus. Opas kattaa

Lisätiedot

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL FinFamily PostgreSQL 1 Sisällys / Contents FinFamily PostgreSQL... 1 1. Asenna PostgreSQL tietokanta / Install PostgreSQL database... 3 1.1. PostgreSQL tietokannasta / About the PostgreSQL database...

Lisätiedot

Poikkeusten ja tapahtumien käsittely

Poikkeusten ja tapahtumien käsittely Poikkeusten ja tapahtumien käsittely Tässä osassa tarkastellaan poikkeusten ja tapahtumien käsittelyä. Aluksi esitellään poikkeusten käsittelyä yleisesti sekä tarkastellaan siihen liittyviä käsitteitä

Lisätiedot

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisällys. 11. Rajapinnat. Johdanto. Johdanto Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.

Lisätiedot