Alkuehdot. Motivointi (1/2) Ohjelmointi II, kevät 2004 Kuopion yliopisto. Motivointi (2/2) (C) Mauno Rönkkö. Mitä tekee kutsupieninalkio(t, 10)?

Koko: px
Aloita esitys sivulta:

Download "Alkuehdot. Motivointi (1/2) Ohjelmointi II, kevät 2004 Kuopion yliopisto. Motivointi (2/2) (C) Mauno Rönkkö. Mitä tekee kutsupieninalkio(t, 10)?"

Transkriptio

1 Ohjelmointi II, kevät 2004 Kuopion yliopisto (C) Mauno Rönkkö (Kalvot tarkoitettu itseopiskelun tueksi. Muu käyttö kielletty ilman lupaa.) Motivointi (1/2) int pieninalkio (int[] t, int l) //palauttaa t:n pienimmän alkion tarkasteltaessa //t:tä aina l:nteen alkioon asti int s, i; s=t[0]; for (i=0; i<l; i=i+1) if (t[i]<s) s=t[i]; return s Mitä tekee kutsupieninalkio(t, 10)? Alkuehdot Motivointi (2/2) int pieninalkio (int[] t, int l) //palauttaa t:n pienimmän alkion tarkasteltaessa //t:tä aina l:nteen alkioon asti //PRE: 0<l && l<=t.length int s, i; s=t[0]; for (i=0; i<l; i=i+1) if (t[i]<s) s=t[i]; return s; Nyt kommentissa sanotaan, millä l:n arvoilla kutsu on sallittu. Esim. pieninalkio(t, 10) ei ole sallittu. 1

2 Alkuehto ja sen tarkoitus Alkuehto kuvaa, millä parametrin arvoilla metodin kutsu on sallittu ja tuottaa halutun tuloksen. Javalla alkuehto joudutaan kirjoittamaan kommentiksi. Esimerkiksi: int pieninalkio (int[] t, int l) //palauttaa t:n pienimmän alkion tarkasteltaessa //t:tä aina l:nteen alkioon asti //PRE: 0<l && l<=t.length Metodin kutsujan huolehdittavaksi jää alkuehdon tarkistus ennen metodin kutsua. Esimerkiksi: if((0<l) && (l<=t.length)) System.out.println (pieninalkio(t,l)); Motivointi (1/2) int pieninalkio (int[] t, int l) //palauttaa t:n pienimmän alkion tarkasteltaessa //t:tä aina l:nteen alkioon asti //PRE: 0<l && l<=t.length int s, i; s=suurin(); for (i=0; i<l; i=seuraava(i)) s=pienin(s,t,i); return s; Mitä tekee kutsupieninalkio(t,3)? Loppuehdot Motivointi (2/2) int pieninalkio (int[] t, int l) //palauttaa t:stä pienimmän alkion //PRE: 0<l && l<=t.length //POST: pieninalkio(t,l)=min(t[0],t[1],t[l 1]) int s, i; s=suurin(); for (i=0; i<l; i=seuraava(i)) s=pienin(s,t,i); return s; Nyt kommentissa sanotaan, mitä metodi itseasiassa palauttaa. Samalla metodin sanallinen selitys yksinkertaistuu. 2

3 Loppuehto ja sen tarkoitus Loppuehto on ehto, joka on voimassa metodin suorituksen jälkeen. Loppuehto kuvaa yksiselitteisesti metodin toimintaa. Javalla loppuehto kirjoitetaan kommentiksi. Esimerkiksi: int pieninalkio (int[] t, int l) //palauttaa t:stä pienimmän alkion //PRE: 0<l && l<=t.length //POST: pieninalkio(t,l)=min(t[0],t[1],t[l 1]) Motivointi (1/3) String s; Integer i; i=integer.valueof(s); Metodin kutsuja voi luottaa, että loppuehto on voimassa metodin kutsun jälkeen. Entä, joss== Hello World? Motivointi (2/3) Poikkeukset public static Integer valueof(string s) throws NumberFormatException Returns a new Integer object initialized to the value of the specified String. Parameters: s the string to be parsed. Returns: a newly constructed Integer initialized to the value represented by the string argument. Throws: NumberFormatException if the string cannot be parsed as an integer. (Sun:1.3 API) 3

4 String s; Integer i; try Motivointi (3/3) i=integer.valueof(s); // Kaikki kunnossa. catch (NumberFormatException e) // Jotain pielessä! Esimerkki 1 import java.io.*; class PoikkeusEsimerkki public static void main (String[] a) try int i; String s; BufferedReader br; InputStreamReader isr; isr=new InputStreamReader(System.in); br=new BufferedReader(isr); System.out.println ("Kirjoita luku ja paina ENTER!"); s=br.readline(); i=integer.valueof(s); System.out.println ("Kirjoitit luvun: "+i); catch (NumberFormatException nfe) System.out.println ("Et antanut lukua!"); catch (IOException ioe) System.out.println ("IO VIRHE!"); Poikkeuksen tarkistaminen yleisesti try // Koodi, jota yritetään ajaa catch (XXXException exxx) // Poikkeuksen XXX käsittely catch (YYYException eyyy) // Poikkeuksen YYY käsittely catch finally // Koodi, joka suoritetaan aina Esimerkki 2 import java.io.*; class PoikkeusEsimerkki public static int lueluku() throws IOException try InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); System.out.println ("Kirjoita luku ja paina ENTER!"); return Integer.valueOf(br.readLine()); catch (NumberFormatException nfe) System.out.println ("Et antanut lukua!"); public static void main (String[] a) try System.out.println ("Kirjoita luku ja paina ENTER!"); System.out.println ("Kirjoitit luvun: "+lueluku()); catch (IOException ioe) System.out.println ("IO VIRHE!"); 4

5 HUOM! HUOM! Poikkeuksien nostamisesta 2/3 1. Poikkeuksissa ohjelmakoodin suoritus hyppää => poikkeuksia käytettävä hillitysti ja harkiten 2. Poikkeukset ilmoittavat epätavallisesta toiminnasta => poikkeuksilla EI saa välittää normaaleja paluuarvoja 3. Jos poikkeusta ei käsitellä, Java käsittelee sen itse => ohjelman suoritus lopetetaan ja kutsupino tulostetaan Metodin on ilmoitettava mitä poikkeuksia se saattaa nostaa, lukuunottamattaruntimeexception tyyppisiä poikkeuksia. Esimerkiksi: void a (int b) throws IOException if (b<0) throw new IOException(); else throw new ArithmeticException(); Poikkeuksien nostamisesta 1/3 Poikkeuksien nostamisesta 3/3 Kun poikkeus nostetaan: luodaan uusithrowable luokan tai sen aliluokan olio välitetään sethrow käskyllä lähimmällecatch lohkolle Esimerkiksi: try throw new ArithmeticException(); catch (ArithmeticException earithmetic) //Siepataan poikkeus Kaikki nostettavat poikkeukset luetellaan metodin määrittelyssä (lukuunottamattaruntimeexception tyyppisiä poikkeuksia): void a (int b) throws IOException,XXException,YYException, 5

