mikrocontroller.net

Forum: PC-Programmierung wieso ist C++ so abstrakt?


Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche seit einiger Zeit einen Einstieg zu C++ zu finden,
scheitere aber immer wieder an irgendwelchen für unverständlichen
Sachen wie OOP und so.
Da ich programmiertechnisch schon etwas vorbelastet bin, sind die
reinen Änfängerbücher mir immer etwas zu oberflächlich (sind die nur
für Informatik-Studenten geschrieben, die nur von TLAs, Methoden,
Instanzen und dem Pizzalieferservice leben?)
Früher gab es Bücher "Von Basic zu Pascal" oder so ähnlich. Gibt es
sowas auch für "Aufstieg bzw. Umstieg von C zu C++"?

Gibt es da Leute, die ähnliche Probleme haben wie ich?
Kennt da jemand eine Seite oder hat eine Buchempfehlung in der
Richtung?
Mir fehlt eigentlich nur ein Bild oder so, was mir zB. OOP wirklich
bringt. Leider ist mir das "Vererbungsproblem" schon irgendwie bei
TurboPascal komisch vorgekommen. Da störten mich die vielen "NULL"
und Klammern, die den Quellcode unübersichtlich machten.
Dass es praktisch sein muß, zeigt die Verbreitung...

Gruß Rahul

Autor: Mobis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C++ ist nicht abstakt,

es gibt den Ausdruck abstrakt nicht!
es gibt nur pure virtual, und das heißt Deklaration ohne
Implementierung und wir mit einem = 0 hinter der Deklaration innerhalb
einer Klasse. Und um die Verwirrung komplett zu machen, ist das dann
wieder abstrakt...

OOP ist die einzige Möglichkeit übersichtlich und komfortabel seine
Indeen in ein Programm umzusetzen, ohne (wenn man OOP begriffen hat) in
Spagetticode zu verfallen.

Am besten lernt man C++, wenn man sich ein paar Klassen schreibt und
mit dem Debugger schaut, was passiert. Dann begreift man auch solche
Sachen vie Vererbung, Polymorphie, Interfaces, pure virtual und wird
feststellen, wenn der Aha-Efekt gekommen ist, daß man eigentlich nie
wieder mit eine nicht objektorientierten Programmiersprache arbeiten
will.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C++ in 21 Tagen
C++ für Dummies

Sind nicht sooo chlecht geschrieben und bauen au C auf, wobei
allerdings die wichtigsten Elemente von C nochmals auf ein paar Seiten
erwähnt wird.

Autor: Sven Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin...

Oha, die Bücher sind aber eher bitter.
Wenn du der englischen Sprache mächtig bist kann ich wärmstens die
"Thinking in ..." Reihe von Bruce Eckel empfehlen. Der Mann macht
nichts anderes als Informatik Kurse und entsprechende Bücher zu
produzieren. Der Ansatz ist immer vom theoretische Gedanken hin zur
praktischen Anwendung mit Beispiel.

Die Bücher gibts auch auf deutsch, leider kenne ich nur eins davon. Das
war die erste Ausgabe des Java Buchs und das Ding war eine Katastrophe,
die englische Ausgabe eine Offenbarung!

Ansonsten Addison Wesley, gute Buchhandlung suchen die einen mal in den
Büchern etwas schmökern läßt und selbst ein Bild machen.
Sonst nächste Uni/FH suchen und da in der Bib umsehen. Geht meistens.

--
 Sven Johannes

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Svens Beitrag sei nur folgendes hinzugefügt:

    "Thinking in C++ 2nd Edition by Bruce Eckel

    Free Electronic Book
    Volume 1 & Volume 2"

Gibts hier:

http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was ist an oop sooo unverständlich???

du hast doch auch unter c so dinger namens struct.. c++ hat jetzt eben
eine art struct in dem lustigerweise alle funktionen, die den struct
verändern oder was auch immer können, gleich dabei sind... sprich daten
+ funktionen die was damit machen == class

