Java – Meetodid, klassid ja objektid (Ülesanne 8)

Meetod

Meetoditega tegime juba tutvust numbrite õppimisel, kus nimetasime neid alamprogrammideks. Toome näite kuubi ruumala leidmisega.

Meetodi nimi pannakse kirja väikese algustähega ja võib nii mitu korda välja kutsuda kui soovi on. Millest meetod koosnes:

  • public– on nn. ligipääsu modifikaator. Võimaldab ligipääsu igast klassist. Lisaks sellele on olemas veel:
    • private– ligipääsetav ainult sama klassi põhiselt
    • protected– võimaldab liigipääse kõikidele klassidele samas paketis või kui nad laiendavad klassi, siis ka teise paketi klassidele.
    • default– vaikimisi, kui jätad nähtavuse deklareerimata. Sel juhul on ligipääs igast klassist, mis asub samas paketis.
  • static– lisame, kui soovime, et tegemist on klassi meetodiga. Muul juhul on tegemist instantsi meetodiga ehk kasutame siis kui loome objekte.
  • void– tagastustüüp. Kuna meetod midagi ise ei tagasta ja lihtsalt trükib tulemust, siis see näitabki seda. Kui meie meetod peaks väljastama näiteks arve või teksti, siis kasutaksime tagastustüübina vastavalt int, float, double, String jne.

Meetodi loomine Eclipse’s

Eclipse IDE võimaldab meil meetodite loomist kiirendada. Näiteks on meil loodud kood, mis genereerib 5 arvu. Selekteeri soovitud kood ja vali menüüst Refactor>Extract Method

Avanenud aknas lisa meetodi nimi, saad valida seaded ja näed eelvaadet.

Ja kui oled OK vajutanud, siis luuakse meetod ja kutsutakse see ka välja.

Teadmata hulk atribuute

Me saame meetodile lisada argumente kui palju soovime. Aga kui samatüübilisi argumente on rohkem kui mõni, siis on hea mõte kasutada massiivi. Näiteks on meil vaja liita kõik etteantud arvud, sel juhul kasutame argumendina int... arvud

Ja kuna me kasutasime argumendina massiivi, siis elemendid saame sealt kätte for-tsükli abil.

Parameetrite ületäituvus (overload)

Reeglina üritad hoida samas klassis meetodite nimed erinevad. Kuid Java lubab seda teha, kui hoiad meetodite argumentide arvu erineva ja/või muudad andmetüüpide järjekorda. Ja seda kutsutakse siis parameetrite ületäituvuseks (või ülelaadimiseks; overload).

Teeme lihtsa tervituse meetodi, mille väljakutsumine sõltub, kuidas antakse argumendid.

Klass

Ühel hetkel saab koodi järjest rohkem ja rohkem ning järge pidada on üha keerulisem. Paremaks koodi haldamiseks võimaldab Java meil luua klasse. Ehk meil on võimalik grupeerida meetodid sarnastesse gruppidesse. See, mida ja kui palju sa teise klassi viid on programmeerija enda teha. Tekitan nüüd kaks faili. Esimeses failis on main meetod, mis vastutab kogu koodi käivitamise eest. Teise faili aga lisan erinevad pindala arvutamise meetodid.

Klassi nimed hakkavad reeglina suure algustähega ning klassi nimi ja faili nimi on täpselt ühesugused. Ja selleks, et ma saaks teise klassi meetoditele ligi, määran ligipääsuks public.

Pindalad.java

Ja nüüd kui soovin sellest klassist saada mõnda meetodit, siis kasutan punkti süntaksit. Näiteks: s = Pindalad.roopkylikS(alus, korgus);. Põhiprogrammis, siis tunnen huvi, mida kasutaja tahab leida ning vastavalt sellele kutsun Pindala klassist soovitud meetodi välja.

Klassi nime muutmine

Nagu eelpool mainisin, et klassi ja faili nimi peavad ühtima. Kui aga soovid seda muuta, siis käsitsi on seda päris tüütu teha. Kui Eclipse’s vastava klassi ära selekteerid ja valid menüüst Refactor>Rename…

