1 / 39

Objektno orijentisano programiranje

Java, 1. čas. Objektno orijentisano programiranje. 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

doyle
Télécharger la présentation

Objektno orijentisano programiranje

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java, 1. čas Objektno orijentisano programiranje

  2. Osnovni pojmovi • Objektno orijentisano programiranje je zasnovano na konceptu objekta • Objektisu 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 1995. 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ženjepiš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 .classPrevod 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 atributiklase 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 importdeklaraciju 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. 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; Programi, podaci, promenljive i izračunavanja

  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 | 0 1 2 ↑ ↑ ↑ 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();

More Related