Laden...

Wozu C#, wenn es C/C++ gibt?

Erstellt von SirGawain vor 19 Jahren Letzter Beitrag vor 19 Jahren 19.517 Views
333 Beiträge seit 2004
vor 19 Jahren

@Ftee:
Klar ist es ein Glaubenskrieg... Die Frage ist ja, wer ihn gewinnt 🙂 Aber im Endeffekt wunderts mich das hier in dem C#-Forum einige C/C++-Anhänger präsent sind. Vor allem das sie Partout nicht einsehn wollen, daß C# die besser Sprache is 😉 Ne, Scherz. Jede Sprache hat seine Stärken und Schwächen, wobei C# allerdings als eine Sprache mit vielen Stärken und wenigen Schwächen ist.

Übrigens noch Danke an Code-Hacker für die Einsicht in die Gedankengänge eines C++lers 🙂

([bb]|[^b]{2})

V
842 Beiträge seit 2003
vor 19 Jahren

Hi!

Original von NoOneKnows
@Ftee:
Klar ist es ein Glaubenskrieg... Die Frage ist ja, wer ihn gewinnt 🙂 Aber im Endeffekt wunderts mich das hier in dem C#-Forum einige C/C++-Anhänger präsent sind. Vor allem das sie Partout nicht einsehn wollen, daß C# die besser Sprache is 😉 Ne, Scherz. Jede Sprache hat seine Stärken und Schwächen, wobei C# allerdings als eine Sprache mit vielen Stärken und wenigen Schwächen ist.

Stimmt! Ich bin aber davon überzeugt das jeder Programmierer immer eine Sprache hat in der er besonders gut ist. Und in der Windowswelt ist C# auf jedenfall sehr bedeutend und vielleicht ja auch immer mehr auf Linux.

Original von NoOneKnows
Übrigens noch Danke an Code-Hacker für die Einsicht in die Gedankengänge eines C++lers 🙂

*g*

Code-Hacker

F
71 Beiträge seit 2004
vor 19 Jahren

wobei ich allerdings der Meinung bin, das man sich lieber mehr allgemeines Verständnis der allgemeinen Grundlagen und Methoden aneignen und pflegen sollte.... über mehrere Sprachen hinweg.
Spezialisten in einer bestimmten Sprache gibts wie Sand am Meer. (Ausser vielleicht SAP 🙂 )

Aber wenn man zu sehr auf eine Sprache oder einem Framework festhängt, wird man meiner Meinung nach "Betriebsblind".

Hat man ein paar Sprachen durch, oder ist gezwungen ständig verschiedene zu benutzen, merkt man halt das es letztendlich auch C# nur ein weiteres Werkzeug ist.
In ein paar Jahren wird auch C# durch etwas besseres abgelöst.

