Offtopic: C++ Problem

Martin martin.fechtner at netcologne.de
Fre Jan 13 00:44:39 CET 2006


> > Meist ist handgeschriebener Code fehleranfälliger und weniger effizient.
>
>  Dem widerum stimme ich nicht zu. Wahr ist, dass häufig verwendeter Code
>  mehr getestet und damit vermutlich korrekt ist.
>  Die Aussage scheint also erstmal bzgl. der Fehleranfälligkeit zustimmen.
>  Aber korrekter als korrekt geht nicht.

>  Einfache Funktionen wie diese hier laufen schneller ab, wenn sie auf das
>  Problem optimiert wurden.
Ja natürlich, da hast du Recht. Aber stellt die eine längere und 
kompliziertere Funktion (mit Zeigerarithmetik und all dem) über ein 
spezielles Thema vor. Sehr wahrscheinlich würde die Problemlösung von 
jemandem, der sich intensiv mit der Thematik auseinandergesetzt hat schneller 
laufen. Oder angenommen, man würde eine derartige Fkt. selbst schreiben, so 
wäre der Zeitaufwand um gleichermaßen effizienten Code zu erhalten doch 
wesentlich höher, oder? 

>  Ich denke, dass das selberschreiben von Funktionen die Codequalität
>  des Programmieres und damit eben die Codequalität des Programms mittel-
>  fristig sogar steigert.
Hier muss ich dir aber wirklich wiedersprechen. Selbst wenn man eine Funktion 
zum einlesen von Werte zum zwanzigsten Mal geschrieben hat glaube ich nicht, 
dass das in irgendeiner Form die Codequalität verbessert. Ich sehe das als 
reine Zeitverschwendung an, die in Projekten von größerem Ausmaß schlicht und 
einfach undenkbar ist.

> > Angenommen, jemand hat eine Zeichenkette und möchte nur einen Teilstring
> > aus ihr in Kleinbuchstaben umwandeln. Die gepostete Funktion mangelt es
> > an Flexibilität. Es ist nicht möglich ohne einigen Aufwand das Problem zu
> > lösen. Deutlich einfacher wäre es ein Funktionsobjekt zu definieren, das
> > ein Zeichen in Kleinbuchstaben umändert:
> > [C++-Beispiel]
>
>  Was mache ich mit den ganzen Funktionsaufrufen, die hier stattfinden?
>  Den Operator, um tolower() aufzurufen? Den Iterator fragen, wer ist der
>  Nächste?
>  Hoffen, dass der Compiler die aufgerufenen Funktionen inline kompiliert?
Abgesehen von den bereits genannten Gründen ist das Overhead einer Fkt. in C++ 
vergleichsweise (man betrachte z.B. Visual Basic) niedrig.

>  Ist der Mehraufwand (Speicher auf'm Stack für die Objekt-Instanzen, rufen
>  der Konstrukturen und evtl der Funktionen) nicht höher, als der Aufwand,
>  um das eigentliche Problem zu lösen (mal kurz durch das char-Array gehen
>  und jeden großen Buchstaben kleinzuklopfen)?
>  Denn der Aufruf von find() erweitert die Möglichkeiten der Funktion doch
>  jetzt nicht wirklich, oder?

Ich glaube du verstehst mich nicht. Die STL basiert größtenteils auf 
generische Algorithmen. Diese bieten mehr Flexibilität(!) als normale 
Funktionen und lassen sich nach belieben mit Funktionsobjekten verknüpfen. 
Der Aufruf von find(/* ... */); war nur ein Beispiel - vielleicht ein nicht 
ganz so gutes. :-)
Wir nehmen zum Beispiel einmal an, dass nur alle Zeichen in einem String, die 
zwischen a und i liegen, durch Kleinbuchstaben ersetzt werden sollen (warum 
auch immer) . Dein Lösungsanzatz wäre es wahrscheinlich eine neue Funktion zu 
schreiben, die genau das tut. Aber warum das Rad neu erfinden? Die 
generischen Algorithmen der STL lassen sich mit dem bereits definierten 
Fkt.-Obj. verknüpfen und bieten somit genügend Möglichkeiten dieses Problem 
zu lösen, ohne das die eigentliche Funktion zum Ersetzen der Großbuchstaben 
abgeänder werden muss.


>  Ich finde Deine Lösung als Möglichkeit nicht schlecht, aber ich stünde
>  dem als tatsächlichen Programmierstil eher skeptisch gegenüber:
>  Objektorientierte Theorie in allen Ehren, aber Programmieren ist doch
>  eher praktischer Natur.
In der modernen Softwareentwicklung kommt man mit deinem Ansatz nicht so 
schnell zum gewünschten Ziel. Es wird immer mehr auf bestehenden Code 
gesetzt, ohne das zeitaufwendige Neuimplementierungen bereits bestehender 
Funktionen nötig sind, nur weil sich der Einzatzbereich (nicht aber das 
Grundkonzept) geändert hat.

Hast du schon "Die C++ Programmiersprache" von Bjarne Stroustrup gelesen? Wenn 
nicht würde ich dir das Buch sehr ans Herzen legen.

Martin


Kleine Anmerkung noch: Ich möchte hier nicht deine persönliche Meinung 
schlecht darstellen, sondern will sachlich über die Vor- und Nachteile 
diskutieren. :-)