Algorithmen : Datenstrukturen und Algorithmen. Objektorientiertes Programmieren mit C++.

Datenstrukturen und Algorithmen. Objektorientiertes Programmieren mit C++.

EUR 17,00


Neben dem Beherrschen einer Programmiersprache ist die Wahl geeigneter Datenstrukturen und Algorithmen essentiell wichtig für das Gelingen eines Entwicklungsprojektes. Auf Basis der Sprache C++ haben Harald Ress und Günter Viebeck daher eine Sammlung wesentlicher Lösungen erstellt. Nach einem kurzen Einstieg in die Sprache C++ sowie der Berechnung und dem Vergleich von Komplexitäten gehen die beiden Autoren ab dem zweiten Kapitel auf die verschiedenen Strukturfamilien ein. Den Anfang machen Tabellen sowie die Suche, das Sortieren und Hashverfahren rund um Tabellen. Den Abschluss des Kapitels bilden -- wie für jedes Kapitel -- verschiedene Aufgaben zur Selbstkontrolle. Nach den Tabellen geht es mit Strings und der Erkennung von Mustern in diesen Strings weiter. Das vierte Kapitel behandelt Stacks und Queues, ergänzt um Informationen zur Anwendung dieser Strukturen. Ähnlich wichtig sind Listen, die im fünften Kapitel behandelt werden. Hierbei gehen die Autoren auch auf die Suche in und die Sortierung von Listen ein. Mit dem sechsten Kapitel nimmt die Komplexität zu. Ress und Viebeck behandeln Trees, Sets, Dictionaries, Priority Queues, Huffman-Bäume sowie verschiedenste Graphen. Den Abschluss bilden Dateien im neunten Kapitel. Hier gehen die Autoren noch einmal gesondert auf das Stream-Konzept von C++ ein und zeigen unter anderem, wie optimal extern sortiert wird. In seiner Qualität und seinem Umfang gefällt Datenstrukturen und Algorithmen sehr gut. Der Leser erhält wertvolle Hinweise für seine Arbeit mit der Sprache C++. Die beigelegte CD mit allen vorgestellten Algorithmen und Anwendungsbeispielen rundet das Buch gelungen ab. --Frank Müller

Welchen Hauptzweck verfolgt das vorliegende Buch ? - Primär algorithmisch geprägt, sind die Autoren z.B. bei Hashfunktionen auf dem aktuellen Stand des Wissens. Die Entwicklung des Suchens und Findens ist klassisch und sauber.Das Zwischenschritte erkennbar sind, macht das Buch lesenswertfür Menschen, die vielleicht noch etwas lernen wollen.Das die Autoren keine C++ - Gurus sind, und sich der Sprache lediglich als Mittel zum Zweck bedienen, kann ich durchaus nachvollziehen.Angepasste C++ - Fetischisten, die aus einer Sprache eine Ersatzphilosophie herleiten wollen, gibt es genug. Nur lösen solche Buchhalter der IT-Branche meist keine Probleme.

Kein Standard C++ - OO Design nicht gerade gut... - Die schwache Bewertung liegt neben den unvermeidlichen (?) Tippfehlern an zwei wesentlichen Dingen: Es wird, obwohl C++ seit 98 standardisiert ist, kein ANSI/ISO C++ verwendet - vielmehr basieren die Programme auf Borlands Turbo C++ 4.5. Außerdem ist das objektorientierte Design der Klassen schlecht. Anhand einiger Beispiele soll das verdeutlicht werden: Zunächst zum Thema Standard C++: Auf S. 10 wird auf den in C++ fehlenden Standardtyp boolean hingewiesen und durch enum boolean { false true }, ersetzt. Allerdings bietet C++ den Typ bool an. Der Kopf eines C++ Programms wird mit void main() angegeben. - Auch nicht gut, denn laut Standard MUSS es int main() int main(int argc, char* argv[]) oder heißen. Es werden die alten Cast-Operationen genutzt, obwohl C++ neue Operatoren für Casts anbietet, deren Verwendung dringend (siehe etwa: Stroustrup, The C++ Programming Language) angeraten wird. Wo neuere Werke generell mit std::vector und std::string arbeiten werden in diesem Buch noch c-style Arrays benutzt.Zum Thema objektorientiertes (und auch sonstiges) Programmdesign: Im Buch werden (Basis-) Klassen vorgestellt (class Polygon, S. 43ff.) von denen dann auch Klassen abgeleitet werden. Nur werden keine virtuellen Destuktoren benutzt. Das ist schlecht. Studenten die einen C++-Programmierkurs belegen, würde das arg angekreidet - und zwar zu recht. Es wird nicht geprüft ob ein new fehlschlägt. Soetwas macht man nur, wenn man hofft später Probleme zu bekommen. In einem Lehrbuch dürfte das jedenfalls nicht passieren.Auf S. 76ff wird eine Templateklasse Table eingeführt, die offensichtlich als Containerklasse eingesetzt werden soll. Einer Klass Node dient dann als Beispiel um Objekte zur Verfügung zu stellen, die mit diesem Container verwaltet werden sollen. Es stellt sich hier die Frage warum Table innerhalb der Definition von Node als friend deklariert wird. Meines Erachtens gibt es dazu keinen Grund: Ein gut designter Container kann Objekte (fast) beliebigen Typs aufnehmen - eben AUCH Objekte einer Klasse die früher als dieser Container implementiert wurde und daher unter Umständen die privaten Datenelemente auf die der Container zugreift gar nicht enthält. (Gibt es einen guten (!) anderen Grund für friends?). Diesen Desingfehler könnte man beheben, indem der Container von Typen die er verwalten soll bestimmte Elementfunktionen (mit definierter Signatur) verlangt. Dann ist zumindest klar WAS der Container verlangt und es ist nicht notwendig die gesamte Implementierung dieses Containers zu studieren um das herauszufinden.Für die 79.- DM die dieses Buch kostet kann man meiner (bescheidenen?) Meinung nach ein wesentlich (!) besseres Werk erwarten. Nach knapp über 120 Seiten habe ich nicht weiter gelesen.




Datenstrukturen und Algorithmen. Objektorientiertes Programmieren mit C++.