Im Moment ist es in Verbindung mit .NET wirklich ein gut gelungenes Gesamtkonzept. Keine Frage. Aber alles (auch C#) hat Vor- und Nachteile.

333 Beiträge seit 2004
vor 19 Jahren

Original von Ftee
Aber wenn man zu sehr auf eine Sprache oder einem Framework festhängt, wird man meiner Meinung nach "Betriebsblind".

Auf jeden Fall! Ich denke mal die meisten hier Forum haben nicht mit C# angefangen, sondern vorher was anderes geproggt. Aber von allen Sprachen die ich bis jetzt intensiver gelernt habe, und das sind ein halbes Dutzend (darunter auch C++ 🙂, ist C# die modernste und ausgeklügelteste...

In ein paar Jahren wird auch C# durch etwas besseres abgelöst.

Das nennt sich dann C* oder so... 🙂 Überhaupt ne Frage dazu, die ich mir schon öfter gestellt hab: Gibt es noch etwas besseres als die objektorientierte Programmierung? Früher dachte man ja auch die prozedurale Programmierung sei das Wahre. Bloß ich kann mir net vorstellen wie der nächste Entwicklungsschritt aussehen sollte...

([bb]|[^b]{2})

F
71 Beiträge seit 2004
vor 19 Jahren

C# ist auf jeden Fall sehr verdammt gut überlegt. Es hat den sehr guten Editor von MS, und der Aufbau des Frameworkes und der Sprache auch viel von der VCL. Die IDE ist Borland sehr ähnlich.
Man merkt, das der Delphi-Entwickler dabei gewesen ist. Wobei für mich ein grosser Teil der Komforts vom Editor ausgeht! Der ist fast so gut wie Ultraedit, einzig die Tasten und Macroverwaltung ist noch nicht ganz das Wahre, aber gibt ja immer was zu meckern 😉

Das Projektmanagement ist schlicht genial. Es ist kein Problem eine Solution mit 3 Dutzend Unterprojekte zu halten. Und das man die Startapplikation mittels zwei Klicks auswählen kann ist beim debuggen EXTREM hilfreich.

Ich arbeite sehr gerne damit.

Für mich war C++ mit der STL immer das höchste. Und ich halte es immer noch für sehr gelungen. C# bzw. .NET hat allerdings den Riesengrossen Vorteil, das es der Beginn eines Abschieds von COM ist! DAS ist es, was mich unter Windows immer wieder an den Rand der Verzweifelung trieb. Das Konzept des GACs insgesamt halte ich für sehr zukunftsfreundlich, obwohl ein "zumüllen" des Systems so leicht begünstigt wird, aber wie gesagt: es gibt immer was zu meckern 😉

Ich denke, das .NET allgemein ein grosser Schritt in der Windows-Welt ist. Insgesamt denke ich, das sich das Konzept und die Sprache auch unter Linux Freunde schaffen wird. Das dieses unterstützt wird, dafür wird Novell schon Sorgen. Auch die haben Interesse für MS und eigene Produkte möglichst identische Sourcen zu haben, und so gleiches Look&Fell sowie interne Integrität auf beiden Welten zu bieten.

.NET ist die Zukunft. Davon gehe ich aus. Es wäre ein Fehler auf altes zu beharren. Trotzdem wirds der grosse Umbruch erst mit Longhorn kommen.

445 Beiträge seit 2003
vor 19 Jahren

Original von NoOneKnows
[...]

In ein paar Jahren wird auch C# durch etwas besseres abgelöst.
Das nennt sich dann C* oder so... 🙂 Überhaupt ne Frage dazu, die ich mir schon öfter gestellt hab: Gibt es noch etwas besseres als die objektorientierte Programmierung? Früher dachte man ja auch die prozedurale Programmierung sei das Wahre. Bloß ich kann mir net vorstellen wie der nächste Entwicklungsschritt aussehen sollte...

Hi,

es gibt die sog. methodenorientierte Programmierung, ist aber nicht umbedingt das wahre: http://www.c-plusplus.de/forum/viewtopic.php?t=59767&start=30&postdays=0&postorder=asc&highlight=

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

F
529 Beiträge seit 2003
vor 19 Jahren

von Ftee
C# ist auf jeden Fall sehr verdammt gut überlegt. Es hat den sehr guten Editor von MS, und der Aufbau des Frameworkes und der Sprache auch viel von der VCL.

Bitte bringt mich nicht um wenn ich behaupte, dass der VS-Editor nicht so soderlich gut ist. Wer schonmal mit Eclipse gearbeitet hat, der wird das selbe von VS denken wie ich. Der VS-Editor ist schon nicht mehr auf dem neuesten Stand, da am Editor glaube ich seit VS2001(und es gab auch kaum Verbesserungen zu VS6 bis auf das bessere Intellisense und die Funktionen ausblenden) kaum was gemacht wurde. Eclipse bietet da viel mehr aber ist dennoch übersichtlicher als VS. Nur leider ist Eclipse manches mal sehr langsam. Ich werde daher nach meinem jetztigen Projekt
a) Eclipse mit Java verwenden
b) Eclipse mit dem C#-Plugin verwenden

Nun, .net hat zwei gewaltige Fortschritte(Was die Programmierer davon halten weiß ich nicht):
-keine Verwendung der Registry nötig (soll auch garnicht mehr gemacht werden)
-wie Ftee schon gesagt hat kein Comgefubbel mehr

--
mfg
Franknstein

Besuchen sie das VisualC++ - Forum

333 Beiträge seit 2004
vor 19 Jahren

Original von zeus
es gibt die sog. methodenorientierte Programmierung, ist aber nicht umbedingt das wahre:
>

Sieht strange aus. Hier ein Beispiel Code von C-mol:


