PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java oder C++


Gast
2004-05-11, 15:15:53
Was sollte "man" eher lernen? Womit macht man schneller Fortschritte? AFAIK mit Java...

Kann man auch mit Java Win-Anwendungen programmieren?

ethrandil
2004-05-11, 16:53:57
Original geschrieben von Gast
Kann man auch mit Java Win-Anwendungen programmieren?
Nein, man ist dazu gezwungen Programme zu schreiben, die überall laufen. Ist das an sich was schlechtes?

d.H. man braucht eine VM auf dem Rechner auf dems laufen soll.
und: Mit bösen Dingen (unportable libs) bekommt mans auch hin, dass Programme nur noch auf Windows laufen, aber in der Regel nicht.

Um Programmieren zu lernen ist Java wirklich besser geeignet.
Um einen Computer besser zu verstehen ist C++ (C) besser geeignet ;)

- Eth

clm[k1]
2004-05-11, 16:54:15
womit man eher fortschritte macht, kommt darauf an ...
C++ ist halt keine reine oo-programmieresprache, weswegen einige am anfang damit vielleicht leichter zurechtkommen.
ich persönlich finde aber java kompfortabler.

java programme laufen unter allen OS für die es eine java-virtualmachine gibt
(das bezieht grafische sachen (awt/swing) mit ein)

bei c++ müsste man dazu AFAIK ein toolkit wie QT verwenden welches es halt auch für windows gibt. was die sache jedoch nicht weniger plattform-abhängig macht, da man immer noch gezwungen ist das prog für alle plattformen neu zu compilieren.

am besten is sowieso wenn du dir beide sprachen anguckst....


just my 2 cent
clm[k1]

Hucke
2004-05-11, 16:55:22
Ich persönlich halte Java für eine recht gute Einsteigersprache. Der Compiler ist gratis, es gibt viele gratis Entwicklungsumgebungen die was taugen (z.B. Eclipse) und man findet auch viele Tutorials im Internet. Vor allem in Sachen objektorientierter Programmierung kann man in Java schnell Fortschritte machen, da Java, zumindest in meinen Augen, etwas einfacher und strikter damit umgeht als C++. Könnte aber auch an meinem miesen C++ Stil liegen. :D

govou
2004-05-11, 17:10:41
Ich würde dir C++ empfehlen. Kann dir zwar nicht sagen, was einfacher ist (beherrsche kein Java), hatte aber selber keine Probleme C++ zu lernen.

Gast
2004-05-11, 19:18:30
also ich weiss schon einiges, was das mit klassen, verkette listen, zeiger usw. auf sich hat. zumindest grob... aber das ist alles theoretisch... mir fehlt die umsetzung.

falls ich mich für java entscheide:

was für buch(bücher) kann man da empfehlen?

kann mal jemand links zum download posten?

ebenso gutet tutorials?

clm[k1]
2004-05-11, 19:47:26
[SIZE=1]Original geschrieben von Gast
falls ich mich für java entscheide:

was für buch(bücher) kann man da empfehlen?


Core Java 2
http://www.amazon.de/exec/obidos/ASIN/3827264642/qid=1084297495/sr=2-1/ref=sr_2_3_1/302-8104834-6449616

Java Insel
http://www.galileocomputing.de/openbook/javainsel/


so far
clm[k1]

Gast
2004-05-11, 20:59:09
was gibt es denn an guten java entwicklungsumgebungen?

ethrandil
2004-05-11, 21:01:22
eclipse, netbeans

zum lernen ist auch http://www.bluej.org echt nett.

- Eth

Gast
2004-05-11, 21:08:00
Original geschrieben von ethrandil
eclipse, netbeans



- Eth

welches sollte wer nehmen?

ethrandil
2004-05-11, 21:11:13
Original geschrieben von Gast
welches sollte wer nehmen?
Ich weiß keinen Nachteil von Eclipse gegenüber Netbeans, bis auf eine bessere Unterstützung von JSP/J2EE.

Ich kenne nur Eclipse, und würde das jederzeit weiter empfehlen. (JSP-Support müsste sich auch per Plugin installieren lassen.)

