Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Hasonló dokumentumok
hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Kalapácsvetés 2016 szöveges

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Bánsághi Anna

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Python tanfolyam Python bevezető I. rész

OOP: Java 8.Gy: Abstract osztályok, interfészek

MestInt gyakorlat visszalépéses keresés

Szoftvertechnológia alapjai Java előadások

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Imperatív programozás

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

és az instanceof operátor

Széchenyi István Egyetem

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Bánsághi Anna

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Szoftvertechnolo gia gyakorlat

Programozási nyelvek Java

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozási alapismeretek 4.

.Net adatstruktúrák. Készítette: Major Péter

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Java és web programozás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

INFORMATIKAI ALAPISMERETEK

Alprogramok, paraméterátadás

Objektumorientált programozás C# nyelven

Java és web programozás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

OOP #14 (referencia-elv)

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Objektumorientált programozás C# nyelven

Hálózatok építése és üzemeltetése

Abstract osztályok és interface-ek. 7-dik gyakorlat

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Objektumorientált Programozás VI.

Mentsd el code file-t kektura.cs néven, illetve kiterjesztéssel! Másold be a kektura.csv állományt a Projects munkamappa megfelelő almappájába!

Entity Framework alapú adatbáziselérés

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Java I. A Java programozási nyelv

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Imperatív programozás

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

C++ programozási nyelv

A C# programozási nyelv alapjai

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Python I. Vincze Dávid Miskolci Egyetem, IIT

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

Már megismert fogalmak áttekintése

Java és web programozás

Java programozási nyelv 4. rész Osztályok II.

BME MOGI Gépészeti informatika 8.

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

PYTHON. Avagy hosszú az út a BioPythonig

Java és web programozás

3. Gyakorlat Ismerkedés a Java nyelvvel

Informatika terméktervezőknek

C++ programozási nyelv

OOP: Java 8.Gy: Gyakorlás

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Bevezetés a Python programozási nyelvbe

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozás III. - NGB_IN001_3

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Entity Framework alapú adatbáziselérés

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

1. Egyszerű (primitív) típusok. 2. Referencia típusok

C# osztályok. Krizsán Zoltán

Objektumorientált programozás C# nyelven

BME MOGI Gépészeti informatika 4.

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Java Programozás 11. Ea: MVC modell

Programozás II. labor

Delegátumok C#-ban Krizsán Zoltán iit

Osztályok. 4. gyakorlat

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

A JavaScript főbb tulajdonságai

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Java programozási nyelv 5. rész Osztályok III.

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Objektumorientált programozás C# nyelven

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

A Python programozási nyelv

Java és web programozás

Programozás C++ -ban

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Átírás:

Fordított és szkript nyelvek összehasonlító elemzése Sergyán Szabolcs

IEEE: The 2016 Top Programming Languages

IEEE: The 2016 Top Programming Language (Enterprise)

Kutatás-fejlesztésben használt nyelvek MATLAB Python R Perl Ruby SAS SPSS SQL C/C++ Java

Fő különbség a szkript és fordított nyelvek között Szkript Fordított A program futása közben az interpreter sorról-sorra (utasításról-utasításra) értelmezi az egyes utasításokat és végrehajtja azokat Az interpreter értelmezi a kódot (az egészet) A fordító futtatható (vagy köztes) kódot állít elő

Mit tanítanak Amerikában? http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext

Az interpretálás egyik következménye Parancsor Tudunk parancssorba írni utasításokat

Hol vannak a típusok? A fordított nyelvek (általában) szigorúan típusosak, (majdnem) minden változónak meg kell adni a típusát. Szkript nyelveknél viszont a változónak egyszerűen csak értéket adunk. Ezek szerint itt nincsenek is típusok? Típusok vannak, de mivel az értelmező magától is rájön minek írjuk ki. Amikor objektumot példányosítunk, akkor persze meg kell adni, hogy milyen osztályból való az objektum. (De a referenciának minek típust adni?)

Python típusai

Python összetett típusai List Elemek listája Egy lista elemei bármilyen típusúak lehetnek (akár különbözők is) Az elemek értéke módosítható A lista mérete dinamikusan változtatható Tuple Nem módosítható lista Dictionary

List

Tuple

Dictionary

List comprehension

List comprehension

Többszörös list comprehension

For ciklus Ez valójában olyan, mint C#-ban a foreach

Indexelés

Indexelés

Indexelés

Függvények A MATLAB programokat függvényenként külön-külön fájlban tároljuk Pythonban ennél egyszerűbb, ha látjuk azt a fájlt, amiben a függvény van

Függvények definiálása

Paraméterátadás Csak érték szerinti paraméterátadás van MATLAB-ban nincs referencia típus Pythonban viszont minden referencia

Paraméterátadás

Objektum orientáltság? Python-ban van Egységbezárás Adatrejtés Öröklés MATLAB-ban van Egységbezárás Ez azért nem igazi OO Interfészek, események?

Objektum orientáltság

Öröklés

Többalakúság? Nincs olyan, hogy egy leszármazott osztályú példányt ősosztályú referencián keresztül érünk el Nem lehet polimorfizmusról beszélni