und templates sind glaub ich auch noch in c drinnen.. mit klassen und
templates könnte man sich lustig auch eine art vererbung aufbaun...

sprich im prinzip hat man nur alles was nett ist in klassen vereint und
jetzt hat man im prinzip die einerlegende-woll-milch-sau zur verfügung
und ist trotzdem in der lage lustig hardwarenahe zu programmieren....

es gibt da ein adim scriptum..ka wo man das bekommt.. ich habs mal in
der schul bekommen... ich müsst mal die isbn raussuchen falls die
dinger sowas haben... das ist schön dünn.. es ist das wichtigste
drinnen und verstehen kann mans auch...

tiefgründige sachen von wegen prinzip und verstehen was da gemacht wird
kannst eh vergessen solange du dem bösen reverse-engeneering nicht
mächtig bist... zumindest ist es mir so ergangen..

73

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du solltest dich unbedingt mal mit OOP etwas beschäftigen .. Mich
zumindest hat das OOP Fieber doch schon vor einiger Zeit gepackt (auch
wenn ich nur mit Java/C# beruflich zu tun habe - C++ habe ich nur für
ein einziges Projekt benötigt(alles andere wäre zu umständlich
gewesen)).
Allerdings machen meiner Meinung nach erst Dinge wie Vererbung und
Polymorphismus einen wesentlichen Anteil der großartigen Möglichkeiten
aus :)
(um Himmels Willen, das ist jetzt mal wieder in einen Lobesgesang
ausgebrochen).




@Mobis: Ich glaub jetzt hast ihn vollkommen verwirrt ;) .. Der greift
nie wieder zu einem OOP Buch :)

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hans:
und da fängt es schon wieder an: Wieso verbinde ich meine Daten mit
irgendwelchen Funktionen?
Bis jetzt sahen meine Programme immer so aus, dass ich die engegangenen
Daten irgendwie verarbeitet habe, und sie dann wieder irgendwie
ausgegeben habe. Also quasi jedes Programm eine Klasse für sich.
Mit Structs habe ich auch schon gearbeitet, und finde die auch sehr
praktisch.

Soweit ich die Sachen, die ich mir bis jetzt zu dem Thema
(Windows-Programmierung) angetan habe, verstanden habe, ging es
meistens darum, irgendwelche Grafikfunktionen mehrfach zu verwenden.
Sprich: ich habe eine "draw"-Funktion, die mir irgendwo in einem
Fenster (das ich durch ein "Handle" angebe) einen Punkt mit einer
bestimmten Farbe hinmalt. Will ich jetzt einen Kreis zeichnen, wird der
"Kreis"-Klasse die Eigenschaft "draw" vererbt. Im "normalen"
Programmierstil hätte ich einfach eine Funktion "draw", die ich durch
eine andere Funktion aufrufen lasse. Was also kein besonderer Vorteil
der OOP wäre.
Wenn ich jetzt ein Rechteck zeichnen lasse wollte, vererbe ich wieder
die "draw"-Funktion...

Oder habe ich da jetzt was durcheinander geworfen?

Könnte mir jemand ein (für mich verständliches) Beispiel für OOP
geben?

Herzlichen Dank, Rahul

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich musste auf der Uni (nein - ich studiere nicht Informatik) .. ein OO
Modell basteln, welches eine Universität simulieren sollte.

Es gab dabei Vortragende, Vorlesungen, Studenten, Prüfungen, ...

Und diese Sachen mussten nun alle miteinander verwoben werden. Versuche
das mal mit klassischer Programmierung - da wirst alt dabei und alles
wird höcsht unübersichtlich.

Mittels OO wurden eben Objekte angelegt, welche genau die Eigenschaften
hatten. Beispielsweise hatte eine Student einen Namen und besuchte eine
Vorlesung, wlche wiederum eine Nummer hatte (für die er sich
einschreiben musste).

