<?xml version="1.0" encoding="utf-8"?>
<Gradivo ID="105199" NadgradivoID="0" NRID="10982800" OceID="0" DomainUrl="https://repozitorij.uni-lj.si/" IzpisPolniUrl="https://repozitorij.uni-lj.si/IzpisGradiva.php?lang=slv&amp;id=105199" StOgledov="1818" StPrenosov="384" StOcen="0" VsotaOcen="0" DatumIzvoza="2026-09-15 05:50:44" OcenaSkupna="0" StPodgradiv="0" StudijskiProgramEvsID="1000471" JeIndeksirano="0" JeVecAvtorjev="0" DovoliZahtevkeZaDostop="0">
  <PID Url="http://hdl.handle.net/20.500.12556/RUL-105199">20.500.12556/RUL-105199</PID>
  <Naslov>Večkratno razpošiljanje v Javi z obdelavo anotacij</Naslov>
  <Podnaslov></Podnaslov>
  <TujJezik_Naslov>Multiple dispatch in Java using annotation processing</TujJezik_Naslov>
  <TujJezik_Podnaslov></TujJezik_Podnaslov>
  <Opis>Razpošiljanje je mehanizem, s katerim se v objektno usmerjenih programskih jezikih razlikuje med metodami, ki imajo enako ime in število parametrov. Deluje tako, da ob klicu metode na podlagi dinamičnih tipov podanih parametrov izbere najustreznejšo metodo. Enojno razpošiljanje med izvajanjem za to uporabi le tip enega parametra (prejemnika), medtem ko se tipi ostalih ugotovijo med prevajanjem. Pri večkratnem razpošiljanju se tipe vseh parametrov ugotovi šele med izvajanjem, kar je počasnejše, a bolj fleksibilno. V Javi in mnogih drugih objektno usmerjenih programskih jezikih je podprto le enojno razpošiljanje, večkratnega pa lahko na različne načine simuliramo.
Cilj naloge je bil izdelati knjižnico, s pomočjo katere se na podlagi anotacij, ki jih dodamo v običajen javanski program, generira koda za simuliranje večkratnega razpošiljanja. Logika za razpošiljanje se generira šele med prevajanjem, zato je lahko poljubno zapletena, ne da bi vplivala na zapletenost izvorne kode. Pri uporabi te knjižnice so edina sprememba med pisanjem programa dodatne anotacije, kar je enostavnejše za uporabo kot podobne obstoječe rešitve, ki potrebujejo posebne prevajalnike ali pa zahtevajo klicanje metod na povsem drugačen način.
Knjižnica je izvedena v treh različicah, ki uporabljajo različne načine za simuliranje večkratnega razpošiljanja: s pomočjo odločitvenega drevesa z neposrednim preverjanjem tipov, z uporabo odsevnosti in z razširjenim načrtovalskim vzorcem obiskovalec. Od teh sta prva dva podobna načinom, ki so uporabljeni v obstoječih rešitvah, tretji pa je manj znan in o njem do sedaj ni mogoče najti podrobne literature. V sklopu naloge so predstavljene implementacije, pa tudi rezultati eksperimentalne primerjave teh treh načinov, kjer primerjamo hitrost izvajanja, hitrost prevajanja in velikost prevedene kode.</Opis>
  <TujJezik_Opis>Dispatch is a mechanism in object-oriented programming languages used for distinguishing between methods with the same name and number of parameters. It works by examining the runtime types of parameters passed to a method call and selecting the most suitable method for them. Single dispatch selects a method based on the runtime type of just one of the parameters (the receiver), while the types of the rest of them are determined during compilation. Multiple dispatch determines the types of all the parameters during program execution, which is slower but more flexible. Java along with many other object-oriented languages supports single dispatch but not multiple dispatch. In such languages multiple dispatch can be simulated in different ways.