Interfészek? Van értelme, ha nem erősen típusos a nyelv?

Eseménykezelés Python-ban minden referencia Még a függvények is Interfész alapú eseménykezelés? Nincsenek interfészek Delegált (metódus referencia) alapú eseménykezelés? Ez megvalósítható!

Érdemes Python-t használni? Egyszerű szemlélet Jól átlátható kód Rengeteg letölthető kész megoldás Kutatás-fejlesztésben használható libraryk Minden ingyen és szabadon letölthető

Érdemes MATLAB-ot használni? Ha tudjuk hatékonyan használni az indexelését Mátrixok műveletvégzési sebességében verhetetlen Kutatás-fejlesztésben használt toolbox-ok Minden toolbox mögött ipari szabványokhoz illeszkedő bizonyítottan helyesen működő kód Nem olcsó

Milyen nyelven programozzak? Amivel megoldható az adott probléma Aminek értjük a hátterét is Aminek ismerjük az előnyeit és hátrányait is

Köszönöm a figyelmet!

C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BinarisFa class Program static void Main(string[] args) Tree<int> t = new Tree<int>(); t.insertionhappened += ReportInsert<int>; t.add(10); t.add(3); t.add(5); t.add(1); t.add(14); Node<int> actualnode = t.find(5); Console.WriteLine(actualNode.ToString() + " " + actualnode.ertek); t.printtree(); Console.ReadKey(); static void ReportInsert<T>(T ertek) Console.WriteLine("0 beszurva", ertek); class Node<T> Node<T> left; Node<T> right; T ertek; public Node<T> Left get return left; set left = value; public Node<T> Right get return right; set right = value; public T Ertek get return ertek; set ertek = value; public Node(T ertek) this.ertek = ertek;

C# left = null; right = null; class Tree<T> where T : IComparable Node<T> root; public Tree() root = null; public void Add(T ertek) if (root == null) root = new Node<T>(ertek); if (InsertionHappened!= null) InsertionHappened(ertek); else _Add(ertek, root); void _Add(T ertek, Node<T> node) if (ertek.compareto(node.ertek) < 0) if (node.left!= null) _Add(ertek, node.left); else Node<T> newnode = new Node<T>(ertek); node.left = newnode; if (InsertionHappened!= null) InsertionHappened(ertek); else if (node.right!= null) _Add(ertek, node.right); else Node<T> newnode = new Node<T>(ertek); node.right = newnode; if (InsertionHappened!= null) InsertionHappened(ertek); public Node<T> Find(T ertek) if (root!= null) return _Find(ertek, root);

C# else return null; Node<T> _Find(T ertek, Node<T> node) if (ertek.equals(node.ertek)) return node; else if (ertek.compareto(node.ertek) < 0 && node.left!= null) return _Find(ertek, node.left); else if (ertek.compareto(node.ertek) > 0 && node.right!= null) return _Find(ertek, node.right); else return null; public void DeleteTree() root = null; public void PrintTree() if (root!= null) _PrintTree(root); void _PrintTree(Node<T> node) if (node!= null) _PrintTree(node.Left); Console.WriteLine(node.Ertek); _PrintTree(node.Right); public delegate void Report(T ertek); public event Report InsertionHappened;

Python class Node : def init (self, value) : self. left = None self. right = None self. value = value def GetLeft(self) : return self. left def SetLeft(self, left) : self. left = left def GetRight(self) : return self. right def SetRight(self, right) : self. right = right def GetValue(self) : return self. value def SetValue(self, value) : self. value = value class Tree : def init (self) : self. root = None self.insertionhappened = None def Add(self, value) : if self. root == None : self. root = Node(value) if self.insertionhappened!= None : self.insertionhappened(value) else : self. Add(value, self. root) def Add(self, value, node) : if value < node.getvalue() : if node.getleft()!= None : self. Add(value, node.getleft()) else : newnode = Node(value) node.setleft(newnode) if self.insertionhappened!= None : self.insertionhappened(value) else : if node.getright()!= None : self. Add(value, node.getright()) else : newnode = Node(value) node.setright(newnode) if self.insertionhappened!= None : self.insertionhappened(value) def Find(self, value) : if self. root!= None :

Python return self. Find(value, self. root) else : return None def Find(self, value, node) : if value == node.getvalue() : return node elif value < node.getvalue() and node.getleft()!= None : return self. Find(value, node.getleft()) elif value > node.getvalue() and node.getright()!= None : return self. Find(value, node.getright()) else : return None def DeleteTree(self) : self. root = None def PrintTree(self) : if self. root!= None : self. PrintTree(self. root) def PrintTree(self, node) : if (node!= None) : self. PrintTree(node.GetLeft()) print str(node.getvalue()) + ' ' self. PrintTree(node.GetRight()) def SetEvent(self, newevent) : self.insertionhappened = newevent def ReportInsert(value) : print "%d beszurva" % value t = Tree() t.setevent(reportinsert) t.add(10) t.add(3) t.add(5) t.add(1) t.add(14) actualnode = t.find(5) print actualnode, actualnode.getvalue() t.printtree()