btw: Es gäbe auch noch den Borland JBuilder, aber der kostet ne Stange Geld, imho.

- Eth

clm[k1]
2004-05-11, 21:14:05
Original geschrieben von Gast
welches sollte wer nehmen?

du solltest die nehmen die dir am besten gefällt :idea:

...wäre ja noch schöner wenn man sich sagen lassen müsste was für eine IDE für einen am besten geeignet wäre :freak:


gruß
clm[k1]

huha
2004-05-11, 21:57:40
Ich würde JAVA lernen und Eclipse verwenden.
Java, weil das heute "in" ist und jeder Java lernt ;) und außerdem langsam zu einer "ordentlichen" Programmiersprache heranreift und daher sehr interessant ist (auch für die Wirtschaft gerade wegen der Plattformunabhängigkeit!) und Eclipse, weil's n tolles Tool ist und auch Wirtschaftserprobt. Außerdem gefällt's mir. JBuilder mag ich nicht.

-huha

grakaman
2004-05-11, 22:12:14
Original geschrieben von Gast
was gibt es denn an guten java entwicklungsumgebungen?

Also ich programmiere zwar kein Java, aber ich hate mal kurz den JDeveloper 10g von Oracle getestet (ganz oberflächlich). Der ist nicht schlecht. Die kommende IDE Sun Java Creator ist bestimmt auch nicht schlecht, zumindest ähnelt sie sehr VS.NET und mit JavaServerFaces hat man dann auch eine starke Technologie (ASP.NET) kopiert. Eclipse hatte ich auch mal kurz installiert, fand es aber recht spartanisch.

grakaman
2004-05-11, 22:13:34
Original geschrieben von Gast
was für buch(bücher) kann man da empfehlen?


Habe zwar keine Java Bücher gelesen, aber ich lese fast auschließlich nur noch Bücher von www.Apress.com

HellHorse
2004-05-11, 22:38:08
Original geschrieben von grakaman
Eclipse hatte ich auch mal kurz installiert, fand es aber recht spartanisch.
Das ist jetzt nicht dein Ernst?

EgonOlsen
2004-05-11, 23:52:41
Original geschrieben von ethrandil
btw: Es gäbe auch noch den Borland JBuilder, aber der kostet ne Stange Geld, imho.Nicht zwangsläufig. Den JBuilder X gibt als Foundation-Variante kostenlos. Nur kommerzielle Anwendungen darf man damit nicht erstellen.

Gast
2004-05-11, 23:56:01
kann man eine java anwendung auch compilieren, so dass die zu einer normalen win anwednung wird (auch wenn das nicht der sinn von java ist)

EgonOlsen
2004-05-12, 00:06:39
Ja, z.B. mit JET (http://www.excelsior-usa.com). Lässt sich damit komplett mit Installer usw erzeugen. Sofern man AWT/Swing verwendet, linkt er allerdings einen großen Teil des JREs mit dazu. Außer an der Größe merkt man das aber nicht. Alien Flux (http://www.puppygames.net) ist damit compiliert.

Gast
2004-05-12, 00:10:15
gab/gibt es nicht sogar ein office von corel was auf java basiert?

marco42
2004-05-12, 00:47:46
Original geschrieben von Gast
Was sollte "man" eher lernen? Womit macht man schneller Fortschritte? AFAIK mit Java...

Kann man auch mit Java Win-Anwendungen programmieren?

Wohl eher Java, aber schau dir mal Python oder Smalltalk an, ist zum Einstieg in die Programmierung besser.

grakaman
2004-05-12, 08:04:27
Original geschrieben von HellHorse
Das ist jetzt nicht dein Ernst?

Doch, ich habe aber keine Plug-ins benutzt. Kann mir aber nicht vorstellen, dass man damit den selben Funktionsumfang wie kommerzielle IDE's erhält, zumindest wohl nicht kostenlos.

ethrandil
2004-05-12, 13:50:17
Original geschrieben von grakaman
Doch, ich habe aber keine Plug-ins benutzt. Kann mir aber nicht vorstellen, dass man damit den selben Funktionsumfang wie kommerzielle IDE's erhält, zumindest wohl nicht kostenlos.
Eclipse ist nichts weiter als eine Plattform für Plugins. Wenn du keine benutzt ist das ganze sehr mager, das stimmt ;-)