Avanenud aknas saad lisada klassile uue nime, mis muudab ära ka kõik loodud seosed.

Objekti loomine ja kasutamine

Kasutasime meetodite puhul märksõna static, mis tähendab, et tegemist on klassi meetodiga ja ei sõltu konkreetsest isendist. Sama on ka klassi muutujatega, kui kasutame sama static märksõna. Kui ära jätta sama märksõna, siis nimetatakse muutujaid ja meetodeid vastavalt isendimuutujaks (field, instance variable) ning isendimeetodiks (instance method). See tähendab, et need on seotud konkreetse objektiga (object, instance). Objekti loomine toimub märksõnaga new.

Toome “päriselulise” näite ufode põhjal. Koondame kõik ufode omadused ja tegevused ühte klassi, seega tekitame faili uue klassiga Ufo.class

Edasi tahame luua teda iseloomustavad parameetrid. Näiteks mis on ta nimi, vanus, sugu, värvus jne. Sel juhul paneme kirja isendimuutujad. Aga me ei anna neile väärtust, sest me ei tea seda veel, aga antud parameetrid on kõikidel ufonautidel meie arust olemas.

Ja mida ta teha oskab – näiteks oskab end tutvustada.

Ufo loomiseks on meil nüüd vajalik klass olemas. Kutsume selle põhiprogrammis välja luues uue objekti. Objekti andmetüübiks on sama klassi nimi. Edasi määrame loodud objektile nime ja vanuse ning laseme ennast tutvustada.

Antud klassist saame nüüd luua nii palju isendeid (objekte) kui palju soovime.

Ehk siis kui uuesti läbi korrata, siis

  • klass – on nagu mall või ühine reegel, mille järgi objekte luuakse
  • isendimuutujad – ehk väljad, mis kirjeldavad antud objekti
  • isendimeetodid – ehk konkreetse objekti tegevused

Konstruktor

Konstruktor (constructor) on kood, mis käivitatakse vaikimisi hetkel kui uus objekt luuakse. Näeb välja nagu meetod kuid puudub tagastustüüp ja kannab sama nime mis klass. Kuna see luuakse objekti loomise ajal, siis on sellega võimalik edasi anda mingid parameetrid.

Võtame näiteks sama Ufo klassi. Loome konstruktori, kus saame kohe lisada ufonaudi nime ja vanuse.

Seega põhiprogrammis saame nüüd selle välja kutsuda palju mugavamalt.

Kuna Ufo klassi isendimuutujad on public ligipääsuga, siis hetkel oleks võimalik tyyp1.nimi = "uus nimi" abil nime muuta.

Konstruktorite ülelaadimine

Ka konstruktorid võimaldavad ülelaadimist. Ehk kui me muudame parameetrite tüüpe või arvu. Näiteks kui ufonaudi objekti loomisel ei lisata nime ja vanus, siis l

Ülesanne 8.1

  • Pane tööle antud konspektis klass Pindalad.java
  • Loo uus klass, kus sinu klassimeetodid lasevad arvutada ruumalasid. Tekita loogika, et kui kolmandat atribuuti ei ole vaja, siis seda ei küsita.
  • Ära unusta kommenteerimist (nimi, aeg ja olulisemad sõlmed)

Ülesanne 8.2

  • Loo klass, mis jäljendab mingit eset, nähtust, elukat vms
  • Antud asja kirjelda vähemalt kolme omadusega ja kolme tegevusega (näiteks küsib mingit omadust, lubab lisada mingit omadust, teostab mingit arvutust jne)
  • Kasuta konstruktorit
  • Loo näitena kaks objekti
  • Kommenteeri!

Attachments4

Viimased postitused

Meist

metshein.com on pakkunud juba üle kümne aasta tasuta eestikeelseid infotehnoloogiaga seotud kursusi. Sama kurssi püütakse järgida ka edaspidi. Eesmärk muuta arvutiõpe võimalikult lihtsaks!

metshein.com: parim eestikeelne koolitusportaal

Autorist ja kontakt: kliki siia

Kontrolli tunnistust

Tööribale