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

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

Osztályok. 4. gyakorlat

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

Objektumorientált programozás C# nyelven

JAVA PROGRAMOZÁS 2.ELŐADÁS

Objektumorientált programozás C# nyelven

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

OOP #14 (referencia-elv)

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

C#, OOP. Osztályok tervezése C#-ban

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Szoftvertechnológia alapjai Java előadások

Bánsághi Anna

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozási nyelvek Java

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?

Magas szintű programozási nyelvek 2 Előadás jegyzet

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

Programozási nyelvek Java

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

Bánsághi Anna

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

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

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

és az instanceof operátor

Objektumorientált programozás C# nyelven

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

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

Java és web programozás

Java Development Alapképzés

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

OOP és UML Áttekintés

ELTE SAP Excellence Center Oktatóanyag 1

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

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

Programozás I. Első ZH segédlet

Globális operátor overloading

Informatika terméktervezőknek

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag


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

Java II. I A Java programozási nyelv alapelemei

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

Java és web programozás

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Web-technológia PHP-vel

Bevezetés a Python programozási nyelvbe

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Programozási nyelvek Java

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

Java II. I A Java programozási nyelv alapelemei

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

3. Gyakorlat Ismerkedés a Java nyelvvel

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

Java programozási nyelv

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

Java és web programozás

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

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

Objektum orientált kiterjesztés A+ programozási nyelvhez

Programozási nyelvek JAVA EA+GY 1. gyakolat

A Java és a C++ összehasonlítása

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Segédanyag: Java alkalmazások gyakorlat

ELTE SAP EXCELLENCE CENTER Oktatóanyag. Sas László: ABAP Objects Objektumorientált ABAP

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

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

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

C# Zero.4 Introducing Visual C# 2.0

Collections. Összetett adatstruktúrák

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Java és web programozás

Programozási nyelvek Java

Programozás 2., I. kötet Az objektumorientált paradigma alapjai

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Apple Swift kurzus 3. gyakorlat

Programozási alapismeretek 4.

Programozási technológia I 1. gyakorlat. A Java nyelvi alapjai, a NetBeans környezet

Programozási nyelvek Java

Concurrency in Swing

Már megismert fogalmak áttekintése

Java IX. telkezelés a Java-ban

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

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

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java IX. telkezelés a Java-ban

Programozás II. labor

Eseményvezérelt alkalmazások fejlesztése II. A.NET keretrendszer és a C# programozási nyelv. Objektumorientált programozási nyelvek A Smalltalk nyelv

Átírás:

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