Gelöst wurde das so dass es eben das Objekt Student gab und das Objekt
Vorlesung.
Nun kannte die Klasse Vorlesung Dinge wie ihre Nummer, ihren Namen,
eine Liste mit angemeldeten Studenten, ...
UND sie hatte auch eine Methode Vorlesung.addStudent(Student x).
Indem nun diese Methode aufgerufen wird, fügt sie intern den Studenten
zu einer Liste hinzu.
Das funktioniert zwar auch mittels klassischer Programmierung, aber
stell dir nun mal vor, du hast 100e Vorlesungen und 1000e Studenten.
Gar nicht auszudenken wieviel Variablen dann hier ins Spiel kommen (von
100en Arrays mal abgesehen). Natürlich war das Beispiel deutlich
komplexer, aber ich finde es gibt einen guten Überblick. Beispielsweise
wurden Professor und Student von Mensch abgeleitet.

Ich hoffe dir hiermit mal ein anderes Beispiel statt des ewig drögen
Kreises gegeben zu haben.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn ich mich jetzt als Nervensäge oute:
Was bringt es mir, wenn ich Daten und Funktionen miteinander verbinde?
Das Beispiel von Tom würde ich auch mit klassischer Programmierung
hinbekommen:
Eine Struktur namens "Mensch" mit solchen Daten wie Name, Anschrift,
Geburtsdatum etc kann für Profs wie für Studenten und alle anderen
Hochschulangehörigen verwendet werden.

Um einen Studenten zu charakterisieren, gäbe es dann eine Struktur, die
noch Sachen wie Matrikelnummer, Studiengang, Studienbeginn, Fachsemester
etc enthält. Profs hätten vielleicht noch Attribute wie Personalnummer,
einen Stundenplan, Vorlesungsnummer(n) oder so.

Die Studenten würde ich in eine Datei (Datenbank) schreiben, die nach
Matrikelnummern sortiert ist.
Dann gibt es eine Datenbank, die aus den Vorlesungen besteht, und die
Matrikelnummern der Zuhörer (und die PN des Profs) enthält (eine
Vorlesungsnummer tritt mehrfach auch; je nach Anzahl der Studenten pro
Vorlesung)
Die dritte Datenbank enhält eine Liste der Profs mit der entsprechenden
Vorlesung (mit Stundenplan).

Jetzt habe ich 3 Indizes mit denen ich doch eigentlich jede
Datenkombination herausbekommen kann.

Als Eingabe würden 3 Masken reichen: Student, Prof, Vorlesung.
Ausgaben würde es ein paar mehr geben...


Vielleicht komme ich jetzt gerade selber drauf:
Es gibt eine Funktion (Methode), die an der Klasse "Mensch" hängt,
die es ermöglicht, die entsprechenden Daten (Name, Anschrift etc)
einzugeben. In der Klasse "Student" ist dann die Methode auch
enthalten (vererbt worden) und wird durch die Eingabe der
Matrikelnummer, des Studienganges etc erweitert.
Ausgaben dann auch entsprechend.

Könnte man da auch den Zugriff auf verschiedene Datenbanken realiesen?

Die Klasse "Vorlesung" hätte dann als Daten die Prof-Nummer, einen
Raumindex und eine Liste der teilnehmenden Studenten. Als Methoden
hätte die Klasse dann die Eingabe (vorlesung.addstudent (Student x)),
die wiederum die Methode "Student.Eingabe" aufruft.

Irgendwie verwirre ich mich da wohl auch dauernd selber.

Ist es nicht auch so, dass die OOP dafür benutzt wird, verschiedenen
Objekten, die gleichen Eigenschaften zu verpassen? Aus der
VB-Programmierung kenne ich z.B. xxx.additem, wobei xxx eine ComboBox
oder eine ListBox sein kann. Wenn ich also eine Funktion geschrieben
habe, die zu irgendeiner Liste (muß ja nicht auf dem Bildschirm
sichtbar sein) etwas hinzufügen will, nenne ich die Funktion auch
"additem"?
Wenn ich jetzt mehrere gleiche Objekte für verschiedene Sachen benutzen
möchte (bspw 5 Listboxen mit verschiedenem Inhalt), dann werden die
Methoden für jede Listbox einfach kopiert. Das würde einen grösseren
Aufwand in der klassischen Programmierung erfordern, oder?

