Sprachvergleich C# / Java / C++



Ähnliche Dokumente
Java-Schulung Grundlagen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

C# im Vergleich zu Java

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

~±] Inhalt. 1.1 Ähnlichkeiten zwischen C# und Java Unterschiede zwischen C# und Java Das.NET-Framework 4 1.

Einführung in C#.NET. 1 Übersicht. 2 Typen (Types) Dieser Artikel stammt aus dem Magazin von C++.de (

Java vs. C++: Different by Design

Grundlagen der Modellierung und Programmierung, Übung

3. Java - Sprachkonstrukte I

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

3. Java - Sprachkonstrukte I

Moderne C-Programmierung

Vererbung & Schnittstellen in C#

3. Java - Sprachkonstrukte I

Datenbankanwendungsprogrammierung Crashkurs Java

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Einführung in die C-Programmierung

Einführung in die Programmiersprache C#

SE2-6. Übung Johannes Bürdek

Tutorium Rechnerorganisation

Objektorientierte Programmierung mit C++

3 Grundstrukturen eines C++ Programms anhand eines Beispiels

Java Lexikalische Struktur

1. Der Einstieg in Java. Was heißt Programmieren?

Smalltalk vs. Java c Chris Burkert Smalltalk versus Java

Typsystem Plattform- und Sprachenunabhängigkeit in.net

Modul 122 VBA Scribt.docx

<Trainingsinhalt> C# programmieren

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Java - Programmierung - Prozedurale Programmierung 1

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Kapitel 3 Das Typsystem von C#

(im Vergleich zu Java) IFC-Seminar Jan Kraneis

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Syntax und Kontrollstrukturen

Grundelemente von C++

C#Objektorientierte. Aleksandra Maj. Programmiersprachen. Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars. 15.

Gebundene Typparameter

Vorkurs C++ Programmierung

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

3 Objektorientierte Konzepte in Java

Informatik: Abschnitt 4

Ich liebe Java && Ich liebe C# Rolf Borst

C/C++-Programmierung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Einführung in die Programmierung

Alexander Niemann. Das Einsteigerseminar Objektorientierte Programmierung in Java. bhv

Java für Computerlinguisten

Grundlagen der Programmierung in C Basics

Algorithmen zur Datenanalyse in C++

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Java - Programmierung - Objektorientierte Programmierung 1

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Propädeutikum. Dipl.-Inf. Frank Güttler

Technische Universität München. Einführung in C# Maximilian Irlbeck. Lehrstuhl für Software & Systems Engineering 22. Oktober 2010

Primitive Datentypen

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Programmieren und Problemlösen Java-Sprachkonstrukte. Java-Sprachkonstrukte. Übung Altersberechner. Namen und Bezeichner. Namen und Bezeichner

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Die Programmiersprache C99: Zusammenfassung

1. Der Einstieg in Java

Peter Prinz Ulla Kirch-Prinz C+ + Lernen und professionell anwenden. ffl mitp

Programmieren in Java

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Objektorientierte Programmierung in Java

Einführung in ActionScript

1 Polymorphie (Vielgestaltigkeit)

Klausur in Programmieren

Einheitliches Typsystem

Lösung der OOP-Prüfung WS12/13

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Informatik: Abschnitt 4

Zusammenfassung des Handzettels für Programmieren in C

C# anhand von ECMA-334. Das große Seminar WS 04/ Daniel Wiese

Transkript:

Dieses Dokument vergleicht die Programmiersprachen C# in den Versionen 2.0 und 3.0 mit den Sprachen Java in der Version 6 und ANSI C++ ohne die jeweils vielfältigen Bibliotheken zu berücksichtigen. In den Tabellen ist gelegentlich die Angabe n.a. zu lesen. Diese bedeutet, dass in einer Sprache das entsprechende Konstrukt nicht zur Verfügung steht. Autoren: Rolf Wenger, Stephan Fischli Version 1.0 / 25.05.2008

