Vesisika. metsiemme työmyyrä. http://www.billybear4kids.com/animal/whose-toes/capybara.jpg



Samankaltaiset tiedostot
Pakkauksen kokoaminen

JAVA-OHJELMOINTI 3 op A274615

Pakkauksen kokoaminen

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

Eclipse ja JUnit-ohjelmoijatestit

P e d a c o d e ohjelmointikoulutus verkossa

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

Eclipse, SVN ja HelloWorld

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

Osio 4: Graafinen käyttöliittymä

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

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

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

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

Luokat ja oliot. Ville Sundberg

Eclipse 3.1 Pikaopas versio 1.0

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

1 Tivax Professional 4.5

Ohje kehitysympäristöstä. Dokumentti: Ohje kehitysympäristöstä.doc Päiväys: Projekti : AgileElephant

Osio 4: Graafinen käyttöliittymä

Javan perusteita. Janne Käki

Listarakenne (ArrayList-luokka)

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Kuva 1. Jokaisen tavallisen kuvan tasotyökalussa näkyy vain yksi taso, tässä nimellä tausta.

Testivetoinen ohjelmistokehitys

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Interaktiivinen tarinankerronta

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Taulukot. Jukka Harju, Jukka Juslin

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

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

UCOT-Sovellusprojekti. Asennusohje

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

1 Tivax siirto uuteen koneeseen

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle,

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

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

20. Javan omat luokat 20.1

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

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

JUnit ja EasyMock (TilaustenKäsittely)

Java ja grafiikka. Ville Sundberg

Luentomateriaali. Informaatioverkostot: Studio 1. Janne Käki MUUTTUJAT SWING POLYMORFISMI UML-KAAVIOT SOVELMAT SILMUKAT POIKKEUKSET JAVADOC

Muutamia peruskäsitteitä

11/20: Konepelti auki

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

Ohjelmoinnin perusteet Y Python

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

5. HelloWorld-ohjelma 5.1

Jypelin käyttöohjeet» Ruutukentän luominen

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

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

Eclipse & WindowBuilder

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

5. HelloWorld-ohjelma 5.1

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

1 Tehtävän kuvaus ja analysointi

Graafisen käyttöliittymän automaattinen testaus

TALLENNETAAN MUISTITIKULLE JA MUISTIKORTILLE

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

4. Lausekielinen ohjelmointi 4.1

Olioiden yhteistyön mallintaminen

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Hakemistojen sisällöt säilötään linkitetyille listalle.

MICROSOFT EXCEL 2010

Oliot ja tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Java Runtime -ohjelmiston asentaminen

Suunnittelumalleja, MVC. Juha Järvensivu 2008

UML -mallinnus TILAKAAVIO

lejos-asennusohje Robottiohjelmoinnin harjoitustyö Kevät 2011

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

Ohjelmointi Tunnilla 1 (5) Viikko 7 tuntitehtäviä: metodien tekeminen Javalla

Ohjelmointi 1 / syksy /20: IDE

16. Javan omat luokat 16.1

Videoeditointi: Adobe Premiere Pro CS4

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

17. Javan omat luokat 17.1

Java-kielen perusteita

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Graafinen käyttöliittymä, osa 1

SCI- A0000: Tutustuminen Linuxiin, syksy 2015

Luokka- ja oliokaaviot

AS Teollisuuden tietojärjestelmät

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Transkriptio:

Vesisika metsiemme työmyyrä http://www.billybear4kids.com/animal/whose-toes/capybara.jpg