Azonosságok I. Curly-bracket nyelvek ({}) C, C++, PHP, JavaScript, stb.) ProgrammingTheorem project C-re épülő syntax Erősen típusosak (statically typed és nem dynamic typing a jellemző) Objektum-orientáltak (és osztályokra épített eszközkészlettel rendelkeznek) Just-In-Time (JIT) compilation (semi-interpretation) Garbage Collector (GC), finalizer/destructor A String immutable és reference type mindkét nyelvben Referencia típusok és array-ek kezelése @Annotációk megléte és szintakszisa (Java-ban Annotációnak, míg C#-ban Attribútumnak hívjuk) 2

Azonosságok II. Collection Framework hasonlóságok A Java Map és C# Dictionary Set(s), List(s), Vector(s), sorted versions Queue/Stack Párhuzamosságra optimalizált változatok Auto boxing/unboxing A Java final nagyon hasonló a C# readonly-hoz a final közelebb áll a valósághoz (elnevezésben is) Java: init blokkban vagy ctor-ban állítható, de pontosan egyetlen egy értékadásban szerepelhet a final változó (különben hiba) C#: akármennyi értékadásban szerepelhet a readonly változó, de muszáj hogy legyen értéke a ctor(ok) lefutása után apróbb különbségek vannak Try-with-resources megoldás C# using (){}, Java try(){} String típusok switch-ben használhatóak 3

Azonosságok III. overloading, overriding Bár a Java virtualitás miatt vannak gyakorlati különbségek (de elméletben azonos) varargs (java: String C#: params String[]) Java instanceof megfelel a C# is-nek (is/as operator) Java package, C# namespace szintakszis és gyakorlati különbségek itt vannak Szálkezelés (thread, pools, semaphores, thread-local variables) Native metódusok Java 8 óta: IsAsProject project Metódus referencia, Closures és Lamba kifejezések vannak mindkét nyelvben 4

Ami a Java-ban nincsen I. Előjelnélküli (unsigned) típusok 128 bites típusok Complex szám kezelés 3rd party library természetesen létezik Mátrix típusú tömbök Kiterített vektor (igény esetén hamar kódolható) Tulajdonságok (property), indexer-ek Egyértelműséget sérti (elsősorban nem clean kódokban) IDE getter/setter generálásával, e célt szolgáló 3rd party library-val (pl. AutoValue) elérhető hasonló (de pl. Groovy-Java konbinált projektben ez nem probléma) Indexer-ek nagyon sérthetik az egyértelműséget, 5

Ami a Java-ban nincsen II. Tuples-ek Groovy-Java vagy Scala-Java kombinált projektben kiküszöbölhető ezeknek a hiánya, illetve itt is lehet találni 3rd party-t vagy készíteni egy apró generic típus-t e célra Nem-virtuális metódusok Minden metódus virtuális, minden hívás címe a VMT-ből kereshető ki (C# def: nem-virtuális) Képviselők (delegates), event Delegate project Eseménykezelés megvalósítása klasszikus OO alapokon nyukszik Java-ban (egyértelműbb) Lifted (nullable) típusok (?, Nullable<>) Java-ban a primitív wrapper típusok értéke lehet null, ez a gyakorlatban elegendő Dynamic type, pointers 6

Ami a Java-ban nincsen III. foreach for használható helyette... goto de a szó reserved, de semmire sem használható const static final-t használunk helyette, de a const reserved, hogy ne legyen zavaró (jelentése nincs) out és ref argumentumok szerencsére helyette objektum-orientáltság van erőltetve partial class-ok operator overloading de Groovy vagy Scala használata esetén ezzel lehet élni 7

Ami a Java-ban nincsen IV. Extension methods Szerencsére :) Query language (C# LINQ) 8

Ami a C#-ban nincsen Soft és Phantom referencia De Weak referencia mindkét nyelvben van Checked exceptions Exceptions project C#-ban csak unchecked exception-ök vannak Java throws kulcsszó Instance level inner classes (fa-gyöngy) ClassType project hu.qwaevisz.innerclass.tree.tre e Immutable (final) metódus paraméter 9

Java final kulcsszó - véglegesség final field C# readonly final method nem lehet override-olni a leszármazottakban Abstract metódus értelemszerűen nem lehet final final class nem lehet leszármaztatni C# sealed zárt final arguments adott metódusban nem szerepelhet értékadásban (elegáns megoldás automatikusan minden paramétert final-re beállítani) final variable adott blokkban kizárólag egyszer szerepelhet értékadásban 10

Java static kulcsszó - osztályszintűség static field Azonos a C# static field-el static method Azonos a C# static method-al static import Adott statikus metódust úgy importál az adott állományba (class-ba) hogy nem kell az osztályt mindig kiírni (pl. Math.sin() helyett elég sin()-t írni). C# 6 óta van using static static class Kizárólag static inner class létezik. Az inner class az outer class osztályszintű eleme lesz. Az static inner class memóriába betöltése (pl. saját static változóinak inicializálása) akkor történik meg, amikor az osztályra az első hivatkozás lefut. Ekkor az osztály top-level szintre kerül! C# static class: olyan class aminek csak static metódusai vannak teljes képzavar, a static kulcsszó a metódusnál osztályszintűséget jelöl, míg a class esetén ez valamilyen marker annotáció szerepét látja el... 11

Különbségek C# value type-ot Java-ban primitívnek hívjuk (a Java primitív fix lista, nem bővíthető) Java-ban a Date/time referencia típus, míg C#-ban value Java enum referencia típus, míg C#-ban value (scalar) C# Unified type system-je nem található meg a Java-ban (a primitívek teljesen különálló lények), de primitív wrapper típusok léteznek Java-ban is 12

Java enum Java enum egy korlátozott lehetőséggel rendelkező osztály. Az esetek túlnyomó részében az őse az Enum (de extends Enum nem írható ki). Létezik egy un. abstract enum, ez esetben anonymous leszármazottak vannak, és ennek a közvetlen őse az általunk írt enum típus lesz, és nem az Enum. EnumDemo project Az Enum felsorolt értékei az Enum saját típusának megfelelő static final mezők. Lehetnek instance és static mezői, instance és static metódusai. C# extension method segítségével (ami rendelkezik a static kucslszóval mint valami annotációval) lehet egy C# value type enum-hoz is instance szintű metódusokat hozzácsapni. Kizárólag private ctor-a lehet, azonban abból akár több is. 13

Láthatóság (access modifier) Java: public, package (default), protected, private C#: public, internal, protected, private, protected internal A Java csomagolással oldja meg azt, amit az internal láthatóság biztosítana. Itt a logika az, hogy nem keveri az OO és a business láthatóságot. 14

Kivételkezelés 15

Generics Nagyon hasonlónak tűnik, de nem az! C# runtime kezeli, míg a Java compile time Generic project A Java generic típusról nem tud a JVM, a byte-code nem hivatkozik semmilyen generic típusra Java csak referencia típusra értelmezi C#-ban lehet ctor megszorítást is adni E miatt lehet létrehozni új példányt (Java-ban nem) Subtype megszorítás mindkét nyelven van, de supertype csak C#-ban Kapcsolat a nem generikus világgal a Java-ban megoldott, C#-ban nem-igen (pl.: a Java Collection API-val kompatibilisek a generikus típusok) Java-ban az instanceof nem használható generic típusra (C# is/as használható) 16