Svi Java tipovi imaju ekvivalentan tip u jeziku Scala Većina Scala koda se direktno preslikava u odgovarajući Java konstrukt

Similar documents
Osnove programskog jezika C# Čas 4. Nasledjivanje 2. deo

Osnove programskog jezika C# Čas 5. Delegati, događaji i interfejsi

PREDMET. Osnove Java Programiranja. Čas JAVADOC

Vežbe - XII nedelja PHP Doc

Java. Ugnježdeni tipovi IMI PMF KG OOP 09 AKM. najveći deo teksta je preuzet sa slajdova Prof. Dragana Milićeva (ETF Bg) namenjenih pedmetu OOP2

CSS CSS. selector { property: value; } 3/20/2018. CSS: Cascading Style Sheets

Programiranje III razred

PROGRAMIRANJE. Amir Hajdar

Događaj koji se javlja u toku izvršenja programa i kvari normalno izvršenje. Kada se desi izuzetak, sistem pokušava da pronađe način da ga obradi.

Programske paradigme Funkcionalna paradigma

Učitati cio broj n i štampati njegovu recipročnu vrijednost. Ako je učitan broj 0, štampati 1/0.

Računarske osnove Interneta (SI3ROI, IR4ROI)

pojedinačnom elementu niza se pristupa imeniza[indeks] indeks od 0 do n-1

Višestruko nasleđivanje nije moguće u jeziku Scala

Mašinska vizija. Dr Nenad Jovičić tnt.etf.rs/~mv

VHDLPrimeri Poglavlje5.doc

Variable Neighborhood Descent - VND (Metoda promenljivog spusta)

PROGRAMIRANJE. Teme. Packages Reference objekata Inheritance nasljeđivanje Exceptions. Amir Hajdar

Projektovanje Namenskih Računarskih Struktura 1. Sistemi zasnovani na Androidu

VRIJEDNOSTI ATRIBUTA

GUI - događaji (Events) i izuzeci. Bojan Tomić

Java IMI PMF KG OOP 09 AKM. Izuzeci

Uvod u programiranje - vežbe. Kontrola toka izvršavanja programa

Programiranje III razred

C++ minitutorial. Osnovni elementi i koncepti programskog jezika C++ uz primere

VIŠESTRUKO NASLJEĐIVANJE - SAN ILI JAVA 8?

Uvod u relacione baze podataka

UNIVERZITET U BEOGRADU ELEKTROTEHNIČKI FAKULTET

2. Linijska algoritamska struktura

var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Items.LoadFromFile('d:\brojevi.

Izrada VI laboratorijske vježbe

VB komande. Programiranje 1

16. Sigurnije programiranje

Objektno orjentirano programiranje

Java IMI PMF KG OOP 09 AKM. Objekti i klase

TEHNIKA I INFORMATIKA U OBRAZOVANJU

public static void main(string []args) { System.out.println("Hello World"); /* prints Hello World */

Projektovanje namenskih računarskih struktura

Java i Internet programiranje

PITANJA ZA II KOLOKVIJUM KLASE I OBJEKTI


Objektno orijentisano programiranje

namespace spojneice { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

Proširivanje hijerarhije klasa. Moguće je rešiti u osnovnoj klasi

Points Missed on Page page 1 of 8

Uputa: Zabranjeno je koristiti bilo kakva pomagala. Rje²enja pi²ete desno od zadatka. Predajete samo ovaj list.

Windows Server 2012, VDI Licenciranje najprodavanijeg servera, što je novo, VDI licenciranje. Office 2013 / Office 365

Oracle Proprietary Joins Za upite nad više od jedne tabele korišćenjem Oracle proprietary sintakse koristiti join uslov u WHERE izrazu:

Objektno orijentisano programiranje 2. Grafički korisnički interfejs

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

Object-oriented programming

RAIK 183H Examination 2 Solution. November 10, 2014

CS 2340 Objects and Design - Scala

SINGLE EVENT HANDLING

b) program deljiv3; uses wincrt; var i:integer; begin i:=3; while i<100 do begin write(i:5); i:=i+3; end; end.

...something useful to do with the JVM.

Solution register itself

Ovde će se raditi na funkcijama konverzija: konverzija tipa datuma u znak tip i obrnuto, konverzija broja u karakter tip i obrnuto

CS-140 Fall 2017 Test 2 Version A Nov. 29, 2017

Lekcija 4. Java programiranje sa bazama podataka. dr Svetlana Cvetanović

Programski jezici. leto

Sberbank Business Online na Mozilla FireFox

1005ICT Object Oriented Programming Lecture Notes

1 UVOD U PROGRAMSKI JEZIK JAVA

Scaling Up & Out. Haidar Osman

Window Interfaces Using Swing Objects

Swing from A to Z Some Simple Components. Preface

Visoka tehnička škola Niš

Announcements. CSCI 334: Principles of Programming Languages. Lecture 16: Intro to Scala. Announcements. Squeak demo. Instructor: Dan Barowy

PITANJA ZA II KOLOKVIJUM NASLJEĐIVANJE, VIRTUELNE FUNKCIJE I POLIMORFIZAM

Final Exam CS 251, Intermediate Programming December 13, 2017

7. Program Frameworks

Graphical Interfaces

NEKE OBJEKTNE OSOBINE ORACLE PL/SQL 9i JEZIKA (usporedba sa OOPL jezicima C++, Eiffel i Java)

Programski jezik JAVA PREDAVANJE

Kodiranje GUI aplikacija u Visual C#

Name: Checked: Learn about listeners, events, and simple animation for interactive graphical user interfaces.

More Swing. CS180 Recitation 12/(04,05)/08

Graphical Interfaces

MIT AITI Swing Event Model Lecture 17

Informacija, logika i jezici. M. Bagić Babac, M. Kušek. Skripta: Jezici za označavanje sadržaja. Preddiplomski studij. Računarstvo

Objektno orijentisano programiranje 2. Jezik C#

AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS

Getting Started with Kotlin. Commerzbank Java Developer Day

Objektno orijentisano programiranje. Aleksandra Klašnja-Milićević Marko Marković

Chapter 1 GUI Applications

Jezik Baze Podataka SQL. Jennifer Widom

Declarations and Access Control SCJP tips

BM214E Object Oriented Programming Lecture 13

x y = z Zadaci - procedure

Lekcija 09 Sakrivanje podataka, statički članovi, preklapanje funkcija i operatora. Miljan Milošević

CS 180 Final Exam Review 12/(11, 12)/08

Java. GUI building with the AWT

Proctors are unable to respond to queries about the interpretation of exam questions. Do your best to answer exam questions as written.

More About Objects and Methods

Window Interfaces Using Swing Objects

AWT DIALOG CLASS. Dialog control represents a top-level window with a title and a border used to take some form of input from the user.

CHAPTER 2. Java Overview

CSC Java Programming, Fall Java Data Types and Control Constructs

G51PGP Programming Paradigms. Lecture 009 Concurrency, exceptions

Transcription:

Funkcionalno programiranje Interoperabilnost jezika Scala i Java

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

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

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

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();

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[]);

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 potreban za simuliranje crta

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

Primer package w08; import java.awt.*; import java.awt.event.*; public class AWTTest extends Frame { private boolean unisti = false; private Callback callback; AWTTest.java 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;

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;

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 )

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()

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]

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

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!") )