Das Notes Forum

Sonstiges => Offtopic => Thema gestartet von: flaite am 13.08.07 - 19:31:18

Titel: Objekt-Theorie und reale Welt?
Beitrag von: flaite am 13.08.07 - 19:31:18
Letzte Umfrage für die nächsten 4 Wochen. Versprochen.
Aber mir fällt jetzt, wo ich viel LotusScript und JavaScript programmiere sowie mich büchermässig mit den komplexeren Teilen von JavaScript beschäftige. 
OO ist in LotusScript,  JavaScript und Java ein jeweils ziemlich verschiedenes Werkzeug (find ich). 
Titel: Re: Objekt-Theorie und reale Welt?
Beitrag von: jBubbleBoy am 13.08.07 - 20:06:10
das sind aber auch 3 völlig unterschiedliche Ansätze / Umgebungen;
LotusScript = "Baukastenentwicklung", man schreibt nur Code in Ereignissen
Java = man muss alles selber machen und trägt für alles die Verantwortung
JavaScript = WEB


bubble
Titel: Re: Objekt-Theorie und reale Welt?
Beitrag von: flaite am 13.08.07 - 20:45:48
Das wo mir vorschwebt hat nicht unbedingt was mit den Umgebungen zu tun.
Völlig losgelöst von der Umgebung bewirkt die Implementierung der Sprachen auf - sagen wir Compiler-Level - das völlig verschiedener Einsatz von OO sinnvoll ist.

Java ist nicht Maschinensprache. Da muss man wirklich nicht alles selber machen und trägt für alles die Verantwortung. Im Gegenteil.  Java bringt eine deutlich größere Bibliothek an vorhandenen Klassen mit, so dass man sich um viele Sachen wirklich nicht selbst kümmern muß, sondern einfach eine vorhandene Klasse nutzt. Das ganze verstärkt sich nochmal mit den ganzen Frameworks wie EJB3, Hibernate, Spring, JSF, etc. die heute praktisch jedes Java Projekt prägen. Da nähert sich Java nämlich sehr stark einer Baukastenprogrammierung. Eclipse plug-in oder RichClient Programmierung ist btw. auch wesentlich ähnlicher wie Notes Programmierung, nur sehen das viele Diskutanten in den aktuellen Debatten nicht. Eclipse hat natürlich ein wesentlich komplexeres Objekt Modell als Lotus Script, aber im Grunde genommen reagiert dort der meiste Code auch "nur" auf vorgegebene Events.

JavaScript muss auch nicht "nur" fürs Web benutzt werden. Java 6 hat einen JavaScript Interpreter namens Rhino dabei, so dass  man JavaScript in beliebige JavaProjekte einsetzen kann.

Ich mein eher so Sachen wie die Tatsache, dass JavaScript Closures hat, aber keine der  beiden anderen Sprachen. Oder das in JavaScript Funktionen first class Objects sind, so dass Instanzvariablen Funktionen zugewiesen werden können. 
JavaScript ist eine Funktionale Programmiersprache und wenn du dir die neuen openSource Ajax Bibliotheken wie Dojo oder Prototye anschaust, dann merkst du, dass diese JavaScript Programmierer das benutzen.

LotusScript kennt Properties, Java nicht. Der Typ Variant in LotusScript bedeutet etwas anderes als java.lang.Object in Java. In LotusScript dürfen keine Arrays in Argumenten oder als Instanzvariablen von Klassen auftreten.

LotusScript kennt kein Überladen von Methoden und Konstruktoren. Java schon. Java besitzt Annotations.

Die Weiterleitung von Exceptions/Errors durch den call stack und wie darauf reagiert werden kann ist in den 3 Sprachen unterschiedlich.

Das Event Modell ist in den 3 Sprachen sehr, sehr verschieden.

LotusScript besitzt einen Typ namens Type, der Struct in C ähnelt und für den es in Java kein Äquivalent gibt.

In der Java-Benutzung selbst sind bestimmte Programmiertechniken, die noch 2002 für die Mehrheit als voll ok galten (z.B. Singletons) mittlerweile in Verruf geraten. Schon die Benutzung des Springframeworks führt zu einem völlig  anderen OO-Modell als ohne. Sogar kleinere Veränderungen der Umgebung wie die Verbesserung der AOP Features in Spring2.0 oder EJB3-Interceptors kann zu einem dramatisch unterschiedlichen OO-Modell führen.

Z.B. sind Ruby und Java beides OO-Sprachen, die  an keine Plattform fest gebunden sind.  Trotzdem führen sie zu verschiedenen Programmiertechniken, weil  einfach verschiedene Dinge effizient sind.

Im Grunde ist das eine Binsenweisheit. Aber die Auswirkungen sind erstaunlich stark.