Vielen Dank für Euer Verständnis

Rahul

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
snip
Die Klasse "Vorlesung" hätte dann als Daten die Prof-Nummer, einen
Raumindex und eine Liste der teilnehmenden Studenten. Als Methoden
hätte die Klasse dann die Eingabe (vorlesung.addstudent (Student x)),
die wiederum die Methode "Student.Eingabe" aufruft.
snip

dazu noch ein paa Worte:
Der Vorlesung wird in einem Fall ein Fix-Fertiges Objekt (genauer
gesagt eine Instanz - also eine konkrete Ausprägung des Objekts)
übergeben.

angenommen du legst zu Programmbeginn alle Studenten an, bzw. entnimmst
sie einer DB oder woher auch immer (Stichwort: Serializing), dann musst
du danach bei AddStudent nicht mehr lang herumfragen, welcher Name, ...
x ist dann einfach ein konkreter Student (das Objekt IN SICH SELBST hat
schon alle Daten wie Nummer/Name).

Sprich: Du suchst nach einem Student mit z.b. einer Nummer, bekommst
von dort ein Objekt geliefert und das Objekt gibst du dann einfach
weiter.

Ich kann mich leider nicht so gut ausdrücken wie ich das will, ich bin
beileibe kein Profi und gewisse Ausdrücke wollen nicht ins Hirn :)

Ich nehme gern für Objekte folgenden Vergleich (der nicht ganz richtig
ist, aber gut vorstellbar).
Stell dir ein Objekt als Schablone vor. Wenn du nun eine Instanz dieses
Objekt erzeugst, dann kannst du der Instanz Daten zuweisen. Die Instanz
hat alle Funktionen, welche du in der Schablone vorgegeben hast.

Sprich:
* Ich habe 10 Vorlesungen
* Ich generiere ein Objekt Vorlesung und gebe diesem einen Vector
(bischen aufgebohrtes Array mit variabler Anzahl an Elementen usw.)
welcher jegliches Objekt aufnehmen kann.
* ausserdem kennt dieses Objekt Vorlesung eine Methode namens
addStudent(Student stu).
* nun habe ich 2 verschiedene Vorlesungen

Vorlesung a = new Vorlesung();
Vorlesung b = new Vorlesung();
(könnte man natürlich wiederum in einem Vektor speichern, ...).

* Ich lege mir 3 Studenten an

Student x = new Student("Vorname1","Nachname1","Nummer1");
Student y = new Student("Vorname2","Nachname2","Nummer2");
Student z = new Student("Vorname3","Nachname3","Nummer3");

* Nun soll Student x und y die Vorlesung a besuschen, Student y und z
die Vorlesung b

a.addStudent(x);
a.addStudent(y);
b.addStudent(y);
b.addStudent(z);

was addStudent nun macht, bleibt dir überlassen, bspsweise könnte
addStudent das übergebene Objekt in den Vector werfen (jede Vorlesung
hat ja durch das Instanzieren einen eigenen Speicherbereich - in
unserem Fall eben einen Vector).

Dieser Aufbau gibt dem Ganzen eine klare, eindeutige Struktur, es ist
einfach leicht zu lesen (bei geeigneter Wahl der Methodennamen und
Felder).

VB (bis inkl. Version 6) würde ich nicht für OOP heranziehen ;).

P.S.: Das obige ist Java Syntax - ich hoffe du verzeihst :)

Autor: Sebastian W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C++ hat was, da gehen so Sachen wie:

#define private public

oder im Objekt:

delete this;


(Ich liebe alles was man nicht machen soll, Chaosprogrammer).

Sebastian

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dieser Aufbau gibt dem Ganzen eine klare, eindeutige Struktur, es ist
>einfach leicht zu lesen (bei geeigneter Wahl der Methodennamen und
>Felder).

