• Koodi maht
  • Tutvustusnäited
  • Lihtne raamaken
  • Roheline raamaken
  • Liikuv raamaken
  • Tsükli abil liikumine
  • Värvide koostamine
  • Joonistamine
  • Joonistusharjutus
  • Tutvus Java keelega




    Download 223.75 Kb.
    Sana21.03.2017
    Hajmi223.75 Kb.

    Tutvus Java keelega


    Java ajalugu ulatub aastasse 1990, kui seda hakati firma Sun poolt välja töötama. Eesmärgiks oli luua vahend, mille abil saaksid töötada paljud uued erinevad protsessorid nii magnetofonides, telefoniaparaatides kui mujal. Seni tuli iga uue protsessoritüübi puhul luua tema jaoks uuesti peaaegu kõik programmid. Ainult vahel õnnestus teise protsessori programmi emuleerida. Et protsessoritel ning nende programmidel olid sageli sees vaid nendele spetsiifilised käsud, siis tekkis nende käskude ülekandmisel raskusi. Sooviti luua lihtne baitkood, mida oleks hõlbus üle kanda. Nii saaks üldotstarbelisi toiminguid (nagu näiteks kellaaja väljastamist) kasutada muutmata kujul kõikjal ning eraldi tuleks luua vaid masinaspetsiifilised käsud. Näiteks kerimine magnetofonil ning vee välja laskmine pesumasinal.

    Kuigi uut baitkoodi on võimalik kirjutada otse või kompileerida selle saamiseks kõrgkeeles kirjutatud programme, tehes vajalikud lihtsustused ja täiendused, otsustati luua omaette programmeerimiskeel. Et uus keel ei pea ühilduma eelnevatega, siis saab kõrvale jätta aja jooksul ebaotstarbekaks või veaohtlikuks osutunud kohad. Java on suure osa põhikonstruktsioone üle võtnud keelelt C, mistõttu selle keele oskajatele võivad Java programmilõigud esialgu tuttavamad tunduda.

    Ka näiteks Basicu või Perli programmi saab lasta tõlkida mitme operatsioonisüsteemi intepretaatoril, kuid Javast on nad vähemalt pikemate programmide korral aeglasemad. Programmeerija kirjutatud teksti tõlkimine masina käsujadaks on aeglasem korralikult optimeeritud baitkoodi tõlkimisest. Märgatava aja võtab intepretaatori käivitamine, samuti võib lihtsate käskude tõlkimine võtta rohkem aega kui nende täitmine. Samas aga toimuvad aeganõudvad operatsioonid sageli ajal, kui arvuti muidu nagunii kasutajapoolset teadet (näiteks klahvivajutust) ootaks. Viimistletud tervikoperatsioonid, mille teostamist kasutaja sageli ootama peab, näiteks akna avamine, võtavad Javas ainult natukene rohkem aega kui operatsioonisüsteemispetsiifilistes programmides. Lisaks on loodud vahend, mis käivitamise ajal kompileerib Java baitkoodi ümber masinkoodiks ning sel juhul töökiiruses enam tõlkimisest tingitud vahet tavaliselt ei ole.

    Suur osa Java programme aeglustavatest põhjustest tuleks muus keeles korralikult koostatavasse programmi nagunii sisse kirjutada. Java kompilaator paneb nad lihtsalt automaatselt sisse. Nii tuleb ka muidu kontrollida, et kasutaja sisestatud andmed sobiksid, et programmi kood on õigesti sisse loetud, et mittevajalikud andmed enam mälu ei raiskaks, et programm operatsioonisüsteemile liiga ei teeks. Muidu saab näiteks mälu vabastamise mõnikord välja jätta lootuses, et ka koos "surnud" andmetega ei ületata programmile eraldatud mälu mahtu, ning lastes programmil selle võrra kiiremini töötada, kuid Java kontrollib ikka üle, et kusagil midagi "ripakile" pole jäänud. Samuti vaadatakse igal massiivi poole pöördumisel üle, et vastava järjenumbriga element ikka massiivi kuulub.

    Nagu eespool kirjas, võttis Java suure osa põhikonstruktsioone üle keelelt C, jättes samas kasutamata vahendid, milleta läbi saab ja mis kirjutamise keerulisemaks või veaohtlikumaks teevad. Välja jäeti "null terminated string", mille vääral kasutamisel võis valedesse mälupiirkondadesse sattuda. Ka pole Javas viita mäluaadressile. Siin pole üldse standardvahenditega võimalik otse masina mäluga tegelda, mis välistab suures osas võimaluse masinat või teisi programme kahjustada. Osuti isendile aga annab paljus samad võimalused mis viit. Vaid mäluaadressi asemel on objekti number tabelis. Klassid on nii kirjetüüpide kui objektitüüpide eest. Meetodeid võib kasutaja sinna soovi korral kas lisada või mitte.

    Võrguprogrammeerimine pole Java eriomadus, kuid juba keele loomisel on arvestatud võimaluse ja vajadusega luua arvutivõrgus töötavaid programme. Selle keele abil saab luua nii serveri- kui kliendiprogramme. Saab luua näiteks www-serveri brauseritele HTML-lehekülgede saatmiseks kui ka mitme paralleelkasutatega andmebaasi, jututoa või üle võrgu mängitava mängu.

    Iseseisvalt arvutis jooksvad programmid suudavad kasutajale pakkuda pea samasuguseid võimalusi nagu igas muus keeles kirjutatud programmid. Vaid masinaomaste käskude puhul tuleb need mõnes muus keeles luua ning siis Java programmist käivitada. Tavakasutaja jaoks aga, kel pole tarvis kõvaketast formaatida ega masinas mälu ümber jagada, peaks Java võimalustest täiesti piisama.

    Rakendid on mõeldud käivitamiseks teise programmi (näiteks veebiseiluri) sees ning nendel on peal turvapiirangud. Rakendeid võib lasta sirvijal küllalt julgelt Internetist kohale laadida ja käivitada, ilma et peaks muretsema kohaliku masina võimaliku kahjustumise pärast.

    Kuna tegemist on suhteliselt uue programmeerimiskeelega, siis tema võimalusi täiendatakse pidevalt ja märgatavalt. Algselt 1995.a. paiku avaldatud versioonis oli kuus paketitäit klasse arvutamiseks, süsteemiga suhtlemiseks ja ekraanil kujutamiseks. Pideva täiendamise tõttu on ettevalmistatud võimaluste arv kümnekonna aastaga vähemalt kümnekordistunud andmebaasiühenduse, komponenttehnoloogia, turvavahendite ning laiendatud graafika- ja muusikavõimaluste abil, kuid keele kallal töötatakse edasi. Pidevalt kasvades ja arenedes on keelel muidugi oht paisuda suureks ja raskesti haaratavaks, nagu juhtus juhtivaks programmeerimiskeeleks pürginud PL/1-ga ning praegugi on Java keeles valmis meetodeid ligi kakskümmend tuhat. Kuid nii nagu igas keeles on mõnisada tuhat sõna ja hädapärased jutud suudame ajada vähem kui tuhande sõnaga, ei tasu ka programmeerimiskeele puhul lasta end heidutada suurtest sõnade (käskude) hulgast ning lihtsamate programmide juures on võimalik hakkama saada mõne klassi ning mõneteistkümne meetodiga. Kui üldpõhimõtted on selged, saab üksikuid käsklusi alati manuaalist juurde vaadata.

    Koodi maht

    Objektorienteeritud Java keeles peab kogu kirjutatav kood olema meetodis (ehk funktsioonis), mis omakorda kuulub mingi objektitüüpi ehk klassi koosseisu. Lihtsas programmis saab läbi ühe meetodi ning klassiga, kuid vähegi suuremas programmis on sageli otstarbekas iseseisvad osad eraldi kirjutada. Mõnikord see küll suurendab veidi töövaeva, kuid väiksemaid lõike on lihtsam kontrollida ning tulemus on töökindlam ja vajadusel kergemini täiendatav.

    Lihtsaimale java-programmile:
    public class Tervitus{

    public static void main(String argumendid[]){

    System.out.println("Tere");

    }

    }


    vastaks pascali-programm
    begin

    writeln('Tere');

    end.
    või Basicu/Pythoni
    print "Tere"

    Nagu näha, kulub alustamise ja lihtsa väljundi jaoks märgatavalt enam ruumi. Ka mõnes muus kohas võib java kood suhteliselt palju ruumi võtta. Lisaks sellele tundub kompilaator algul mitmes kohas tüütu tähenärijana, teatades kümnetest vigadest, mida ollakse sisse tippimise ajal teinud, kirjutades näiteks suure tähe asemele väikese või ajades muutuja deklareerimisel midagi segamini. Pascali programm oleks selle aja peale juba ammu tööle hakanud, kui Java juures tuleb alles trükivigadega maadelda. Juba pisut suuremate, nii paarileheküljeliste programmide juures annab tunda, et tähenärimisest on ka kasu. Liiatigi veel siis, kui tuleb hakata kokku panema ammuunustatud ning vastvalminud programmilõike.



    Tutvustusnäited

    Et arvuti käituks vastavalt kasutaja soovidele, tuleb talle anda korrektseid käsklusi. Arvutile käskluste andmiseks on loodud programmeerimiskeeled. Iga käsklus palub arvutil midagi teha. Kui meie näeme mõistlikult töötavat programmi, siis tegelikult täidab arvuti üksteise järele otstarbekalt kirjutatud käsklusi. Programmeerija tööks on käsud niimoodi kirja panna, et nende täitmise tulemusena arvuti kasutajale soovitut teeb.

    Java keel võimaldab kirjutada mahukaid (mitme tuhande leheküljelisi) programme. Käsud pannakse "kestadesse", et oleks võimalik pikas tekstis orienteeruda. Ka lühikesel programmil peab ümber olema vähemalt kaks kesta: meetod ja klass. Kui kasutatakse varem valmistatud klasse, tuleb mõnikord kirjeldada nende klasside asukoht, et nad üles leitaks. Järgnevalt mõned näiteprogrammid koos väikeste kirjeldustega. Kui mõni lause tundub võõrana, ärgu lugeja lasku end sellest suuremat häirida. Ülejäänud peatükkides püütakse kõigele lähemalt seletust anda.

    Lihtne raamaken

    Tutvustuseks väike programm, mis loob ekraanile pealkirjaribaga tühja akna. Esimene rida teatab, et klass Frame asub paketis java.awt. See klass suudab ekraanile tekitada pealkirjariba, nuppude ja servadega tühja akna. Kui klassi peaks vaja minema, teab arvuti seda sealt otsida. Rida public class Raamike teatab, et klassi nimi on Raamike. Samas kataloogis paiknevaid klasse saab eristada nime järgi. Loogeline sulg tähistab klassi algust ning klass lõpeb, kui selle sulg kinni läheb. Selles klassis on vaid üks meetod, nimega main, mis hakkab tööle iseseisva programmi käivitamisel. Kui klassis main-meetodit pole (näiteks klassis Frame), siis saab seda kasutada vaid mõne teise klassi kaudu. Meetodi sees olevaid käske hakkab arvuti järjestikku täitma. Esimese käsuga loome raami ning määrame talle pealkirjaks Esimene. Siis määrame suuruse ekraanipunktides ning lõpuks palume raam nähtavaks teha. Ongi kogu programm.




    import java.awt.Frame;

    public class Raamike{

    public static void main(String argumendid[]){

    Frame f=new Frame("Esimene");

    f.setSize(200, 200);

    f.setVisible(true);

    }

    }





    Roheline raamaken

    Kui on vaja ühest paketist sisse tuua mitu klassi, siis võib klasside nime asemele panna tärni. Piiritleja public (avalik) tähendab, et vastavat klassi (või meetodit) on võimalik kasutada ka väljastpoolt kataloogi. Nii saab vajadusel väikestest klassidest midagi suuremat kokku lappida. Käsk setBackground määrab raami tausta ning setLocation raami asukoha ekraanil.




    import java.awt.*;

    public class Raamike2{

    public static void main(String argumendid[]){

    Frame f=new Frame("Esimene");

    f.setSize(200, 200);

    f.setBackground(Color.green);

    f.setLocation(200, 100);

    f.setVisible(true);

    }

    }







    Liikuv raamaken


    Kui tahame raami ekraanil liigutada, siis tuleb tema asukohta mõne aja tagant vahetada, nii nagu filmis vahetuvad kaadrid. Et liikumine liialt kiire ei oleks, selleks tuleb vahepeal oodata. Ootamise käsuks on Thread.sleep ning sulgudes olev number näitab ootamise aega milli(ehk tuhandikes)sekundites. 1000 on siis parajasti terve sekund. Meetodi main sulgude järel on kirjas throws Exception, mis näitab, et oleme teadlikud eriolukorraohtliku meetodi Thread.sleep kasutamisest.
    import java.awt.*;

    public class Raamike3{

    public static void main(String argumendid[]) throws Exception{

    Asukoha muutus

    Frame f=new Frame("Esimene");

    f.setSize(200, 200);

    f.setVisible(true);

    Thread.sleep(1000);

    f.setLocation(200, 100);

    Thread.sleep(1000);

    f.setLocation(400, 100);

    }

    }



    Tsükli abil liikumine


    Kui sooviksime kõik kohad välja kirjutada, kus raam sujuva liikumise teel asub, läheks meie programm päris pikaks. Et kirjutusvaeva ning ka programmi mahtu vähendada, tuleb luua tsükkel. Tsüklit kasutatakse, kui tahetakse mõnda korraldust mitu korda anda. Siin on mitmel korral arvutatud raami uus asukoht ning raam seejärel sinna joonistatud. Raami asukoha väärtuste hoidmiseks võetakse kasutusele muutujad x ja y. Tsükli while sees olevaid käske korratakse seni kuni x-i väärtus on kolmesajast väiksem. Kui raam on jõudnud juba kolmesajanda ekraanipunktini, siis väljub programm tsüklist ning enam raam ei liigu.
    import java.awt.*;

    public class Raamike4{

    public static void main(String argumendid[]) throws Exception{

    int x=0, y=150;

    Liikuv raam

    Frame f=new Frame("Esimene");

    f.setSize(200, 200);

    f.setVisible(true);

    while(x<300){

    f.setLocation(x, y);

    Thread.sleep(100);

    x=x+5;


    }

    }

    }


    Värvide koostamine


    Tuntumaid värve saab ette anda konstandina (Color.red, Color.blue). Punasest, rohelisest ja sinisest osast kokku aga saab segada meelepärase värvi. Siin näites muudetakse raami tausta sinise värvi osa.
    import java.awt.*;

    public class Raamike5{

    public static void main(String argumendid[]) throws Exception{

    int punane=100, roheline=100, sinine=20;

    Muutuv värv

    Frame f=new Frame("Esimene");

    f.setSize(200, 200);

    f.setBackground(new Color(punane, roheline, sinine));

    f.setVisible(true);

    Thread.sleep(1000);

    while(sinine<255){

    f.setBackground(new Color(punane, roheline, sinine));

    Thread.sleep(50);

    sinine=sinine+4;

    }

    }

    }




    Joonistamine


    Klassi Graphics abil saab joonistada mitmesuguseid kujundeid. Jooni, ovaale, nelinurki ja muudki. Täpsemaid näiteid saab abiinfost (JDK API). Iseseisva programmi töö algab alati meetodist nimega main. paint-meetod kutsutakse välja, kui ekraanile on vaja joonistada. Ovaal joonistatakse ristküliku sisse ning neli koordinaati näitavadki selle ristküliku andmeid: esimesed kaks vasaku ülemise nurga asukohta, edasised laiust ja kõrgust. Kui viimased on võrdsed, siis on tegemist ringiga. Draw tähendab joone joonistamist, fill puhul värvitakse ka seest. setColor määrab värvi, millega edaspidi joonistatakse.


    import java.awt.*;

    import java.applet.Applet;


    public class Joonis2a extends Applet{

    public void paint(Graphics g){

    g.setColor(new Color(200, 100, 100));

    g.fillOval(10, 60, 30, 30);

    g.setColor(Color.black);

    g.drawOval(10, 60, 30, 30);

    g.drawLine(25, 90, 25, 150);

    g.drawLine(25, 100, 5, 110);

    g.drawLine(25, 100, 45, 110);

    g.drawLine(25, 150, 15, 230);

    g.drawLine(25, 160, 35, 230);

    }

    public static void main(String argumendid[]){



    Frame f=new Frame("Kriipsujuku");

    f.setSize(100, 250);

    f.add(new Joonis2a());

    f.setVisible(true);

    }

    }





    Veebilehel vastava programmi vaatamiseks tuleb koostada html-fail, mille sees märkida, kus ning kui suurena loodud graafilise sisuga klassi tuleks näidata.




    Joonistusharjutus









    Download 223.75 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa


    Tutvus Java keelega

    Download 223.75 Kb.