Java (програмски језик) — разлика између измена

Садржај обрисан Садржај додат
мНема описа измене
Autobot (разговор | доприноси)
м Разне исправке; козметичке измене
Ред 23:
'''Јава''' ({{јез-енгл|Java}}, изговор: јава, ∗џава) је [[објектно-оријентисано програмирање|објектно-оријентисани]] [[програмски језик]], који је развила компанија [[Sun Microsystems|-{Sun Microsystems}-]] почетком [[1990-е|1990-их]] година.
 
Многи концепти Јаве су засновани на језику [[Оберон (програмски језик)|Оберон]], [[Никлаус Вирт|Никлауса Вирта]], творца [[Паскал (програмски језик)|Паскала]], [[Модула-2|Модуле]] и других језика, и [[Ханспетер Месенбек|Ханспетера Месенбека]]. Избацили су концепт модула и увели пакете какве данас знамо, који се ослањају на фајл систем и увели формално концепт класа из [[објектно-оријентисано програмирање|објектно-оријентисанeоријентисане]] парадигме. Осим тога, језик има [[Синтакса|синтаксу]] сличну језицима [[c (програмски језик)|-{C}-]] и [[C++|-{C++}-]], али је много строжи при превођењу, дизајниран тако да буде независан од платформе, и са поједностављеним управљањем [[Рачунарска меморија|меморијом]]. Претпоставља се да је ово урађено због популарности језика [[c (програмски језик)|-{C}-]], али и због једноставности неких структура. Прва верзија је званично објављена [[1995]]. године.
 
