Seite 2 von 2

Re: allgemeine Frage zu Pointern

Verfasst: 21.03.2014 07:47
von Danilo
SBond hat geschrieben:
Chimorin hat geschrieben:Global ist schön und gut, kann aber zu Fehlern führen (Hat man mir berichtet).
hmm... ok, das ist mir neu. Zumindest gab es bisher keine Probleme. Kann das jemand bestätigen?
Mit der Sache zum Thema Auslagern hast du natürlich recht. Das kann ggf. problematisch sein. Allerdings habe ich meine aktuellen Projekte die größer 15K Programmzeilen werden in Module zerlegt. Das bietet zudem den großen Vorteil, dass ich die Strukturen Kapseln und vor "fremden" Prozeduren Schützen kann.
Global ist schön und gut, aber bei Prozeduren/Methoden/Klassen geht es auch um Wiederverwendbarkeit.

Natürlich gibt es auch Prozeduren die man nur für ein bestimmtes Programm schreibt. Es gibt aber auch
viele Prozeduren die übergebene Daten verarbeiten, und die kann man so schreiben, dass sie wieder
verwendet werden können.
Zum Beispiel Prozeduren für Vektoren. Es gibt Strukturen wie Vector2D, Vector3D usw., und dann
gibt es viele Prozeduren die mit diesen Strukturen arbeiten. Addition, Multiplikation von Vektoren etc.

Da macht es keinen Sinn diese Prozeduren an eine globale Struktur zu binden, so dass sie nur
mit diesen globalen Daten arbeitet. Also übergibt man die Strukturen per Pointer/Adresse an
die Funktionen, und diese arbeiten mit den jeweils übergebenen Daten.
So allgemein gehaltene Funktionen kann man in jedem Projekt mit ganz unterschiedlichen
Daten immer wieder verwenden. Das heisst Du kannst die Funktionen mit tausenden unterschiedlichen
Vektor-Struktur-Instanzen aufrufen.

Beim schreiben von Prozeduren/Methoden/Klassen/Modulen geht es also oft um Wiederverwendbarkeit.
Dann muss man das so unabhängig wie möglich schreiben und nicht an globale Datenstrukturen binden.
Die Daten, mit denen Funktionen arbeiten, werden dann direkt übergeben. Einfache Datentypen kann
man direkt übergeben. Für erweiterte Datentypen nimmt man dann Strukturen und übergibt die Adresse
dieser Datenstrukturen im Speicher. Weiter dann teilweise noch kombiniert mit Arrays, Maps, Lists usw.,
so dass man Funktionen schreiben kann, die auf komplexe Datenstrukturen/Datensammlungen angewendet
werden können - aber eben nicht nur mit einem globalen Datensatz, sondern mit vielen Datensätzen eines Typs.