Es geht also eigentlich nur um das "hübschere" Aussehen des
Programm-Code? Wogegen ich wirklich nichts habe. (ausser, dass man eine
Menge Punkte bei manchen Objekten braucht...)

Übrigens sieht JAVA C ziemlich ähnlich...

In C würde man das ja auch alles über Pointer machen, und müsste diese
dann an irgendwelche Funktionen übergeben.
Indem man die Funktionen an die Strukturen koppelt (zu Klassen macht),
wird nur eine gewisse Übersichtlichkeit geschaffen!?

Klassen sind somit Daten-Typen?

Sobald ich einem Variablen-Namen einen Klassen-Typ zuweise, und diesen
mit "new" initialisiere, wird daraus die Instanz.
Man kann verschiedene Instanzen von einer Klasse herstellen (wie 10
verschiedene Variablen vom Typ int).

Der Rest dient der Schönheit/Übersichtlichkeit.

Man braucht also für verschiedene Datensorten immer noch verschiedene
Funktionen...

Da das alles über Pointer funktioniert, kam es mir etwas abstrakt vor.
Mit einem Index wie "Matrikelnummer" kann ich etwas mehr anfangen...

Vielen Dank für die Unterstützung.
Das werden leider nicht meine letzten Fragen gewesen sein...

Rahul

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also es geht nicht nur um das "hübschere" Aussehen ... aber das ist
für mich ein großer Vorteil :)

Pointer gibts in Java (glücklicherweise) nicht (ja, ok, im Hintergrund
passiert auch nix anderes).

Hmm . .also eine Klasse als Datentyp zu sehen ist zwar nicht ganz
richtig, aber gewisse Merkmale haben beide gemeinsam. Ahja .. unter C#
besispielsweise gibts die "klassichen" Datentypen nicht mehr (bzw.
sind sie in Klassen namens Integer, String, ... versteckt (und
eigentlich von aussen nicht mehr zugänglich)).

Das mit "new" ist richtig. New erzeugt eine Instanz.

Persönlich muss ich sagen, dass ich es nicht ideal finde, mit C++ OOP
zu lernen. Eine richtige Objektorientierte Sprache wie Java wäre da
vermutlich in den wesentlichen Punkten etwas deutlicher :) (man müsste
sich weniger um Pointer kümmern und könnte sich mehr auf OOP beziehen).
Wenns um Windows - Oberflächen geht, würde ich C# vorziehen.
Aber wenns nicht anders geht :)

Autor: Mobis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man muß in C++ nicht mit Pointern rumopern.
Auch wenn jetzt manche sagen, dann kannst Du gleich JAVA nehmen, (gebe
ich auch zu, JAVA ist C++ für Anfänger)
Die hohe Kunst besteht darin, Referenzen und Instanzen zu verwenden.
Nicht Pointer auf Instanzen (wie Du oben mit new erzeugen willst und
hoffendlich wieder löschst).

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann sollte ich mir mal eine (halbwegs) sinnvolle Aufgabe zum Üben
suchen.
Am Ende will ich was mit Bildverarbeitung machen...
Das geht mir in VB (6.0) viel zu langsam...

Und wie mein Prof schon meinte: "Kein Programmierer über 12 Jahre
arbeitet noch mit Basic..."

Für Mechatronik-Studenten sollte VB als Einstieg reichen...

Ist es ratsam, bei gewissen C-Kenntnissen den Weg über JAVA zu gehen
(freie Kompiler unter XP?) ?

Schönen Abend noch,
Rahul

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also Java ist sicherlich keine falsche Wahl ...

Wenn du dich auf Windows Plattformen festlegst und auf "schöne"
Oberflächen stehst, wäre auch C# eine Alternative (auch dafür gibts
freie Compiler). Z.b. das Mono Projekt (Linux/Win) oder das .NET SDK
von Microsoft + CSharp Editor.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche es mal über diesen weg, da ich ähnlich wie du angefangen
habe oop zu programmieren.
Du schreibst zb. eine klasse mit konvertierungsfunktionen:
die klasse KonverterClass hat 4 Methoden,
Int16ToByteBuffer(byte Buffer());
StringToInt(string Text);
.
.