Und mein Funktionsumfang ist sehr groß, obwohl ich fast nur Standardplugins verwende. Was brauchst du denn an Funktionen?

- Eth

HellHorse
2004-05-12, 13:54:31
Original geschrieben von grakaman
Doch, ich habe aber keine Plug-ins benutzt. Kann mir aber nicht vorstellen, dass man damit den selben Funktionsumfang wie kommerzielle IDE's erhält, zumindest wohl nicht kostenlos.
Mann, du hast dir Eclipse echt nicht angeschaut.
IDEA ist so ziemlich die einzige kommerzielle IDE die in Sachen Refactoring Support in der gleichen Liga wie Eclipse spielt. Der Rest liegt weit zurück.

Mir persönlich ist Eclipse fast zu überfrachtet. Leider gibt's die richtig coolen Plugins meist nur für Eclipse :(

ethrandil
2004-05-12, 14:12:14
Original geschrieben von HellHorse
Mir persönlich ist Eclipse fast zu überfrachtet. Leider gibt's die richtig coolen Plugins meist nur für Eclipse :(
Kannst ja Plugins deaktivieren / views abschalten.

Aber, (ist leider OT,) welche coolen Plugins verwendest du denn?

könnte man ja nen neuen Thread draus machen...

- Eth

grakaman
2004-05-12, 23:15:00
Also die Autocompletion ist bei Eclipse aber mager. Nach dem new Operator bekommt man dann plötzlich keine Auswahl mehr und man kann auch nicht sehen, was man dem Konstruktor alles für Argumente übergeben kann.

MfG

HellHorse
2004-05-13, 07:29:03
Original geschrieben von grakaman
Also die Autocompletion ist bei Eclipse aber mager. Nach dem new Operator bekommt man dann plötzlich keine Auswahl mehr und man kann auch nicht sehen, was man dem Konstruktor alles für Argumente übergeben kann.

MfG
Nee, fm lesen und gut ist:
CTRL + Space bzw SHIFT + CTRL + Space =)
(beide in den Top 5 der Tipps und Tricks)

Original geschrieben von Gast
gab/gibt es nicht sogar ein office von corel was auf java basiert?

AFAIK sind Teile von OpenOffice in Java geschrieben.
Original geschrieben von ethrandil
Aber, (ist leider OT,) welche coolen Plugins verwendest du denn?