Данас је Јава подразумевани језик у изради мобилних апликација за [[Андроид оперативни систем|Андроид]] уређаје.<ref>[https://skolakoda.org/zdravo-java Zdravo Java]</ref>
Ред 37:
* преносив - овде не постоје аспекти који су зависни од [[Имплементација програмског језика|имплементације]]. Величине примитивних типова су фиксне, као и њихово понашање у [[Аритметика|аритметици]]. Такође, библиотеке које су део система дефинишу интерфејсе који су преносиви
* интерпретиран - исти Јава бајткод се може извршавати на сваком компјутеру за који постоји Јава [[Интерпретатор(рачунарство)|интерпретер]]. Будући да је линковање постепен и лакши поступак, сам развој може бити бржи
* перформантан - мада су перформансе преведеног [[бајткод|бајткода]]а обично више него довољне, постоје ситуације када су потребне боље перформансе. [[Бајткод]] може да буде преведен током извршавања у [[машински језик]]
* вишенитан - предности вишенитне обраде су бољи интерактивни одзиви и понашање у реалном времену
* динамичан - Јава је пројектована тако да се прилагођава окружењу које се стално унапређује. Библиотеке могу слободно да додају нове методе и поља, без утицаја на клијенте. У Јави је прилично једноставно проналажење информација приликом извршавања програма.
Ред 61:
== Извршавање Јава кода ==
Јава платформа, тј. Јава окружење у ком се програм извршава, дизајнирана је тако да што мање зависи од специфичних карактеристика конкретног рачунарског система.
 
Јава се извршава коришћењем [[Јава виртуелна машина|Јава виртуелне машине]] -ЈVМ ({{јез-енгл|[[Јаva Virtual Machine]]}}) <ref>[http://www.programmerinterview.com/index.php/java-questions/jvm-platform-dependent/ "Јава Виртуелна Машина"]</ref> - језгро Јаве, апстрактна машина која постоји само у [[Рачунарска меморија | меморији]].
Јава је језик који се преводи и интерпретира. Јава изворни код (*.java [[фајл]]) након компајлирања, [[компилатор | компајлером]] [[javac]], се преводи у изворни код тзв. [[бајткод|бајткод]] (*.class фајл). Формирани бајткод је исти за све [[Архитектура рачунара|архитектуре рачунара]] и представља инструкције за Јава виртуелну машину.
 
Бајткод у Јава виртуелној машини, јава [[интерпретатор_(рачунарство)|интерпретатором]] - јаva, се дешифрује и интерпретира у извршни код, погодан за извршавање на рачунару, одговарајућем [[хардвер |хардверу]].
Јава је језик који се преводи и интерпретира. Јава изворни код (*.java [[фајл]]) након компајлирања, [[компилатор | компајлером]] [[javac]], се преводи у изворни код тзв. [[бајткод|бајткод]] (*.class фајл). Формирани бајткод је исти за све [[Архитектура рачунара|архитектуре рачунара]] и представља инструкције за Јава виртуелну машину.
Бајткод у Јава виртуелној машини, јава [[интерпретатор_интерпретатор (рачунарство)|интерпретатором]] - јаva, се дешифрује и интерпретира у извршни код, погодан за извршавање на рачунару, одговарајућем [[хардвер |хардверу]]у.
 
У зависности од [[Јава виртуелна машина|ЈVМ]], за исти изворни код можемо добити различите извршне кодове, за различите платформе.
 
Јава [[изворни код]] и бајткод остају исти без обзира на којој се платформи извршава програм -“Write once, run everywhere”.<ref>[http://www.computerweekly.com/feature/Write-once-run-anywhere "Извршавање Јаве"]</ref>
 
Јавина преносивост, међутим, изазива губитак перформанси.
 
То је зато што се тек приликом интерпретирања [[бајткод]] преводи у [[Mašinski jezik|машински]] за конкретну платформу. Ово може бити проблем ако се исти код више пута интерпретирана истој платформи.
 
Губитак перформанси је смањен коришћењем [[Just-in-time compilation|Just-in-time]] ({{ јез-срп| "у право време"}}) или [[ЈИТ компајлер|JIT компајлера]]. JIT компајлер преводи Јава методе у машински код за конкретну платформу на којој се користи.
 
Линија 156 ⟶ 162:
== Јава објекти и класе ==
'''Класа''' је скуп објеката са заједничким својствима, који се понашају на исти начин<ref>[https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html "Класа"]</ref>. Класа се састоји од атрибута и метода.
 
Атрибути описују особине, а методе понашање класе.
 
Пакет је група сличних типова класа, интерфејса и под-пакета.
 
Линија 162 ⟶ 170:
 
Атрибутима објекта се приступа помоћу оператора тачка, нпр. Pera.ime() .
 
Методе се позивају на следећи начин: Pera.jedi() .
 
Резервисана реч ''-{this}-'' је "показивач" на тренутни објекат који се обрађује при позиву методе.
Објекти су направљени тако да симулирају понашање спољашњег света и потпуно су одређени својим атрибутима и понашањем.
 
На пример, класа би била Covek, атрибути ime, prezime, а метод јеdi.
 
Линија 193 ⟶ 203:
 
Енкапсулација је скривање радње унутар класе, јер корисник не мора да зна шта се дешава [[Фразеологизми|"испод жита"]], него само шта дати метод ради, или које он све атрибуте има и чему служе.
<ref> [https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html "Конструктори"] </ref>
 
== Наслеђивање ==
Кључна реч ''-{extends}-'' се користи за прављење нове класе, која се изводи из неке постојеће. Постојећа класа назива се наткласа или родитељска, а нова класа поткласа или класа дете. <ref>[https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html Наслеђивање]</ref>
 
Поткласе имају више функционалности од својих наткласа, нпр. када бисмо у класи Employee дефинисали класу Manager(користећи кључну реч ''-{extends}-''), класа Manager би [[енкапсулација | енкапсулирала]] више података и имала више функционалности од своје наткласе. У класи Manager бисмо додатно дефинисали нпр. поље које чува вредност бонуса, као и методу setBonus за подешавање његове вредности. Ако смо инстанцирали објекат класе Маnager, можемо употребити и методу setBonus. Међутим, уколико смо инстанцирали објекат класе Еmployee, не можемо употребити методу setBonus - ова метода се не налази међу методама које су дефинисане у класи Employee. Међутим, методе које су дефинисане у класи Еmployee, могу се користити са објектима класе Маnager. Мада те методе нису експлицитно дефинисане у класи Маnager, оне се аутоматски наслеђују из наткласе Еmployee. Исто важи и за поља дефинисана у наткласи, сваки објекат класе Маnager има поља дефинисана у наткласи Еmployee. У суштини, кад се дефинише поткласа извођењем из њене наткласе, треба само уочити разлику између поткласе и наткласе. Најопштије методе треба стављати у наткласе, а специфичније методе, које су више специјализоване, треба смештати у поткласе.
 
Генерално, издвајање опште функционалности њеним померањем у наткласе је уобичајено за [[Објектно-оријентисано програмирање|објектно оријентисано програмирање]]. Међутим, метода класе Маnager нема директан приступ приватним пољима наткласе. Уколико методе класе Manager желе да приступе тим приватним пољима, оне морају да користе јавне методе класе Еmployee. Да бисмо назначили да желимо да позовемо методу наткласе, а не текуће класе, користимо специјалну реч ''-{super}-''.
Линија 208 ⟶ 218:
 
Променљива типа Еmployee може да се односи на објекат типа Еmployee, или на објекат било које поткласе класе Еmployee, као што су Маnager,Еxecutive...
 
У случају да желимо да спречимо да неко други формира поткласу од неке наше класе, у дефиницији такве класе користимо модификатор ''-{final}-''. Слично, коришћењем истог модификатора можемо да учинимо неку конкретну методу у класи коначном. Модификатор ''-{final}-'' користимо како бисмо осигурали да се понашање не може променити у поткласи.
 
Док се крећемо ка врху кроз хијерархију наслеђивања, класе постају све општије и вероватно све апстрактније. Класа са једном или више апстрактних метода мора и сама да се декларише као апстрактна, што се ради коришћењем кључне речи ''-{abstract}-''. Поред апстрактних метода, '''апстрактне класе''' могу имати конкретне податке и методе. Апстрактне методе се понашају као чувари места за методе, које су имплементиране у одређеној поткласи. Апстрактне методе представљау важан концепт у програмском језику Јава, а на њих често можете наићи унутар [[интерфејс| интерфејса]]а.
 
'''Интерфејс''' је референтни тип, сличан класи, али може садржати само константе и потписе метода.
Од верзије 8 интерфејси могу да садрже и тела метода.
 
Служе да се обезбеди неки шаблон понашања, којим гарантујемо да објекат који га укључује мора да има дато извршавање наведено у интерфејсу. Класа може да укључи више интерфејса.<ref>[https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html "Интерфејс"]</ref>
 
Линија 232 ⟶ 244:
 
Постоје и ситуације кад методу желите да ограничите само на поткласе и тада да допустите методама поткласе да приступе пољу наткласе. Тада се поље или метода декларише као ''-{protected}-''.
 
Модификатори у Јави који контролишу видљивост:
* private - видљив само за одређену класу
Линија 252 ⟶ 265:
=== Алтернативе ===
* [http://www.blackdown.org/ -{Blackdown Java}-] за [[Линукс|-{Linux}-]], садржи -{plug-in}- за [[Мозила фајерфокс|Mozilla Firefox]]
* [http://www.gnu.org/software/classpath/ -{GNU Classpath}-] пројекта [[ГНУ|-{GNU}-]] - тренутно се спаја са -{libgcj}- из [http://gcc.gnu.org/java/ -{GNU Java}- компајлера]{{dead link|date=November 2017}}
 
=== Упутства за почетнике ===