објектно-оријентисани програмски језик From Wikipedia, the free encyclopedia
(транскр. Џава или Јава) је објектно-оријентисани програмски језик, који су почетком 1990-их развили Џејмс Гозлинг и (данас ).
Изговара се | Џава или Јава |
---|---|
Модел | структурирани, објектно-оријентисани |
Појавио се | 23. мај 1995.[1] |
Аутор(и) | Џејмс Гозлинг |
Дизајнер(и) | |
Актуелна верзија | |
Систем типова | статички, јаки, сигурни, номинални |
Имплементације | многе |
Утицаји | |
Утицао на | |
Оперативни системи | вишеплатформски језик |
Лиценца | ГНУ-ова општа јавна лиценца / |
Веб-сајт |
Многи концепти Јаве су засновани на језику Оберон, Никлауса Вирта, творца Паскала, Модуле и других језика, и Ханспетера Месенбека. Избацили су концепт модула и увели пакете какве данас знамо, који се ослањају на фајл систем и увели формално концепт класа из објектно-оријентисане парадигме. Осим тога, језик има синтаксу сличну језицима и , али је много строжи при превођењу, дизајниран тако да буде независан од платформе, и са поједностављеним управљањем меморијом. Претпоставља се да је ово урађено због популарности језика , али и због једноставности неких структура. Прва верзија је званично објављена 1995. године.
Јава је, уз Котлин, званично подржан језик за израду мобилних апликација за Андроид уређаје.[2]
Програмски језик Јава треба да буде:
James Gosling и Patrick Naughton, група инжињера компаније Sun, су иницирали језички пројекат Јава у јуну 1991. Језик је назван Храст (енгл. ), и био је намењен за програмирање кућних електронских уређаја (телевизора, видео рекордера и сл.). Име пројекта Храст је касније промењено у Јава, по бренду Јава кафе (енгл. ), која је добила име по истоименом острву Јава, тако да лого језика Јава приказује чашу вруће кафе.[3] Постоји још једна верзија порекла имена језика, која се односи на алузију на апарат за кафу као пример кућног уређаја, за који је програмски језик првобитно креиран.[4] Гослинг је Јава дизајнирао са истом синтаксом као у C/C++ како би системски и апликативни програмери лакше научили језик.
Sun Microsystems је прву јавну имплементацију објавио као Јава 1.0 1996. године. Обећавао је Write Once, Run Anywhere (WORA), обезбеђујући извршавање кода на популарним платформама без утрошка времена. Прилично безбедан и са сигурносним подешавањима, дозвољавао је ограничења приступа мрежи и датотекама. Главни веб прегледачи убрзо су уградили могућност покретања Јава аплета на веб страницама и Јава је брзо постала популарна. Артур ван Хоф је поново написао преводилац за Јава 1.0 у Јави како би се строго придржавао спецификације језика Јава 1.0. Са појавом Јава 2 (првобитно објављен као Ј2SЕ 1.2 у децембру 1998. - 1999), нове верзије су имале вишеструке конфигурације изграђене за различите типове платформи. Ј2ЕЕ је укључивао технологије и API за пословне апликације које се обично извршавају у сервер окружењу, док Ј2МЕ садржи API оптимизован за мобилне апликације. Десктоп верзија је преименована у Ј2SЕ. 2006. године, у маркетиншке сврхе, Sun је преименовао нове верзије Ј2 у Јаvа ЕЕ, Јаvа МЕ и Јаvа SЕ.
Године 1997. Sun Microsystems обратио се ISO/IEC JTC 1 уреду за стандардизацију, а касније Ecma International како би формализовао Јаву, али се убрзо повукао из процеса. Јава остаје de facto стандард, који се контролише кроз процесе Јава заједнице. У једном тренутку, Sun је већину својих Јава имплементација учинио доступним без наплате, упркос лиценцираном статусу софтвера. Sun је стварао приход од Јаве продајом лиценци за специјализоване производе као што је Java Enterprise System.
Дана 13. новембра 2006, Sun је издавао већи део своје Јава виртуелне машине (JVM) као бесплатни и open-source софтвер (FOSS), под условима наведеним у GNU General Public Licence (GPL). 8. маја 2007., Sun је завршио поступак, стављајући сав свој JVM основни код доступан као free software/open source дистрибуцију, осим малог дела кода на који Sun није имао ауторска права.
Sun-ов потпредседник Рич Грин рекао је да је у погледу Јаве Sun имао идеалну улогу еванђелисте. Након што је компанија Oracle Corporation преузела Sun Microsystems у 2009–10, Oracle се описао као управитељ Јава технологије са великом посвећеношћу подстицању учешћа и транспарентности заједнице. То није спречило Oracle да поднесе тужбу против Google-а убрзо након тога због употребе Јаве унутар Android SDK-а (погледајте одељак о Android-у). Јава софтвер се извршава на свему, од лаптопа до центара података, играчких конзола до научних супер рачунара. 2. априла 2010. James Gosling поднео је оставку у компанији Oracle.
У јануару 2016. Oracle је објавио да ће за Јава run-time окружења произведена из JDK 9 прекинути додатак прегледача.
У стварању Јава језика ослањало се на пет основних циљева:
Од марта 2019. подржана је Јава 8; Јава 8 и 11 као верзије за дугорочну подршку (LTS). Главне издања Јава верзија, заједно са датумима њиховог објављивања:
Јава платформа, тј. Јава окружење у ком се програм извршава, дизајнирана је тако да што мање зависи од специфичних карактеристика конкретног рачунарског система.
Јава се извршава коришћењем Јава виртуелне машине -ЈVМ (енгл. )[6] - језгро Јаве, апстрактна машина која постоји само у меморији.
Јава је језик који се преводи и интерпретира. Јава изворни код (*.java фајл) након компајлирања, компајлером javac, се преводи у изворни код бајткод (*.class фајл). Формирани бајткод је исти за све архитектуре рачунара и представља инструкције за Јава виртуелну машину. Бајткод у Јава виртуелној машини, јава интерпретатором - јаva, се дешифрује и интерпретира у извршни код, погодан за извршавање на рачунару, одговарајућем хардверу.
У зависности од ЈVМ, за исти изворни код можемо добити различите извршне кодове, за различите платформе.
Јава изворни код и бајткод остају исти без обзира на којој се платформи извршава програм -“Write once, run everywhere”.[7]
Јавина преносивост, међутим, изазива губитак перформанси.
То је зато што се тек приликом интерпретирања бајткод преводи у машински за конкретну платформу. Ово може бити проблем ако се исти код више пута интерпретирана истој платформи.
Губитак перформанси је смањен коришћењем Just-in-time (срп. ) или JIT компајлера. JIT компајлер преводи Јава методе у машински код за конкретну платформу на којој се користи.
Уклањање непотребних објеката из меморије обавља . Овај процес ради независно од покренутих програма и самостално одлучује које објекте ће уклонити из меморије. Осим уклањања сувишних објеката он врши дефрагментацију меморије. Његовим кориштењем се програмер ослобађа посла који се односи на ослобађање меморије кроз програмски код. На овај начин се не мора водити рачуна о деструкторима већ се њихов посао изводи аутоматски. је могуће покренути и ручно.
// Ако се класа зове Pozdrav, име фајла мора бити Pozdrav.java
public class Pozdrav {
// Главној методи се предаје низ параметара унетих са командне линије
public static void main(String[] args) {
System.out.println("Здраво свете!");
}
}
Идентификатор служи за идентификовање неке конструкције у Јави(нпр. променљивих, класа, метода, итд). Идентификатор мора почети словом, знаком за долар или цртом за подвлачење, док у преосталом делу идентификатора могу да се појаве и цифре. Пошто у Јави постоји разлика између великих и малих слова, 'Sunce' и 'sunce' су два различита идентификатора.
Резервисане речи су идентификатори који имају специјалну намену у језику Јава и не могу се користити за именовање других ентитета(променљивих, класа, метода).
Резервисане речи јаве су: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , и .
Осим ових, резервисане су и вредности: , и .
Литерали у Јави су константе примитивног типа или конкретан примерак класе .
'\" - апостроф '\"' - наводник '\\' - обрнута коса црта '\r' - знак за повратак на почетак рада '\n' - знак за прелазак у нови ред '\f' - знак за прелазак на нову страну '\t' - знак табулатора '\b' - знак за повратак на једно место уназад.
Сепаратори су специјални знаци који не означавају операцију, а имају функцију да одвоје одређене логичке целине у коду. За раздвајање Јава користи неколико знакова:
() (обичне заграде) - Служе за одвајање листе параметара од позива методе. Користе се и за наглашавање приоритета израза, за груписање израза у управљачким наредбама, као и за одређивање типова података при конверзији. {} (витичасте заграде) - Служе за ограђивање вредности аутоматски иницијализованих низова, за дефинисање блокова наредби, класа, метода, као и за дефинисање локалног опсега важења променљивих. [] (угласте заграде) - Користе се за издвајање вредности чланова низова и за декларисање самих низова. ; (тачка са запетом) - Закључује наредбу. , (запета) - Раздваја идентификаторе у декларацији променљиве и користи се за повезивање наредби унутар петљи. . (тачка) - Служи за раздвајање назива пакета од потпакета и класа, као и за раздвајање променљивих или метода од имена објеката.
Оператори омогућавају операције над подацима. Подаци на које се примењују оператори називају се операнди. Према позицији у односу на операнде, разликујемо префиксне, инфиксне и постфиксне операторе. Међутим, уколико се помоћу оператора додељује вредност или не, можемо да разликујемо две класе оператора: операторе доделе и остале.
& - битовна конјукција(AND) ~ - битовна негација(NOT) | - битовна дисјункција(OR) ^ - битовна ексклузивна дисјункција(XOR) << - померање (шифтовање) улево >> - померање (шифтовање) удесно >>> - померање (шифтовање) удесно са нулама.
&& - конјукцију || - дисјункцију ! - негацију.
<logički_operator>?<prvi_izraz>:<drugi_izraz>
<instancni_operator>::= instanceof
Коментари служе да се објасне поједина места у програму.
Белина је знак који нема графички приказ на излазном уређају. Служе за међусобно раздвајање елементарних конструкција и за обликовање програма.
Класа је скуп објеката са заједничким својствима, који се понашају на исти начин[8]. Класа се састоји од атрибута и метода.
Атрибути описују особине, а методе понашање класе.
Пакет је група сличних типова класа, интерфејса и под-пакета.
Објекат је примерак класе. Сваки објекат има свој примерак свих поља атрибута, који је независан од осталих објеката, а методе су заједничке за све њих.
Атрибутима објекта се приступа помоћу оператора тачка, нпр. Pera.ime() .
Методе се позивају на следећи начин: Pera.jedi() .
Резервисана реч је "показивач" на тренутни објекат који се обрађује при позиву методе. Објекти су направљени тако да симулирају понашање спољашњег света и потпуно су одређени својим атрибутима и понашањем.
На пример, класа би била Covek, атрибути ime, prezime, а метод јеdi.
Како би то изгледало у Јави:
public class Covek{
private String ime, prezime;
void jedi() {
// logika metode
}
}
Сваки објекат би требало да има и своје конструкторе. Конструктори су ти који дефинишу наш објекат и спремају га за коришћење. Њим се иницијализују поља на неке конкретне вредности. Они не смеју да имају повратне вредности и дефинишу се као ImeKlase(parametri).
Пример дефинисања конструктора:
Covek(String ime, String prezime){
this.ime = ime;
this.prezime = prezime;
}
Пример позива конструктора:
Covek Pera = new Covek(ime, prezime);
Имплицитни конструктори су конструктори који се позивају кад се не зада ниједан параметар при прављењу новог објекта, и он би требало да обезбеди да се поља објекта налазе у неком подразумеваном стању. На пример, за тачку би било подразумевано стање да се налази у координатном почетку.
Енкапсулација је скривање радње унутар класе, јер корисник не мора да зна шта се дешава "испод жита", него само шта дати метод ради, или које он све атрибуте има и чему служе. [9]
Кључна реч се користи за прављење нове класе, која се изводи из неке постојеће. Постојећа класа назива се наткласа или родитељска, а нова класа поткласа или класа дете.[10]
Поткласе имају више функционалности од својих наткласа, нпр. када бисмо у класи Employee дефинисали класу Manager(користећи кључну реч ), класа Manager би енкапсулирала више података и имала више функционалности од своје наткласе. У класи Manager бисмо додатно дефинисали нпр. поље које чува вредност бонуса, као и методу setBonus за подешавање његове вредности. Ако смо инстанцирали објекат класе Manager, можемо употребити и методу setBonus. Међутим, уколико смо инстанцирали објекат класе Еmployee, не можемо употребити методу setBonus - ова метода се не налази међу методама које су дефинисане у класи Employee. Међутим, методе које су дефинисане у класи Еmployee, могу се користити са објектима класе Manager. Мада те методе нису експлицитно дефинисане у класи Manager, оне се аутоматски наслеђују из наткласе Еmployee. Исто важи и за поља дефинисана у наткласи, сваки објекат класе Manager има поља дефинисана у наткласи Еmployee. У суштини, кад се дефинише поткласа извођењем из њене наткласе, треба само уочити разлику између поткласе и наткласе. Најопштије методе треба стављати у наткласе, а специфичније методе, које су више специјализоване, треба смештати у поткласе.
Генерално, издвајање опште функционалности њеним померањем у наткласе је уобичајено за објектно оријентисано програмирање. Међутим, метода класе Manager нема директан приступ приватним пољима наткласе. Уколико методе класе Manager желе да приступе тим приватним пољима, оне морају да користе јавне методе класе Еmployee. Да бисмо назначили да желимо да позовемо методу наткласе, а не текуће класе, користимо специјалну реч .
Наслеђивање не треба да се заустави на извођењу само једног нивоа класа. На пример, можемо имати класу Executive која наслеђује класу Manager.
Колекција свих класа које су настале наслеђивањем заједничке наткласе назива се хијерархија наслеђивања. Чињеница да променљива објекта може да показује на више стварних типова назива се полиморфизам.
Променљива типа Еmployee може да се односи на објекат типа Еmployee, или на објекат било које поткласе класе Еmployee, као што су Manager, Еxecutive...
У случају да желимо да спречимо да неко други формира поткласу од неке наше класе, у дефиницији такве класе користимо модификатор . Слично, коришћењем истог модификатора можемо да учинимо неку конкретну методу у класи коначном. Модификатор користимо како бисмо осигурали да се понашање не може променити у поткласи.
Док се крећемо ка врху кроз хијерархију наслеђивања, класе постају све општије и вероватно све апстрактније. Класа са једном или више апстрактних метода мора и сама да се декларише као апстрактна, што се ради коришћењем кључне речи . Поред апстрактних метода, апстрактне класе могу имати конкретне податке и методе. Апстрактне методе се понашају као чувари места за методе, које су имплементиране у одређеној поткласи. Апстрактне методе представљају важан концепт у програмском језику Јава, а на њих често можете наићи унутар интерфејса.
Интерфејс је референтни тип, сличан класи, али може садржати само константе и потписе метода. Од верзије 8 интерфејси могу да садрже и тела метода.
Служе да се обезбеди неки шаблон понашања, којим гарантујемо да објекат који га укључује мора да има дато извршавање наведено у интерфејсу. Класа може да укључи више интерфејса.[11]
Пример:
interface Moveable{
public move();//potpis metode
}
public class Covek implements Moveable{
.....
move(){...}
}
Поља у класи је најбоље означити као , док се методе обично означавају као . Све карактеристике које су дефинисане као private нису видљиве за друге класе. То исто важи и за поткласе.
Постоје и ситуације кад методу желите да ограничите само на поткласе и тада да допустите методама поткласе да приступе пољу наткласе. Тада се поље или метода декларише као .
Модификатори у Јави који контролишу видљивост:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.