jetzt kann ich diese Methoden einfach benutzen indem ich mit new eine
instanz der klasse erstelle. in der klasse sind alle definitionen und
alles was man noch brauchen könnte schon definiert.
Wenn mir oder jemand andren einfällt das er die klasse erweitern will,
dann erbt er meine klasse und sagt die neue klasse heisst jetzt
KonverterClassNew, in dieser klasse definiert und programmiert er seine
neuen methoden die er braucht, jetzt kann meine alten methoden in seiner
klasse verwenden und er brauch sich nicht drum kümmern wie ich meine
alten 4 mehtoden implementiert habe.

wenn ich jetzt eine instanz der klasse  KonverterClassNew erstelle,
dann habe ich die alten + die neuen methoden. Das hat den vorteil das
man sich zb. sehr simple funktionen sehr gut verschachteln kann und
damit stück für stück zu seiner problemlösung kommt. man spart sich
jede menge verwaltungsaufwand für seine methoden, da man exakt die
benötigen methoden in seinem objekt findet.

Sebastian

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sebastian,

danke für die Erläuterung. Leider gehst du nicht darauf ein, wie man
vererbt.
Wie man eine Klasse erzeugt, habe ich inzwischen herausbekommen.
Wie deine KonverterClassNew entsteht, wird mir jetzt nicht ganz klar.
Da werde ich wohl noch mal ein Buch angucken müssen.

Gruß Rahul

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
normalerweise definiert du ja deine klasee so:


public class KonverterClass{

//hie steht das interface und ide methoden
...
..
.
}

//erben von der basisklasse um die neue zu erzeugen
public class KonverterClassNew : KonverterClass{

//jetzt kann ich hier auf alle methoden von  KonverterClass zugreifen
//und meine neuen methoden definieren
...
..
.

}

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@Tom
Es ist nicht so das es bei .NET (und damit auch in C#) keine
"klasischen" Datentypen mehr gibt. Das wäre nämlich eine ziemliche
Katastrophe da Objekte von Klassen in der .NET Runtime immer auf dem
Heap angelegt werden. Das würde bedeuten das jedes kurz mal deklarierte
int eine Speicherallokation auslösen müßte und den GC belasten würde.
Value-Typen (int, float, structs) werden auf dem Stack angelegt. Das
man mit diesen Datentypen wie mit Objekten arbeiten kann, ist einem
Prinzip das Boxing/Unboxing genannte wird, zu verdanken. Wenn man also
sowas macht wie 3.ToString() wird die 3 erstmal implizit in ein Objekt
verwandelt und auf diesem Objekt dann die entsprechende Methode
aufgerufen.

Matthias

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias: Ich wollte eigentlich nur sagen, dass es man soweit gegangen
ist, auch die klassischen Datentypen in den Rest zu integrieren ... :)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich wollte nur darauf hinweisen das diese Basistypen eben keine Objekte
im eigentlichen Sinne sind. Du hast aber natürlich Recht das man sie
fast so verwenden kann. Das Ganze ist aber nur <zitat> syntaktischer
Zucker </zitat>. Java kann das ja auch, nur erfordert es eben mehr
Schreibarbeit.

Ich persönlich halte C# und das .NET Framework übrigens für sehr
gelungen. Die Sprache vereint einige Aspekte von C++ mit einigen von
Java recht geschickt. Dank Spezifikation der CIL und Teilen der BCL ist
auch der Weg für den Einsatz auf anderen Platformen offen was das
Mono-Projekt anschaulich beweißt. Deswegen mein Tip an Einsteiger in
OOP: Verwende C# oder Java und nicht C++. C++ ist eine enorm komplexe
Sprache und nicht sehr einsteigerfreundlich. Wenn man dann mal etwas
Erfahrung gesammelt hat kann man die Vorteile von C++ aber durchaus
nutzen.

Matthias

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem 2ten Absatz sprichst du mir aus der Seele.

