java1

Embed Size (px)

DESCRIPTION

java

Citation preview

  • Objektno orijentisano programiranje

    Java, 1. as

  • Osnovni pojmoviObjektno orijentisano programiranje je zasnovano na konceptu objektaObjekti su strukture podataka sa pridruenim skupom procedura i funkcija koje se nazivaju metodi i slue za operisanje podacima koji ine objekatU pravim OO programskim jezicima, metodi su jedini nain operisanja podacima koji su sadrani u objektimaSvaki objekat predstavlja primerak (instancu) neke klase. Definisanjem klase definie se kako sadraj objekata te klase, tako i skup metoda

  • Osnovni pojmoviKlase se mogu formirati na osnovu postojeih postupkom nasleivanja, ime se omoguuje kreiranje hijerarhije klasaVANO: U objektno orijentisanoj terminologiji, sintaksa programskog jezika ne ukljuuje pozive metoda, ve slanje poruka objektima da je potrebno da izvre odreenu aktivnost!

  • Malo istorijeJezik Simula67 smatra se prvim programskim jezikom koji u sebi ima elemente OO programiranja, dok se programski jezik Smalltalk obino smatra prvim OO programskim jezikom ( sve programske strukture se svode na slanje poruka objektima )1986. C++, Bjarn StrostrupAT&T Bell Laboratorieshibrid klasinog proceduralnog i objektno orijentisanog programskog jezika ( izbegnuta je implementacija prostih tipova upotrebom klasa i zadrane su C-ovske kontrolne strukture )

  • Malo istorijeTokom devedesetih godina nagli razvoj komunikacionih sistema doprineo je poveanju upotrebe raunarskih mrea i Internet-a.Posledica je bila poveana potreba za alatom za razvoj klijent-server aplikacija koje bi radile na Internet-u. Dopunski zahtevi su bili standardizovanje alata tako da bude nezavisan od platforme i da radi na bilo kom raunarskom sistemuSun Microsystems je 1995. godine priveo kraju razvoj programskog jezika Java koji zadovoljava veinu novonastalih zahteva

  • JavaPo svom spoljnom izgledu, Java veoma podsea na C++, ijom modifikacijom je i nastala, ali u svojoj unutranjosti mnogo vie podsea na SmalltalkU najee oblasti primene objektno orijentisanih programskih jezika spadaju simulacije, grafika korisnika okruenja, komunikacije i multimedijalne aplikacijeJava je veoma dobro reenje za pisanje klijent aplikacija koje ne vre veliku obradu podataka, ve to preputaju serveru, kao i za pisanje manjih programa ( apleta ) koji ine elemente multimedijalnih prezentacija na Internet-u

  • Java okruenjepii jednom izvravaj bilo gdeJava programi mogu da rade na svakoj platformi koja podrava Javu zahvaljujui sledeem:Java program se ne izvrava direktno na raunaru, ve na standardizovanom okruenju, tzv. Java platformiJava platforma se sastoji od 2 elementa:Java Virtual Machine ( JVM ) - softverska implementacija hipotetikog raunaraJava Application Programming Interface ( Java API ) - skup softverskih komponenata koje obezbeuju pisanje interaktivnih aplikacijaJava kompajler prevodi Java izvorni kod u tzv. byte kod koji predstavlja mainske instrukcije za Java virtualnu mainu.Kada se izvrava Java program, program koji se zove Java interpreter tumai bytecode i zatim izvrava akcije koje bytecode specificira unutar Java VM.

  • Jo malo o bytecodePoto se Java program sastoji od bytecode, a ne od pravih mainskih instrukcija, on je potpuno nezavisan od hardvera na kome se izvrava. Svaki raunar koji ima implementirano Java okruenje izvrie taj program podjednako dobro kao i svaki drugi, a Java interpreter, koji se nalazi izmeu programa i fizike maine spreie neautorizovane akcije programa.

  • Instalacija JDKPotrebno je dodati putanju dojdk1.5.0_01\bin (taan naziv direktorijuma zavisi od verzije) direktorijuma u PATH environment promenljivuNa taj nain kompajler i interpreter se mogu pokretati bilo gde, bez da se navodi putanja do njihsrc.zip izvorni kod biblioteke klasa

  • Kompajliranje programaJava izvorni kod se uvek uva u fajlovima sa ekstenzijom .java U fajlu moe da bude i vie klasa, ali najvie jedna javna ( public ) klasa. Ime javne klase mora da bude jednako imenu fajla. Uobiajeno je da se svaka klasa stavlja u poseban fajl.Da bi se izvorni kod procesuirao kompilatorom koji dolazi sa JDK, u komandnom prozoru pree se u direktorijum koji sadri fajl sa izvornim kodom, npr. Zdravo.java i kuca komanda:javac Zdravo.javajavac je ime Java kompajlera

  • Hello world primerpublic class Zdravo {public static void main ( String[] args ) {System.out.println(Zdravo, svete!\n);}}Ako program ne sadri greke, kompajler generie bytecode program koji je ekvivalent source kodu. On se smeta u fajl sa istim imenom i ekstenzijom .class Prevod svake klase se smeta u zaseban fajl sa ekstenzijom .class i imenom istim kao ime klase

  • Izvravanje java aplikacijeDa bismo izvrili bytecode program iz .class fajla Java interpreterom u JDK, kucamo komandu:java ZdravoGreka je: java Zdravo.class !!!Interpreter oekuje ime klase, a ne ime fajlaJava je case-sensitive ( razlikuje mala i velika slova ) !

    Komentari: /* kao u C-u, u vie redova */ // pa do kraja reda, jednoredni

  • Java programiPostoje dve osnovne vrste programa koji se mogu pisati u Javi:Aplikacija to je samostalni program za reavanje jednog ili skupa problema, koji sadri metod main() i jednu ili vie klasaAplet to je dinamiki interaktivni program koji se moe izvravati u okviru WEB stranice, a posredstvom nekog od browser-a ( itaa )

  • Objektno orijentisano programiranje u JaviSve se predstavlja preko objekataObjekat je integralna celina podataka i procedura za rad sa njima U objektno orijentisanom programiranju, glavne obrade se zasnivaju na manipulisanju objektimaMetod je funkcija koja je sastavni deo objekta, tj. postupak kojim se realizuje poruka upuena objektuPoruka je skup informacija koje jedan objekat alje drugom. Sastoji se iz adrese objekta primaoca poruke i saoptenja tj. onog to treba da se uradi

  • Objektno orijentisano programiranje u JaviKlasa je skup objekata sa zajednikim svojstvima koji se ponaaju na isti nain. Ona definie ablon za kreiranje instanci, tj. konkretnih objekata klaseKlasa omoguuje da se zadaju opta svojstva, a njihovim konkretizovanjem dobijamo instancuPrimer:class Krug { klasa Krugint x, y;float r;}Krug k = new Krug(10,20,5); instanca klase KrugInstanca je konkretan objekat klase. Svi metodi definisani u klasi mogu se primeniti na instancu

  • Atributi klasePromenljive iz definicije klase nazivaju se atributi klase ili instancne promenljive ili lanovi klaseKlasom je definisan njihov tip, a za svaku instancu instancna promenljiva ima konkretnu vrednost.U prethodnom primeru,x, y i r su instancne promenljive koje u instanci k imaju redom vrednosti 10, 20 i 5Instancne promenljive mogu biti nekog od primitivnih, ali takoe i klasnih tipova

  • Objektno orijentisano programiranje u Javi, nasleivanjeKlasa B je potklasa klase A ako su svi primerci klase B istovremeno i primerci klase A. Za takvu klasu A kaemo da je natklasa klase B. Potklase nastaju dodavanjem novih svojstava ( metoda i podataka ) postojeoj klasi.Nasleivanje je mehanizam za kreiranje novih klasa iz postojeih. Nasleivanjem se formiraju relacije izmeu jedne i vie drugih klasa.U Javi imamo klasu Object koja je natklasa svih klasa i itav niz unapred kreiranih klasa koje moemo da koristimo u svojim aplikacijama.

  • Nasleivanje u JaviNain nasleivanja gde svaka potklasa ima samo jednu natklasu naziva se jednostruko nasleivanjePostoji i viestruko nasleivanje kada potklasa nasleuje dve ili vie klasaU Javi je mogue samo jednostruko nasleivanjePrimer: ivo bie

    ivotinja Biljka

    Sisar Ptica

  • EnkapsulacijaEnkapsulacija se odnosi na skrivanje atributa i metoda unutar objekta, to se postie navoenjem private kljune rei ispred njihovih deklaracija unutar definicije klase. Takvim atributima direktno mogu pristupati i menjati njihove vrednosti samo metodi koji pripadaju istoj klasi kao i posmatrani atributi.Dakle, jedini nain da se promeni vrednost private atributa jeste pozivom odgovarajueg metoda koji to radi

  • EnkapsulacijaEnkapsulacija je bitna za bezbednost i integritet objekataTakoe, zahvaljujui enkapsulaciji, mogue je sakriti implementaciju klase i menjati nain na koji je ta implementacija izvrena bez dodatnih izmena programa koji koriste klasu sve dok se metodi koji se mogu pozivati izvan klase mogu pozivati na isti nain kao i ranije

  • Javina biblioteka klasaJava je jezik sa hijerarhijskom stukturom klasa. Sve one su potklase klase Object, to je preuzeto iz Smalltalk-aPrua mogunosti rada sa interfejsima skup imenovanih metoda koji nisu nasleeni od natklase, niti definisani u samoj klasi, a koji odreuju neka dodatna svojstva klase. Ovo predstavlja zamenu za viestruko nasleivanje. Nain rada sa njima je slian nainu rada sa klasamaBiblioteka u Javi je kolekcija klasa i interfejsa.

  • Biblioteka i paketiBiblioteka se sastoji od fajlova, pri emu svaki fajl sadri definiciju odgovarajue klase. Klase su grupisane u tzv. pakete, a svaki paket je smeten u posebnom direktorijumu. Klasa iz paketa moe pristupati proizvoljnoj klasi iz istog paketa. Klase iz drugih paketa mogu, a ne moraju biti dostupne.Ime paketa bazirano je na putanji do direktorijuma u kome su smetene odgovarajue klase tog paketaI mi moemo sami praviti nae pakete koji e sadrati nae klase koje elimo ponovo da koristimo u razliitim kontekstima

  • Paketi Javine bibliotekeJava raspolae ogromnim brojem standardnih paketa, a najkorieniji su:java.lang osnovne karakteristike jezika, rad sa nizovima i stringovima. Klase iz ovog paketa su uvek dostupne naem programu automatski se ukljuuje u na program ( klase Integer, String, Math ... )java.io klase za ulazno/izlazne operacijejava.util klasa Vector (uopteni niz), Stack, Scanner, klase za rad sa datumima, matricama i druge klase raznih vrstajavax.swing jednostavne za upotrebu i fleksibilne komponente za pravljenje GUI-ja (tzv. Swing komponente)java.awt originalne GUI komponente i osnovna podrka za neke Swing komponente

  • Import deklaracijeKlase iz paketa java.lang se u programima mogu direktno koristitiDa bismo koristili klase iz ostalih paketa bez navoenja njihovog punog kvalifikovanog imena (koje ukljuuje ime paketa i ime klase), tj. samo navoenjem njihovog imena, koristimo import deklaraciju sa imenom paketa ili pojedinane klaseimport javax.swing.JApplet;import javax.swing.*; // bie ukljuene sve klase iz paketaPuno kvalifikovano ime:java.util.Vector a;

  • Gde je biblioteka?Standardne klase se ne pojavljuju kao fajlovi i direktorijumi na naem hard disku. One su spakovane u jedan komprimovani fajl rt.jar koji se nalazi u jre/lib direktorijumu koji se kreira prilikom instalacije JDK-a. Standardne klase koje na izvrni fajl zahteva direktno se uitavaju iz jre/lib

  • Java aplikacijeSvaka Java aplikacija sadri klasu koja definie metod main(). Ime te klase je argument koji prosleujemo Java interpreteru. main() metod mora imati fiksnu formu i ukoliko ona nije ispotovana, nee biti prepoznat od strane Java interpretera kao metod od koga kree izvravanjeNajjednostavnija Java aplikacija sastoji se samo od jedne klase koja ima samo jedan, main() metodPrototip main() metoda je uvek oblika:public static void main(String[] args)

  • Opet hello, world!public class PrviProgram{ public static void main(String[] args){System.out.println(Zdravo!); } }

    void znai da funkcija ne vraa nikakvu vrednostpublic da je metod globalno dostupanstatic dostupan i kada ne postoje objekti klasesa args.length moemo odrediti duinu niza

  • I dalje o Hello, world!System je ime standardne klase koja sadri objekte za rad sa standardnim U/I ureajima: tastatura za ulaz, monitor za izlaz. Sadrana je u paketu java.lang pa je u programima koristimo prosto navoenjem samo njenog imena System Objekat out predstavlja standardni izlazni tok i on je statiki lan klase System, to znai da on postoji ak i kada ne postoji nijedan objekat tipa System.System.out notacija: out je lan klase System

  • Jo samo malo println() metod pripada objektu out i on ispisuje string koji je zadat pod dvostrukim navodnicimaOvde vidimo i jedan od naina za pozivanje klasnog metoda.Ukoliko kompilacija ne proe, esti uzroci mogu biti:PATH nije ukljuen ili nije ispravno ukljuencase-sensitive: imena klase i fajla se moraju potpuno poklopiti, i u njima ne smeju postojati beline. , ; su bitni znaci i moraju biti na svojim mestima( ) { } i [ ] uvek dolaze u paru i ne prepliu se!

  • Java i UNICODEUNICODE je 16-bitni kodJava izvorni kod je u UNICODE karakterimaIdentifikatori, komentari, string literali mogu koristiti proizvoljne UNICODE karaktere koji predstavljaju slovaASCII odgovara skupu od prvih 128 karaktera UNICODE skupa.Java podrava Unicode 4.0 koji dozvoljava 32-bitne karaktere, tzv. surogate (Japanski, Koreanski, Kineski jezik )

  • Programi, podaci, promenljive i izraunavanjeEksplicitne vrednosti podataka koje se javljaju u programu nazivamo literalima, npr. 25 je celobrojni literal tipa int. Literal moe biti konstantna vrednost primitivnog tipa ili String objekat ( celobrojni, realni, logiki, znakovni ili stringovni literali)Identifikator moe biti proizvoljne duine, a moe poeti slovom, podvlakom (_) ili dolarom ($). Ostali karakteri mogu biti slova, cifre, _ ili $. Ne smeju se koristiti kljune rei

  • Programi, podaci, promenljive i izraunavanjaJedine stvari koje nisu objekti u Javi su promenljive koje odgovaraju nekom od primitivnih tipova: Numerike vrednosti ( celobrojne i realne - pokretni zarez)Promenljive tipa charLogike promenljive ( uzimaju vrednosti true i false )CELOBROJNI TIPOVI PODATAKA:byte 8 bitovashort 16 bitovaint 32 bitalong 64 bitasvi su signed i uvaju i pozitivne i negativne brojeveLiteral tipa long ima na kraju L ili lza heksadekadnu osnovu na poetku 0x ili 0X

  • Programi, podaci, promenljive i izraunavanjaTIPOVI PODATAKA U POKRETNOM ZAREZU:float 32 bitadouble 64 bitaLiterali su po default-u tipa double.Kada hoemo da naglasimo da je vrednost tipa float dodamo F ili f na krajKljuna re final je pandan const iz C-a i ona kae da se vrednost promenljive ne moe menjati. Dogovor je da se konstante piu velikim slovima: final double PI=3.14;

  • Programi, podaci, promenljive i izraunavanjaKastovanje:int a=3;int b=5;double c=1.5 + b/a;double d=1.5 + (double)b/a;Ne postoji automatska konverzija iz boolean u int i obrnuto ( postoji logiki tip! i njegovi jedini literali su true i false), znai :ne moe if ( a ) kao u C-u ve mora if ( a != 0 )Promenljiva se moe uvesti bilo gde u bloku, a oblast vaenja je od tog mesta pa do kraja bloka.if, else, switch, for, while, do, break, continue isto kao u C-u, goto ne postoji,(+ for za kolekcije!)

  • VANO!Neke specifinosti Jave:

    U Javi NE POSTOJI operator , ( zapeta ) kao ni operator za pokazivae, sizeof, typedef, struct, union, auto, extern, register

    funkcije sa promenljivim br. argumenata su uvedene od verzije J2SE 5.0, pre ih nije bilo

    Ako je promenljiva klasnog tipa, ona je UVEK pokaziva/referenca na objekat. OBAVEZNO! npr. Knjiga x; // x je POKAZIVA na objekat tipa Knjiga

    Nema tipova unsigned i signed, long int, long double

  • RAD SA STRINGOVIMAPostoje 2 klase: String i StringBuffer (java.lang)String optimizovana za konstantne stringoveStringBuffer promenljivi stringoviPostoji i varijanta sa nizom karaktera char[], ali ne postoji automatska konverzija nizstring char ime[]={j,o,v,a,n}; ime.lengthchar ime[]=jovan; // NE MOE!!! niz implicitni objekat klase StringNEGO: String ime = jovan ;

    String literali navode se izmeu dvostrukih navodnika

  • STRINGOVIU ove 2 klase imamo metode:length() - duina( npr. ime.length() )charAt(int) pristup karakteru ( ime.charAt(0) vraa prvi znak )spajanje 2 stringa operatorom + int x=4; String a=vrednost x-a je: + x ; ( moe jer postoji implicitna konverzija primitivnog tipa int u String )

    null kljuna re, slui da kaemo da je objekat bilo koje klase prazan ( nije definisan ) String b = null;

  • Stringovi, argumenti komandne linijepublic static void main ( String[] args ) niz stringova args.length duina nizaargs[0], args[1], to su ti stringovi C:\> java Hello a b c nisu argumenti | 0 1 2 argumenti

  • Scannerjava.util.Scanner klasaJednostavni skener koji parsira primitivne tipove I stringove koristei regularne izraze.Ulaz moe biti fajl ili tok, ukljuujui i standardni ulazni tok System.inUlaz se deli na tokene, koristei kao delimiter po default-u blanko.Dobijeni tokeni se mogu konvertovati u vrednosti razliitih tipova koristei razne next metode Scanner sc = new Scanner(System.in); int i=sc.nextInt();