6 Oliot String omistaja double saldo Olion toiminta abc_456 "O.Mistaja" void talleta(double summa) +void nosta(string kuka,double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) abc_456.talleta(100) abc_456.nosta("v.aras", 50) > EiOmistaja abc_456.nosta("o.mistaja", 150) > EiRahaa abc_456.saldo("o.mistaja") > 110 abc_456.nosta("o.mistaja",110) Esimerkki: pankkitili abc_456 Oliot ovat yksilöitä Pankkitili "abc_456" pitää kirjaa tilin omistajasta ja tilisaldosta. Pankkitilile voi tallettaa rahaa kuka vaan, mutta vain omistaja saa nostaa rahaa tililtään. Omistajakaan ei saa nostaa tililtä enempää rahaa kuin mitä siellä on. Siksi omistaja saakin myös tiedustella saldon suuruuden. String omistaja double saldo abc_456 "O.Mistaja" void talleta(double summa) +void nosta(string kuka,double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) String omistaja double saldo abc_457 "T.Oinen" 170 +void talleta(double summa) +void nosta(string kuka,double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) String omistaja double saldo abc_456 +void talleta(double summa) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) abc_456.talleta(100) abc_457.nosta("o.mistaja", 50) > EiOmistaja abc_456.saldo("o.mistaja") > 110 abc_457.saldo("t.oinen") > 170 6

7 Ylikuormitus Lyhyesti String omistaja double saldo abc_456 +void talleta(double summa) +void talleta(double valuuttaa, double kurssi) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) Olioiden "tyyppiä" sanotaan luokaksi. Jokainen olio kuuluu siis johonkin luokkaan. Luokassa määritetään mitä tietoa olio pitää sisällään ja millä metodeilla päästään käsiksi tähän tietoon. Lisäksi luokassa annetaan alustajat, joilla olio luodaan. Ylikuormittavien metodien täytyy poiketa parametreiltään (joskin palautustyyppi voi olla eri)! Luokan osat Luokat olion attribuutit alustaja muuttajat String omistaja double saldo Pankkitili luokan nimi +Pankkitili(String omistaja,double saldo) +void talleta(double summa) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) havainnoija 7

8 String omistaja double saldo Luokka Javassa Pankkitili +Pankkitili(String omistaja,double saldo) +void talleta(double summa) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) class Pankkitili double saldo Luokka Javassa +Pankkitili(String omistaja,double saldo) +void talleta(double summa) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) class Pankkitili private String omistaja; private double saldo; String omistaja double saldo Luokka Javassa +Pankkitili(String omistaja,double saldo) +void talleta(double summa) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) class Pankkitili private String omistaja; Luokka Javassa +Pankkitili(String omistaja,double saldo) +void talleta(double summa) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) class Pankkitili private String omistaja; private double saldo; public Pankkitili (String omistaja, double saldo) this.omistaja=omistaja; this.saldo=saldo; 8

9 Luokka Javassa +void talleta(double summa) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) class Pankkitili private String omistaja; private double saldo; public Pankkitili (String omistaja, double saldo) this.omistaja=omistaja; this.saldo=saldo; public void talleta (double summa) this.saldo=this.saldo+summa; Luokka Javassa +double saldo(string kuka) class Pankkitili private String omistaja; private double saldo; public Pankkitili (String omistaja, double saldo) this.omistaja=omistaja; this.saldo=saldo; public void talleta (double summa) this.saldo=this.saldo+summa; public void nosta (String kuka, double summa) throws EiOmistaja, Ei Rahaa if (!kuka.equals(omistaja))throw new EiOmistaja(); else if (saldo<summa) throw new EiRahaa() else saldo=saldo summa; public double saldo(string kuka) return kuka.equals(this.omistaja)? this.saldo : 0.0; Luokka Javassa +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) class Pankkitili private String omistaja; private double saldo; public Pankkitili (String omistaja, double saldo) this.omistaja=omistaja; this.saldo=saldo; public void talleta (double summa) this.saldo=this.saldo+summa; public void nosta (String kuka, double summa) throws EiOmistaja, Ei Rahaa if (!kuka.equals(omistaja))throw new EiOmistaja(); else if (saldo<summa) throw new EiRahaa() else saldo=saldo summa; class Pankkitili private String omistaja; private double saldo; Luokka Javassa public Pankkitili (String omistaja, double saldo) this.omistaja=omistaja; this.saldo=saldo; public void talleta (double summa) this.saldo=this.saldo+summa; public void nosta (String kuka, double summa) throws EiOmistaja, Ei Rahaa if (!kuka.equals(omistaja))throw new EiOmistaja(); else if (saldo<summa) throw new EiRahaa() else saldo=saldo summa; public double saldo(string kuka) return kuka.equals(this.omistaja)? this.saldo : 0.0; 9

10 Luokasta olioksi String omistaja double saldo Pankkitili +Pankkitili(String omistaja,double saldo) +void talleta(double summa) +void nosta(string kuka, double summa) throws EiOmistaja,EiRahaa +double saldo(string kuka) Pankkitili abc_456; abc_456=new Pankkitili ("O.Mistaja",110); abc_456.nosta("v.aras", 50) abc_456.nosta("o.mistaja", 150) > EiRahaa abc_456.saldo("o.mistaja") abc_456.nosta("o.mistaja",110) > EiOmistaja > 110 Suojausmääreet Pääluokka Javassa Julkinen:public class Paaohjelma public static void main (String[] argumentit) Pankkitili abc_456; abc_456=new Pankkitili ("O.Mistaja",100); System.out.println(abc_456.saldo("O.Mistaja")); Julkisen attribuutin arvoa voivat kaikki lukea ja muuttaa; julkista metodia voi kutsua kuka tahansa => julkinen attribuutti = synkrooninen kommunikointimuuttuja => julkinen attribuutti altistaa olion ulkopuolisille virheille => attribuutti ei saisi olla juuri koskaan julkinen 10

11 Paketoitu: (ei avainsanaa) Yksityinen:private Paketoidun attribuutin arvoa voi lukea ja muuttaa kaikki samaan pakettiin kuuluvat luokat (ja oliot); paketoitua metodia saavat kutsua kaikki saman paketin luokat ja oliot. => paketoitu attribuutti altistaa olion ulkopuolisille virheille => attribuutti ei saisi olla juuri koskaan paketoitu => julistamalla metodi paketoiduksi, estetään sen käyttö paketin ulkopuolelta => metodin käyttöä ei tarvitse selittää paketin käyttäjille riittää, että paketin toteuttajat tietävät sen toiminnan Yksityisen attribuutin arvoa voivat lukea ja muuttaa vain kaikki saman luokan rutiinit (ja oliot); sama pätee yksityisiin metodeihin. => jokaisen attribuutin tulisi olla yksityinen => yksityinen metodi on apumetodi, jonka käyttö edellyttä luokan sisäisen rakenteen tuntemusta Periytyvä:protected Periytyvän attribuutin arvoa voivat lukea ja muuttaa kaikki saman luokan rutiinit (ja oliot) ja siitä periytyvät luokat (ja oliot); saman pätee periytyviin metodeihin. => periytyvä attribuutti on luokan sisäinen attribuutti, joka sitoo rutiineita, mutta jonka käyttöä perilliset saattavat haluta muuttaa Erikoismääreet => periytyvä metodi on tyypillisesti sellainen, jonka jokainen perillinen toteuttaa eri tavalla 11

12 Luokka attribuutti:static Vakio:final static attribuutti on ns. luokka attribuutti : => kaikki saman luokan oliot jakavat luokka attribuutin keskenään => luokka attribuuttia ei missään nimessä voi käyttää olion identifioimiseen final attribuutti on vakio, eli sen arvon voi asettaa vain kerran: => vakion arvo asetetaan joko määrittelyn yhteydessä tai oliota luotaessa => vakiota ei missään nimessä voi käyttää olion identifioimiseen 1. Luokka attribuutti:static Vakio:final class classainoalaskuri class classlaskija // // // // static int intarvo; AinoaLaskuri a, a, b; b; public void voidtik(); //a.arvo==1 && && b.arvo==1 a.arvo=a.arvo+1; //a.arvo==2 && && b.arvo==2 Voidaan myös viitata:ainoalaskuri.arvo class VakioLaskuri final int arvo; VakioLaskuri() arvo=0; public void tik() arvo=arvo+1; 12

