Slide 1

Слични документи
PowerPoint Presentation

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

Tutoring System for Distance Learning of Java Programming Language

UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o

Programski jezik JAVA PREDAVANJE

Tutoring System for Distance Learning of Java Programming Language

Microsoft PowerPoint - JavaP7_2018

Microsoft Word - Java_introduction_NEW_SYLLABUS.doc

PowerPoint Presentation

PowerPoint Presentation

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата

Tutoring System for Distance Learning of Java Programming Language

Zadatak 011 Razmotrite sljedeći primjer. package hr.fer.oopj.primjeri.p011; public class Main { } public static void main(string[] args) { obrada(2.71

Slide 1

Sveucilište u Zagrebu

Primenjeno programiranje - vezbe GUI i baze podataka

Microsoft PowerPoint - JavaP9_2019

Funkcijska sučelja: često korištena za modeliranje objekata koji obavljaju određene poslove Anotirana su signaliziraju da se t

Datum: 20

P1.2 Projektovanje asemblera

PowerPoint Presentation

Microsoft Word - 11 Pokazivaci

Дистрибуирани софтверски системи Технички факултет "Михајло Пупин" Зрењанин, Универзитет у Новом Саду Практикум за лабораторијске вежбе #04 [нерецензи

Uvod u PHP

PowerPoint Presentation

Tutoring System for Distance Learning of Java Programming Language

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Slide 1

Računarski praktikum I - Vježbe 09 - this, static

PowerPoint Presentation

Računarski praktikum I - Vježbe 11 - Funktori

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

OOP08

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

JAВА ПРОГРАМИРАЊЕ Сврха обуке за Јава програмирање је стицање знања и вештина у области Јава програмирања са циљем повећања броја квалификованих ИТ ст

ZADACI ZA VEŽBU 1. Realizovati konzolnu aplikaciju koja će računati površinu kvadrata, pravougaonika ili trougla. 2. Preko konzole se unosi ocena od 1

Funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Računarski praktikum I - Vježbe 06 - Standard Template Library (2)

Programski jezik C

Microsoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]

Računarski praktikum I - Vježbe 01 - Uvod

Projekti šabloni

No Slide Title

Podela ra~unarskih sredtava

Apache Maven Bojan Tomić

Рачунарска интелигенција

Inženjering informacionih sistema

3.Kontrlne (upravlja~ke) strukture u Javi

8 LINQ upiti LINQ (Language Integrated Query upit integrisan u jezik) jeste skup mogućnosti koje jezik C# i Framework pružaju za pisanje strukturirani

KATUŠIĆ ANTONIO.pdf

PROMENLJIVE, TIPOVI PROMENLJIVIH

PowerPoint Presentation

Materijal za vežbe iz Web programiranja, IMI PMF Kragujevac Web programiranje Vežbe 5 - Funkcije i OOP Funkcije Funkcije se definišu koristeći ključnu

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

NIZOVI

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Primenjeno programiranje - Vežbe

Logicko projektovanje racunarskih sistema I

Mrežno računarstvo

P2.1 Projektovanje paralelnih algoritama 1

Uputstvo za podešavanje Scala Spark projekta u Eclipse Neon okruženju Potrebno je imati instaliranu Scalu 2.10, Eclipse Neon razvojno okruženje i Spar

PowerPoint Presentation

P11.3 Analiza zivotnog veka, Graf smetnji

KDP

Uvod u računarstvo 2+2

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

РЕПУБЛИКА СРБИЈА МИНИСТАРСТВО ПРИВРЕДЕ ДИРЕКЦИЈА ЗА МЕРЕ И ДРАГОЦЕНЕ МЕТАЛЕ Београд, Мике Аласа 14, ПП: 34, ПАК: телефон: (011)

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU ELEKTROTEHNIČKI FAKULTET Sveučilišni studij KOMUNIKACIJA KLIJENATA U DISTRIBUIRANOJ JAVA APLIKACIJI Di

P11.2 Izbor instrukcija, IBURG

Uvod u računarstvo 2+2

Web orijentirana rješenja u turizmu

Algoritmi SŠ P1

PowerPoint Presentation

(Microsoft PowerPoint - 903_\216nidari\346_Java Persistence.pptx)

Microsoft PowerPoint - LB7-2_WCCF_2010.ppt

Objektno orjentirano programiranje 2P

Računarske mreže i mrežne tehnologije 10. termin 1. TRANSPORTNI SLOJ Transportni sloj nije još samo jedan od mnogih slojeva jer je njegova uloga sama

Microsoft PowerPoint - LB7-2_WCCF_2012.ppt

P9.1 Dodela resursa, Bojenje grafa

A.Ristic-LADM profil za RS

Programiranje za UNIX Okruženje unix procesa

Funkcije predavač: Nadežda Jakšić

1. Vremensko ograničenje Memorijsko ograničenje ulaz izlaz 0,1 s 64 MB standardni ulaz standardni izlaz Banka želi da upozori kupce na sumnjive aktivn

Mrežno računarstvo

PowerPoint Presentation

ggmap

Slide 1

Upitni jezik SQL

Пакет cmsrb Урош Стефановић 22. март в3.0 1 Зашто cmsrb? Пакет cm-super обезбеђуjе одличну подршку за ћирилицу у разним jезицима, али код њега п

Писање и превођење модула

Microsoft PowerPoint - Datoteke [Compatibility Mode]

SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA Seminarski rad u okviru predmeta Računalna forenzika BETTER PORTABLE GRAPHICS FORMAT Matej

Principi softverskog inženjerstva O predmetu

P11.1 Izbor instrukcija, najveci zalogaj

Programski jezik C

Транскрипт:

Funkcionalno programiranje Interoperabilnost jezika Scala i Java, 2019.

Prevođenje u Java bajt kod Svi Java tipovi imaju ekvivalentan tip u jeziku Scala Većina Scala koda se direktno preslikava u odgovarajući Java konstrukt klase definicija i pozivanje metoda izuzeci Neki Scala konstrukti ne mogu da se direktno preslikaju, jer ne postoji (direktan) ekvivalent crte generički tipovi Kada ne postoji preslikavanje, kodiranje se vrši kombinovanjem struktura koje Java ima 2

Vrednosni tipovi Vrednosni tip poput Int se iz jezika Scala prevodi u jezik Java na dva načina kad je moguće, pretvara se u primitivan tip int (performanse) u suprotnom, koristi omotačku klasu java.lang.integer Primer: List[Any] može da sadrži samo objekte tipa Int, ali to nije garantovano zato kompajler usvaja restriktivnu pretpostavku i koristi Integer Slično i za ostale vrednosne tipove 3

Unikatni objekti Prevodi se u kombinaciju statičkih i nestatičkih polja i metoda Za svaki unikatni objekat pravi se Java klasa čijem imenu se dodaje znak $ Ova klasa ima sve metode i atribute unikatnog objekta Ima statički atribut MODULE$ koje čuva instancu te klase koja predstavlja unikatni objekat 4

Unikatni objekti object App { def main(args: Array[String]) = { println("hello, world!") public final class App$ extends java.lang.object implements scala.scalaobject { public static final App$ MODULE$; public static {; public App$(); public void main(java.lang.string[]); public int $tag(); 5

Unikatni objekti U slučaju da ne postoji prateća klasa (već samo unikatni objekat), kompajler će napraviti Java klasu sa statičkim metodama za pozivanje odgovarajućih metoda unikatnog objekta. public final class App$ extends java.lang.object implements scala.scalaobject { public static final App$ MODULE$; public static {; public App$(); public void main(java.lang.string[]); public int $tag(); public final class App extends java.lang.object{ public static final int $tag(); public static final void main(java.lang.string[]); 6

Crte Java ne podržava crte Kompajliranje crte stvara Java interfejs istog imena Ako crta ima samo apstraktne metode onda se direktno preslikava u Java intefejs U suprotnom, kompajler generiše kod potreban za simuliranje crta 7

Primer package w08 trait Callback { def print = println("test!") Callback.scala 8

Primer package w08; import java.awt.*; import java.awt.event.*; public class AWTTest extends Frame { private boolean unisti = false; private Callback callback; private class TestAkcija implements ActionListener { public void actionperformed (ActionEvent d) { if( callback!= null ) callback.print(); private Panel paneltest() { Panel p = new Panel(); Button b = new Button("Test"); b.addactionlistener( new TestAkcija() ); p.add( b ); return p; AWTTest.java 9

Primer public void setcallback(callback c) { callback = c; AWTTest.java public AWTTest (int x, int y) { super ("Test"); setbounds (x, y, 305, 242); setresizable (false); add( paneltest(), BorderLayout.CENTER); addwindowlistener (new WindowAdapter () { public void windowclosing (WindowEvent d) { if (unisti) dispose (); else setvisible (false); ); public AWTTest (boolean unisti) { this (250, 50); this.unisti = unisti; 10

Primer package w08 object JavaScalaTest { JavaScalaTest.scala class SimpleCallback extends Callback def main(args: Array[String]) { var test = new AWTTest(true) test.setvisible (true) test.setcallback( new SimpleCallback ) 11

Anotacije @deprecated dodaje se na klase ili metode generišu se odgovarajuće Java anotiacije @volatile dodaje Java modifikator volatile na generisan kod @serializable klasi sa ovom anotacijom se dodaje interfejs Serializable @transient atributu se dodaje modifikator transient @throws metoda se proglašava da baca izuzetke Primer: @throws(classof[ioexception]) def read() = in.read() 12

Nespecificiran tip (džoker znak) Kako podržati sledeći Java kod? Iterator<?> Iterator<? extends Component> Koristi se simbol _ (slično kao kod anonimnih ili parcijalno primenjenih f-ja) Iteartor[_] Iterator[_ <: Component] 13

Funkcijski literali i lambda izrazi Java 8 je uvela lambda izraze suštinski: koncizan način pravljenja instanci anonimnih klasa // Java 8 JButton button = new JButton(); button.addactionlistener(event -> System.out.println("klik!")); Lambda izraz se može koristiti gde god se očekuje SAM (single abstract method) tip ActionListener je takav tip: jedino ima metodu actionperformed Funkcijski literali u jeziku Scala se mogu koristiti na isti način Razlika u verzijama jezika Scala 14

Funkcijski literali i lambda izrazi val button = new JButton // Pre Scala 2.12 implicit def function2actionlistener(f: ActionEvent => Unit) = new ActionListener { def actionperformed(event: ActionEvent) = f(event) button.addactionlistener( (_ : ActionEvent) => println("klik!") ) // Scala 2.12 + button.addactionlistener( _ => println("klik!") ) 15