Ich nutze normalerweise nicht eclipse, darum das :(

Aber da wir schon ot sind.
Eclipse (die 2er) läuft problemlos auf GNU Classpath. Einer Implentation von Java, die frei wie Freibier und freie Meinungsäusserung ist.

Gast
2004-05-13, 09:38:36
NetBeans IDE + J2SE SDK

(http://java.sun.com/j2se/1.4.2/download.html)

ist da alles drin was ich brauche?

Gast
2004-05-14, 11:20:18
Original geschrieben von Gast
kann man eine java anwendung auch compilieren, so dass die zu einer normalen win anwednung wird (auch wenn das nicht der sinn von java ist)

ich meine mal gelesen zu haben, daß man java auch richtig compilieren kann. dann läuft es zwar nur auf der entsprechenden plattform aber eigentlich so schnell wie eine c++ anwendung!

stimmt das? und wenn ja womit?

HellHorse
2004-05-14, 13:45:03
Original geschrieben von Gast
stimmt das? und wenn ja womit?
gcj (http://gcc.gnu.org/java/) z.B.
Weiss aber nicht, wie das dann mit der Garbage Collection läuft.
Allerdings wird Java-Bytecode zur Laufzeit meist auch vom JIT in Maschinencode compiliert.

@anderer Gast
Ja, falls du das Bundle meinst.

stefan42
2004-05-14, 23:20:04
ich meine mal gelesen zu haben, daß man java auch richtig compilieren kann. dann läuft es zwar nur auf der entsprechenden plattform aber eigentlich so schnell wie eine c++ anwendung!


Dazu gibt es Excelsior JET und gcj. Unterschiede liegen darin, dass ersters kommerziell und zweiteres open source ist (und nur die libraries des Java Classpath Projektes verwendet, d.h. kein Swing, fast kein AWT etc. - kurzum während JET jedes Java-Programm kompiliert, kann das GCJ (noch) nicht).

Dass es dadurch schneller wird ist allerdings mindestens der gleiche Aberglaube, wie dass C++ grundsätzlich schneller ist als Java. Durch die Ahead-Of-Time Übersetzung gehen nämlich die Vorteile des Just In Time Compilers verloren (z.B. Inlining von virtuellen Funktionen).

pajofego
2004-05-15, 20:32:04
Java ist bestimmt keine schlechte Wahl, aber bevor du dich auf Java stürtzt, schau dir mal unbedingt C# an. Als IDE kannst du SharpDevelop hier zu SharpDevelop: (http://www.icsharpcode.net/OpenSource/SD/) nehmen. C# ist z.Zt. meine 1. Wahl danach würde ich Java nehmen, danach Delphi und nie C++. Bitte lern es nur, wenn es sein muss und dann erst wenn du einer der o.g. Sprachen beherrscht. Dann wirdst du vielleicht nicht einer von diesen kryptischen Programmierern a al C++.

Gruss pajofego

ScottManDeath
2004-05-16, 17:23:20
Original geschrieben von pajofego
Java ist bestimmt keine schlechte Wahl, aber bevor du dich auf Java stürtzt, schau dir mal unbedingt C# an.


Full ACK.

Zu bedenken .NET (und damit C#) ist (zur Zeit) nur theoretisch plattformabhängig ( es gibt z.B. Mono, Rotor und DotGnu als .NET Runtimes für andere Plattformen, die aber z.T. noch nicht auf dem gleichen Stand wie die für Win32 sind).
Java ist da aufgrund der längeren Zeit am Markt doch schon ausgereifter und weiter verbreitet.



Original geschrieben von pajofego
... und nie C++. Bitte lern es nur, wenn es sein muss und dann erst wenn du einer der o.g. Sprachen beherrscht. ...


IMHO etwas übertrieben. Gerade für das tiefe Verständnis (z.B. der Innereien von .NET und Java) ist die Kenntnis von C++ (oder auch Assembler) nicht schlecht. Mir z.B. hat meine langjährige C++ Erfahrung doch einiges an Verständnis für .NET gebracht (z.B. wie der GC funktioniert, was für Vorteile mir er bringt...)

Original geschrieben von pajofego ...Dann wirdst du vielleicht nicht einer von diesen kryptischen Programmierern a al C++....

:kratz2: , man kann in jeder Sprache kryptischen Code schreiben.
Es mag sein das man sich bei C++ etwas verlieren kann, dafür hab ich die Flexibilität und Möglichkeit Dinge in C++ elegant zu lösen die ich in C# z.T. nur sehr umständlich und ugly lösen kann. Mir fällt z.B. grade der Mangel an templates (kommt in C# 2.0) ein. #defines sind bei geschicktem Einsatz doch recht nützlich (und nein, ich rede jetzt nicht von #defines als const Ersatz oder als Ersatz von template Funktionen ;))

Ausserdem hat man den Zonk wenn man z.B. Hardware nahe programmieren muss. Ich hatte neulich grade das Problem das ich einen USB Treiber nutzen wollte, da war mir das ganze in C# über P/Invoke doch etwas umständlich, also hab ich das fix als mit C++ COM Objekt gemacht und unter C# eingebunden.


Zur Zeit ist C# auch meine Sprache No1, weil ich da recht fix ein GUI zusammenklicken kann ;)
Mit Managed C++ mach ich all das was mit C# nicht zu machen ist.
:massa: #define und template<> Metaprogrammierung

Wenn im Visual C++ 2005 dann C++/CLI dabei ist kann es durchaus passieren das ich wieder zu C++ zurückkehre da dann C++ für .NET sich in die Sprache einbettet und es sich "richtig" anfühlt, nicht wie zur Zeit mit Managed C++ :kotz:

IMO es günstig C++ zu lernen und dann (mindestens) eins von C# oder Java.

Wenn man C++ kann, fühlt man sich recht schnell bei Java und C# zu Hause, da sie alle mehr oder weniger auf C++ basieren.

INTRU
2004-05-17, 10:43:18
Was ist genau C#?
Ist das nicht das 'Microsoft-java'?

c# vs. Java (Vor-, Nachteile, Unterschiede).

ScottManDeath
2004-05-18, 17:22:51
Bin zu faul das ganze selbst zu schreiben ;)

http://www.25hoursaday.com/CsharpVsJava.html etwas älter, aber gutes sum up

stefan42
2004-05-18, 19:36:57
Als alter C#-Nörgler möchte ich noch anmerken, dass c# zwar bemüht sein will offensichtliche Schwächen von Java auszumerzen, aber dabei eine ganze Menge Mist (wieder) einführt:
* Virtuelle Methoden. In Java ist jede Methode virtual. Praktisch eigentlich. Die c# Macher dachten wohl, dass dies langsam sein muß und führten es wieder ein. (Wobei Java's Hotspot virtuelle Methoden inlinen kann, d.h. mittlerweile sind sie nicht zwingend langsamer als normale Methodenaufrufe). Ganz unerträglich ist, dass die Methoden von Interfaces auch nicht virtual sind, sondern dass die implementierende Klasse angeben muss, ob es das Interface virtual oder nicht virtual implementiert. Wer kommt denn auf so eine Idee? (Wenn man in C++ von einem Interface spricht, meint ja auch jeder eine Klasse mit ausschließlich pure virtual Methoden).
* Structs. Überflüssig und wirres Konzept. Kein Defaultconstructor darf angegeben werden, keine Defaultwerte für Member, keine Vererbung.
* Properties und Destructor. Überflüssig ( http://www.geocities.com/csharpfaq/properties.html ) und verwirrend, weil in MSIL doch wieder nur normal Methoden dafür verwendet werden.

Was schon interessant ist: Die oben genannte FAQ fügt bei fast allen Features die c# im Vergleich zu Java zusätzlich hat ein "don't use" an....

c# hat insgesamt deutlich mehr Fallstricke als Java. Leider wird Java 1.5 auch eine deutliche Verschlechterung bedeuten (die Einschränkungen der Generics sind z.T. leider ziemlich schwer einzusehen)

ScottManDeath
2004-05-18, 21:03:13
Verlinkter FAQ würde ich genausoviel glauben schenken wie einer FAQ von Microsoft über die Vorteile von Java ;)
Du kannst ja mal in comp.lang.java.advocacy oder ms.public.dotnet.languages.csharp nach petilon gucken, Trolling at its best ;)

Über diese "FAQ" möchte ich mich nicht auslassen, man kann objektiv urteilen oder aber auch nicht....

Original geschrieben von stefan42
* Properties und Destructor. Überflüssig ( http://www.geocities.com/csharpfaq/properties.html ) und verwirrend, weil in MSIL doch wieder nur normal Methoden dafür verwendet werden.


Properties sind syntaktischer "Zucker", man schreibt halt myform.Width anstelle von myform.getWidth();

Mir persönlich gefallen die Properties recht gut, sieht aus wie ein Attribut (was es ja auch ist), hat aber Zugriffsschutz wie ein private Element.


In C++ oder Java:

foo.setSize (getSize () + 1);
label.getFont().setBold (true);

In C#

foo.size++;
label.font.bold = true;


Frage: Was ist leichter lesbar und leichter verständlich?

Original geschrieben von stefan42
* Virtuelle Methoden. In Java ist jede Methode virtual. Praktisch eigentlich. Die c# Macher dachten wohl, dass dies langsam sein muß und führten es wieder ein. (Wobei Java's Hotspot virtuelle Methoden inlinen kann, d.h. mittlerweile sind sie nicht zwingend langsamer als normale Methodenaufrufe). Ganz unerträglich ist, dass die Methoden von Interfaces auch nicht virtual sind, sondern dass die implementierende Klasse angeben muss, ob es das Interface virtual oder nicht virtual implementiert. Wer kommt denn auf so eine Idee? (Wenn man in C++ von einem Interface spricht, meint ja auch jeder eine Klasse mit ausschließlich pure virtual Methoden).


Bei Java sind alle Methoden virtual, bei C# habe ich die Wahl ob ich es möchte oder nicht. Es hat durchaus Performanceauswirkungen...

Es ist zugegebenermaßen am Anfang verwirrend das die Methoden eines Interfaces nicht virtuell sind, die ist aber genauso eine Konvention wie bei Java das alle Methoden virtual sind. Es hat durchaus seinen Vorteil das man sagen kann ob man Methoden virtuell oder nicht aufrufen möchte.

Was z.B. passiert wenn der Autor einer Klasse die du nutzt sich entscheidet in der Version 2.1 eine Methode void DumpDebugInfo() hinzuzufügen (die Daten an den Standard Debugger sendet), du aber in einer Abgeleiteten Klasse eine Methode void DumpDebugInfo() hast, welche die Daten über TCP an einen RemoteDebugger sendet.
Im Code der die Klasse nutzt rufst du dann z.B. für eine Referenz auf die Basisklasse die Methode DumpDebugInfo auf und wunderst dich warum im debuger nix ankommt wenn der dynamische Typ der deiner abgeleiteten Klasse ist, sondern die Firewall anspringt? Nicht virtuelle Calls haben durchaus ihre Berechtigung...

IMO ist es sowohl für Java, als auch für .NET (und damit C#, VB.NET, ....) ganz gut das es beides gibt, so müssen die beiden Konzerne ihre den eigenen Interessen angepassten Plattformen nach unseren Wünschen anpassen damit wir nicht überlaufen ;)

Und nein, ich lass mich nicht auf einen .NET vs Java Flamewar ein;) .NET und Java haben z.T. Unterschiedliche Ziele, zum anderen hat das eine einiges was das andere nicht hat. Für jeden Zweck das passende Werkzeug

HellHorse
2004-05-18, 21:52:03
Original geschrieben von ScottManDeath
Bei Java sind alle Methoden virtual, ..
Nee bloss public und proteced, private nicht (von package und default weiss ich es nicht).

Besonders cool finde ich in C# die Kombination new vitural ;)

Und von wegen Performance:
Wir haben das Jahr 2004, wir sollten Sprachen an anderen Kriterien messen als Performance.
Mein Lieblingsbeispiel in dieser Sache ist array-rangecheck:
Wer denkt alles array-rangecheck sei überflüssig da zu lahm?
Tatsache ist:
array-rangecheck kostet im Schnitt etwa 2% Performance und beseitig auf einen Schlag ohne zusätzlichen Aufwand 50% aller Sicherheitslücken.
Bufferoverflows weg, einfach so. Ohne NX-Bit, ohne neue CPU, ohne neues OS, ohne gar nix.

Naja mal sehen, vielleich führt die Traits Forschung, die Micro$~1 bezahlt, ja zu was.

ScottManDeath
2004-05-18, 22:09:01
Original geschrieben von HellHorse
Nee bloss public und proteced, private nicht (von package und default weiss ich es nicht).


Das sind im Endeffekt alle, denn wie soll man denn eine private Methode überschreiben können? ;)

Original geschrieben von HellHorse
Besonders cool finde ich in C# die Kombination new vitural ;)


Hehe, du weist ja sicherlich das dies (zusammen mit dem override keyword) z.b. mein beschriebenes problem löst.

Original geschrieben von HellHorse
Und von wegen Performance:
Wir haben das Jahr 2004, wir sollten Sprachen an anderen Kriterien messen als Performance.
Mein Lieblingsbeispiel in dieser Sache ist array-rangecheck:
Wer denkt alles array-rangecheck sei überflüssig da zu lahm?
Tatsache ist:
array-rangecheck kostet im Schnitt etwa 2% Performance und beseitig auf einen Schlag ohne zusätzlichen Aufwand 50% aller Sicherheitslücken.
Bufferoverflows weg, einfach so. Ohne NX-Bit, ohne neue CPU, ohne neues OS, ohne gar nix.


Full ACK, lieber 10% langsamer, dafür sicherer und schneller entwickelt, ist ja auch eine Teilmotivation (neben dem kommerziellen Interesse von Sun und MS) für das ganze.


Original geschrieben von HellHorse
Naja mal sehen, vielleich führt die Traits Forschung, die Micro$~1 bezahlt, ja zu was.

Was ist das?

grakaman
2004-05-18, 22:34:47
Original geschrieben von stefan42
* Virtuelle Methoden. In Java ist jede Methode virtual. Praktisch eigentlich. Die c# Macher dachten wohl, dass dies langsam sein muß und führten es wieder ein. (Wobei Java's Hotspot virtuelle Methoden inlinen kann, d.h. mittlerweile sind sie nicht zwingend langsamer als normale Methodenaufrufe). Ganz unerträglich ist, dass die Methoden von Interfaces auch nicht virtual sind, sondern dass die implementierende Klasse angeben muss, ob es das Interface virtual oder nicht virtual implementiert.


Das macht ja auch voll keinen Sinn, alle Klassen als virtual zu deklarieren. In der Praxis zeigt es sich, dass virtual Methode vor allem viel bei EventHandlern sinnvoll sind. Was mache ich denn aber, wenn ich eine Komponente mit einer Methode zur Verfügung stellen will, die aber immer exakt genau so Funktionieren soll, wie sie implementiert ist? Warum sollte man die überschreiben können?


* Structs. Überflüssig und wirres Konzept. Kein Defaultconstructor darf angegeben werden, keine Defaultwerte für Member, keine Vererbung.


Structs sind Value Types, d.h. sie liegen auf dem Stack und müssen auch nicht auf dem GC warten, um deallokiert zu werden. Man sollte sie dementsprechend auch nur für kleine Werte benutzen.


* Properties und Destructor. Überflüssig ( http://www.geocities.com/csharpfaq/properties.html ) und verwirrend, weil in MSIL doch wieder nur normal Methoden dafür verwendet werden.


Ein Destruktor ist für dich überflüssig? Wie sonst möchtest du denn irgendwie kennzeichnen, ob ein Object deallokiert wird?

stefan42
2004-05-18, 23:14:08
Ein Destruktor ist für dich überflüssig? Wie sonst möchtest du denn irgendwie kennzeichnen, ob ein Object deallokiert wird?

Absolut! Fakt ist, Destruktoren funktionieren bei GC-Sprachen nicht wirklich und drücken die Performance (Ich glaube, dass in Java eine Klasse mit Finalize erst beim 2. GC entsorgt werden kann, die Performance des GCs soll sich dramtisch verschlechtern.) Deswegen gibt's ja auch IDisposable und using in c#. Da hätte c# Punkten können, wenn es sich um RAII ( http://www.hackcraft.net/raii/ ) gekümmert hätte. Ob ich das Pattern mit Dispose und SupressFinalize eine gute Lösung finden soll, weiß ich nicht.

HellHorse
2004-05-18, 23:15:10
Original geschrieben von ScottManDeath
Das sind im Endeffekt alle, denn wie soll man denn eine private Methode überschreiben können? ;)

Alle nach aussen sichtbaren. private hat aber wie alle Modifikatoren class-scope. Eine innere Klasse würde sie also sehen.
Aber private und virtual ist schon nicht die cleverste Idee ;)
Original geschrieben von ScottManDeath
schneller entwickelt
Das habe ich ganz vergessen. Das Demotivierendste an einer neuen Sprache ist für mich immer wie scheisse unproduktiv ich damit am Anfang bin.
Original geschrieben von ScottManDeath
Was ist das?
Ein allgemeiner Konsens zu Mehrfachvererbung ist:
"Es ist richtig, bloss machen wir es nicht richtig."
Traits ist ein weiterer Versuch dazu Mehrfachvererbung "richtig" zu machen. paper (http://www.iam.unibe.ch/~scg/Archive/Papers/Scha03aTraits.pdf)
Anstatt wie Vererbung in der Horizontalen wirken Traits in der Vertikalen.

IIRC war es zuerst in SELF und soll im nächsten Visual Works sein.
Es gibt für einige Sprachen Patches, z.B. Sqeak, pearl.
Wie schon gesagt, ist im Moment Gegenstand von Forschungen. Micro$~1 bezahlt Uni's damit sie ein C#-Trait's Prototyp bauen.
Falls es in C# aufgenommen wird, würde es mich nicht wundern, wenn es bald etwas ähnliches in Java gibt ;)

grakaman
2004-05-18, 23:41:55
Original geschrieben von stefan42
Absolut! Fakt ist, Destruktoren funktionieren bei GC-Sprachen nicht wirklich und drücken die Performance (Ich glaube, dass in Java eine Klasse mit Finalize erst beim 2. GC entsorgt werden kann, die Performance des GCs soll sich dramtisch verschlechtern.) Deswegen gibt's ja auch IDisposable und using in c#. Da hätte c# Punkten können, wenn es sich um RAII ( http://www.hackcraft.net/raii/ ) gekümmert hätte. Ob ich das Pattern mit Dispose und SupressFinalize eine gute Lösung finden soll, weiß ich nicht.

Zum Codebereinigen sollte man, wie du sagtest, IDisposal implementieren. Aber die Bereinigung, also die Dispose Methode, sollte auch automatisch funktionieren, wenn nicht using benutzt wird. Und das geht nur mittels Destructor. Und Disposal sollte man ja hauptsächlich verwenden, wenn man auf unmanaged Ressourcen zugreifen muss (z.B. Datenbanken, Dateien). Ich brauche sie trotzdem nicht überall. Außerdem spielte ich weniger auf die "Bereinigung" an, sondern nur mittels Konstruktor kann man feststellen, dass ein Objekt deallokiert wird, um z.B. die gesamte Anzahl eines Typs in einem statischen int zu speichern oder was weiß ich. Es entstehen ja dadurch keine Nachteile und man hat ja nur mehr Möglichkeiten, die man je nach Szenario eben entsprechend einsetzen muss.
Und der Performancenachteil resultiert imo einzig und allein daraus, dass eben alle Threads einer App Domain angehalten werden, während der GC arbeitet. Bei großen Bereinigungen im Destruktor ist das freilich kritisch, es gibt aber vielleicht auch Szenarien, wo das nicht unbedingt so ist.

ScottManDeath
2004-05-19, 00:25:20
Original geschrieben von stefan42
Absolut! Fakt ist, Destruktoren funktionieren bei GC-Sprachen nicht wirklich und drücken die Performance (Ich glaube, dass in Java eine Klasse mit Finalize erst beim 2. GC entsorgt werden kann, die Performance des GCs soll sich dramtisch verschlechtern.) Deswegen gibt's ja auch IDisposable und using in c#. Da hätte c# Punkten können, wenn es sich um RAII ( http://www.hackcraft.net/raii/ ) gekümmert hätte. Ob ich das Pattern mit Dispose und SupressFinalize eine gute Lösung finden soll, weiß ich nicht.


Im C++/CLI (im Visual C++ 2005) ist es auch für eine GC Sprache möglich deterministisches aufräumen zu haben.

http://download.microsoft.com/download/1/1/B/11B54B37-7B64-4F06-AD6A-D7BA081BF1D0/TLS310.ppt
http://download.microsoft.com/download/1/1/B/11B54B37-7B64-4F06-AD6A-D7BA081BF1D0/TLS401.ppt

ScottManDeath
2004-05-19, 01:56:10
Original geschrieben von HellHorse
Das habe ich ganz vergessen. Das Demotivierendste an einer neuen Sprache ist für mich immer wie scheisse unproduktiv ich damit am Anfang bin.


IMO ist es das was z.B. Java und .NET zu Beginn etwas träge macht die fehlende Kenntnis über die Klassen des Frameworks, man ist halt dauernd am abwägen ob man es selbst codet oder ob man nachguckt ob es das schon gibt ;)


Traits hören sich gut an, hab das paper überflogen, allerdings spreche ich kein fliessend Smalltalk ;) deswegen war mir einiges im Code nicht so klar....



IRC kann man mit C++ templates auch so was ähnliches implementieren, z.B. in der WTL oder ATL....
Ich hab auch schon sowas gemacht, allerdings war das wohl eher ein Mixin, so eine Art statischer Polymorphismus