190 likes | 383 Views
JavaDoc – esimerkki. /** * Malliluokka, jossa esitellään JavaDoc:n toimintaa * @version 1.0 * @author Matti Meikäläinen */ public class TestApp { /** * Malli luokkamuuttujasta */ private int m_memberVariable; /** * Mallimetodi * @param name Otettava parametri
E N D
JavaDoc – esimerkki /** * Malliluokka, jossa esitellään JavaDoc:n toimintaa * @version 1.0 * @author Matti Meikäläinen */ public class TestApp { /** * Malli luokkamuuttujasta */ private int m_memberVariable; /** * Mallimetodi * @param name Otettava parametri * @return Merkkijono jonka metodi palauttaa */ public String testMethod(String name) { /* … */ } }
JavaDoc • Oletusarvoisesti JavaDoc dokumentoi vain public-näkyvyysalueeseen määritellyt attribuutit ja metodit • -private –komentoriviparametrilla se ottaa mukaan myös private ja protected-näkyvyysalueiden dokumentoinnin • Lisätietoa JavaDoc:sta löytyy verkosta: http://java.sun.com/j2se/javadoc/
Muita aihealueeseen kuuluvia asioita rekursio stattiset metodit ja attribuutit
Rekursio • Jos ohjelmassa on metodi, joka kutsuu sisällään itseään uudestaan, käytetään siitä nimitystä rekursiivinen metodi • Rekursiiviset metodit kutsuvat itseään eri parametreilla • Parametrien perusteella metodi kutsuu itseään tai mikäli ollaan päästy perustapaukseen ei kutsua enää suoriteta
Rekursio • Rekursiossa jokaisella kutsulla lähestytään aina jotakin perustapausta • Rekursio on perinteisissä proseduraalisissa ja olio-ohjelmointikielissä hidasta • Teoriassa kaikki rekursiiviset metodit voidaan purkaa auki iteratiivisiksi versioiksi • Rekursiota rajoittaa suurissa tapauksissa käytössä oleva muistin määrä
Rekursio – Fibonaccin luvut • Fibonaccin lukuja ovat: 0, 1, 1, 2, 3, 5, 8, 13, ... • Ensimmäinen luku on 0, toinen luku 1 ja siitä eteenpäin seuraava luku saadaan aina kahden edellisen summana • Fibonnaccin lukuja voidaan laskea rekursiivista metodia hyväksikäyttäen • Huomattavasti tehokkaampiakin menetelmiä on olemassa
2 fib(4) 1 1 fib(3) fib(2) 0 1 fib(2) fib(1) Rekursio – Fibonaccin luvut // Palauttaa n:nnen Fibonaccin luvun public int fib(int n) { if (n==1) return 0; else if (n==2) return 1; else return fib(n-1) + fib(n-2); } Esim: fib(4)
Staattiset metodit ja attribuutit • Yleensä luokan sisään kirjoitetut metodit käyttävät jotain olion attribuuttia • On olemassa kuitenkin myös metodeja, jotka eivät tarvitse olion attribuutteja tai kutsu toisia olion attribuutteja käyttäviä metodeja (esim. Math-luokan metodit) • Kyseiset metodit eivät näin ollen tarvitse olemassa olevaa oliota suoritukseensa • Tällaisia metodeja kutsutaan staattisiksi
Staattiset metodit ja attribuutit • Metodi määritellään staattiseksi static-määreellä: public static double sqrt(double num) • static-määreellä määriteltyä metodia voidaan kutsua luokan ulkopuolelta ilman olion luontia: double result = Math.sqrt(16); Luokan nimi, jossa metodi on määritelty
Staattiset metodit ja attribuutit • Attribuutteja voidaan määrittää myös staattisiksi. • Staattinen attribuutti on käytettävissä ilman olion luontia. • Staattista attribuuttia voi käyttää kuten normaaliakin luokan attribuuttia. • Staattinen attribuutti on sama joka paikassa (vrt. ei-staattiset attribuutit, jotka ovat yksilölliset jokaisella luodulla oliolla)
Staattiset metodit ja attribuutit • Staattiset metodit/attribuutit ovat käyttöalueeltaan rajatumpia kuin ei-staattiset • Hyvän ohjelmointitavan mukaista on määrittää metodi/attribuutti staattiseksi aina kun se on mahdollista • Käytännössä varsinkin staattisten metodien käyttö on harvinaista
Staattiset metodit ja attribuutit • Esimerkkejä: • main-metodin on aina oltava staattinen • Vakiot määritetään yleensä staattisina: private final static int NUM_COLS = 5; • Color-luokan määritellyt värit ovat staattisia public final static Color black = new Color(0,0,0); • Math-luokan kaikki metodit ja attribuutit ovat staattisia
Staattiset metodit ja attribuutit Luokan ulkopuolelta: TestApp.setValues(); int i = TestApp.A; i = TestApp.B; i = (new TestApp()).B; (new TestApp()).setValues(); (new TestApp()).setMemberValues(); public class TestApp { public static final int A = 1; public final int B = 2; private static int C = 3; private int D = 4; public TestApp() { } public static void setValues() { C = A; A = C; D = C; setMemberValues(); } public void setMemberValues() { C = A; D = C; setValues(); } } //OK //OK //Ei sallittu //OK //OK //OK // Sallittu, koska A ja C staattisia // Ei sallittu, koska A on vakio (final) // Ei sallittu, koska D ei staattinen // Ei sallittu, koska ollaan staat. metodissa // Sallittu // Sallittu, koska ei olla staattisessa metodissa // Sallittu
Tentti Tenttipäivä Harjoitushyvitykset Laskuharjoitustentti Tenttialue
Tentti • Lopputentti ke 27.11.2002 klo 12-16 salissa L23 • Uusintatentti 13.12.2002 klo 12-16 salissa L21 • Tentteihin ilmoittautuminen viikkoa ennen tenttiä • Tenttioikeus kun laskuharjoituksista on tehty vähintään 25 % (7 tehtävää)
Tentti • Jos suoritettuna on alle 25 % tehtävistä, tulee tehdä myös laskuharjoitustentti • Laskuharjoitustenttiin ilmoittautumiset myös viikkoa ennen sähköpostitse • Osoite tkeinone@cs.uku.fi • Tehdään lopputentin yhteydessä
Tentti • Tenttiin saa arvosanahyvityksiä harjoituksista: • 75 % - 100 % (19-25 teht.) +2 arvosanaa • 50 % - 75 % (13-18 teht.) +1 arvosana • 25 % - 50 % (7-12 teht.) ei hyvitystä • Tentti saatava ensin läpi ennen kuin hyvityksiä otetaan huomioon • Arvostelu T3-T4-T5-H6-H7-H8-H9-E10-E11-E12
Tenttialue • Rileyn kirjasta luvut 1-5, 7, 10, 12-14 • noin 380 sivua • Kysymykset luennoilla ja/tai harjoituksissa esillä olleista asioista • Kirjasta puuttuvia asioita: • JavaDoc • main-metodin käyttö • kääntäminen ja suoritus komentoriviltä • Vector-luokan käyttö • break ja continue toistorakenteissa • operaattorien lyhennykset (esim. i*=2)
Tentti • Tarkoituksena mitata kokonaisuuden hahmottamista, ei nippelitietoa • Mikäli tehtävissä tarvitsee käyttää jotain aLibrary:n tai J2SE:n API-luokkaa, on ko. luokan UML-kaavio tai lähdekoodi tehtävien mukana • Tentissä ei saa olla kirjaa mukana; kynä, kumi ja viivoitin riittää