The goal of this thesis was to create a library that uses annotations added to an ordinary Java program in order to generate code for simulating multiple dispatch. Because the dispatch logic is generated during compilation, it can be very complex without complicating the source code. The only change when writing a program that uses our library are additional annotations, which is much simpler than existing similar solutions that use special compilers or change the way methods can be used.
There are three different versions of the library with three different mechanisms for simulating multiple dispatch: a decision tree with direct type inspection, a mechanism that uses reflection and an extended version of the visitor design pattern. The first two are similar to mechanisms used in other solutions while the third one is less known and is not found in the existing literature. In this thesis we show implementations of the three versions of our library and present the results of the experiments, where we compare them based on execution time, compilation time and size of the generated code.</TujJezik_Opis>
  <KljucneBesede>
    <Beseda>razpošiljanje</Beseda>
    <Beseda>večkratno razpošiljanje</Beseda>
    <Beseda>anotacije</Beseda>
    <Beseda>obdelava anotacij</Beseda>
    <Beseda>generiranje kode</Beseda>
    <Beseda>Java</Beseda>
    <Beseda>javac</Beseda>
  </KljucneBesede>
  <TujJezik_KljucneBesede>
    <Beseda>dispatch</Beseda>
    <Beseda>multiple dispatch</Beseda>
    <Beseda>annotations</Beseda>
    <Beseda>annotation processing</Beseda>
    <Beseda>generating code</Beseda>
    <Beseda>Java</Beseda>
    <Beseda>javac</Beseda>
  </TujJezik_KljucneBesede>
  <Potrjeno>true</Potrjeno>
  <JeZaklenjeno>false</JeZaklenjeno>
  <JeRecenzirano>false</JeRecenzirano>
  <Zaloznik></Zaloznik>
  <Izvor></Izvor>
  <Jezik ID="1060" ISO639-3="slv">Slovenski jezik</Jezik>
  <TujJezik ID="1033" ISO639-3="eng">Angleški jezik</TujJezik>
  <Povezave></Povezave>
  <Pokrivanje></Pokrivanje>
  <CasovnoPokritje></CasovnoPokritje>
  <AvtorskePravice></AvtorskePravice>
  <VrstaGradiva ID="mb22" DRIVER="info:eu-repo/semantics/masterThesis">Magistrsko delo/naloga</VrstaGradiva>
  <DatumVstavljanja>2018-11-08 13:50:02</DatumVstavljanja>
  <DatumObjave>2018-11-08 13:50:10</DatumObjave>
  <DatumSpremembe>2022-08-17 03:47:12</DatumSpremembe>
  <DatumTrajnegaHranjenja>0000-00-00 00:00:00</DatumTrajnegaHranjenja>
  <LetoIzida>2018</LetoIzida>
  <LetoIzidaDo>0</LetoIzidaDo>
  <KrajIzida></KrajIzida>
  <LetoIzvedbe>0</LetoIzvedbe>
  <KrajIzvedbe></KrajIzvedbe>
  <Opomba></Opomba>
  <StStrani></StStrani>
  <StevilcenjeNivo1></StevilcenjeNivo1>
  <StevilcenjeNivo2></StevilcenjeNivo2>
  <Kronologija></Kronologija>
  <Patent_Stevilka></Patent_Stevilka>
  <Patent_DatumVeljavnosti>0000-00-00</Patent_DatumVeljavnosti>
  <VerzijaDokumenta>NiDoloceno</VerzijaDokumenta>
  <StatusObjaveDrugje>NiDoloceno</StatusObjaveDrugje>
  <VrstaStroskaObjave>NiDoloceno</VrstaStroskaObjave>
  <DatumPoslanoVRecenzijo>0000-00-00</DatumPoslanoVRecenzijo>
  <DatumSprejetjaClanka>0000-00-00</DatumSprejetjaClanka>
  <DatumObjaveClanka>0000-00-00</DatumObjaveClanka>
  <EmbargoDo>1970-01-01</EmbargoDo>
  <VrstaEmbarga ID="1" Naziv="Takojšnja javna objava" OpenAIREDostop="openAccess"></VrstaEmbarga>
  <Osebe>
    <Oseba ID="64916" Ime="Nejc" Priimek="Kišek" AltIme="" VlogaID="70" VlogaNaziv="Avtor" ConorID="" Afiliacija="" ArrsID="0" ORCID=""></Oseba>
    <Oseba ID="23619" Ime="Jurij" Priimek="Mihelič" AltIme="Jurij Mihelic; Jurij Mihellič; Jurij Mihehič" VlogaID="991" VlogaNaziv="Mentor" ConorID="22912099" Afiliacija="" ArrsID="22475" ORCID=""></Oseba>
  </Osebe>
  <Identifikatorji>
    <Identifikator ID="16" Sifra="VisID" Naziv="VisID" URL="">20921</Identifikator>
  </Identifikatorji>
  <Datoteke>
    <Datoteka ID="115803" DatotekaNRID="10821828" NamenDatotekeID="2" NamenDatoteke="Predstavitvena datoteka" FormatDatotekeID="2" FormatDatoteke=".pdf" MIME="application/pdf" IkonaFormata="pdf.png" IkonaFormataPolniUrl="https://repozitorij.uni-lj.si/teme/rulDev/img/fileTypes/pdf.png" VelikostDatoteke="1579953" VelikostDatotekeKratko="1,51 MB" DatumVstavljanja="2018-11-08 13:50:12" JeZbrisana="false" JeJavnoVidna="true" JeIndeksirana="true" JeVidno="true" VidnoOd="01.01.1970" Zaporedje="0">
      <Naziv>Kisek_Nejc_-_Veckratno_razposiljanje_v_Javi_z_obdelavo_anotacij.pdf</Naziv>
      <OrgNaziv>Kisek_Nejc_-_Veckratno_razposiljanje_v_Javi_z_obdelavo_anotacij.pdf</OrgNaziv>
      <URL></URL>
      <Opis></Opis>
      <OpisTujJezik></OpisTujJezik>
      <UrlObdelave></UrlObdelave>
      <FrekvencaAzuriranjaID>1</FrekvencaAzuriranjaID>
      <Verzija></Verzija>
      <MD5>FF48695D88B80AD1DF50FA1218033918</MD5>
      <SHA256>b08dc83b2d33fed517ceb5f56c2c4ebda4cad51210828b79826eaf5c407e6b35</SHA256>
      <UUID>23408cb3-a1b6-11eb-a523-00155dcfd717</UUID>
      <PID></PID>
      <PrenosPolniUrl>https://repozitorij.uni-lj.si/Dokument.php?lang=slv&amp;id=115803</PrenosPolniUrl>
      <Vsebine>
        <Vsebina TipVsebine="GoloBesedilo" JezikID="1060" Oznaka="" Dolzina="138209"></Vsebina>
      </Vsebine>
    </Datoteka>
  </Datoteke>
  <Organizacije>
    <Organizacija OrganizacijaID="25" Kratica="FRI" ZavodEvsID="0000066" Logo="" LogoPolniUrl="https://repozitorij.uni-lj.si/teme/rulDev/img/logo/">Fakulteta za računalništvo in informatiko</Organizacija>
  </Organizacije>
  <OrganizacijeVira>
  </OrganizacijeVira>
  <MetodeZbiranjaPodatkov>
  </MetodeZbiranjaPodatkov>
  <TipologijaDela ID="0" Koda="0" Naziv="Ni določena" SchemaOrg="CreativeWork"></TipologijaDela>
  <Ostalo>
    <StIrodsDatotek>0</StIrodsDatotek>
    <StDatotekPodTrajnimEmbargom>0</StDatotekPodTrajnimEmbargom>
    <StDatotekZOmejenimDostopom>0</StDatotekZOmejenimDostopom>
  </Ostalo>
</Gradivo>
