Presentation is loading. Please wait.

Presentation is loading. Please wait.

Objektno orijentisano programiranje

Similar presentations


Presentation on theme: "Objektno orijentisano programiranje"— Presentation transcript:

1 Objektno orijentisano programiranje
Java, 1. čas

2 Osnovni pojmovi Objektno orijentisano programiranje je zasnovano na konceptu objekta Objekti su strukture podataka sa pridruženim skupom procedura i funkcija koje se nazivaju metodi i služe za operisanje podacima koji čine objekat U pravim OO programskim jezicima, metodi su jedini način operisanja podacima koji su sadržani u objektima Svaki objekat predstavlja primerak (instancu) neke klase. Definisanjem klase definiše se kako sadržaj objekata te klase, tako i skup metoda

3 Osnovni pojmovi Klase se mogu formirati na osnovu postojećih postupkom nasleđivanja, čime se omogućuje kreiranje hijerarhije klasa VAŽNO: U objektno orijentisanoj terminologiji, sintaksa programskog jezika ne uključuje pozive metoda, već slanje poruka objektima da je potrebno da izvrše određenu aktivnost!

4 Malo istorije Jezik Simula67 smatra se prvim programskim jezikom koji u sebi ima elemente OO programiranja, dok se programski jezik Smalltalk obično smatra prvim OO programskim jezikom ( sve programske strukture se svode na slanje poruka objektima ) 1986. C++, Bjarn Strostrup AT&T Bell Laboratories hibrid klasičnog proceduralnog i objektno orijentisanog programskog jezika ( izbegnuta je implementacija prostih tipova upotrebom klasa i zadržane su C-ovske kontrolne strukture )

5 Malo istorije Tokom devedesetih godina nagli razvoj komunikacionih sistema doprineo je povećanju upotrebe računarskih mreža i Internet-a. Posledica je bila povećana 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 računarskom sistemu Sun Microsystems je godine priveo kraju razvoj programskog jezika Java koji zadovoljava većinu novonastalih zahteva

6 Java Po svom spoljnom izgledu, Java veoma podseća na C++, čijom modifikacijom je i nastala, ali u svojoj unutrašnjosti mnogo više podseća na Smalltalk U najčešće oblasti primene objektno orijentisanih programskih jezika spadaju simulacije, grafička korisnička okruženja, komunikacije i multimedijalne aplikacije Java je veoma dobro rešenje za pisanje klijent aplikacija koje ne vrše veliku obradu podataka, već to prepuštaju serveru, kao i za pisanje manjih programa ( apleta ) koji čine elemente multimedijalnih prezentacija na Internet-u

7 Java okruženje piši jednom – izvršavaj bilo gde
Java programi mogu da rade na svakoj platformi koja podržava Javu zahvaljujući sledećem: Java program se ne izvršava direktno na računaru, već na standardizovanom okruženju, tzv. Java platformi Java platforma se sastoji od 2 elementa: Java Virtual Machine ( JVM ) - softverska implementacija hipotetičkog računara Java Application Programming Interface ( Java API ) - skup softverskih komponenata koje obezbeđuju pisanje interaktivnih aplikacija Java kompajler prevodi Java izvorni kod u tzv. byte kod koji predstavlja mašinske instrukcije za Java virtualnu mašinu. Kada se izvršava Java program, program koji se zove Java interpreter tumači bytecode i zatim izvršava akcije koje bytecode specificira unutar Java VM.

8 Još malo o bytecode Pošto se Java program sastoji od bytecode, a ne od pravih mašinskih instrukcija, on je potpuno nezavisan od hardvera na kome se izvršava. Svaki računar koji ima implementirano Java okruženje izvršiće taj program podjednako dobro kao i svaki drugi, a Java interpreter, koji se nalazi između programa i fizičke mašine sprečiće neautorizovane akcije programa.

9 Instalacija JDK Potrebno je dodati putanju do
jdk1.5.0_01\bin (tačan naziv direktorijuma zavisi od verzije) direktorijuma u PATH environment promenljivu Na taj način kompajler i interpreter se mogu pokretati bilo gde, bez da se navodi putanja do njih src.zip izvorni kod biblioteke klasa