Umfeld Allgemein Begründer Microsoft Microsoft Sun Microsystems Bjarne Stroustrup Markteinführung 2005 2008 1995 1983 Betriebssysteme CLR.NET 2.0 CLR.NET 2.0 Betriebssysteme mit Cross-Plattform Java VM Standard ECMA 334 ECMA 334 ISO/IEC 23270 Nein ISO/IEC C++ 1998, ISO/IEC C++ 2003 Compiler Microsoft Microsoft Sun, andere Hersteller Viele Hersteller Precompiler Ja Ja Nein Ja Compiler-Schritte 1-Schritt 1-Schritt 1-Schritt i.d.r. 3-Schritt Compiler-Resultat IL-Code IL-Code Byte-Code Maschinencode Bibliothek.NET 2.0.NET 3.5 Java Standard ANSI C++ Library Bibliothek Typsystem.NET 2.0.NET 2.0 Java Sprache C++ Sprache Garbage Collection Ja Ja Ja Nein Code Organisation Trennung Deklaration von Nein Nein Nein Ja Implementation Präprozessor Ja Ja Nein Ja Unterstützung von Namensräumen Ja Ja Ja (Packages) Ja Auslieferungsformat Assembly mit PE Header (.exe,.dll) Assembly mit PE Header (.exe,.dll) Java-Archiv (.jar) Executable mit PE Header (.exe,.dll) Projektorganisation Frei Frei Verzeichnisstruktur muss Package-Hierarchie entsprechen Frei Bindung von Programmteilen Assembly-Name oder -Kennung bei Verwendung starker Namen Assembly-Name oder -Kennung bei Verwendung starker Namen Archiv-Dateiname dynamisch über Klassenpfad definiert Dateiname der Bibliothek Code-Ausführung Kompiliert Kompiliert Interpretiert (fallweise Kompiliert kompiliert) Code-Dokumentation Ja Ja Ja Nein Rolf Wenger, Stephan Fischli 2

Interoperabilität Sprachmix.NET Sprachen.NET Sprachen Nein Nein C nativ Ja Ja Ja, über Java Native Ja Interface (JNI) C++ nativ Ja Ja Ja, über Java Native Ja Interface (JNI) COM Ja Ja Nein Ja Rolf Wenger, Stephan Fischli 3

Einfache Typen Boolean bool bool boolean, Boolean bool Byte byte byte byte, Byte char sbyte sbyte n.a. unsigned char Ganzzahl vorzeichenbehaftet short short short, Short short int int int, Integer int long long long, Long n.a. Ganzzahl vorzeichenlos ushort ushort n.a. unsigned short uint uint n.a. unsigned int ulong ulong n.a. n.a. Floating Point float float float, Float float double double double, Double double decimal decimal n.a. n.a. Zeichen char char char, Character char Zeichenketten string string String string 1 Aufzählungen enum enum n.a. 2 enum Generelle Objektreferenz object object Object n.a. Funktionszeiger delegate delegate n.a. Ja Event-Handling event event n.a. Nein Anonyme Typen Nein Ja Ja (basierend auf Nein Klasse oder Interface) Einfache Arrays Ja Ja Ja Ja Mehrdimensionale Arrays Ja Ja Nein Ja Jagged Arrays (dynamisch Ja Ja Ja Nein mehrdimensionale Arrays) Boxing / Unboxing Ja Ja Ja Nein 1 In ANSI C++ Library 2 Siehe zusammengesetzte Typen Rolf Wenger, Stephan Fischli 4