Musste beruflich mal einen Client / Server Struktur basteln (ich sag
mal nicht wofür, das geht nur die Firma was an).

Es war klar, dass der Server in C++ geschrieben werden musste. Die DLL
sollte unter allen Umständen auf der STL basieren und so gut wie
möglich mit bereits bestehenden Dingen interfacen (jaja, ComInterop,
weiss schon - es erschien damals jedenfalls als sehr passend).

Dazu dann noch einen MFC basierten Client. Die ganze Sachen mit dem
Datenaustausch über Membervariablen ging mir jedenfalls ziemlich am
Socken ;). Daraufhin wurde angeordnet ich solle mal testweise denselben
Client in C# schreiben (ich hatte bis dato noch keine Erfahrungen mit
C#). Daraufhin hab ich mir aus der internen Bibliothek das Buch Goto C#
geholt, angefangen zu lesen, draufgekommen, dass Java dem Ganzen sehr
ähnlich ist - angefangen zu programmieren und tada - der Client war
schneller fertig als das MFC Pendant. Seitdem kommt C++ nur noch in
ganz besonderen Fällen zum Einsatz.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

das einzige was völlig, aber auch komplett, mißlungen ist, ist die
automatische Dokumentation auf XML-Basis. Wenn man das mit den
Möglichkeiten von javadoc oder sogar doxygen vergleicht zieht es
eindeutig den Kürzeren. Schön das doxygen wohl auch C# unterstützt. Das
werd ich sobald als möglich mal austesten.

Matthias

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab auch einen negativ-punkt:
Ich hab bis dato keine Möglichkeit gefunden, spezifische Fehler
abzufangen.

Sprich: Ich muss von jeder Methode wissen, welche Fehler auftreten
können und diese abfangen. Unter Eclipse bei Java geht das
Vollautomatisch: Create try/catch Block -> und schon hast mehrere catch
Blöcke mit den möglicherweise auftretenden Fehlern ..

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die gleiche erfahrungen haben wir in der firma auch gemacht, bei uns
wird jede neue software nur noch in c# gemacht, die entwicklungszeiten
sind damit wesentlich besser. Auch die fehlerquote bei den SW modulen
ist wesenltlich geringer. Den hauptvorteil an dem net framwork sehe ich
auch an der starkren und sehr konsequenten oop weil vor allen atomare
typen wie int string.. alles objekte sind.
So lange man im .net compiler die option Strict on anlässt und alles in
managed code schreibt ist die SW nahezu ideal.

Sebastian

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab bis dato keine Möglichkeit gefunden, spezifische Fehler
abzufangen.

Der Satz is so natürlich falsch .. da fehlt ein ... automatisiert ...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt von Ulla Kirch-Prinz ein Buch was für Umsteiger c -> c++
geschrieben ist. Titel weis ich nicht mehr genau.

Autor: Joerg Kurrek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für den Umstieg C nach C++ gibt es ein (wie ich finde) geniales Buch:
GoTo Objektorientierung;
Autoren Helmut Herold, Michael Klar, Susanne Klar;
Verlag Addison-Wesley.
Interessant, dass sich kaum jemand kritisch zu OOP
äußert (nicht nur hier). Hinsichtlich
Programmier-Effizienz scheint mir C (mit geeigneten
Bibliotheken) gegenüber C++ im Vorteil zu sein;
Das gute alte Top-Down-Prinzip funktioniert eben
(fast) immer.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich persönlich bin ein Anhänger der OOP. Nicht gerade was C++
anbelangt, aber Sprachen wie C# und Java sind mir einfach deutlich
sympathischer als das TopDown Prinzip von C.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dumme Frage: Kann man mit C# auch dlls kompilieren?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

dll's kann man nicht kompilieren. Die sind schon kompiliert. Aber du
kannst aus einem C#-Quelltext eine DLL erzeugen. Die ist dann aber auch
ein CL-Assembly und damit nicht ohne weiteres von unmanaged Code
nutzbar.

Matthias

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.