10 Kompajliranje programa
Java izvorni kod se uvek čuva u fajlovima sa ekstenzijom .java U fajlu može da bude i više klasa, ali najviše jedna javna ( public ) klasa. Ime javne klase mora da bude jednako imenu fajla. Uobičajeno je da se svaka klasa stavlja u poseban fajl. Da bi se izvorni kod procesuirao kompilatorom koji dolazi sa JDK, u komandnom prozoru pređe se u direktorijum koji sadrži fajl sa izvornim kodom, npr. Zdravo.java i kuca komanda: javac Zdravo.java javac je ime Java kompajlera

11 Hello world primer public class Zdravo {
public static void main ( String[] args ) { System.out.println(”Zdravo, svete!\n”); } Ako program ne sadrži greške, kompajler generiše bytecode program koji je ekvivalent source kodu. On se smešta u fajl sa istim imenom i ekstenzijom .class Prevod svake klase se smešta u zaseban fajl sa ekstenzijom .class i imenom istim kao ime klase

12 Izvršavanje java aplikacije
Da bismo izvršili bytecode program iz .class fajla Java interpreterom u JDK, kucamo komandu: java Zdravo Greška je: java Zdravo.class !!! Interpreter očekuje ime klase, a ne ime fajla Java je case-sensitive ( razlikuje mala i velika slova ) ! Komentari: /* kao u C-u, u više redova */ // pa do kraja reda, jednoredni

13 Java programi Postoje dve osnovne vrste programa koji se mogu pisati u Javi: Aplikacija – to je samostalni program za rešavanje jednog ili skupa problema, koji sadrži metod main() i jednu ili više klasa Aplet – to je dinamički interaktivni program koji se može izvršavati u okviru WEB stranice, a posredstvom nekog od browser-a ( čitača )

14 Objektno orijentisano programiranje u Javi
Sve se predstavlja preko objekata Objekat je integralna celina podataka i procedura za rad sa njima U objektno orijentisanom programiranju, glavne obrade se zasnivaju na manipulisanju objektima Metod je funkcija koja je sastavni deo objekta, tj. postupak kojim se realizuje poruka upućena objektu Poruka je skup informacija koje jedan objekat šalje drugom. Sastoji se iz adrese objekta primaoca poruke i saopštenja tj. onog što treba da se uradi

15 Objektno orijentisano programiranje u Javi
Klasa je skup objekata sa zajedničkim svojstvima koji se ponašaju na isti način. Ona definiše šablon za kreiranje instanci, tj. konkretnih objekata klase Klasa omogućuje da se zadaju opšta svojstva, a njihovim konkretizovanjem dobijamo instancu Primer: class Krug { ← klasa Krug int x, y; float r; } Krug k = new Krug(10,20,5); ← instanca klase Krug Instanca je konkretan objekat klase. Svi metodi definisani u klasi mogu se primeniti na instancu

16 Atributi klase Promenljive iz definicije klase nazivaju se atributi klase ili instancne promenljive ili članovi klase Klasom 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 5 Instancne promenljive mogu biti nekog od primitivnih, ali takođe i klasnih tipova

17 Objektno orijentisano programiranje u Javi, nasleđivanje
Klasa B je potklasa klase A ako su svi primerci klase B istovremeno i primerci klase A. Za takvu klasu A kažemo da je natklasa klase B. Potklase nastaju dodavanjem novih svojstava ( metoda i podataka ) postojećoj klasi. Nasleđivanje je mehanizam za kreiranje novih klasa iz postojećih. Nasleđivanjem se formiraju relacije između jedne i više drugih klasa. U Javi imamo klasu Object koja je natklasa svih klasa i čitav niz unapred kreiranih klasa koje možemo da koristimo u svojim aplikacijama.

18 Nasleđivanje u Javi Način nasleđivanja gde svaka potklasa ima samo jednu natklasu naziva se jednostruko nasleđivanje Postoji i višestruko nasleđivanje kada potklasa nasleđuje dve ili više klasa U Javi je moguće samo jednostruko nasleđivanje Primer: Živo biće Životinja Biljka Sisar Ptica

19 Enkapsulacija Enkapsulacija se odnosi na skrivanje atributa i metoda unutar objekta, što se postiže navođenjem private ključne reči 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 način da se promeni vrednost private atributa jeste pozivom odgovarajućeg metoda koji to radi

20 Enkapsulacija Enkapsulacija je bitna za bezbednost i integritet objekata Takođe, zahvaljujući enkapsulaciji, moguće je sakriti implementaciju klase i menjati način na koji je ta implementacija izvršena bez dodatnih izmena programa koji koriste klasu sve dok se metodi koji se mogu pozivati izvan klase mogu pozivati na isti način kao i ranije

21 Javina biblioteka klasa
Java je jezik sa hijerarhijskom stukturom klasa. Sve one su potklase klase Object, što je preuzeto iz Smalltalk-a Pruža mogućnosti rada sa interfejsima – skup imenovanih metoda koji nisu nasleđeni od natklase, niti definisani u samoj klasi, a koji određuju neka dodatna svojstva klase. Ovo predstavlja zamenu za višestruko nasleđivanje. Način rada sa njima je sličan načinu rada sa klasama Biblioteka u Javi je kolekcija klasa i interfejsa.

22 Biblioteka i paketi Biblioteka se sastoji od fajlova, pri čemu svaki fajl sadrži definiciju odgovarajuće klase. Klase su grupisane u tzv. pakete, a svaki paket je smešten u posebnom direktorijumu. Klasa iz paketa može 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 smeštene odgovarajuće klase tog paketa I mi možemo sami praviti naše pakete koji će sadržati naše klase koje želimo ponovo da koristimo u različitim kontekstima

23 Paketi Javine biblioteke
Java raspolaže ogromnim brojem standardnih paketa, a najkorišćeniji su: java.lang – osnovne karakteristike jezika, rad sa nizovima i stringovima. Klase iz ovog paketa su uvek dostupne našem programu – automatski se uključuje u naš program ( klase Integer, String, Math ... ) java.io – klase za ulazno/izlazne operacije java.util – klasa Vector (uopšteni niz), Stack, Scanner, klase za rad sa datumima, matricama i druge klase raznih vrsta javax.swing – jednostavne za upotrebu i fleksibilne komponente za pravljenje GUI-ja (tzv. Swing komponente) java.awt – originalne GUI komponente i osnovna podrška za neke Swing komponente

24 Import deklaracije Klase iz paketa java.lang se u programima mogu direktno koristiti Da bismo koristili klase iz ostalih paketa bez navođenja njihovog punog kvalifikovanog imena (koje uključuje ime paketa i ime klase), tj. samo navođenjem njihovog imena, koristimo import deklaraciju sa imenom paketa ili pojedinačne klase import javax.swing.JApplet; import javax.swing.*; // biće uključene sve klase iz paketa Puno kvalifikovano ime: java.util.Vector a;

25 Gde je biblioteka? Standardne klase se ne pojavljuju kao fajlovi i direktorijumi na našem 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š izvršni fajl zahteva direktno se učitavaju iz jre/lib

26 Java aplikacije Svaka Java aplikacija sadrži klasu koja definiše metod main(). Ime te klase je argument koji prosleđujemo Java interpreteru. main() metod mora imati fiksnu formu i ukoliko ona nije ispoštovana, neće biti prepoznat od strane Java interpretera kao metod od koga kreće izvršavanje Najjednostavnija Java aplikacija sastoji se samo od jedne klase koja ima samo jedan, main() metod Prototip main() metoda je uvek oblika: public static void main(String[] args)

27 Opet hello, world! public class PrviProgram{
public static void main(String[] args){ System.out.println(”Zdravo!”); } void – znači da funkcija ne vraća nikakvu vrednost public – da je metod globalno dostupan static – dostupan i kada ne postoje objekti klase sa args.length možemo odrediti dužinu niza

28 I dalje o Hello, world! System je ime standardne klase koja sadrži objekte za rad sa standardnim U/I uređajima: tastatura za ulaz, monitor za izlaz. Sadržana je u paketu java.lang pa je u programima koristimo prosto navođenjem samo njenog imena System Objekat out predstavlja standardni izlazni tok i on je statički član klase System, što znači da on postoji čak i kada ne postoji nijedan objekat tipa System. System.out Þ notacija: out je član klase System

29 Još samo malo  println() metod pripada objektu out i on ispisuje string koji je zadat pod dvostrukim navodnicima Ovde vidimo i jedan od načina za pozivanje klasnog metoda <ime_objekta>.<ime_metoda> Ukoliko kompilacija ne prođe, česti uzroci mogu biti: PATH nije uključen ili nije ispravno uključen case-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 prepliću se!

30 Java i UNICODE UNICODE je 16-bitni kod
Java izvorni kod je u UNICODE karakterima Identifikatori, komentari, string literali mogu koristiti proizvoljne UNICODE karaktere koji predstavljaju slova ASCII odgovara skupu od prvih 128 karaktera UNICODE skupa. Java podržava Unicode 4.0 koji dozvoljava 32-bitne karaktere, tzv. surogate (Japanski, Koreanski, Kineski jezik )

31 Programi, podaci, promenljive i izračunavanje
Eksplicitne vrednosti podataka koje se javljaju u programu nazivamo literalima, npr. 25 je celobrojni literal tipa int. Literal može biti konstantna vrednost primitivnog tipa ili String objekat ( celobrojni, realni, logički, znakovni ili stringovni literali) Identifikator može biti proizvoljne dužine, a može početi slovom, podvlakom (_) ili dolarom ($). Ostali karakteri mogu biti slova, cifre, _ ili $. Ne smeju se koristiti ključne reči

32 Programi, podaci, promenljive i izračunavanja
Jedine stvari koje nisu objekti u Javi su promenljive koje odgovaraju nekom od primitivnih tipova: Numeričke vrednosti ( celobrojne i realne - pokretni zarez) Promenljive tipa char Logičke promenljive ( uzimaju vrednosti true i false ) CELOBROJNI TIPOVI PODATAKA: byte – 8 bitova short – 16 bitova int – 32 bita long – 64 bita svi su signed i čuvaju i pozitivne i negativne brojeve Literal tipa long ima na kraju L ili l za heksadekadnu osnovu na početku 0x ili 0X

33 Programi, podaci, promenljive i izračunavanja
TIPOVI PODATAKA U POKRETNOM ZAREZU: float – 32 bita double – 64 bita Literali su po default-u tipa double. Kada hoćemo da naglasimo da je vrednost tipa float dodamo F ili f na kraj Ključna reč final je pandan const iz C-a i ona ”kaže” da se vrednost promenljive ne može menjati. Dogovor je da se konstante pišu velikim slovima: final double PI=3.14;

34 Programi, podaci, promenljive i izračunavanja
Kastovanje: 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 logički tip! i njegovi jedini literali su true i false), znači : ne može if ( a ) kao u C-u već mora if ( a != 0 ) Promenljiva se može uvesti bilo gde u bloku, a oblast važenja 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!)