13 Luokkavakio Ainoa:static class Numero public static final int YKSI=1; Tähän vakioon viitataan: Numero.YKSI HUOM! public, protected ja private ovat toistensa poissulkevia. class Paaohjelma // public static void main (String[] args) System.out.prinln ( Hyvästi Julma Maailma! ); Viitataan:Paaohjelma.main (parametrit) Luokkametodi static metodi on ns. luokkametodi : => kaikki saman luokan oliot jakavat metodin keskenään Vinkkejä => luokkametodi voi olla myös eräänlainen alustaja => luokkametodia ei voi sitoa johonkin tiettyyn olioon 13

14 Luokan tehtäviä 1. Sitominen: luokka sitoo vain yhden käsitteen Koostesuhde 2. Kapselointi: käsitteen attribuutteja manipuloidaan metodien avulla 3. Abstrahointi: käyttäjän ei tarvitse tietää toteutusmekanismia 4. Jäsennys: luokka ilmaisee kuinka käsite liittyy toisiin käsitteisiin (luokkiin) Hyvän luokan tunnuspiirteitä Eli mikä? 1. Selkeys: luokka sitoo vain yhden käsitteen; attribuutit ja metodit ovat selviä ja tarkoituksenmukaisia 2. Riippumattomuus: luokan toetutusta voidaan muuttaa käyttäjistä riippumatta; onnistuu vain jos attribuutit ovat yksityisiä 3. Lyhyys: luokan määrittely selviää yhdellä silmäyksellä ( mitenkäs Javan oma luokkakirjasto? ;) 4. Mutatoitumattomuus: luokka kapseloi staattisen käsitteen; dynaamisuus saadaan metodien palautteessa metodi==funktio luokassa vain alustajia ja havainnoijia Aggregaatiolla kuvataan tapausta, jossa luokka koostuu toisista luokista tai sisältää toisia luokkia selvästi osinaan. ( helmikuu 2002) Kouluesimerkki: autossa on neljä pyörää auto pyörä pyörä pyörä pyörä 14

15 Perustapaus Perustapaus class Nimi private String nimi; class Nimi private String nimi; public Nimi (String nimi) this.nimi=nimi; public String kuka() return nimi; public Nimi (String nimi) this.nimi=nimi; public String kuka() return nimi; String private nimi Nimi nimi : String +Nimi (String nimi) +Nimi +String(nimi:String) kuka() +kuka() : String class Nimi private String nimi; Perustapaus Rajoitettu tapaus class Henkilo private String[] tunnus[]; tunnus; public Nimi (String nimi) this.nimi=nimi; public String kuka() return nimi; Nimi String nimi +Nimi (String nimi) +String kuka() public Henkilo () tunnus=new String[5]; public String tunnus(int i) return tunnus[i]; public void asetatunnus (int i, String t) tunnus[i]=t; 15

16 class Henkilo private String tunnus[]; public Henkilo () tunnus=new String[5]; public String tunnus(int i) return tunnus[i]; Rajoitettu tapaus public void asetatunnus (int i, String t) tunnus[i]=t; Henkilo String[5] tunnus +Henkilo() +String tunnus(int i) +void asetatunnus (int i, String t) Rajoittamaton tapaus class Henkilo protected Vector tunnus; public Henkilo () tunnus=new Vector(); public int tunnuksia() return tunnus.size(); public void lisaatunnus (String t) tunnus.add (t); class Henkilo private String tunnus[]; public Henkilo () tunnus=new String[5]; public String tunnus(int i) return tunnus[i]; Rajoitettu tapaus public void asetatunnus (int i, String t) tunnus[i]=t; private 0..5 Henkilo String tunnus +Henkilo() +String tunnus(int i) +void asetatunnus (int i, String t) class Henkilo protected Vector tunnus; public Henkilo () tunnus=new Vector(); public int tunnuksia() return tunnus.size(); Rajoittamaton tapaus public void lisaatunnus (String t) tunnus.add (t); Henkilo #Vector tunnus +Henkilo() +int tunnuksia() +void lisaatunnus (String t) 16

17 class Henkilo protected Vector tunnus; public Henkilo () tunnus=new Vector(); public int tunnuksia() return tunnus.size(); Rajoittamaton tapaus public void lisaatunnus (String t) tunnus.add (t); protected 0..* String Henkilo tunnus +Henkilo() +int tunnuksia() +void lisaatunnus (String t) Määrittelystä Vektori (Vector) on määräämättömän kokoinen taulukko, joka kasvaa tarpeen mukaan. Vector luokka kuuluu java.util pakettiin: import java.util.*; vektoriolio määritellään: Vector v; Vector Alustuksesta Useita eri alustusvaihtoehtoja: Vector() Constructs an empty vector so that its internal data array has size 10 and its standard capacity increment is zero. Vector(Collection c) Constructs a vector containing the elements of the specified collection, in the order they are returned by the collection's iterator. Vector(int initialcapacity) Constructs an empty vector with the specified initial capacity and with its capacity increment equal to zero. Vector(int initialcapacity, int capacityincrement) Constructs an empty vector with the specified initial capacity and capacity increment. Esim. vektorin(vector v) alustus: v=new Vector(); 17

18 Peruskäytöstä boolean add(object o) // boolean!?!? Appends the specified element to the end of this Vector. int size() Returns the number of components in this vector. Object elementat(int index) Returns the component at the specified index. void setelementat(object obj, int index) Sets the component at the specified index of this vector to be the specified object. boolean contains(object elem) Tests if the specified object is a component in this vector. Sekakokelmista Vektoriin talletetaanobject olioita, mikä mahdollistaa sekakokoelmien luonnin, ts. samassa vektorissa voi olla monentyyppisiä olioita. Esim. kokonaisluku ja merkkijono oliot: Integer i=new Integer(100); String s=new String( Heippa ); Nämä voidaan tallettaa samaan vektoriin: Vector v; v=new Vector(); v.add (i); v.add (s); Peruskäytöstä Sekakokoelmista Vector v; int i; v=new Vector(); v.add( Hello ); //palautteen saa v.add( World ); //unohtaa!? System.out.println (v.size()); //2 for (i=0; i<v.size(); i++) System.out.println (v.elementat(i)); Kuinka sekakokoelmaa sitten käytetään, jos tyyppiä ei tunneta etukäteen? Vector v; Object o; int i; o=v.elementat(5); if (o instanceof Integer) i=((integer)o).intvalue(); 18

19 Hashtable Motivointi Hashtable englanniksi; System.out.println (englanniksi.get( talo )); Motivointi String[] suomi; String[] englanti; int i, j, sanoja; for (i=0; i<sanoja; i++) if (suomi[i].equals( talo )) j=i; System.out.println (englanti[j]); Vaikeuksia: haku, lisäys, poisto, skaalautuvuus, Määrittelystä Assosiatiiviseen taulukkoon (Hashtable) talletetaan oliopareja: (avainolio,dataolio) avainolio yksilöi olioparin taulukossa dataolio sisältää varsinaisen haettavan informaation esim. suomi engalnti sanakirja Assosiatiivinen taulukkoh määritellään: Hashtable h; 19