Gruß Axel   
Titel: Re: Objekt-Theorie und reale Welt?
Beitrag von: Glombi am 13.08.07 - 21:49:29
Ich persönlich finde, dass man in Notes besser ohne OO programmieren kann. Ich habe schon eine Menge Datenbanken mit (teilweise ekzessiver) OOP gesehen, aber überzeugt hat es mich nicht unbedingt. Im Gegenteil, der Codewust in (Declaration) ist sehr unübersichtlich. Das müsste besser gehen - vielleicht wenn der Designer / Script für Eclipse kommt.
Titel: Re: Objekt-Theorie und reale Welt?
Beitrag von: jBubbleBoy am 13.08.07 - 23:56:43
Mit Java kann man ganz anders Web-Anwendungen entwickeln als mit LotusNotes. Für mich vergleichst Du hier Äpfel mit Birnen  ;)
Basic ist nun mal ein anderer Ansatz als Java oder C. Ich kann mit Notes in 2 h Anwendungen schreiben, wo ich in Java 2 Tage oder mehr benötige. Wie gesagt Äpfel <--> Birnen, sind beider lecker aber unterschiedlich.
Wenn ich in Notes entwickle nutze ich automatisch OO, aber halt anders als in Java. Ich erzeuge die Objekte im Designer und nutze die Ereignisse zum Coden. Und das man keine eigenen Klassen in LS schreibt liegt einfach an der Programmiersprache Basic, dessen Philosophie dahin geht alles möglichst einfach zu halten, d.h alle wichtigen Klassen werden in Form von "fertigen Objekten" geliefert. Was im Umkehrschluss schnell Ergebnisse liefert, aber man nicht auf alles einen Einfluss hat.

der bubble
Titel: Re: Objekt-Theorie und reale Welt?
Beitrag von: koehlerbv am 14.08.07 - 00:03:22
Äpfel und Birnen ist - meines Erachtens - ein wahres Wort. Dass passt auch sehr gut zu Axels anderem Thread .. ach nein, das ist ja gerade eben dieser  ;)  Man muss eben das beste aus den Möglichkeiten herausholen. Ich verwende an den Stellen, wo es sich für mich / mein Team lohnt, sehr gerne die Möglichkeiten von OOP, ich kenne aber - wie Andreas das auch schreibt - dazu krasse Antibeispiele.

Bernhard
Titel: Re: Objekt-Theorie und reale Welt?
Beitrag von: flaite am 14.08.07 - 09:29:13
Ich persönlich finde, dass man in Notes besser ohne OO programmieren kann. Ich habe schon eine Menge Datenbanken mit (teilweise ekzessiver) OOP gesehen, aber überzeugt hat es mich nicht unbedingt. Im Gegenteil, der Codewust in (Declaration) ist sehr unübersichtlich. Das müsste besser gehen - vielleicht wenn der Designer / Script für Eclipse kommt.
Teamstudio Script Browser ist relativ brauchbar und umsonst.
Lotus benutzt selber ziemlich viel OO in ihren Templates (z.B. Mail Templates). Es kann Vorteile bringen, aber man kann sich damit sehr leicht in den Fuß schiessen. Einen automatischen Vorteil bringt das class-Konstrukt nirgendwie. Man muss sehr aufpassen. Für bestimmte Aufgaben macht es in meiner täglichen Praxis Sinn. Was definitiv nicht funktioniert ist einfach Java OO Praktiken zu nehmen und die in LS einsetzen. Es gibt eigene LS-OO Praktiken.

@Bubble:
Es gibt Anwendungen, die kann ich in 4 Stunden in Java programmieren und in 4 Tagen in LotusScript.
Klassen können niemals als "fertige Objekte" geliefert werden. Klassen sind Blaupausen für Objekte. Deshalb verstehe ich deinen Beitrag nicht so ganz. Auch in LotusScript ist die Klasse NotesDocument selbst etwas anderes als ein z.B. durch
Code
doc = db.createDocument() 
erzeugtes Objekt.
Und an "fertigen Klassen" mangelt es in Java wirklich nicht: file:///C:/java/doku/jdk-6-doc/docs/api/index.html
Aber mir gings nicht darum Sprachen zu vergleichen, sondern OO Praktiken.

@Bernhard: Mir gings nicht um eine Diskussion um die Vorteile von OO oder Java - LotusScript.
Man muss in keiner der 3 Sprachen eigene Klassen schreiben.
In Java kann man sein ganzes Programm in einer main-Methode schreiben. Oder es gibt Systeme, in denen Programmierer die Business-Logik in Prozeduralen-Skripten in der Programmiersprache Java geschrieben werden. Weite Teile von J2EE Anwendungen sind nicht objekt-orientiert sondern prozedural. EJB-Session Beans werden traditionell oft prozedural-strukturiert geschrieben. Auch die in Java sehr verbreiteten ANT-Skripte zum automatisierten build, Packetierung, Auslieferung auf Server, etc. pp. auch nicht objekt-orientiert sondern in XML geschriebene Skripte.

D.h. soweit sind wir gar nicht auseinander. Verzicht auf eigene Klassen kann ja durchaus auch als OO-Praxis gesehen werden. Eben Negation. An dieser Stelle im System ist ein Skript effizienter als OO.
Alles was ich sage ist, dass sobald man eigene Klassen in den 3 Programmiersprachen schreibt, wirken auf ein  effektives Design der Klassen völlig andere Kräfte. Das beruht ein bischen auch auf Chaos-Theorie.  Wenn in der Implementierungssprache ein kleines Feature hinzugefügt wird (z.B. Annotations in Java) kann das eine dramatische Auswirkungen auf die Effizienz von verschiedenen OO-Praktiken haben.
Oder General Theory of the Second best aus der Ökonomie (In einem sub-optimalen System kann eine Maßnahme, die in einem optimalen System positive Auswirkung hat, negative Auswirkungen haben). Nehmen wir an es gäbe einen Satz an theoretisch optimalen OO-Praktiken, die aber eine optimale Implementierung von OO in der Sprache zur Bedingung hat. Und nehmen wir weiter an, dass OO in keiner Sprache optimal implementiert ist. Dann folgt daraus, dass eine "gute" OO-Praxis im optimalen System nicht unbedingt eine positive Auswirkung im suboptimalen System hat.   

Jedes System ist suboptimal und jedes System hat seine eigenen Regeln.

Gruß Axel