|
1 | 1 | ---
|
2 |
| -path: '/osa-6/1-luokka-ja-oliometodit' |
3 |
| -title: 'Luokka- ja oliometodit: määre static' |
| 2 | +path: '/osa-4/5-luokka-ja-oliometodit' |
| 3 | +title: 'Luokka- ja oliometodit (static ja ei-static)' |
4 | 4 | hidden: false
|
5 | 5 | ---
|
6 | 6 |
|
| 7 | +# Luokka- ja oliometodit: määre static |
| 8 | + |
7 | 9 | <text-box variant='learningObjectives' name='Oppimistavoitteet'>
|
8 | 10 |
|
9 | 11 | - Tunnet käsitteet luokka- ja oliometodi.
|
@@ -321,169 +323,3 @@ Kokeile tämän jälkeen metodin käyttöä luokassa `Ohjelma`. Luokassa `MaPu`
|
321 | 323 |
|
322 | 324 | </programming-exercise>
|
323 | 325 |
|
324 |
| - |
325 |
| - |
326 |
| -<programming-exercise name='Kirjaston tietojärjestelmä (4 osaa)' tmcname='osa06-Osa06_02.KirjastonTietojarjestelma'> |
327 |
| - |
328 |
| -*Kumpulan tiedekirjasto tarvitsee uuden järjestelmän kirjojen hallintaan. Tässä tehtävässä hahmotellaan ongelma-alueen tietosisältöä ja toteutetaan prototyyppi, joka mahdollistaa kirjan haun nimen, julkaisijan tai julkaisuvuoden perusteella.* |
329 |
| - |
330 |
| -Rakennetaan järjestelmä osista, tässä toteutetaan oleelliset luokat eli `Kirja` ja `Kirjasto`. Luokka `Kirja` sisältää kirjaan liittyvät tiedot, luokka `Kirjasto` tarjoaa erilaisia hakutoiminnallisuuksia kirjoihin liittyen. |
331 |
| - |
332 |
| - |
333 |
| -<h2>Kirja</h2> |
334 |
| - |
335 |
| -Luodaan ensiksi luokka Kirja. Kirjalla on oliomuuttujina `nimeke`, eli kirjan nimi, `julkaisija`, eli kirjan julkaisija, ja `julkaisuvuosi` eli vuosi jolloin kirja on julkaistu. Kaksi ensimmäistä muuttujaa on merkkijonotyyppisiä, viimeisin on kokonaisluku. Oletamme tässä että kirjalla on aina vain yksi kirjoittaja. |
336 |
| - |
337 |
| -Toteuta luokka `Kirja`. Kirjalla tulee olla myös konstruktori `public Kirja(String nimeke, String julkaisija, int julkaisuvuosi)` sekä metodit `public String nimeke()`, `public String julkaisija()`, `public int julkaisuvuosi()` ja `public String toString()`. Arvannet mitä metodien tulee tehdä, alla esimerkki. |
338 |
| - |
339 |
| -Testaa luokan toimintaa: |
340 |
| - |
341 |
| -```java |
342 |
| -Kirja cheese = new Kirja("Cheese Problems Solved", "Woodhead Publishing", 2007); |
343 |
| -System.out.println(cheese.nimeke()); |
344 |
| -System.out.println(cheese.julkaisija()); |
345 |
| -System.out.println(cheese.julkaisuvuosi()); |
346 |
| - |
347 |
| -System.out.println(cheese); |
348 |
| -``` |
349 |
| - |
350 |
| -<sample-output> |
351 |
| - |
352 |
| -Cheese Problems Solved |
353 |
| -Woodhead Publishing |
354 |
| -2007 |
355 |
| -Cheese Problems Solved, Woodhead Publishing, 2007 |
356 |
| - |
357 |
| -</sample-output> |
358 |
| - |
359 |
| - |
360 |
| -<h2>Kirjasto</h2> |
361 |
| - |
362 |
| -Kirjaston tehtävä on antaa käyttäjälle mahdollisuus kirjojen lisäämiseen ja niiden hakemiseen. Luo luokka `Kirjasto`, jolla on konstruktori `public Kirjasto()` ja metodit `public void lisaaKirja(Kirja uusiKirja)` ja `public void tulostaKirjat()`. |
363 |
| - |
364 |
| - |
365 |
| -```java |
366 |
| -Kirjasto kirjasto = new Kirjasto(); |
367 |
| - |
368 |
| -Kirja cheese = new Kirja("Cheese Problems Solved", "Woodhead Publishing", 2007); |
369 |
| -kirjasto.lisaaKirja(cheese); |
370 |
| - |
371 |
| -Kirja nhl = new Kirja("NHL Hockey", "Stanley Kupp", 1952); |
372 |
| -kirjasto.lisaaKirja(nhl); |
373 |
| - |
374 |
| -kirjasto.lisaaKirja(new Kirja("Battle Axes", "Tom A. Hawk", 1851)); |
375 |
| - |
376 |
| -kirjasto.tulostaKirjat(); |
377 |
| -``` |
378 |
| - |
379 |
| -<sample-output> |
380 |
| - |
381 |
| -Cheese Problems Solved, Woodhead Publishing, 2007 |
382 |
| -NHL Hockey, Stanley Kupp, 1952 |
383 |
| -Battle Axes, Tom A. Hawk, 1851 |
384 |
| - |
385 |
| -</sample-output> |
386 |
| - |
387 |
| - |
388 |
| -<h2>Hakutoiminnallisuus</h2> |
389 |
| - |
390 |
| -Kirjastosta tulee pystyä etsimään kirjoja nimekkeiden ja julkaisijoiden perusteella. Lisää kirjastolle metodit `public ArrayList<Kirja> haeKirjaNimekkeella(String nimeke)`, `public ArrayList<Kirja> haeKirjaJulkaisijalla(String julkaisija)` ja `public ArrayList<Kirja> haeKirjaJulkaisuvuodella(int julkaisuvuosi)`. Metodit palauttavat listan kirjoista, joissa on haluttu nimeke, julkaisija tai julkaisuvuosi. |
391 |
| - |
392 |
| -Voit halutessasi hyödyntää seuraavaa runkoa metodin tekemiseen. |
393 |
| - |
394 |
| -```java |
395 |
| -public class Kirjasto { |
396 |
| - // ... |
397 |
| - |
398 |
| - public ArrayList<Kirja> haeKirjaNimekkeella(String nimeke) { |
399 |
| - ArrayList<Kirja> loydetyt = new ArrayList<>(); |
400 |
| - |
401 |
| - // käy läpi kaikki kirjat ja lisää ne joilla haetun kaltainen nimeke listalle loydetyt |
402 |
| - |
403 |
| - return loydetyt; |
404 |
| - } |
405 |
| -} |
406 |
| -``` |
407 |
| - |
408 |
| -Huom! Kun haet teet hakua merkkijonon avulla, älä tee tarkkaa hakua (metodi `equals`) vaan käytä `String`-luokan metodia `contains`. Huomaat todennäköisesti myös että sinulla on ns. copy-paste -koodia `Kirjasto`-luokan koodissa. Yritä päästä siitä eroon! |
409 |
| - |
410 |
| -```java |
411 |
| -Kirjasto kirjasto = new Kirjasto(); |
412 |
| - |
413 |
| -kirjasto.lisaaKirja(new Kirja("Cheese Problems Solved", "Woodhead Publishing", 2007)); |
414 |
| -kirjasto.lisaaKirja(new Kirja("The Stinky Cheese Man and Other Fairly Stupid Tales", "Penguin Group", 1992)); |
415 |
| -kirjasto.lisaaKirja(new Kirja("NHL Hockey", "Stanley Kupp", 1952)); |
416 |
| -kirjasto.lisaaKirja(new Kirja("Battle Axes", "Tom A. Hawk", 1851)); |
417 |
| - |
418 |
| -for (Kirja kirja: kirjasto.haeKirjaNimekkeella("Cheese")) { |
419 |
| - System.out.println(kirja); |
420 |
| -} |
421 |
| - |
422 |
| -System.out.println("---"); |
423 |
| - |
424 |
| -for (Kirja kirja: kirjasto.haeKirjaJulkaisijalla("Pong Group")) { |
425 |
| - System.out.println(kirja); |
426 |
| -} |
427 |
| - |
428 |
| -System.out.println("---"); |
429 |
| - |
430 |
| -for (Kirja kirja: kirjasto.haeKirjaJulkaisuvuodella(1851)) { |
431 |
| - System.out.println(kirja); |
432 |
| -} |
433 |
| -``` |
434 |
| - |
435 |
| -<sample-output> |
436 |
| -Cheese Problems Solved, Woodhead Publishing, 2007 |
437 |
| -The Stinky Cheese Man and Other Fairly Stupid Tales, Penguin Group, 1992 |
438 |
| ---- |
439 |
| ---- |
440 |
| -Battle Axes, Tom A. Hawk, 1851 |
441 |
| -</sample-output> |
442 |
| - |
443 |
| - |
444 |
| -<h2>Paranneltu hakutoiminnallisuus</h2> |
445 |
| - |
446 |
| - |
447 |
| -Hakutoiminnallisuutemme on jo hyvä, mutta se ei ymmärrä isojen ja pienten kirjainten eroa. Yllä olleessa esimerkissä haku nimekkeellä `"cheese"` ei olisi tuottanut yhtäkään tulosta. Myös toinen esimerkki, jossa oli ylimääräisiä välilyöntejä, ei näyttänyt haluttua tulosta. Haluamme että nimekkeiden ja julkaisijoiden nimillä haettaessa ei välitetä merkkien koosta, ja että käyttäjä voi syöttää ylimääräisiä välilyöntejä kirjan nimen alkuun tai loppuun (meidän ei tarvitse välittää sanojen välillä olevista tyhjistä!). Toteutetaan pieni apukirjasto `StringUtils` merkkijonojen vertailuun. |
448 |
| - |
449 |
| -Luo luokka `StringUtils`, ja lisää sille staattinen metodi `public static boolean sisaltaa(String sana, String haettava)`, joka tarkistaa sisältääkö merkkijono `sana` merkkijonon `haettava`. Jos jommankumman merkkijonon arvo on *null*, metodin tulee palauttaa arvo `false`. Metodin tarjoaman vertailun tulee olla välittämättä merkin koosta. |
450 |
| - |
451 |
| -Vinkki! Voit luoda uuden merkkijonon, joka sisältää vanhan merkkijonon kirjaimet isoksi muunnettuna `String`-luokan metodilla `toUpperCase()`. Kun sekä sana että haettava on kirjoitettu isoilla merkeillä, voi vertailun toteuttaa suoraviivaisesti metodilla `contains`. |
452 |
| - |
453 |
| -Lisää metodille `sisaltaa` myös toiminnallisuus, joka poistaa merkkijonojen `sana` ja `haettava` alusta ja lopusta ylimääräiset välilyönnit. Käytä tähän `String`-luokan metodia `trim`, esim. `trimmattu = trimmattava.trim()`. |
454 |
| - |
455 |
| -Kun olet saanut metodin valmiiksi, käytä sitä `Kirjasto`-luokassa. Alla esimerkki: |
456 |
| - |
457 |
| -```java |
458 |
| -if (StringUtils.sisaltaa(kirja.nimeke(), nimeke)) { |
459 |
| - // kirja löytyi! |
460 |
| -} |
461 |
| -``` |
462 |
| - |
463 |
| -```java |
464 |
| -Kirjasto kirjasto = new Kirjasto(); |
465 |
| - |
466 |
| -kirjasto.lisaaKirja(new Kirja("Cheese Problems Solved", "Woodhead Publishing", 2007)); |
467 |
| -kirjasto.lisaaKirja(new Kirja("The Stinky Cheese Man and Other Fairly Stupid Tales", "Penguin Group", 1992)); |
468 |
| -kirjasto.lisaaKirja(new Kirja("NHL Hockey", "Stanley Kupp", 1952)); |
469 |
| -kirjasto.lisaaKirja(new Kirja("Battle Axes", "Tom A. Hawk", 1851)); |
470 |
| - |
471 |
| -for (Kirja kirja: kirjasto.haeKirjaNimekkeella("CHEESE")) { |
472 |
| - System.out.println(kirja); |
473 |
| -} |
474 |
| - |
475 |
| -System.out.println("---"); |
476 |
| -for (Kirja kirja: kirjasto.haeKirjaJulkaisijalla("PENGUIN ")) { |
477 |
| - System.out.println(kirja); |
478 |
| -} |
479 |
| -``` |
480 |
| - |
481 |
| -<sample-output> |
482 |
| -Cheese Problems Solved, Woodhead Publishing, 2007 |
483 |
| -The Stinky Cheese Man and Other Fairly Stupid Tales, Penguin Group, 1992 |
484 |
| ---- |
485 |
| -The Stinky Cheese Man and Other Fairly Stupid Tales, Penguin Group, 1992 |
486 |
| -</sample-output> |
487 |
| - |
488 |
| -</programming-exercise> |
489 |
| - |
0 commit comments