20 Alustuksesta Peruskäytöstä Monta eri alustusvaihtoehtoa: Hashtable() Constructs a new, empty hashtable with a default capacity and load factor, which is Hashtable(int initialcapacity) Constructs a new, empty hashtable with the specified initial capacity and default load factor, which is Hashtable(int initialcapacity, float loadfactor) Constructs a new, empty hashtable with the specified initial capacity and the specified load factor. Hashtable(Map t) Constructs a new hashtable with the same mappings as the given Map. Esim: h=new Hashtable(); Hashtable englanniksi; englanniksi=new Hashtable(); englanniksi.put( talo, house );// palautteen saa englanniksi.put( kissa, cat ); // unohtaa!? System.out.println (englanniksi.size()); //2 System.out.println (englanniksi.get( talo )); englanniksi.put( talo, a house ); System.out.println (englanniksi.get( talo )); Peruskäytöstä Object put(object key, Object value) //ret:object?! Maps the specified key to the specified value in this hashtable. Object get(object key) Returns the value to which the specified key is mapped in this hashtable. Boolean containskey(object key) Tests if the specified object is a key in this hashtable. Object remove(object key) //ret:object?! Removes the key (and its corresponding value) from this hashtable. Iteraattori 20

21 Määrittelystä Iteraattori on tarkoitettu kokoelman alkioiden läpikäyntiin (haku, lisäys, poisto). Javassa iteraattoreita on kahta päätyyppiä: perusiteraattori (Iterator) on yksisuuntainen listaiteraattori (ListIterator) on kaksisuuntainen Iteraattorit kuuluvat java.util pakettiin: import java.util.*; Esim. iteraattori määritellään: Iterator i; Peruskäytöstä boolean hasnext() Returns true if the iteration has more elements. Object next() Returns the next element in the interation. i=h.values().iterator(); while (i.hasnext()) System.out.println (i.next()); Iterator:lla on myös muita rutiineita Alustuksesta Iteraattoria ei varsinaiseti alusteta, vaan sitä pyydetään kokoelmalta. Hashtable h; Iterator i; i=h.values().iterator(); Iteraattorin eduista 1. Iteraattori on abstrakti käsite jonkin kokoelman läpikäymiseen => intention selkeys 2. Iteraattori on täysin riippumaton kokoelman rakenneominaisuuksista => uudelleenkäytettävyys 3. Iteraattorin käyttö ei edellytä tarkkaa etukäteisjärjestystä, eikä edes numeroituvuutta (!) => yleissoveltuvuus 4. Iteraattorin käyttö edellyttää kylläkin seuraavuus käsitettä kokoelmalta 21

22 Tiedostot Lukijat Syöttövirrat Tulostusvirrat 22