// Methodenorientiertes C-mol Programm zur Flächenberechnung

#include <stdio.h>
#include <math.h>
#define STYLE_NEWLINE 1
#define STYLE_UNDERLINED 2

struct SRechteck
{
	float SeiteA, SeiteB;
};

struct SKreis
{
	float radius;
};

// Berechnungsmethodemethod
FlaecheBerechnen()
{
	// Prolog
	FlaecheBerechnen() 
	{
		printf("Berechne Flaeche...\n") 
	}

	//Handling für Kreis
	float <SKreis>() 
	{	
		const float PI=3.1415;
		float Flaeche;
		Flaeche = PI*that.radius*that.radius;
		print("%f", Flaeche);
		return Flaeche;
	}

	//Handling für Rechteck
	float <SRechteck>() 
	{
		float Flaeche;
		Flaeche = that.SeiteA*that.SeiteB;
		return Flaeche;
	}

};


// Eingabemethodemethod
Einlesen()
{
	// Prolog
	Einlesen() 
	{
		printf("Bitte geben Sie alle notwendigen Daten fuer ");
	}

	// Handling für Rechteck
	void <SRechteck>() 
	{
		printf("das Rechteck ein:\n");
		printf("Seite a: ");
		scanf("%f", &(that.SeiteA));
		printf("Seite b: ");
		scanf("%f", &(that.SeiteB));
		printf("\n");
	}

	// Handling für Kreis
	void <SKreis>() 
	{
		printf("den Kreis ein:\n");
		printf("Radius: ");
		scanf("%f", &(that.radius));
		printf("\n");
	}
	
};

// Ausgabemethodemethod
Ausgeben(int Style)
{
	// Epilog
	~Ausgeben() 
	{
		if(Style == STYLE_NEWLINE) 
		{
			printf("\n");
		}
		else if(Style == STYLE_UNDERLINED) 
		{
			printf("\n------------------------------\n\n");

		}
	}

	// Handling für Kreis
	void <SKreis>() 
	{
		printf("Kreis mit Radius = %f", that.radius);
	}


	// Handling für Rechteck
	void <SRechteck>() 
	{
		printf("Rechteck mit Seite a = %f und Seite b = %f", that.SeiteA, that.SeiteB);
	}

	// Handling für die Flächen-Ausgabe
	void <float>(char *Typ) 
	{
		printf("%sflaeche = %f", Typ, that);
	}
	
};

// Hauptprogrammint main()
{
	struct SRechteck *pRechteck = new SRechteck;
	struct SKreis *pKreis = new SKreis;
	float Flaeche;

	// Flächenberechnung für Rechteck
	Flaeche = FlaecheBerechnen()<-Einlesen()<-pRechteck();
	Ausgeben(STYLE_NEWLINE)<-pRechteck();
	Ausgeben(STYLE_UNDERLINED)°Flaeche("Rechteck\0");

	// Flächenberechnung für Kreis
	Flaeche = FlaecheBerechnen()<-Einlesen()<-pKreis();
	Ausgeben(STYLE_NEWLINE)<-pKreis();
	Ausgeben(STYLE_UNDERLINED)°Flaeche("Kreis\0");
	delete pRechteck;
	delete pKreis;
	return 0;
}

Und so den direkten Vorteil kann ich im Moment nicht erkennen. Wahrscheinlich muß man sich damit erst näher befassen. Im grundegenommen ist es ja wieder ein Schritt zur prozeduralen Programmierung. Dort hat sich alles immer um Prozeduren gedreht, nicht wie bei OOP um die Daten. Nur das bei MOP mit einer Methode alles verarbeitet werden kann. Aber wenn ich die Methode sowieso um diesen Typ jeweils erweitern muß, dann kann ich auch gleich das Objekt entsprechend erweitern. Mit Hilfe von Interfaces kann man auch an Objekten solche Verallgemeinerungen vornehmen.

([bb]|[^b]{2})

F
529 Beiträge seit 2003
vor 19 Jahren

Wenn ich mir das so anschaue denke ich, dass z.B. für die Handhabung von Dateien in einem komplexen Format diese Art der Programmierung effizent ist...

--
mfg
Franknstein

Besuchen sie das VisualC++ - Forum

C
65 Beiträge seit 2004
vor 19 Jahren

