Numerische Methoden

Aus Physik
Zur Navigation springen Zur Suche springen

Allgemeines

Ein paar Anmerkungen zum Thema "Objektorientierte Programmierung (OOP)"

Objektorientierte Programmierung ist bedeutend mehr als die Verwendung von Klassen!

Erst wenn man die grundlegenden Ideen wie Kapselung, Vererbung, Polymorphismus, ... verstanden hat und einsetzen kann, ist man in der Lage die Vorteile der OOP effizient zu nutzen.

Was sind aber nun die Vorteile (kein Anspruch auf Vollständigkeit):

  • Mit Hilfe der Kapselung können klare Zuständigkeiten geschaffen, und damit Seiteneffekte vermieden werden.
  • Einzelne Module können leichter wiederverwendet werden
  • Der Code wird leichter wartbar und erweiterbar
  • Durch die gegebene Strukturierung fällt es leichter den Code zu verstehen (auch für den Programmierer, wenn er seinen Code nach einer gewissen Zeit wieder anschaut) und sich in den Code einzuarbeiten
  • Bessere Kommunizierbarkeit. Einerseits ist auch hierbei die Strukur hilfreich, andererseits gibt es viele Tools zur Planung und Visualisierung des Designs.

Ist OOP nötig?
Zweifelsohne sind die (was den Codeumfang betrifft) kleinen Beispiele, die in der Numerische Methoden UE zu schreiben sind, problemlos mit "herkömmlicher" strukturierter Programmierung programmierbar. Natürlich kann man leicht grobe (Design-)Fehler einbauen, wie z.B. globale Variablen "unpassend" zu verändern, jedoch schützt auch OOP nicht vor falschem Vorgehen, Verdenkern und Fehldesign.
Zwar lassen sich die Vorteile der OOP schon bei solch kleinen Projekten nutzen, bei größeren und/oder wachsenden Systemen ist jedoch die Verwendung objektorienterter Konzepte beihahe unumgänglich. Mit "Strukturierter Programmierung" erstellter Code wird mit zunehmender Größe rapide unlesbarer und unwartbarer. Insbesondere globale Variablen und globale Sichtbarkeit der Funktionen stellen große Probleme dar. Am schlimmsten zeigen sich Designmängel wenn der Code refactored/geändert oder ein Teil daraus wiederverwendet werden soll.
Sollte also jemand vorhaben sich in Zukunft etwas mehr mit Anwendungsprogrammierung zu beschäftigen, so kommt man um das Thema OOP nicht herum. Z.B. ist jede bekanntere Library für die Erstellung von GUIs (QT, WxWidgets, MFC) objektorientiert.

Gegenüberstellung verschiedener Programmiersprachen

Matlab

Matlab ist sehr vielseitig anwendbar. Man kann es sowohl als konsolenbasierten Taschenrechner als auch für die Erstellung von Simulationsprogrammen mit graphischer Benutzeroberfläche und wunderschön bunten Ausgaben benutzen. - Und natürlich für eine Unmenge an Aufgaben die irgendwo dazwischen liegen.

Das Besondere an Matlab ist sicherlich, dass es speziell für Berechnungen mit Vektoren und Matritzen zugeschnitten ist. So bestehen z.B. viele Berechnungen, für die man in den anderen Programmiersprachen mindestens eine Schleife braucht, aus einem einzigen simplen Befehl. Selbstverständlich kann man dies jedoch nur dann nutzen, wenn man in der Matlab-Programmierweise denkt.

Weiters bringt Matlab eine Unmenge an Funktionen und Toolboxes, die man sich in anderen Programmiersprachen oftmals erst mit vielen Libraries selbst zusammensuchen muss, mit.

Ein weiterer Vorteil ist, dass man sehr schnell und einfach aussagekräftige Diagramme erstellen kann. Diese können auch gleich in diversen Formaten gespeichert und so leicht für Berichte u.Ä. verwendet werden.

Matlab ist jedoch nicht das allmächtige Wunderwerkzeug für den Physiker. Das sicherlich größte Problem ist, dass es wesentlich langsamer als compilierte Programme ist. Wenn man dann auch noch Schleifen programmiert, wo es möglich wäre Vektorrechnungen direkt zu benutzen, dann wird es nochmals wesentlich langsamer.

Matlab-Programme werden üblicherweise nicht compiliert, was heißt, dass man Matlab installiert haben muss, um ein Programm laufen lassen zu können. Zwar gibt es Matlab-Cmpiler, jedoch sind diese bei den mehr oder weniger offiziellen Studentenversionen meist nicht enthalten.

C

C++

Java

Ada

C - Spezifisches

Allozierung von Speicher

Die "C - Methode"

Die "C++ - Methode"

Benutzung von nrutil

Visualisierung der Daten

Es gibt mehrere Möglichkeiten die erstellten Daten hübsch auszugeben. Einige der für diese LV relevanten werden hier beschrieben

Ressourcen

Matlab - Spezifisches

Einiges findet sich auf den WIKI-Seiten der LV "Applikationssoftware und Programmierung"