35 VAŽNO! Neke specifičnosti Jave:
U Javi NE POSTOJI operator , ( zapeta ) kao ni operator za pokazivače, 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

36 RAD SA STRINGOVIMA Postoje 2 klase: String i StringBuffer (java.lang)
String – optimizovana za konstantne stringove StringBuffer – promenljivi stringovi Postoji i varijanta sa nizom karaktera char[], ali ne postoji automatska konverzija niz→string char ime[]={‘j’,’o’,’v’,’a’,’n’}; ime.length char ime[]=”jovan”; // NE MOŽE!!! ↑ niz ↑ implicitni objekat klase String NEGO: String ime = ”jovan” ; String literali navode se između dvostrukih navodnika

37 STRINGOVI U ove 2 klase imamo metode:
length() - dužina ( npr. ime.length() ) charAt(int) – pristup karakteru ( ime.charAt(0) – vraća prvi znak ) spajanje 2 stringa operatorom + int x=4; String a=”vrednost x-a je: ” + x ; ( može jer postoji implicitna konverzija primitivnog tipa int u String ) null – ključna reč, služi da kažemo da je objekat bilo koje klase prazan ( nije definisan ) String b = null;

38 Stringovi, argumenti komandne linije
public static void main ( String[] args ) ↑ niz stringova args.length dužina niza args[0], args[1], … to su ti stringovi C:\> java Hello a b c nisu argumenti | ↑ ↑ ↑ argumenti

39 Scanner java.util.Scanner klasa
Jednostavni skener koji parsira primitivne tipove I stringove koristeći regularne izraze. Ulaz može biti fajl ili tok, uključujući i standardni ulazni tok System.in Ulaz se deli na tokene, koristeći kao delimiter po default-u blanko. Dobijeni tokeni se mogu konvertovati u vrednosti različitih tipova koristeći razne next metode Scanner sc = new Scanner(System.in); int i=sc.nextInt();


Download ppt "Objektno orijentisano programiranje"

Similar presentations


Ads by Google