So, ich mag auch nochmal meine Cents dazugeben:

<zyn>
C# ist VB, verpackt in C++.
</zyn>

Auf den ersten Blick sieht C# ja schon aus wie C++, außer dass die hässlichen -> wegfallen. Und das ist dann wieder die Verwandtschaft zu VB: ein "." ist immer richtig. Das ist für den Einstieg wirklich gut. Und natürlich die GC, wobei die Beschreibung, wie die im Detail arbeitet, mindestens einen Dipl.-Ing. zum Verständnis voraussetzt 😉

Der eigentliche Vorteil von C# liegt abgesehen von Kleinigkeiten eben nicht in der Syntax, sondern im Framework. Das, was die schicke ATL in C++ ist, ist im Framework in noch schickeren Klassen eingepackt.

An C# vermissen tu ich aber auch ein paar Dinge: Header-Files (statt der ***** Assembly-Referenzen und zur Trennung von Deklaration und Definition sowie die Möglichkeit, bitte alle Operatoren überladen zu können (diesen Sonderweg für [] habe ich bis heute noch nicht in seiner Sinnhaftigkeit erfasst) und Mehrfachvererbung. Interfaces finde ich immer noch irgendwie eklig, und wenn ich mir einige meiner Klassen anschaue, wimmelt es dort vor Reflection, nur um Interfaces zu vermeiden... 🤔

So, und bei aller Diskussion darf man nicht vergessen, dass C# eine Sprache mitten in der Entwicklung ist. Auch C++ war in frühen Jahren nicht wirklich ausgereift. Mit den 2.0-Compilern wird uns noch eine Menge an (hoffentlich schönen) Neuerungen ins Haus stehen.

<Absatz />

Wie man an einigen Postings sieht, ist MS die Verzahnung von C# mit VS.NET und dem Framework offenbar sehr gut gelungen ("C# hat eine tolle Bibliothek und eine tolle IDE") -- wenngleich man über den Sinn so mancher Vorlagen innerhalb des VS wohl trefflich streiten könnte: Ich persönlich halte die meisten Vorlagen, insbesondere auf Datenbank-Anwendungen bezogen, für völlig sinnlos, und das übelste Verbrechen ist für mich nach wie vor das "Data-Binding" von Controls. Wer sich da einmal dran gewöhnt hat, dem dürfte es schwer fallen, mal eine N-Tier-Anwendung sauber zu programmieren.

C# an sich ist für mich jedenfalls nur das recht ordentlich geglückte Ergebnis der Forderung, der Programmierer solle sich um das Lösen einer Aufgabe kümmern können, statt sich mit den Anforderungen einer Sprache herumzuschlagen. Das erkennt man unter anderem daran, dass MS selbst wieder von der ungarischen Notation abgekehrt ist (weil sie überflüssig ist unter C#/.NET).

Übrigens, was die Sicherheit angeht, so ist das, was in ein paar Postings hier im Thread geschrieben wurde, eher das Zustimmen zu Microsofts DAU-Schutz: "Schützen wir den Computer mal besser vor der Dusseligkeit des Programmierers!" Denn auch in C lässt sich sicherer Code schreiben. Wer einen B-Tree im Speicher aufbaut, sollte auch wissen, wie man ihn wieder sauber abbaut, und wer partout "strcpy()" statt "strncpy()" benutzen will, dem ist halt nicht zu helfen... 😉

/// <summary>
/// Signatur
/// </summary>

333 Beiträge seit 2004
vor 19 Jahren

Original von CarstenP
An C# vermissen tu ich aber auch ein paar Dinge: Header-Files (statt der ***** Assembly-Referenzen und zur Trennung von Deklaration und Definition sowie die Möglichkeit, bitte alle Operatoren überladen zu können (diesen Sonderweg für [] habe ich bis heute noch nicht in seiner Sinnhaftigkeit erfasst) und Mehrfachvererbung. Interfaces finde ich immer noch irgendwie eklig, und wenn ich mir einige meiner Klassen anschaue, wimmelt es dort vor Reflection, nur um Interfaces zu vermeiden... 🤔

