Објектно орјентисано
програмирање
Владимир Филиповић
vladaf@matf.bg.ac.rs
Александар Картељ
kartelj@matf.bg.ac.rs
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 2 / 39
Дизајн програмског
језика Јава
Владимир Филиповић
vladaf@matf.bg.ac.rs
Александар Картељ
kartelj@matf.bg.ac.rs
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 3 / 39
Увод
Пре него што се креира апликација, аплет или
библиотека у Јави, важно је да се разуме како Јава ради.
У презентацији која следи упознајемо се са:
језикомЈава,
ограничењима језикаЈава
и Јава окружењем за извршавање.
Проучавамо и како се може постићи да Јава
програмски код буде вишеструко коришћен.
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 4 / 39
Јава је и компајлирана и интерпретирана
проучава се начин и превођења и интерпретирања Јаве,
те како тако дефинисани процеси превођења и интерпретације
утичуна брзину Јаве и на њену независност од платформи.
Јава се извршава коришћењем Јава виртуалне машине
проучава се дизајн Јава виртуалне машине (JVM),
какоона ради током извршавања Јава програма
и какото утиче на наше одлуке.
Такођеће бити речи и о сигурности коју обезбеђује JVM.
Јава користи Java API
Јава садржи скуп класа које су на располагању програмеру за коришћење -
њихов назив је Java API.
Проучава се начин коришћења Java API-jaу програмирању.
Особине језика Јава
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 5 / 39
Јава је језик који се преводи и интерпретира.
Јава
изворни
код
Јава
преводилац
Јава
објектни код
Јава интерпретатор
Јава виртуелна машина
Оперативни систем рачунара
Извршење Јава програма
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 6 / 39
Традиционални начин креирања извршног кода
превођењем изворног програма
Изворни код ИзвршниPowerPC
код
Извршни
SPARC
код
Преводилац ИзвршниPentium
код
Извршење Јава програма (2)
Преводилац
Преводилац
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 7 / 39
Креирање Јава извршног кода од изворног програма –
превођење и интерпретација
Јава
интерпретатор
Pentium
Јава
интерпретатор
SPARC
Јава
интерпретатор
PowerPC
Јава изворни
код
Јава
преводилац Јава бајт-код
Формирани бајт-
код је исти за све
платформе
Извршење Јава програма (3)
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 8 / 39
Дијаграм показује разлику између начина извршења
код традиционалних и код Јава апликација.
Извршење Јава програма (4)
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 9 / 39
Дакле, написани изворни Јава програм се прво преведе
коришћењем Јава компајлера javac у тзв. бајт-код.
Потом се преведени бајт-код извршава
уз помоћ Јава интерпретатора java.
Извршење Јава програма ( 5 )
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 10 / 39
Извршење Јава програма (6)
Превођење Јава кода
Интерпретирање бајт-кода
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 11 / 39
Креирани бајт-код јебинаран и архитектонски неутралан
(платформски неутралан).
Јава окружење за извршавањепостоји посебно за сваку
конкретну платформу и оно је надлежно за превођење бајт-кода
до извршногкода.
Јава изворни код и Јавабајт-код остаје исти без обзира на којој
се платформи извршава:
Такосе, на пример, Јавааплетможенаписатии компајлиратина UNIX
систему и потом убацититајаплету вебстрану.
Коришћењем Јаве се постиже да постоји једниствени изворни
Јава код, а да програм ради на различитим платформама –
“Write once, run everywhere”.
Извршење Јава програма ( 7 )
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 12 / 39
Зашто је комбинација компилације и интерпретације
позитивна особина?
Обезбеђује сигурност и стабилност:
Јаваокружење садржи елеменат назван повезивач (eng.linker),
којипроверава податке који долазе на Јава виртуелну машину
какоби се уверила да они не садржеделове
којиби могли оштетитидатотеке(сигурност)
или на други начин онеспособити рад система (робусност).
Ова комбинација компилације и интерпретирања
разрешава проблеме неуклапања верзија.
Извршење Јава програма ( 8 )
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 13 / 39
Веб стране са аплетима се обично учитавају и приказују дуже
од класичних (статичних).
То је зато што се:
заједносастраномсе на клијентскисистем довлачибајт-код;
потомсеријапроцедура проверавасигурностаплета, тј. његовуробусност.
Јавина преносивост, дакле, изазива губитак перформанси.
Губитак перформанси је смањен коришћењем Just-in-time
(срп. «у право време») или JIT компајлера.
JIT компајлер преводи Јаваметоде у машинскикод за
конкретну платформу на којој се користи.
JIT Јава компајлер
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 14 / 39
Јава виртуелна машина
Језгро Јаве јеJVM (eng. Java Virtual Machine).
JVM јевиртуални рачунар који постоји само у меморији.
JVM допушта да Јава програми буду извршавани
на разноврсним платформама (портабилност).
Да би Јава програми могли да раде на одређеној платформи,
JVM мора да буде имплементирана на тој платформи.
JVM јеврло мала када се имплементира у RAM-у:
Таква мала величина JVM омогућавада се Јавакористиу разноврсним
електронскимуређајима.
ЦеојезикЈавајеоригиналноразвијантакода се на уму има и кућна
електроника.
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 15 / 39
Архитектура рачунарског система
Јава виртуелна машина (2)
Архитектура JVM одсликава архитектуру
конкрeтног рачунарског система.
Пример асемблерског кода
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 16 / 39
Јава виртуелна машина ( 3 )
JVM извршава бајт-код. Пре тога, програм javac , тј. Јава
преводилац, процесира .java датотеке и резултујући бајт-код
чува у датотеци са екстензијом .class.
JVM чита ток бајт-кодова из .class датотеке као секвенцу
машинских инструкција.
Извршавање инструкција бајт-кода опонаша извршавање
машинских инструкција.
Пример бајт-кода
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 17 / 39
Јава виртуелна машина ( 3 )
Пример бајт-кода
Свака од инструкција ЈVM је слична асемблерској инструкцији: Састојисе од једнобајтног операционогкода(опкода), којипредстављаспецифичнуи препознатљивукоманду; Иод нула, једногили вишеоперанада (податакапотребних за комплетирањеинструкције).
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 18 / 39
Структура Јава виртуалне
машине
Јава виртуелна машина ( 4 )
Приликом свог рада, тј. приликом извршавања бајт-кода Јава апликације, JVM има интеракцију са: библиотекама Јава класа, библиотекама нативних (eng.native) метода, са нативним нитима и са реалним оперативним системом рачунара на ком се извршава JVM.
JVM садржи: систем за учитавање класа, подсистем за извршавање, област за податке приликом извршавања, сакупљач отпадака и Јава нити.
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 19 / 39
Меморија Јава виртуелне машине
Област за податке приликом извршавања се састоји од:
области за Јава методе,
простора -хип меморије(eng.heap),
стек меморије,
регистара
и стека за нативне методе.
Меморија код JVM:
Адресна дужина кода JVMје 32 бита,
па JVM може адресирати до 4Gb.
Стек, простор који се рециклира
и област за методе су смештени
у оквиру тих 4Gbадресибилне меморије.
Јава метод не може бити дужи од 32 Kb.
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 20 / 39
Сваки регистар код JVM је дужине 32 бита,
па може чувати једну 32-битну адресу.
JVM користи следеће регистре за управљање системским
стеком (*):
бројач (counter)
врх (optop)
оквир (frame)
променљиве (vars)
Тим који је развијао Јаву одлучио је да користи
само четири регистра због перформантности (**).
Позиви метода
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 21 / 39
Стек садржи податке релевантне за извршавање метода.
Стек ради по принципу «last-in, first-out», или LIFO што јеприродно за извршавање метода.
На врх стека показује регистар оптоп.
Регистар оквир показује где се метод извршава у меморији.
Регистар променљиве указује на прву променљиву на стеку.
Позиви метода (2)
Пример стека: C и Јава
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 22 / 39
Простор (енг. heap) је део меморије из кога се врши
инстанцирање и алокација објекта – примерка дате класе.
Кад год се алоцира меморија са оператором new, та меморија
долази из простора.
Окружење у ком се Јава програм извршава чува информације о
референцама на сваки објекат из простора и аутоматски
ослобађа објекте које више никоне реферише.
Оваоперација ослобађања простора зове се скупљање отпадака
(енг. garbage collection).
Скупљач отпадака ради као позадинска нит и врши
рашчишћавање током неактивности процесора.
Простор и скупљач отпадака
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 23 / 39
Разлог велике популарности језика Јава је, поредквалитета
њеног дизајна, постојањебогатог скуп алата,
као и скуп библиотека који јеорганизован у пакете.
Ови већ оформљениобјекти омогућавајубрз старт при раду са
Јавом, из два разлога:
програмерне мора
поновода развија
њиховуфункционалност
изворникод јесвима
доступан
Алати за Јава развој (JDK)
Елементи Јаве и JDK
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 24 / 39
Java API
Java Application Programming Interface, или Java API, јескуп класа које је развиоSun, за коришћење у језику Јава.
Java API је дизајниранда би се помогло програмеруу развоју сопствених класа, аплета и апликација.
Класе унутарJava API -ја су груписане у пакете, при чему сваки пакет може садржавати вишекласа и интерфејса.
Надаље, свака од класа може имативише особина (енг. properties), више поља (енг. fields) и/или метода.
Пример Јава пакета
Пун назив Јава класе представља
називе пакета (раздвојених тачком)
иза кога следи тачка, па име Јаве класе
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 25 / 39
Иако је могуће програмирати у Јави без великог знања API-ја, треба нагласити да свака новоразвијена класа зависи од бар једне класе из API-ја.
Надаље, при развоју све сложенијих програма, који раде са нискама, сокетима и графичким интерфејсом, постаје веома значајно познавање објеката које је Sun обезбедио.
Java API (2)
Пример програмирања
коришћењем Java API
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 26 / 39
Кратак преглед најзначајнијих пакета који долазе са Јавом:
Библиотеке за GUI као што су прозори, дијалози, дугмићи,
текстуална поља, итд.:
Abstract Window Toolkit (АWТ),
Swingи
Java FXкласе
Класе за мреже, URL-овe, клијент-серверске сокете.
Класе за различите типове улаза и излаза.
Класе за различите типове података, процесе и нити који
се извршавају, стрингове, итд.
Помоћне класе за датуме, колекције итд.
Класе за развој аплета.
Класе за манипулацију сликама.
Java API ( 3 )
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 27 / 39
Пакети представљају начин за организовање класа.
Пакет може садржавати класе и друге пакете, на сличан начин
као што директоријум садржи датотеке и друге директоријуме.
На пример, класе које припадају пакету АWТ, јава.аwт, су
смештене у поддиректоријуму АWТ директоријумаJAVA.
Java API ( 4 )
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 28 / 39
Java Core API
Централни (енг. core) API садржи пакете саобјектима за које се гарантује да су доступнибез обзирана Јава имплементацију:
java.lang Састоји се од класа које су централне за језик Јава. Он обезбеђује не само класе-омотаче за просте типове података, као што су Characteri Integer, већ и обраду грешака уз коришћење класа Throwablei Error Надаље, класеSystemи SecurityManagerомогућују програмеру контролу (до извесног нивоа) над Јава системом за извршавање.
java.io Стандардна улазно/излазна Јава библиотека. Овај пакет обезбеђује програмеру могућност креирања и рада са токовима(eng. streams) података. Подржан је рад са једноставним типовима као што је String и са сложеним типовима као што јеStreamTokenizer.
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 29 / 39
java.util
Садржи већи број корисних класа које нису могле бити уклопљене у друге
пакете.
Класе које омогућавају рад са датумима,
Класе које омогућавају структурисање података, као што су Stackи Vector.
Класе које омогућавају парсирање улазног тока података
java.net
Пакет java.net чини језик Јава мрежно заснованим језиком.
Он обезбеђује способност комуникације са удаљеним чворовима,
било преко сокета, било коришћењем URL-ова.
На пример, коришћењем овог пакета програмер може креирати своје
сопствене Telnet, Chat или FTP клијенте и/или сервере.
Java Core API (2)
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 30 / 39
java.awt
Назив пакета java.awt је означава скраћеницу за Abstract Window Toolkit
(АWТ).
АWТ садржи не само класе, као што је GridBagLayout, већ и неколико
конкретних интерактивних алата, као што су Buttonи TextField.
КласаGraphics обезбеђује богатство графичких могућности,
укључујући и могућност цртања разних облика и могућност приказа слика.
java.awt.image
Пакет java.awt.imageје блиско повезан са пакетом java.awt.
Овај пакет се састоји од алата који су дизајнирани
за руковање и манипулацију сликама које долазе кроз мрежу.
java.awt.peer
Пакет java.awt.peerјепакет саинтерфејсимакојислуже
каопосреднициизмеђуЈавакода и рачунарана коме се тајкод извршава.
Java Core API (3)
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 31 / 39
javax.swing
Swing је уведен како би се превазишли проблеми на које су наилазили
програмери који су користили АWТ за креирање GUI апликација.
Наиме, АWТ је сувише рано поверавао исцртавање прозора и контрола,
тако да је иста аpликација изгледала битно другачије на различитим
платформама.
Swing се ослања на АWТ и садржи класе као што су JButton и JTextField.
java.applet
Пакет java.appletје најмањи пакет у АPI-ју,
али је често коришћен због класе Appletкоја је дефинисана у њему.
Класа Appletсадржи много корисних метода
Информације о аплетовом окружењу се могу добити кроз интерфејс
AppletContext.
Java Core API (4)
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 32 / 39
Набројаћемо и неколико API-ја који се налазе ван централног
API -ја, а који се такође често користе:
Enterprise API (uključuje JDBC, Java IDL и Java RMI)
Commerce API (Java Wallet)
Server API
Media API
Java 2D
Java Media Framework
Java 3D
Security API
Beans API
Embedded API
Non-core Java API-ји
Однос разних Java API-ја
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 33 / 39
Java Enterprise API
Java Enterprise API Одржававезу премавеликим базамаподатакаи преманаслеђенимапликацијама (eng. legacy applications). КоришћењемовогАPI-јаразвијају се сложени дистрибуисаниклијент/сервер аплетии апликације у Јави.
Java Database Connectivity, или JDBC Стандардни интерфејс за приступ SQL базама података, који обезбеђује унифоман приступ за широк опсег релационих база података.
Приступ бази података преко JDBC-a
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 34 / 39
Java Enterprise API (2)
Java RMI омогућује позивање удаљених метода између чворова или клијентаи сервера у случајевима када се на оба крајапозива налазе апликацијеписане у језику Јава.
Илустрација Java RMI
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 35 / 39
Java Server API
Java Server API је проширив оквир (енг. framework)
Омогућује и олакшава развој
Јава-заснованих Интернет и Интранет сервера.
Овај API је неопходан програмерима који развијају Јава сервлете.
Илустрација рада веб сервера
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 36 / 39
Java Media API
Java Media API лако и флексибилно омогућује
програмеримаи корисницима да користе мултимедију.
Media Framework садржи сатове за синхронизацију и
медија плејереза приказ аудио, видео и MIDI-ja.
Java Security API
Java Security API је оквир за програмере који треба да
лако и поуздано укључе сигурносну функционалност у
аплете и апликације.
Ово укључује криптографију са дигиталнимпотписима,
енкрипцијуи аутентификацију.
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 37 / 39
Java Beans API
Java Beans API дефинише преносив скуп API-ja за
софтверске компоненте који јенезавистан од платформе.
Java Beans је скуп конвенција који омогућава униформан
пренос објеката и података између различитих платформи.
Java Embedded API
Java Embedded API описује како Java API може бити
коришћена за уметнуте уређаје (енг. embeded devices).
Ови уређаји су неспособни за подршку целог централног
Java API.
API укључује минималан ументнути API заснован на
java.lang, java.util, и деловима java.io.
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 38 / 39
Java Commerce API
Java Commerce API обезбеђује сигурну куповину и
финансијске трансакције на Интернет-у.
Иницијална компонента јеЈavaWallet– она дефинише и
имплементира функционалност на клијентскојстрани за
кредитне картице, дебитне картице, и трансакције са новцем.
Математички факултет {vladafvladaf@matf.bg.ac.,kartelj}@matf.bg.ac.rsrs 39 / 39