Faktat Vesisika tykkää vedestä ja näyttää (ja kuulemma maistuu) hieman sialta. Käyttää myös nickiä kapybara. kapiÿva (guaranin kieltä), ruohikon valtias kaapĩ ûara (tupin kieltä), ruohonsyöjä Voi nukkua veden alla, kunhan sieraimet ei oo siellä. Tykkää ihmisistä, suosittu lemmikki Etelä-Amerikassa. ei kuitenkaan Brasiliassa, missä se levittää Kalliovuorten pilkkukuumetta :( http://upload.wikimedia.org/wikipedia/commons/b/bc/bristol.zoo.capybara.arp.jpg

Maailman suurin jyrsijä. Mieti sitä. vesisika 150 cm 80 kg majava 100 cm 25 kg orava 28 cm 0,4 kg

Luokkarakenne Nisäkäs Jyrsijä Sorkkaeläin Orava Cavy (marsueläin) Majava Sikaeläin Nautaeläin Marsu Vesisika!instanceof Sika Virtahepo Sikanautaeläin

Levinneisyys Jamaika (rastafareja) vesisikoja http://upload.wikimedia.org/wikipedia/commons/9/9d/capybara-range.png

Pakkaukset Pieni Java-projekti: kaikki luokat kiltisti samassa hakemistossa, ei ongelmaa. Iso Java-projekti: luokkien määrän kasvaessa kovin suureksi yksi kansio ei enää riitä. Ongelma ihmiselle, ei tietokoneelle. Muista ihmisen tiedonkäsittelyn rajat, enintään 7±2 hahmotettavaa yksikköä kerrallaan tietoisessa tarkastelussa. Luokkakokonaisuus pysyy hallittavana jakamalla se osakokonaisuuksiin, pakkauksiin (engl. package). Yhdessä pakkauksessa yhteen asiaan liittyvät luokat. Toimintalogiikan malli omassa pakkauksessaan, käyttöliittymä omassaan, jne. Nämä voidaan puolestaan edelleen jakaa useaan erikoistuneeseen pakkaukseen. Käytännössä saman pakkauksen luokat sijoitetaan aina samaan hakemistoon.

Pakkausten nimeäminen ja nimihierarkiat java.awt.event javax.swing.border org.w3c.dom org.omg.corba.portable virallinen Java (by Sun Microsystems) järjestöt (W3C, OMG,...) fi.tkk.inf.studio1.turnaus.labyrintti Egoboosti- ja brändäysprefiksit. (Huomaa päinvastainen logiikka kuin www-palvelinten osoitteissa: maa organisaatio osasto jne.) + Asettavat ohjelmiston suurempaan kontekstiin, luovat tunnistettavuutta. - Syventävät (muutenkin jo syvää) hakemistohierarkiaa. Robottiturnaussoftan labyrinttien esittämiseen käytetyt luokat voisivat sijaita tällaisessa pakkauksessa. Käytännössäkin luokat sijaitsisivat tuollaisen hakemistopolun päässä, esimerkiksi: C:\Javaproggikset\fi\tkk\inf\studio1\turnaus\labyrintti\ Labyrinttiruutu.java

Pakkausten käyttö 1 Pakkaus, johon luokka sijoittuu, määritellään: 1. Avainsanalla package aivan luokan lähdekoodin alussa: package fi.tkk.inf.studio1.turnaus.labyrintti; import java.util.arraylist; public class Labyrinttiruutu { 2. Tallentamalla luokkatiedosto oikeaan paikkaan hakemistohierarkiassa. Pakkaus rajaa luokkien näkyvyyttä niin, että vain samaan pakkaukseen kuuluvat luokat nähdään suoraan muiden pakkausten luokat on importoitava kuten Javan valmiit luokatkin.

Pakkausten käyttö 2 Eclipsessä pakkausten käyttö on helppoa ja visuaalista. Uusia pakkauksia luodaan samasta valikosta kuin uusia luokkiakin. Oletuksena kaikille projekteille luodaan oletuspakkaus (default package), mutta Eclipse ei arvosta, jos käytät sitä. Luokkia voi myöhemmin siirtää pakkauksesta toiseen Refactor-valikon Move-toiminnolla. Tämä päivittää automaattisesti kaikki viittaukset kyseiseen luokkaan ja lisää tarvittavat importit. Komentoriviympäristössä pakkaukset tuovat hieman enemmän haastetta. Kääntäminen ja ajaminen vaativat nyt ensin ns. classpathin määrittelemisen. set CLASSPATH=path1;path2;path3 (Windows) setenv CLASSPATH path1:path2:path3 (Unix) Näissä path1 jne. ovat hakemistopolkuja, joista (ja joiden alta) luokkia etsitään. Usein riittää nykyiseen hakemistoon osoittava polku eli pelkkä piste. Se on suhteellinen polku, eli muuttuu valitun hakemiston mukaan. Lisäksi luokkia ajaessa täytyy kertoa, mistä pakkauksesta (määritellyn classpath-hakemiston alta) kyseinen luokka löytyy: esim. java fi.tkk.inf.studio1.turnaus.turnaus &

Säikeet ja Swing Swingissä on yhden säikeen sääntö : realisoituneita käyttöliittymäkomponentteja tulee käsitellä ainoastaan yhdestä säikeestä, Swingin tapahtumankäsittelijäsäikeestä (event dispatching thread). Tapahtumankäsittelijäsäie on siis se, joka suorittaa kuuntelijoiden sopivien metodien kutsumisen vastaavien tapahtumien yhteydessä sekä kaikkien Swingkomponenttien piirtämisen ruudulle. Realisoitunut tarkoittaa sitä, että komponentti on tehty näkyväksi ruudulla. Ylimmän tason säiliöille (kuten JFrame) tämän tekee jokin metodikutsuista setvisible(true), show() tai pack(). Alemman tason komponentit realisoituvat, kun ne lisätään näkyvään säiliöön tai ne sisältävä säiliö tulee näkyväksi. Toisin sanoen vielä näkymättömän käyttöliittymän alustus voi periaatteessa tapahtua missä säikeessä tahansa, näkyvien komponenttien tilan tutkiminen ja muuttaminen sen sijaan vain tapahtumankäsittelysäikeessä. Yleensä on tyylikkäintä rajata kaikki GUI-toiminta tuon säikeen vastuulle. Joskus raskaiden uusien käyttöliittymäosakokonaisuuksien alustus voidaan kuitenkin tehdä omassa säikeessään, jottei tapahtumankäsittely hidastu tarpeettomasti.

Entäs sit ku oikeesti tarviin Swingissä muitaki säikeitä? Vai tarviinks? Case 1: Ajasta riippuvat tapahtumat ja javax.swing.timer Usein haluamme Swing-ohjelmaan myös käyttäjän tekemisistä riippumatonta toimintaa, esimerkiksi tietyin aikavälein toistuvia tapahtumia. Tällaiseen oma säie olisi luonteva ratkaisu, mutta hankala, koska se ei saisi käsitellä GUIkomponentteja suoraan. Toimiva ratkaisu on käyttää Swingin Timer-luokkaa. Se siirtää vastuun ajastetuista tapahtumista suoraan tapahtumankäsittelijäsäikeelle, joka toteuttaa ne uusina ActionEvent-tapahtumina määrätylle kuuntelijalle. Vähän kuin tapahtuman käynnistykseen olisi olemassa oma nappi, jota joku kävisi klikkaamassa vaikkapa sekunnin välein.

Entäs sit ku oikeesti tarviin Swingissä muitaki säikeitä? Vai tarviinks? Case 2: Työläissäie ja SwingUtilities.invokeLater()-metodi Raskaita ja aikaavieviä työtehtäviä, kuten vaativaa laskentaa tai suurten oliokokonaisuuksien alustusta, ei kannata suorittaa tapahtumankäsittelysäikeessä, koska tämä näkyisi suoraan käyttäjälle vuorovaikutuksen hidastumisena. Nämä kannattaa delegoida erityisille työläissäikeille, jotka rouskuttelevat omaa urakkaansa huomaamattomasti taustalla. Usein työläissäikeenkin on tarpeen saada aikaan jotakin näkyvää, esimerkiksi ilmoittaa työnsä tuloksista käyttöliittymän kautta. Tätä se ei kuitenkaan saa tehdä suoraan, vaan työläissäikeen pitäisi jotenkin saada vihjattua tapahtumankäsittelysäikeelle, että tämän olisi aika tehdä jotakin. Ratkaisu tähän kommunikaatio-ongelmaan on SwingUtilities-luokan metodi invokelater(runnable r), joka ottaa parametrinaan jotakin suoritettavaa (siis olion, jolla on metodi run()) ja siirtää sen suoritettavaksi tapahtumankäsittelysäikeessä myöhemmin, käytännössä hyvinkin pian. run()-metodissa on tyypillisesti koodia, joka yhdistää työläissäikeen työn tulokset ja graafisten käyttöliittymäkomponenttien käsittelyn sopivalla tavalla.