Zusammengesetzte Typen Sichtbarkeit Kapselung private private private private Vererbbar protected protected n.a. protected Öffentlich public public public public Innerhalb Modul internal internal default n.a. Innerhalb Modul oder vererbbar protected internal protected internal protected n.a. Interfaces interface interface interface n.a. Einfache Vererbung Ja Ja Ja - Mehrfache Vererbung Ja Ja Ja - Konstruktoren Nein Nein Nein - Felder Nein Nein Ja, konstante Felder - Methoden Ja Ja Ja - Eigenschaften (Properties) Ja Ja Implizit durch - get-/set-methoden Events Ja Ja Nein - Indexer Ja Ja Nein - Klassen class class class class Partielle Klassenimplementation Ja Ja Nein Nein Statische Klassen Ja Ja Nein Ja Versiegelte Klassen sealed sealed final n.a. Abstrakte Klassen abstract abstract abstract Implizit über rein virtuelle Methode Einfache Vererbung Ja Ja Ja Ja Mehrfache Vererbung Nein Nein Nein Ja Sichtbarkeitssteuerung Vererbung Nein Nein Nein Ja Realisierung Interface Mehrfach Mehrfach Mehrfach Nein Felder Ja Ja Ja Ja (Elemente) Eigenschaften Ja Ja Implizit durch Nein get-/set-methoden Eigenschaften mit automatischer Nein Ja Nein Nein Feldgenerierung Instanzkonstruktoren Ja, beliebig viele Ja, beliebig viele Ja, beliebig viele Ja, beliebig viele Rolf Wenger, Stephan Fischli 5

Klassenkonstruktoren Ja Ja Ja Nein Objektinitialisierer Nein Ja Nein Ja Destruktoren (deterministisch) Nein Nein Nein Ja Finalizer (nicht determinisitisch) Ja (Destruktor wird zu Ja (Destruktor wird zu Ja (finalize-methode) Nein Finalizer) Finalizer) Methoden Ja Ja Ja Ja Überladen von Methoden Ja Ja Ja Ja Überladen von Operatoren Ja Ja Nein Ja Überdecken (nicht virtuelles Methode mit new Methode mit new Nein Ja Überschreiben) modifizieren modifizieren Virtuelle Methoden Ja Ja Alle Methoden sind Ja virtuell, ausser wenn final spezifiziert Abstrakte Methoden Ja Ja Ja Implizit durch rein virtuelle Methoden Erweiterungsmethoden Nein Ja Nein Nein Partielle Methoden Nein Ja Nein Nein Lambda-Ausdrücke Nein Ja Nein Nein Strukturen struct struct n.a. struct Vererbung Nein Nein - Ja Realisierung Interface Ja Ja - n.a. Konstruktoren kein Defaultkonstruktor kein Defaultkonstruktor - Ja Destruktoren Nein Nein - Ja Aufzählungen n.a. 3 n.a. 3 enum n.a. 3 Felder möglich - - Ja - Methoden möglich - - Ja - 3 Siehe einfache Typen Rolf Wenger, Stephan Fischli 6

Grundelemente Variablen Globale Variablen Nein Nein Nein Ja Explizit typisierte Variablen Ja Ja Ja Ja Implizit typisierte Variablen Nein Ja (nur lokal) Ja Nein const Ja (Instanzvariablen) Ja (Instanzvariablen) Nein Ja (Instanzvariablen) readonly Ja (Instanzvariablen) Ja (Instanzvariablen) Nein Nein static Ja (Instanzvariablen) Ja (Instanzvariablen) Nein Ja Ablaufsteuerung Schleife Kopfsteuerung explizit while, for while, for while, for while, for Schleife Kopfsteuerung implizit foreach foreach for n.a. Schleife Fusssteuerung do while do while do while do while Sprung break, continue, goto break, continue, goto break, continue break, continue, goto Sprung / Rücksprung Schleife yield yield n.a. n.a. Verzweigung einfach if else if else if else if else Verzweigung mehrfach switch switch switch switch Operatoren Vergleiche ==!= >= <= > < ==!= >= <= > < ==!= >= <= > < ==!= >= <= > < Logisch && & ^?: && & ^?: && & ^?: && & ^?: Zuweisung = += -= /= *= %= &= = ^= <<= >>= = += -= /= *= %= &= = ^= <<= >>= = += -= *= /= %= &= ^= = <<= >>= >>>= = += -= /= *= %= &= = ^= <<= >>= Bitverschiebung << >> << >> << >> >>> << >> Arithmetisch + - * / % + - * / % + - * / % + - * / % Unäre x++ ++x x-- --x - +! ~ x++ ++x x++ --x - +! ~ x++ ++x x-- --x- +! ~ x++ ++x x-- --x - +! ~ Verkettung + + + + Index [ ] [ ] [ ] [ ] Referenzen * & ->. 4 * & ->.. * & ->. 4 nur mit Compiler-Flag /unsafe Rolf Wenger, Stephan Fischli 7

