08.04.2010, 10:08
Beitrag #2
|
IchSelbst
LVF-Guru
Beiträge: 3.700
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Neues Projekt mit LVOOP umsetzen (Diskussion)
' schrieb:Ich habe mich mit dem Thema OOP, besonders mit LVOOP und den LabVOOP Designpatterns auseinandergesetzt.
Hab ich auch. Ergebnis: Das gefällt mir so nicht.
Zitat:Jetzt möchte ich das ganze an einem imaginären Projekt mit euch durchspielen.
Hast du schonmal irgendein sinnvolles Modul in LVOOP gemacht? Ich meine nicht diese Musterbeispiele zum Addieren von zwei Zahlen.
Zitat:Wie geht Ihr jetzt vor?
Die Vorgehensweise ist immer applikationsunabhängig.
Eine Aufgabe wird in kleine, per se unabhängige Module zerleget. Jedes dieser Module ist eine LVOOP-Klasse. Die Klassen selbst können hirarchisch aufgebaut sein. Manche Klassen beinhalten "Unterklassen" (beachte: das hat nichts mit Ableitung/Vererbung zu tun). Das Entprodukt, also die Applikation selbst, ist dann nichts weiter als eine Zusammenstellung von LVOOP-Klassen. (Das da auf bestimmten Ebenen Verbindungen zwischen den einzelnen Klassen gemacht werden müssen, ist klar).
Für das Kamerasystem heißt das:
Eine Klasse für den Helligkeitssensor, eine Klasse für das Blitzgerät, eine Klasse für das Speichern, eine Klasse für die Kamera als solche, etc.pp. Diese Klassen werden in eine integriert, die dann heißt "Bild aufnehmen und speichern."
Vorteil der modularen Bauweise:
Ändert sich der Helligkeitssensor (z.B. die Schnittstelle), muss lediglich die entsprechende Klasse intern angepasst werden. Nach außen hin wird nicht sichtbar sein, dass sich was am Helligkeitssensor egändert hat - demzufolge muss die Applikation weiterhin funktionieren.
Ich würde empfehlen, zuerst eine Klasse für den Helligkeitssensor zu machen. Beachte hier folgendes: Der Helligkeitssensor muss justiert/kalibriert werden. Der hat eine Schnittstelle (RS232, USB etc.etc.). Mindestens die Schnittstelle interessiert das Hauptprogramm überhaupt nicht. Die Schnittstelle zu Bedienen ist Sache der Klasse.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
08.04.2010, 10:40
Beitrag #3
|
oenk
LVF-Stammgast
Beiträge: 361
Registriert seit: May 2005
>= 7.1
2004
EN
3018
Schweiz
|
Neues Projekt mit LVOOP umsetzen (Diskussion)
' schrieb:Hab ich auch. Ergebnis: Das gefällt mir so nicht.
Mir auch nicht. Der GOOP ansatz gefällt mir in den meisten Fällen besser, da er näher am OOP (IMHO) dran ist.
GOOP macht die Objektverwaltung "by reference" LVOOP "by value". Letzteres heisst, dass sobald eine Verzweigung der Klasse erstellt wird, wird eine Kopie des Objektes gemacht, was nicht immer im Sinne des Entwicklers ist.
Ich hab einen Treiber in GOOP umgesetzt, da mir es für Treiber sinnvoller erschienen ist (so muss ich nicht über den ganzen Code mein "Kabel" ziehen, sondern kann einfach die Referenz des Objektes verwenden).
Mein Vorgehen war:
ich hab mir erstmal ein Klassendiagramm erstellt. Dann zusammengefasst und Basisklassen erstellt (in deinem Beispiel eine Kamera Klasse, von der dann die Canon-, Nikon-, Leica- usw Klassen abgeleitet werden können). Danach hab ich mir die Daten der einzelnen Klassen überlegt und dann die Methoden. Dann das ganze Klassendiagramm noch ungefähr fünfmal über den Haufen geworfen, neu gestalltet und mich dann mal ganz langsam an die Programmierung der Basisklassen gemacht.
Schau mal hier, da wird in den ersten 5min sehr schön erklärt, wie man sich eine Klasse erstellt.
Viel Erfolg
Christian
btw: GOOP war für mich die Entdeckung des Jahres 2008!
In theory, there is no difference between theory and practice; In practice, there is.
Chuck Reid
|
|
|
08.04.2010, 18:24
Beitrag #5
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
Neues Projekt mit LVOOP umsetzen (Diskussion)
Ich kann ohne OOP Denkweise nicht mehr programmieren, LVOOP (also Value) finde ich (für LV) gut, GOOP (ByRef) hat dagegen Vor- und Nachteile.
Vorteil ist, dass keine Kopien Erstellt werden (?), Nachteil, dass der Zugriff gesperrt werden soll, sonst kann es zu Konflikten führen. Das Sperren ist aber gut über Semaphoren integriert, ist also kein Problem. Nun bleiben noch die zusätzlichen Kosten für GOOP, wobei LVOOP in LV schon integriert ist.
@abrissbirne, hast meine zwei Einleitungsartikel zu LVOOP schon gelesen?
Gruß, eg
|
|
|
08.04.2010, 19:30
Beitrag #6
|
IchSelbst
LVF-Guru
Beiträge: 3.700
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Neues Projekt mit LVOOP umsetzen (Diskussion)
' schrieb:Wenn ich euch richtig verstehe, versucht Ihr Jede noch so kleine Programmieraufgabe in eine Klasse zu packen?
Naja, jede noch so kleine nicht. Aber eine Applikation in eine einzige Klasse zu packen ist auch nicht recht. Man muss halt das richtige Mittelmaß finden.
Zitat:Konntest du auf bereit geschriebene Klassen zurückgreifen?
Hinweis:
Genau das ist Sinn und Zweck!
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
09.04.2010, 07:46
Beitrag #8
|
abrissbirne
LVF-Stammgast
Beiträge: 480
Registriert seit: Aug 2007
LV2009, LV2010
2007
EN
66123
Deutschland
|
Neues Projekt mit LVOOP umsetzen (Diskussion)
' schrieb:Ich kann ohne OOP Denkweise nicht mehr programmieren, LVOOP (also Value) finde ich (für LV) gut, GOOP (ByRef) hat dagegen Vor- und Nachteile.
Vorteil ist, dass keine Kopien Erstellt werden (?), Nachteil, dass der Zugriff gesperrt werden soll, sonst kann es zu Konflikten führen. Das Sperren ist aber gut über Semaphoren integriert, ist also kein Problem. Nun bleiben noch die zusätzlichen Kosten für GOOP, wobei LVOOP in LV schon integriert ist.
@abrissbirne, hast meine zwei Einleitungsartikel zu LVOOP schon gelesen?
Gruß, eg
;)Klar. Habe aber noch viel mehr gelesen und die Webcast gesehen. Außerdem habe ich auch ein C++ Buch zu Rate gezogen.
' schrieb:Naja, jede noch so kleine nicht. Aber eine Applikation in eine einzige Klasse zu packen ist auch nicht recht. Man muss halt das richtige Mittelmaß finden.
Hinweis:
Genau das ist Sinn und Zweck!
Das habe ich auch verstanden
Eugen beschreibt in seinem Tutorial eine Wanduhr. Jeden Text den ich zu OOP finde behandelt reale Objekte um diese in eine Klasse zu packen. Kann bzw. überführt man auch nicht reale Objekte in eine Klasse? Bspl. die Datenspeicherung? Ich sehe hier keine Möglichkeit diese Klasse wieder zu verwenden. Meist hat jeder Kunde spezielle Wünsche oder bereits fertige Datenformate.
|
|
|
09.04.2010, 08:30
(Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2010 08:31 von IchSelbst.)
|
IchSelbst
LVF-Guru
Beiträge: 3.700
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Neues Projekt mit LVOOP umsetzen (Diskussion)
' schrieb:Jeden Text den ich zu OOP finde behandelt reale Objekte um diese in eine Klasse zu packen.
Das wird ja nur aus Anschauungsgründen gemacht. Das Klassenmodell lässt sich an einem realen Objekt einfacher erklären - weil der Schüler mit einer realen Uhr leichter denken kann als mit einem virtuellen Konstrukt.
Wenn du, nachdem du am realen Beispiel die Zwänge, warum man OOP machen muss/sollte, und die Vorzüge, warum man OOP machen will, verstanden hast, kannst du die Eigenschaften von OOP (Kapselung, Vererbung, private/geschützte/öffentliche Methoden/Felder (Propertys), etc.etc.) auf alles mögliche anwenden - auch auf das Speichern von Daten.
Zitat:Meist hat jeder Kunde spezielle Wünsche oder bereits fertige Datenformate.
In einem ausgereiften OOP-System kann man prinzipiell alle Methoden "konfigurieren", das heißt man kann der abgeleiteten Klasse eine andere Speichermethode zuweisen. Das geht sogar soweit, dass man jeder einzelnen Instanzen dieser abgeleiteten Klasse eine eigene Speichermethode zuweisen kann.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
| |