Nenene... 🙂 Also Mehrvererbung braucht man absolut nicht. Es macht die Dinger meistens komplexer und unverständlicher. Deshalb verzichtet man in den modernen OOP-Sprachen wie Java und C# darauf. Man muß die Sachverhalte nur anders durchdenken um sie mit linearer Vererbung und Interfaces zu lösen.
Und bei der Reflection sollte man ja weitesgehend vermeiden damit auf nicht verfügbare Member zuzugreifen. Zumindest durchbrichts du damit ja das Konzept der Objektorientierung. Wie darf man sich das denn bei dir vorstellen?

und das übelste Verbrechen ist für mich nach wie vor das "Data-Binding" von Controls. Wer sich da einmal dran gewöhnt hat, dem dürfte es schwer fallen, mal eine N-Tier-Anwendung sauber zu programmieren.

In VB6 hatte es leider noch nicht richtig funktioniert, aber es ist schon der richtige Schritt. Warum sich arbeit machen, wenns auch ohne geht. Mit DataBindings zu arbeiten ist das beste was man tun kann um sich ein Teil des stupiden Codings zu ersparen.

"Schützen wir den Computer mal besser vor der Dusseligkeit des Programmierers!"

Aber nicht vergessen: Programmierer sind auch nur Menschen 🙂

([bb]|[^b]{2})

C
65 Beiträge seit 2004
vor 19 Jahren

Original von NoOneKnows
Nenene... 🙂 Also Mehrvererbung braucht man absolut nicht. Es macht die Dinger meistens komplexer und unverständlicher. Deshalb verzichtet man in den modernen OOP-Sprachen wie Java und C# darauf. Man muß die Sachverhalte nur anders durchdenken um sie mit linearer Vererbung und Interfaces zu lösen.

Man kann allerdings durch Mehrfach-Vererbung manche Dinge extrem elegant lösen. Möglich, dass sie fast völlig überflüssig wird, wenn C# mal Templates beherrscht (wobei ich Templates eher als Fast-Ersatz für Interfaces ansehe). Der Sinn von Interfaces ist mir schon klar, und an manchen Stellen sind sie auch praktisch und notwendig. Aber oft erzeugen sie einfach nur die Notwendigkeit, per CV + ein paar Änderungen zum 20. Mal denselben Code irgendwo reinzupacken.

Und bei der Reflection sollte man ja weitesgehend vermeiden damit auf nicht verfügbare Member zuzugreifen. Zumindest durchbrichts du damit ja das Konzept der Objektorientierung. Wie darf man sich das denn bei dir vorstellen?

Weitestgehend? Also, wer per Reflection auf nicht verfügbare Member zugreift... Prost, Mahlzeit!

und das übelste Verbrechen ist für mich nach wie vor das "Data-Binding" von Controls. Wer sich da einmal dran gewöhnt hat, dem dürfte es schwer fallen, mal eine N-Tier-Anwendung sauber zu programmieren.
In VB6 hatte es leider noch nicht richtig funktioniert, aber es ist schon der richtige Schritt. Warum sich arbeit machen, wenns auch ohne geht. Mit DataBindings zu arbeiten ist das beste was man tun kann um sich ein Teil des stupiden Codings zu ersparen.

DataBinding widerspricht aufs Diametralste dem N-Tier-Konzept, indem es eine Business-Logik-Schicht völlig verhindert. Wie validierst Du eine Eingabe in ein Control, wenn die Validierung sich auf ein zweites Control bezieht (z.B. Ort und PLZ)? Wie validierst Du die Eingaben in eine Form, wenn die Validierung dabei auf die Datenbank zugreifen muss (z.B. "Peter Müller, verheiratet mit Jutta Müller", aber in der DB steht, dass Jutta Müller von Peter Müller geschieden ist)?

Und was tust Du, wenn Dein Kunde, der bisher mit den 4 Arbeitsplätzen und der Access-Datenbank auf dem Fileserver zufrieden war, plötzlich eine C/S-Lösung will? Oder gar Web-Zugriff? Theoretisch geht das natürlich per DataBinding... 😉

/// <summary>
/// Signatur
/// </summary>

333 Beiträge seit 2004
vor 19 Jahren

