Transcript
Page 1: Objektno orijentisano programiranje

Objektno orijentisano programiranje

Java, 1. čas

Page 2: 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

● 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

Page 3: Objektno orijentisano programiranje

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!

Page 4: Objektno orijentisano programiranje

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 )

Page 5: Objektno orijentisano programiranje

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

Page 6: Objektno orijentisano programiranje

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

Page 7: Objektno orijentisano programiranje

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 platformiJava platforma se sastoji od 2 elementa:

Java Virtual Machine ( JVM ) - softverska implementacija hipotetičkog računaraJava 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.

Page 8: Objektno orijentisano programiranje

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.

Page 9: Objektno orijentisano programiranje

Instalacija JDK

● Potrebno je dodati putanju dojdk1.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

Page 10: Objektno orijentisano programiranje

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

Page 11: Objektno orijentisano programiranje

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

Page 12: Objektno orijentisano programiranje

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

Page 13: Objektno orijentisano programiranje

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 )

Page 14: Objektno orijentisano programiranje

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

Page 15: Objektno orijentisano programiranje

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

Page 16: Objektno orijentisano programiranje

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

Page 17: Objektno orijentisano programiranje

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.

Page 18: Objektno orijentisano programiranje

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

Page 19: Objektno orijentisano programiranje

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

Page 20: Objektno orijentisano programiranje

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

Page 21: Objektno orijentisano programiranje

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.

Page 22: Objektno orijentisano programiranje

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

Page 23: Objektno orijentisano programiranje

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 operacijejava.util – klasa Vector (uopšteni 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 podrška za neke Swing komponente

Page 24: Objektno orijentisano programiranje

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;

Page 25: Objektno orijentisano programiranje

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

Page 26: Objektno orijentisano programiranje

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)

Page 27: Objektno orijentisano programiranje

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 vrednostpublic – da je metod globalno dostupanstatic – dostupan i kada ne postoje objekti klasesa args.length možemo odrediti dužinu niza

Page 28: Objektno orijentisano programiranje

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

Page 29: Objektno orijentisano programiranje

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čencase-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!

Page 30: Objektno orijentisano programiranje

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 )

Page 31: Objektno orijentisano programiranje

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

Page 32: Objektno orijentisano programiranje

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 bitasvi su signed i čuvaju i pozitivne i negativne brojeveLiteral tipa long ima na kraju L ili lza heksadekadnu osnovu na početku 0x ili 0X

Page 33: Objektno orijentisano programiranje

Programi, podaci, promenljive i izračunavanja

● TIPOVI PODATAKA U POKRETNOM ZAREZU:

● float – 32 bita● double – 64 bitaLiterali 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;

Page 34: Objektno orijentisano programiranje

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!)

Page 35: Objektno orijentisano programiranje

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

Page 36: Objektno orijentisano programiranje

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 StringNEGO: String ime = ”jovan” ;

● String literali navode se između dvostrukih navodnika

Page 37: Objektno orijentisano programiranje

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;

Page 38: Objektno orijentisano programiranje

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

Page 39: Objektno orijentisano programiranje

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();


Recommended