Typ-Casting (Typ), as (Typ), as (Typ) (Typ) oder Typ( ) const_cast dynamic_cast reinterpret_cast static_cast Typbestimmung is, typeof() is, typeof() instanceof typeid() Checked / unchecked Ja Ja Nein Nein Diverse new, sizeof, true, false, stackalloc new, sizeof, true, false, stackalloc new new, delete, sizeof Rolf Wenger, Stephan Fischli 8

Erweiterte Konstrukte Exception Handling try catch Ja Ja Ja Ja try finally Ja Ja Ja n.a. try catch finally Ja Ja Ja n.a. Eigene Exception-Klassen Ja Ja Ja Ja Exception-Deklarationen bei Nein Nein Ja Ja Methoden Generische Typen Einfache Generische Typen Ja Ja Ja Ja Vererbung von konkreten Typen Ja Ja Ja Ja Vererbung von generischen Typen Ja Ja Ja Ja Constraints für Typparameter Ja Ja Ja Nein Reflection n.a. Typenabfrage Ja Ja Ja - Zugriff auf private Member Ja Ja Ja - Methodenaufruf Ja Ja Ja - Instanzierung Ja Ja Ja - Threading Thread-Synchronisation lock lock synchronized n.a. Variablenschutz volatile volatile volatile volatile Language Integrated Query LINQ to Objects Nein Ja Nein Nein LINQ to XML Nein Ja Nein Nein LINQ to SQL Nein Ja Nein Nein Attribute / Annotations class : Attribute class : Attribute @interface n.a. Datenmember Ja Ja Ja - Defaultwerte der Datenmember Ja Ja Ja - Anwendbarkeit definierbar Ja Ja Ja - Beibehaltung definierbar Nein Nein Ja - Methoden Ja Ja Nein - Rolf Wenger, Stephan Fischli 9

Schlüsselwörter Vergleich C# 2.0 und 3.0* Java 6 ANSI C++ Werttypen bool, byte, char, decimal, double, enum, float, int, long, sbyte, short, struct, boolean, byte, char, double, float, int, long, short bool, char, double, enum, float, int, long, short, void, wchar_t uint, ulong, ushort Referenztypen class, delegate, interface, object, string class, enum, extends, implements, class, struct, union, template interface Andere Typen void, var* void Modifizierer Statements abstract, const, event, extern, internal, out, override, params, partial, private, protected, public, readonly, ref, sealed, static, unsafe, virtual, volatile break, checked, catch, continue, do while, finally, fixed, for, foreach, get, goto, if-else, lock, return, set, switchcase, throw, try, unchecked, where, while, yield abstract, final, private, protected, public, native, static, strictfp, synchronized, transient, volatile assert, break, case, catch, continue, default, do, else, finally, for, if, return, switch, throw, try, while auto, const, extern, friend, inline, mutable, signed, static, unsigned, private, protected, public, register, virtual, volatile break, catch, continue, do while, goto, for, if-else, return, switch-case, throw, try, while Namensraum namespace, using, extern alias import, package namespace, using Operatoren as, explizit, false, implicit, is, new, instanceof, new operator, sizeof, typeof, true, stackalloc Zugriff base, this super, this base, this Literale default, false, null, true false, null, true default Kontextuell where throws asm, false, typedef, typeid, true Konvertierung dynamic_cast, reinterpret_cast, static_cast LINQ from*, group*, into*, join*, let*, orderby*, select*, where* Präprozessor checksum, define, elif, else, endregion, error, if, line, pragma, region, undef, warning define, elif, else, endif, error, if, ifdef, ifndef, import, include, line, pragma, undef, using Reserviert const, goto Rolf Wenger, Stephan Fischli 10