Original von CarstenP
Man kann allerdings durch Mehrfach-Vererbung manche Dinge extrem elegant lösen. Möglich, dass sie fast völlig überflüssig wird, wenn C# mal Templates beherrscht (wobei ich Templates eher als Fast-Ersatz für Interfaces ansehe). Der Sinn von Interfaces ist mir schon klar, und an manchen Stellen sind sie auch praktisch und notwendig. Aber oft erzeugen sie einfach nur die Notwendigkeit, per CV + ein paar Änderungen zum 20. Mal denselben Code irgendwo reinzupacken.

Wenn du irgendwo im Code etwas doppelt hast, dann haste aber auch definitiv was falsch gemacht 🙂

Weitestgehend? Also, wer per Reflection auf nicht verfügbare Member zugreift... Prost, Mahlzeit!

Eins bleibt trotzdem immer: Man muß auch Aufwand und Nutzen abwägen. Wenn ich die Wahl habe eine Control komplett neuzuschreiben oder ein vorhandenes abzuleiten und per Reflection auf ein geschütztes Member zuzugreifen um meine neue Funktionalität implementieren zu können entscheide ich mich natürlich für letzteres. Von daher is Reflection ein gutes Werkzeug, aber man sollte es mit Bedacht einsetzen.

DataBinding widerspricht aufs Diametralste dem N-Tier-Konzept, indem es eine Business-Logik-Schicht völlig verhindert. Wie validierst Du eine Eingabe in ein Control, wenn die Validierung sich auf ein zweites Control bezieht (z.B. Ort und PLZ)? Wie validierst Du die Eingaben in eine Form, wenn die Validierung dabei auf die Datenbank zugreifen muss (z.B. "Peter Müller, verheiratet mit Jutta Müller", aber in der DB steht, dass Jutta Müller von Peter Müller geschieden ist)?

Und was tust Du, wenn Dein Kunde, der bisher mit den 4 Arbeitsplätzen und der Access-Datenbank auf dem Fileserver zufrieden war, plötzlich eine C/S-Lösung will? Oder gar Web-Zugriff? Theoretisch geht das natürlich per DataBinding... 😉

Okay, soviele Gedanken hab ich mir bis jetzt noch nicht dazu gemacht 😉

([bb]|[^b]{2})

C
65 Beiträge seit 2004
vor 19 Jahren

Original von NoOneKnows
Eins bleibt trotzdem immer: Man muß auch Aufwand und Nutzen abwägen. Wenn ich die Wahl habe eine Control komplett neuzuschreiben oder ein vorhandenes abzuleiten und per Reflection auf ein geschütztes Member zuzugreifen um meine neue Funktionalität implementieren zu können entscheide ich mich natürlich für letzteres. Von daher is Reflection ein gutes Werkzeug, aber man sollte es mit Bedacht einsetzen.

Das ist richtig. Und mit Reflection, wenn man sich einmal durch das Thema durchgewühlt hat, sind wirklich abartig scharfe Sachen möglich. Ich will nicht behaupten, dass alles davon Lehrbuch-OOP ist, aber schmuck ist es trotzdem 😉

(Carstens Schimpf auf DataBinding)
Okay, soviele Gedanken hab ich mir bis jetzt noch nicht dazu gemacht 😉

Genau deswegen schimpfe ich ja so auf die VS-Vorlagen: Weil sie auf den ersten Blick das Nachdenken überflüssig erscheinen lassen. Sorry, das ist jetzt nicht persönlich gemeint. Diese Dinger verführen halt zu "ich probiere es einfach mal schnell aus"; und bekanntlich haben solche "mal schnell ausprobierten" Sachen, eben weil sie schnell gehen, eine magische Anziehungskraft und eine fatale Neigung dazu, zu einer dauerhaften Einrichtung zu werden.

Später aber, wenn es um die Erweiterung eines Projekts geht, steht man dann vor der Frage, ob man was drumrum programmiert oder neu entwickelt. Nostalgisch, wie man ist, programmiert man lieber drumrum, und schon hat man absolut unwartbaren Code geschaffen, der zwar funktioniert, aber manchmal, manchmal so ganz komische Effekte hat... aber nur, wenn man hier darauf klickt und vorher dort jenes ausgewählt hatte und es zufällig 13:02 ist, quasi niemals never ever auftreten kann... und zwei Tage später klingelt das Telefon, und ein verärgerter Kunde fragt, was denn dieser Mist nun soll. Alles schon erlebt.

/// <summary>
/// Signatur
/// </summary>