23 Kirjoittajat Käyttö: tiedosto import java.io.*; class Olioni implements Serializable private String s; public Olioni (String s) this.s=s; public String tostring() return "OLIONI:"+s; Käyttö: pääte import java.io.*; class T5 public static void main (String[] a) try String s; BufferedReader br; InputStreamReader isr; isr=new InputStreamReader(System.in); br=new BufferedReader(isr); System.out.println ("Kirjoita jotain ja paina ENTER!"); s=br.readline(); System.out.println ("Kirjoitit: "+s); catch (IOException e) System.out.println ("VIRHE!"); Käyttö: tiedosto import java.io.*; class Olioni implements Serializable private Kirjoitus String tiedostoon: s; import java.io.*; public import Olioni java.util.*; (String s) this.s=s; Vector v=new Vector(); public v.addelement String tostring() (new Olioni("kissa")); return v.addelement "OLIONI:"+s;(new Olioni("koira")); try FileOutputStream fos = new FileOutputStream("oliot.jbs"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeobject (v); oos.close(); fos.close(); catch (IOException ioe) 23

24 Käyttö: tiedosto import java.io.*; class Olioni implements Serializable private Kirjoitus String tiedostoon: s; import java.io.*; Tiedostosta public import Olioni lukeminen: java.util.*; (String import s) this.s=s; java.io.*; import Vector java.util.*; v=new Vector(); public v.addelement String tostring() (new Olioni("kissa")); return try v.addelement try "OLIONI:"+s; (new Olioni("koira")); FileInputStream fis fis = new new FileInputStream("oliot.jbs"); ObjectInputStream try ois ois = new new ObjectInputStream(fis); Vector FileOutputStream d=(vector)ois.readobject(); ois.close(); fos = new FileOutputStream("oliot.jbs"); ObjectOutputStream fis.close(); oos = new ObjectOutputStream(fos); oos.writeobject (v); catch oos.close(); catch (IOException (ioe) (ioe) fos.close(); catch catch catch (ClassNotFoundException (IOException cfe) ioe) cfe) Sanoma Perinnässä kaikki piirteet välittyvät perijälle suojaukset voivat kuitenkin estää niiden käytön. Perintää on käytetty oikein, kun voi lukea: "luokka A on eräänlainen luokka B" Perintä class classelain private int intpaino; public Elain Elain (int (intpaino) this.paino=paino; public int intpaino() return paino; Esimerkki class classkissa Kissaextends Elain Elain public Kissa Kissa (int (intpaino) super(paino); public String aani() return "Miau"; 24

25 class classelain private int intpaino; UML merkintä 1. Poikkeushierarkia Throwable public Elain Elain (int (intpaino) this.paino=paino; public int intpaino() return paino; class classkissa Kissaextends Elain Elain public Kissa Kissa (int (intpaino) super(paino); public String aani() return "Miau"; Elain Kissa Error AWTError, Exception RunTimeException IOException, ArithmeticException, Poikkeukset ja perintä Omien poikkeusten luomisesta 1/2 Entä jos halutaan nostaarumaexception poikkeus, jota Javassa ei ole (varmastikaan, ainakaan vielä) määritelty? Luodaan uusi aliluokka: class RumaException extends Exception Nyt voidaan nostaa ruma poikkeus: throw new RumaException(); 25

26 Omien poikkeusten luomisesta 2/2 Kuinkas määritelläänjuoksevaexception poikkeus, joka on RuntimeException tyyppinen? Suojausmääreet; osa II Luodaan uusiruntimeexception aliluokka: class JuoksevaException extends RuntimeException Nyt voidaan nostaa joukseva poikkeus: throw new JuoksevaException(); Viesti poikkeuksesa Julkinen:public class JuoksevaException extends RuntimeException public JuoksevaException (String viesti) super (viesti); Nyt voidaan nostaa joukseva poikkeus: throw new JuoksevaException( maratoni ); Ja viesti saaadaan: try catch (JuoksevaException ejuokseva) System.out.println (ejuokseva.getmessage()); julkinen metodi ja attribuutti näkyvät kaikille, myös perilliselle poikkeus: alustajaa ei varsinaisesti peritä => kullekin luokalle pitää kirjoittaa oma alustaja perityn alustajan nimi muuttuu super:ksi perinnässä 26

27 Julkinen:public Paketoitu: (ei avainsanaa) class classhenkilo //MUTATOITUMATON private String nimi; nimi; public Henkilo (String nimi) nimi) this.nimi=nimi; public String kuka() return nimi; nimi; class classmies Miesextends Henkilo public double rahaa; public Mies Mies (String nimi) nimi) super(nimi); public String kuka() return nimi; package Yritys; class classhenkilo //MUTATOITUMATON private String nimi; nimi; public Henkilo (String nimi) nimi) this.nimi=nimi; String kuka() return nimi; nimi; package Yritys; class classmies Miesextends Henkilo public double rahaa; public Mies Mies (String nimi) nimi) super(nimi); String kuka() return nimi; Paketoitu: (ei avainsanaa) Paketoitu: (ei avainsanaa) paketoitu metodi ja attribuutti näkyvät kaikille saman paketin luokille, siis myös perilliselle, jos perijä on samassa paketissa paketoitu metodi tai attribuutti eivät näy perilliselle, joka on toisessa paketissa package Yritys; class classhenkilo //MUTATOITUMATON private String nimi; nimi; public Henkilo (String nimi) nimi) this.nimi=nimi; String kuka() return nimi; nimi; package package Yritys; KilpailevaYritys; class classmies Miesextends Henkilo public double rahaa; public Mies Mies (String nimi) nimi) super(nimi); String kuka() return nimi; 27

28 Periytyvä:protected Yksityinen:private Perityvä metodi ja attribuutti näkyvät perijälle, paketista riippumatta! Yksityinen metodi ja attribuutti eivät koskaan näy muille luokiell, ei edes perilliselle! Periytyvä:protected Yksityinen:private package Yritys; class classhenkilo //MUTATOITUMATON private String nimi; nimi; public Henkilo (String nimi) nimi) //ALKUEHTO: nimi!=null this.nimi=nimi; protected String kuka() return nimi; nimi; package KilpailevaYritys; class classmies Miesextends Henkilo public double rahaa; public Mies Mies (String nimi) nimi) //ALKUEHTO: nimi!=null super(nimi); protected String kuka() return nimi; class classhenkilo //MUTATOITUMATON private String nimi; nimi; public Henkilo (String nimi) nimi) //ALKUEHTO: nimi!=null this.nimi=nimi; private String kuka() return nimi; nimi; class classmies Miesextends Henkilo public double rahaa; public Mies Mies (String nimi) nimi) //ALKUEHTO: nimi!=null super(nimi); private String kuka() return nimi; 28

29 Polymorfismi Korvaus Henkilo Mies Polymorfismista Oletetaan seuraavat luokat määritellyiksi: Lisäksi on määritelty seuraavat oliot: Henkilo h; Mies m; Tällöin ainakin seuraavat alustukset ovat mahdollisia: h=new Henkilo(); m=new Mies(); Myös seuraava alustus on mahdollinen: h=new Mies(); UML kaavio havainnolistaa syyn tähän ns. polymorfismiin. Perustapauksesta class classkuvio class classympyra extends Kuvio Kuvio public double pintaala() return 0; 0; private double sade; sade; public double pintaala() return *sade*sade; class classnelio Nelioextends Kuvio Kuvio private double sivu; sivu; public double pintaala() return sivu*sivu; Korvaavien metodien palautustyyppien ja parametrien tulee olla samat! 29

30 Attribuuteista Perustapaus Attribuutteja ei voi korvata! class classa public int inti; i; public A() A() i=3; i=3; class classb extends A public double i; i; public B() B() i= A a; a=new B(); System.out.println(a.i); // ==> 3 B b; b=new B(); System.out.println(b.i); // ==> class classkuvio public double pintaala() return 0; 0; Kuvio k; k=new Kuvio(); System.out.println(k.pintaAla()); // ==> 0 Dynaaminen sidonta class classkuvio public double pintaala() return 0; 0; Korvaus Kuvio k; k=new Kuvio(); System.out.println(k.pintaAla()); // ==> 0 class classympyra extends Kuvio Kuvio private double sade; sade; public Ympyra (double sade) sade) this.sade=sade; public double pintaala() return *sade*sade; Ympyra y; y=new Ympyra(2.0); System.out.println(y.pintaAla()); // ==>

31 Dynaaminen sidonta class classkuvio public double pintaala() return 0; 0; Kuvio k; k=new Kuvio(); System.out.println(k.pintaAla()); // ==> 0 Virheellinen perintä class classympyra extends Kuvio Kuvio private double sade; sade; public Ympyra (double sade) sade) this.sade=sade; public double pintaala() return *sade*sade; Kuvio k; k=new Ympyra(2.0); System.out.println(k.pintaAla()); // ==> 4 Virheellinen koodi Virheellisen perinnän tunnuspiirteitä class classkuvio public double pintaala() return 0; 0; class classympyra extends Kuvio Kuvio private double sade; sade; public Ympyra (double sade) sade) this.sade=sade; public double pintaala() return *sade*sade; Kuvio k; k=new Kuvio(); System.out.println(k.pintaAla()); // ==> 0 Ympyra y; y=new Kuvio(); System.out.println(y.pintaAla()); perintää ei voi lukea muodossa "luokka A on eräänlainen luokka B" metodit joutuvat käsittelemään Object luokan olioita perinnän myötä luokkaan tulee tarpeettomia metodeja perillisen metodit joutuvat kilpailemaan yläluokan metodien kanssa, jolloin ohjelmoijalle jää epäselväksi, kummanko luokan metodia tulisi käyttää 31

32 Esimerkki: kokonaislukupino Kuoriluokka private Stack Kokonaislukupino +Kokonaislukupino() +boolean tyhja() +int ota() +void lisaa(int i) Kuoriluokan tehtävä kuoriluokan tehtävä on luoda rajapinta kahden luokan välille käytetään, kun kuorrutettavassa luokassa on tarpeettomia metodeja käytetään, kun metodien parametrien tyypit ovat liian epätarkkoja, esim. Object tyyppisiä käytetään, kun metodien nimet ovat harhaanjohtavia Esimerkki: kokonaislukupino import java.util.*; class Kokonaislukupino private Stack pino; public Kokonaislukupino() pino=new Stack(); public boolean tyhja() return pino.empty(); public int ota() return ((Integer)pino.pop()).intValue(); public void lisaa (int i) pino.push(new Integer(i)); 32

33 Abstrakti luokka Peruskäytöstä Abstraktia luokkaa käytetään kapseloimaan jonkin toiminnon yleiset piirteet. Yksityiskohdat jätetään perijän huoleksi. Elain abstract +Elain() +String aani() abstract +void aantele() abstract class Elain public abstract String aani(); public void aantele() System.out.println(aani()); Kissa Koira +Kissa() +Koira() +String aani() miau hau class Kissa Koira extends Elain public String aani() return miau ; hau ; Koira Kissa o=new k=new Koira(); Kissa(); o.aantele(); k.aantele(); Merkinnästä Javassa ja UML:ssä Elain abstract +Elain() +String aani() abstact +void aantele() abstract class Elain public abstract String aani(); public void aantele() System.out.println(aani()); Rajapintaluokka HUOM!Elain()on vakioalustaja, jonka Java tuottaa automaattisesti! 33

34 Merkinnästä Javassa ja UML:ssä Peruskäytöstä <<interface>> Yhteystieto +String nimi() +String osoite() interface Yhteystieto public String nimi(); public String osoite(); Rajapintaluokkaa käytetään kapseloimaan jonkin toiminnon kutsujen piirteet. Yksityiskohdat jätetään rajapinnan toteuttajan huoleksi. <<interface>> Yhteystieto +String nimi() +String osoite() interface Yhteystieto public String nimi(); public String osoite(); HUOM! Rajapintaluokalla ei ole alustajaa, koska rajapintaluokka on aina abstrakti osa toista luokkaa! Kaarlo +Kaarlo() +String nimi() +String osoite() class Kaarlo implements Yhteystieto public Kaarlo() public String nimi() return Kaarlo H. Enkilo ; public String osoite() return Kaarlontie 1 ; Merkinnästä Javassa ja UML:ssä Peruskäytöstä Rajapinnnan käyttöön liittyy usein myös jokin protokolla, kutsujärjestys, jota mallinnetaan esim. tilakaaviolla: <<interface>> Runnable +void start() +void run() +void sleep(ms:long) Ajetaan sleep() run() ei ajeta start() HUOM! Runnable rajapintaan kuuluu myös muita metodeja; kuitenkinstop(),suspend(),resume() eivät ole enää suositeltuja! interface interfaceyhteystieto public public String String nimi(); nimi(); public public String String osoite(); osoite(); class classkaarlo Kaarloimplements Yhteystieto public publickaarlo() public publicstring Stringnimi() nimi() return return Kaarlo Kaarlo H. H. Enkilo ; Enkilo ; public publicstring Stringosoite() return return Kaarlontie 1 ; 1 ; void tulosta (Yhteystieto y) System.out.println(y.nimi()); System.out.println(y.osoite()); Kaarlo kaarlo; kaarlo=new Kaarlo(); tulosta (kaarlo); 34

35 Useat rajapinnat Luokka voi samaan aikaan toteuttaa useita eri rajapintoja: class Kaarlo implements Yhteystieto, Runnable, public Kaarlo() public String nimi() return Kaarlo H. Enkilo ; public String osoite() return Kaarlontie 1 ; public void start() import javax.swing.*; Esimerkki: JFrame class JF public static void main (String[] argumentit) JFrame jf=new JFrame("Hello Worms!"); jf.setvisible(true); hävittää ikkunan, muttei lopeta ohjelmaa Swing: ikkunat Ikkunan sulkeminen lopettaa myös ohjelman import javax.swing.*; class JF public static void main (String[] argumentit) JFrame jf=new JFrame("Hello Worms!"); jf.setdefaultcloseoperation(jframe.exit_on_close); jf.setvisible(true); 35

36 Ikkunan ominaisuuksia Sallitaanko ikkunan koon muutos? setresizable() Ikkunan piilotus: hide() taisetvisible(false) Otsikon vaihtaminen: settitle ("otsikko") Ikkuna ja ajoluokka OmaIkkuna.java: import javax.swing.*; class OmaIkkuna extends JFrame public OmaIkkuna() super("hello Worms!"); setdefaultcloseoperation(jframe.exit_on_close); getcontentpane().add(new JLabel("Worms say Hi!")); pack(); setvisible(true); Ajo.java: class Ajo public static void main (String[] argumentit) new OmaIkkuna(); Oma ikkunaluokka Swingissä ideana on luoda oma ikkunaluokka perimällä se JFrame luokasta.jframe luokkaa käytetään harvoin sellaisenaan. Swing: nimiöt Tällöinmain() metodi sijoitetaan ko. ikkunaluokkaan tai luoda erillinen ajoluokka, joka luo omasta ikkunaluokasta ikkunan. Näistä jälkimmäinen tapa on suositeltavampi. 36

37 Nimiö: JLabel Määrittely: JLabel j; Swing: asemointi Alustus: j=new JLabel("Teksti tähän"); Sisällön muuttaminen myöhemmin: j.settext ("Uusi teksti tähän"); Nimiön lisääminen ikkunalle Taulu: JPanel import javax.swing.*; class JF public static void main (String[] argumentit) JFrame jf=new JFrame("Hello Worms!"); jf.setdefaultcloseoperation(jframe.exit_on_close); jf.getcontentpane().add(new JLabel("Worms say Hi!")); jf.setvisible(true); hmm.. ikkuna puristetaan sisällön muotoiseksi komennolla: jf.pack() JPanel on taulu, johon voidaan määrätä asemointitekniikka voidaan sijoittaa komponentteja voidaan sijoittaa myös muita tauluja komponentteina 37

38 import javax.swing.*; Esimerkki: JPanel class OmaIkkuna extends JFrame public OmaIkkuna () super("hello Worms!"); setdefaultcloseoperation(jframe.exit_on_close); JPanel p=new JPanel(); p.add(new JLabel("Worms say Hi!")); getcontentpane().add(p); pack(); setvisible(true); Esimerkki: FlowLayout import javax.swing.*; import java.awt.*; class OmaIkkuna extends JFrame public OmaIkkuna () super("hello Worms!"); setdefaultcloseoperation(jframe.exit_on_close); JPanel p=new JPanel(new FlowLayout()); p.add(new JLabel("1")); p.add(new JLabel("2")); p.add(new JLabel("3")); getcontentpane().add(p); pack(); setvisible(true); Asemointi: FlowLayout Asemointi: GridLayout Java tarjoaa useita eri asemointitekniikoita (Layout), joita voidaan tarvittaessa yhdistellä.flowlayout:ssa komponentit sijoitetaan vasemmalta oikealle lisäysjärjestyksessä. GridLayout:ssa komponentit sijoitetaan vasemmalta oikealle ja ylhäältä alas lisäysjärjestyksessä. Tällä asemointitekniikalla määrätään aluksi hilan koko. FlowLayout Object Object Object GridLayout (3,3) Object Object Object Object Object Object Object Object Object 38

39 Esimerkki: GridLayout import javax.swing.*; import java.awt.*; class OmaIkkuna extends JFrame public OmaIkkuna () super("hello Worms!"); setdefaultcloseoperation(jframe.exit_on_close); JPanel p=new JPanel(new GridLayout(2,3)); p.add(new JLabel("1")); p.add(new JLabel("2")); p.add(new JLabel("3")); p.add(new JLabel("4")); p.add(new JLabel("5")); p.add(new JLabel("6")); getcontentpane().add(p); pack(); setvisible(true); Esimerkki: BorderLayout import javax.swing.*; import java.awt.*; class OmaIkkuna extends JFrame public OmaIkkuna () super("hello Worms!"); setdefaultcloseoperation(jframe.exit_on_close); JPanel p=new JPanel(new BorderLayout()); p.add(new JLabel("1", JLabel.CENTER), BorderLayout.CENTER); p.add(new JLabel("2", JLabel.CENTER), BorderLayout.WEST); p.add(new JLabel("3", JLabel.CENTER), BorderLayout.EAST); p.add(new JLabel("4", JLabel.CENTER), BorderLayout.NORTH); p.add(new JLabel("5", JLabel.CENTER), BorderLayout.SOUTH); getcontentpane().add(p); pack(); setvisible(true); Asemointi: BorderLayout Oma taululuokka BorderLayout:ssa komponentit sijoitetaan ilmansuunnittain. Swingissä ideana on luoda oma taululuokka perimällä se JPanel luokasta. BorderLayout West North Center East Tällöin omassa taululuokassa voidaan suorittaa komponenttien asemointi paikallisesti ja samoja tauluja voidaan helposti "monistaa" samaan tai eri ikkunaan. South 39

40 Oma taululuokka ja sen käyttö OmaTaulu.java: import javax.swing.*; import java.awt.*; class class OmaTaulu extends JPanel public OmaTaulu() super(new BorderLayout()); add(new JLabel("Keski", JLabel.CENTER), BorderLayout.CENTER); add(new JLabel("Pohjola", JLabel.CENTER), BorderLayout.NORTH); OmaIkkuna.java: import javax.swing.*; class class OmaIkkuna extends JFrame public OmaIkkuna() super("hello Worms!"); setdefaultcloseoperation(jframe.exit_on_close); getcontentpane().add(new OmaTaulu()); pack(); setvisible(true); Kenttä: JTextField Määrittely: JTextField t; Alustus: tai t=new JtextField("Oletusteksti tähän"); t=new JtextField("Oletusteksti tähän",20); Sisällön tiedustelu: tai String s=t.gettext(); String s=t.getselectedtext(); Sisällön muuttaminen myöhemmin: t.settext ("Uusi teksti tähän"); Muutoksen estäminen: t.seteditable (false); Swing: kentät Kentän lisääminen ikkunalle import javax.swing.*; class OmaIkkuna extends JFrame private JTextField kentta; public OmaIkkuna () super("ikkuna"); setdefaultcloseoperation(jframe.exit_on_close); kentta=new JTextField("(oletusteksti)"); getcontentpane().add(kentta); pack(); setvisible(true); 40

41 Oma kokonaislukukenttä Entäpä jos tarvittaisiinkin koknaislukukenttä, johon käyttäjä saa kirjoittaa vain kokonaislukuja? Yksi keino on luoda uusi kenttäluokka, joka perii JTextField:in ja laajentaa sitä kahdella uudella metodilla setint(int i) ja int getint () throws NumberFormatException. Kokonaislukukentän lisääminen ikkunalle import javax.swing.*; class OmaIkkuna extends JFrame private IntKentta kentta; public OmaIkkuna () super("ikkuna"); setdefaultcloseoperation(jframe.exit_on_close); kentta=new IntKentta( 123); getcontentpane().add(kentta); pack(); setvisible(true); Oma kokonaislukukenttä tarkemmin import javax.swing.*; import java.awt.*; class IntKentta extends JTextField public IntKentta (int value) super(string.valueof(value)); public void setint (int value) settext (String.valueOf(value)); public int getint () throws NumberFormatException return Integer.valueOf(getText()).intValue(); Iso kenttä: JTextArea Määrittely: JTextArea t; Alustus: tai t=new JtextArea("Oletusteksti tähän"); t=new JtextArea("Oletusteksti",20,60); Sisällön tiedustelu: tai String s=t.gettext(); String s=t.getselectedtext(); Sisällön muuttaminen myöhemmin: t.settext ("Uusi teksti tähän"); Muutoksen estäminen: t.seteditable (false); 41

42 kentän lisääminen ikkunalle import javax.swing.*; class OmaIkkuna extends JFrame private JTextArea kentta; public OmaIkkuna () super("ikkuna"); setdefaultcloseoperation(jframe.exit_on_close); kentta=new JTextArea("(oletusteksti)",5,20); getcontentpane().add(kentta); pack(); setvisible(true); Painike: JButton JButton on painike johon voidaan sijoittaa teksti, kuva, jne. jotka lähettää viestin painalluksesta jonka lähettämä viesti voidaan käsitellä toisessa oliossa Swing: painikkeet import javax.swing.*; Painike: JButton class OmaIkkuna extends JFrame public OmaIkkuna () super("hello Worms!"); setdefaultcloseoperation(jframe.exit_on_close); getcontentpane().add(new JButton("Klikkaas mua")); pack(); setvisible(true); 42

43 Viestit ja kuuntelijat Painikkeet taulussa Javassa näyttökomponentit lähettävät viestejä (AWTEvent). Viestit välitetään rekisteröityneille kuuntelijoille (EventListener). Viestin kuuntelijaolio rekisteröi itsensä sille komponentille, jonka viestejä se haluaa kuunnella. Esimerkiksi painikkeen kuuntelijan on rekisteröidyttävä sille painikkeelle, jota se haluaa kuunnella. Usein on tarve luoda taulu, jossa on nimiöitä, tekstikenttiä ja painikkeita. Tällaisessa taulussa osa painikkeista ja niiden lähettämistä viesteistä tulisi ohjata taulun omistajalle (ikkunalle). Kuinkas se sitten tapahtuu? Tapoja on monia. Ehkä selkein ratkaisu olisi luoda oma rajapinta kuuntelijalle. On kuitenkin helpompaa käyttää Swingin viestejä sellaisenaan: Ideana on, että taulussa määritellään metodit, joilla voidaan kysyä, mikä painike aiheutti viestin. Taulun luonnin yhteydessä lisätään taulun painikkeille kuuntelija, joka toteuttaa ActionListener rajapinnan. Painikeviestin sieppaus import javax.swing.*; import java.awt.*; import java.awt.event.*; class OmaIkkuna extends JFrame implements ActionListener private JLabel nimio; private JButton painike; public void actionperformed (ActionEvent e) nimio.settext(nimio.gettext()+"."); public OmaIkkuna () super("ikkuna"); setdefaultcloseoperation(jframe.exit_on_close); nimio=new JLabel("Painettu: "); painike=new JButton("Klikkaas!"); painike.addactionlistener(this); getcontentpane().setlayout (new GridLayout(2,1)); getcontentpane().add(painike); getcontentpane().add(nimio); pack(); setvisible(true); Oma taulu import javax.swing.*; import java.awt.*; import java.awt.event.*; class OmaTaulu extends JPanel private JButton painikea; private JButton painikeb; public OmaTaulu (ActionListener kuuntelija) super(); setlayout (new GridLayout(1,2)); painikea=new JButton(" A "); painikea.addactionlistener(kuuntelija); add(painikea); painikeb=new JButton(" B "); painikeb.addactionlistener(kuuntelija); add(painikeb); public boolean apainettu (ActionEvent e) return e.getsource()==painikea; public boolean bpainettu (ActionEvent e) return e.getsource()==painikeb; 43

44 Oman taulun kuutelija import javax.swing.*; import java.awt.*; import java.awt.event.*; class OmaIkkuna extends JFrame implements ActionListener private OmaTaulu taulu; public void actionperformed (ActionEvent e) if (taulu.apainettu(e)) System.out.println("A"); if (taulu.bpainettu(e)) System.out.println("B"); Valikkojen käytöstä Yksi valikko tulisi kapseloida omaan luokkaansa, jonka luonnin yhteydessä rekisteröidään valikon kuuntelija. Tekniikka on siis sama kuin painiketaululla. public OmaIkkuna () super("ikkuna"); setdefaultcloseoperation(jframe.exit_on_close); taulu=new OmaTaulu(this); getcontentpane().add(taulu); pack(); setvisible(true); Oma valikko Swing: valikot import javax.swing.*; import java.awt.event.*; class TiedostoValikko extends JMenu private JMenuItem lue; private JMenuItem talleta; public TiedostoValikko (ActionListener kuuntelija) super("tiedosto"); lue=new JMenuItem("lue"); lue.addactionlistener(kuuntelija); add(lue); talleta=new JMenuItem("talleta"); talleta.addactionlistener(kuuntelija); add(talleta); public boolean luevalittu(actionevent e) return e.getsource()==lue; public boolean talletavalittu(actionevent e) return e.getsource()==talleta; 44

45 Oman valikon käyttö Viestidialogi import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Ikkuna extends JFrame implements ActionListener private TiedostoValikko tiedostovalikko; public Ikkuna() super(otsikko); setdefaultcloseoperation(jframe.exit_on_close); tiedostovalikko=new TiedostoValikko(this); JMenuBar valikko=new JMenuBar(); valikko.add(tiedostovalikko); setjmenubar(valikko); pack(); setvisible(true); JOptionPane.showMessageDialog( ikkunaolio, "VIESTI", "OTSIKKO", JOptionPane.PLAIN_MESSAGE ); public void actionperformed (ActionEvent e) if (tiedostovalikko.luevalittu(e)) System.out.println ("LUE"); if (tiedostovalikko.talletavalittu(e)) System.out.println("TALLETA"); Listausdialogi Swing: dialogeja JTextArea t=new JTextArea(a.toString()); t.seteditable(false); JOptionPane.showMessageDialog( ikkunaolio, t, "OTSIKKO", JOptionPane.PLAIN_MESSAGE ); 45

46 Vahvistusdialogi Tiedoston talletusdialogi JOptionPane.showConfirmDialog( ikkunaolio, "Oletko varma?", "OTSIKKO", JOptionPane.YES_NO_OPTION ); JFileChooser tiedostot; if (tiedostot.showsavedialog(ikkunaolio) ==JFileChooser.APPROVE_OPTION) System.out.println( tiedostot.getselectedfile().getpath() ); palauttaajoptionpane.yes_option:nin, jos käyttäjä painaa dialogin Yes painiketta. Tiedoston lukudialogi JFileChooser tiedostot; if (tiedostot.showopendialog(ikkunaolio) ==JFileChooser.APPROVE_OPTION) System.out.println( tiedostot.getselectedfile().getpath() ); MVC arkkitehtuuri 46

47 Motivointi Tee Javalla ohjelma, joka pitää kirjaa kahdesta henkilöstä, heidän nimestä ja osoitteesta. Ohjelman pitäisi olla helposti ylläpidettävä, sillä henkilötietoja saatetaan tarvita myöhemmin lisää. Lomakepohjaisista ohjelmista tulee lähes poikkeuksetta MVC patternin mukaisia, jos halutaan ylläpidettävyyttä. MVC patternissa on: mallikomponentti (Model) Henkilo luokka Tee Javalla ohjelma, joka pitää kirjaa kahdesta henkilöstä, heidän nimestä ja osoitteesta. String nimi String osoite Henkilo +Henkilo (String nimi, String osoite) +String nimi() +String osoite() näkymäkomponentti (View) ohjauskomponentti (Control) Mallikomponentti Tee Javalla ohjelma, joka pitää kirjaa kahdesta henkilöstä, heidän nimestä ja osoitteesta. HenkiloArkisto luokka Tee Javalla ohjelma, joka pitää kirjaa kahdesta henkilöstä, heidän nimestä ja osoitteesta. private 1..2 Henkilo HenkiloArkisto Henkilo h1 Henkilo h2 HenkiloArkisto +HenkiloArkisto() +Henkilo henkilo(int i) PRE: 1<=i<=2 +void asetahenkilo (int i, Henkilo h) PRE: 1<=i<=2 47

48 Näkymäkomponentti HenkiloPainikkeet luokka: näkymäosa Yksinkertainen täyttölomake: Nimi: Osoite: henkilö1 henkilö2 päivitä HenkiloTaulu HenkiloPainikkeet JButton henkilo1 JButton henkilo2 JButton paivita JPanel HenkiloPainikkeet private private ArkistoIkkuna HenkiloTaulu luokka ArkistoIkkuna luokka: näkymäosa JPanel JFrame JTextField nimi JTextField osoite HenkiloTaulu +Henkilo annahenkilo() +void asetahenkilo (Henkilo h) +ArkistoIkkuna() ArkistoIkkuna HenkiloTaulu taulu HenkiloPainikkeet painikkeet 48

49 Ohjauskomponentti Yksinkertainen täyttölomake: Nimi: Osoite: henkilö1 henkilö2 päivitä ArkistoIkkuna luokka: ohjausosa <<interface>> HenkiloPainikkeet.Kuuntelija +void henkilo1() +void henkilo2() +void paivita() HenkiloArkisto private HenkiloPainikkeet private ArkistoIkkuna HenkiloArkisto arkisto void paivitanakyma() HenkiloIkkuna HenkiloPainikkeet luokka: ohjausosa Henkilo luokka <<interface>> ActionListener HenkiloPainikkeet +interface Kuuntelija +henkilo1() +henkilo2() +paivita() Kuuntelija kuuntelija +HenkiloPainikkeet (Kuuntelija k) +void actionperformed (ActionEvent e) String nimi String osoite Henkilo +Henkilo (String nimi, String osoite) +String nimi() +String osoite() 49

50 HenkiloArkisto luokka HenkiloPainikkeet luokka Henkilo h1 Henkilo h2 HenkiloArkisto +HenkiloArkisto() +Henkilo henkilo(int i) PRE: 1<=i<=2 +void asetahenkilo (int i, Henkilo h) PRE: 1<=i<=2 JPanel <<interface>> ActionListener HenkiloPainikkeet +interface Kuuntelija +henkilo1() +henkilo2() +paivita() Kuuntelija kuuntelija JButton henkilo1 JButton henkilo2 JButton paivita +HenkiloPainikkeet (Kuuntelija k) +void actionperformed (ActionEvent e) HenkiloTaulu luokka ArkistoIkkuna luokka JTextField nimi JTextField osoite JPanel HenkiloTaulu +Henkilo annahenkilo() +void asetahenkilo (Henkilo h) JFrame <<interface>> HenkiloPainikkeet.Kuuntelija ArkistoIkkuna HenkiloTaulu taulu HenkiloPainikkeet painikkeet HenkiloArkisto arkisto +ArkistoIkkuna() void paivitanakyma() +void henkilo1() +void henkilo2() +void paivita() 50

51 Pääluokka HenkiloArkistoOhjelma +void static main (String[] argumentit) 51

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

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

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

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

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

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

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

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

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi

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

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

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit: Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio)

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

Java UI-komponentit (JTable) Juha Järvensivu juha.jarvensivu@tut.fi 2007

Java UI-komponentit (JTable) Juha Järvensivu juha.jarvensivu@tut.fi 2007 Java UI-komponentit (JTable) Juha Järvensivu juha.jarvensivu@tut.fi 2007 JTable Datan esittäminen taulukkomuodossa Datan valitseminen taulukosta Datan muokkaaminen (lisääminen, muokkaaminen, poistaminen)

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

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

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

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

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

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

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

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

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

Graafinen käyttöliittymä, osa 2

Graafinen käyttöliittymä, osa 2 Graafinen käyttöliittymä, osa 2 Tapahtumankäsittely, käyttöliittymäkomponentteja MVC-malli M Malli V Näkymä Päivitys C Ohjain Päivitys Tapahtumat MVC-malli jakaa sovelluksen malli- ja näkymäkerroksiin.

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

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

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

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

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

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

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

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

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

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

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

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

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

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

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

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

Java ja grafiikka. Ville Sundberg 12.12.2007

Java ja grafiikka. Ville Sundberg 12.12.2007 Java ja grafiikka Ville Sundberg 12.12.2007 What happen Viritetty JPanel Graphics ja Graphics2D ImageIO ja BufferedImage Animaatio ja ajastus Optimoinnista Kehykset import javax.swing.jframe; public class

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

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

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

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

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

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

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

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

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

Ohjelmointityö 3. Mikko Laamanen 185667

Ohjelmointityö 3. Mikko Laamanen 185667 Ohjelmointityö 3 Mikko Laamanen 185667 Sisällysluettelo Tehtävän määrittely ja ratkaisuperiaate... 1 Tehtävän määrittely... 1 Ratkaisuperiaate... 1 Ohjelman käyttöohje... 1 Syötteet ja tulosteet... 1 Ohjelman

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

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

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

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

Ohjelmoinnin perusteet, kurssikoe

Ohjelmoinnin perusteet, kurssikoe Ohjelmoinnin perusteet, kurssikoe 18.6.2014 Kirjoita jokaiseen konseptiin kurssin nimi, kokeen päivämäärä, nimi, TMC-tunnus ja opiskelijanumero tai henkilötunnus. Vastaukset palautetaan tehtäväkohtaisiin

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

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit 2. Rutiinin muodostaminen Rutiinin muodostaminen roolit 1. Rutiinin määrittely 2. Sopimuspohjainen ohjelmointi 3. Määrittelyjen kirjoittaminen 4. Erikoistilanteiden hallinta analysointi luokat rutiinit

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

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

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public) Tietorakenteet JAVA-OHJELMOINTI Osa 5: Tietorakenteita Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto Olioita ja tietoja voidaan organisoida määrämuotoisiksi tietorakenteiksi Hyödyllisiä

Lisätiedot

Luokan sisällä on lista

Luokan sisällä on lista 1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä

Lisätiedot

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä Luento 6 T-106.1240 Ohjelmoinnin jatkokurssi T1 & T-106.1243 Ohjelmoinnin jatkokurssi L1 Luennoitsija: Otto Seppälä Kurssin WWW: http://www.cs.hut.fi/opinnot/t-106.1240/s2007 Oma Grafiikka Swing-käyttöliittymässä

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

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

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

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

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

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen 1 List-luokan soveltamista List-luokan metodeja Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen 1 List-luokan metodeja List-luokan

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi

Lisätiedot