Seite 2 von 2
Verfasst: Sonntag 18. Januar 2009, 15:14
von BlackJack
Der Sinn von Objective-C oder D wäre es eine "bessere" Sprache als C++ zu verwenden. Aber ausser PHP könnte man da ja fast alles nehmen.
Und der Unterschied beim "nur" recherchieren ist, dass das keine grosse Aussagekraft hat. Ich habe auch Implementierungen vorgeschlagen!
Verfasst: Sonntag 18. Januar 2009, 19:21
von abgdf
Hi,
bei Jython bin ich nicht sicher, ob man damit direkt Java-Bytecode erzeugen kann. Soll wohl gehen, ich hab's aber nicht geschafft

. Mit Groovy
http://groovy.codehaus.org/
soll das besser gehen. Es soll wohl noch etwas besser in die Java-Welt integriert sein.
Ansonsten wollt ihr mit C++, Java oder Python offenbar in jedem Fall eine objektorientierte Sprache verwenden. GUI-Toolkits drängen einem das ja auch auf.
Aus dem (hier allerdings gelegentlich auch kritisierten) Buch "Python GE-PACKT" nehme ich zum Ausprobieren anderer Sprachen immer dieses primitive Beispiel einer Lampe, das in Python z.B. so ausehen kann:
Code: Alles auswählen
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-
class Lamp:
def __init__(self):
self.itsStatus = "off"
def showStatus(self):
print "The lamp is " + self.itsStatus + " now."
def switchOn(self):
print "Click."
self.itsStatus = "on"
def switchOff(self):
print "Click."
self.itsStatus = "off"
myLamp = Lamp()
myLamp.showStatus()
myLamp.switchOn()
myLamp.showStatus()
myLamp.switchOff()
myLamp.showStatus()
Das versuche ich dann, in anderen objektorientierten Sprache nachzubilden.
Macht das doch mal in C++ und Java (hab' ich schonmal gemacht) und vergleicht dann, welches euch am besten gefällt.
Meiner Meinung nach ist Python-Code am klarsten und übersichtlichsten und bei in den meisten Fällen akzeptabler Ausführungsgeschwindigkeit am einfachsten und schnellsten zu schreiben.
Deshalb ist Python meine bevorzugte Sprache.
Viele Grüße
Verfasst: Sonntag 18. Januar 2009, 19:30
von derdon
Und hier meine Version der Lampe:
Code: Alles auswählen
In [28]: class Lamp(object):
def __init__(self, on=True):
self.on = on
def __str__(self):
return 'Lamp is %s' % ('on' if self.on else 'off')
def switch(self):
self.on = not self.on
....:
....:
In [35]: lamp = Lamp()
In [36]: print lamp
Lamp is on
In [37]: lamp.switch()
In [38]: print lamp
Lamp is off
In Zeile 5 musste ich den ternären Operator einklammern, weil sonst (wenn die Lampe aus ist) nur 'off' und nicht 'Lamp is off' zurückgegeben wird.
Verfasst: Sonntag 18. Januar 2009, 19:31
von numerix
abgdf hat geschrieben:bei Jython bin ich nicht sicher, ob man damit direkt Java-Bytecode erzeugen kann. Soll wohl gehen, ich hab's aber nicht geschafft
Mit der aktuellen stable version 2.2 funktioniert das problemlos. Dazu gibt es das Tool jythonc: Die richtigen Parameter angeben und fertig ist alles in einem jar-Archiv.
Bei den derzeitigen Beta-Versionen von 2.5 fehlt das Tool allerdings noch.
Verfasst: Sonntag 18. Januar 2009, 19:32
von Hyperion
abgdf hat geschrieben:
Aus dem (hier allerdings gelegentlich auch kritisierten) Buch "Python GE-PACKT" nehme ich zum Ausprobieren anderer Sprachen immer dieses primitive Beispiel einer Lampe, das in Python z.B. so ausehen kann:
Wobei genau dieses Beispiel irgend wie häßlich ist und nun genau mal nicht zeigt, worin Pythons Stärken liegen:
- kein PEP8
- ein Haufen sinnloser Methoden
- "Thema" dieser Klasse ist sinnfrei! (Wieso sollte man aus einem Boolschen Problem eine Klasse gießen?)
Generell ist es ja durchaus sinnvoll, sich einzelne kleine Use-Cases zu definieren und das in anderen Sprachen nachzubauen, aber dieses Beispiel ist da imho wenig sinnvoll!
EDIT: Ok, sehe grad "derdon" hat hier gleich mal konstruktiv gekontert

Verfasst: Sonntag 18. Januar 2009, 20:00
von abgdf
Hi,
Hyperion hat geschrieben:Wieso sollte man aus einem Boolschen Problem eine Klasse gießen?
Damit soll gezeigt werden, daß man in der objektorientierten Programmierung versucht, Gegenstände aus dem wirklichen Leben abzubilden. Ich glaube, das weißt Du aber.
@Hyperion, derdon: Auch wenn der Code von derdon kürzer ist und bestimmt auch funktioniert, finde ich die ursprüngliche Version dennoch besser, weil sie verständlicher ist und damit besser gewartet werden kann. Wer versucht, möglichst kurz zu schreiben und dabei in Kauf nimmt, sich kryptisch auszudrücken, ist im Herzen eigentlich Perl-Programmierer (was ja nichts Schlechtes ist). Er muß dann aber auch mit Perls Fluch leben, daß größere Projekte so kaum zu realisieren sind, weil nach einiger Zeit keiner mehr den Code versteht.
Viele Grüße
Verfasst: Sonntag 18. Januar 2009, 20:03
von derdon
Ist meine Klasse so schwer zu lesen? Außenstehende können das ja besser beurteilen, aber ich könnte die ohne Kommentare auch in einem Jahr verstehen

Verfasst: Sonntag 18. Januar 2009, 20:13
von str1442
@abgdf
Deine Version verwendet doch nur mehr Methoden und Strings statt einem (boolschen) Zustand. Man könnte derdon's Klasse auch mit einer on und off Methode oder ähnlichem ausstatten, wenn man wollte. Das benutzen von boolschen Werten für mehr oder weniger einfache Zustände würde ich mir aber nicht nehmen lassen und empfinde derdon's Klasse auch als besser. Genau für solche Dinge sind boolsche Operationen und Werte mitunter vorgesehen, sollte man nicht nur bei "if" benutzen.
Verfasst: Sonntag 18. Januar 2009, 20:20
von veers
Wir bekehren keine Ungläubigen! Wir verbrennen sie!
- Jonas
Verfasst: Sonntag 18. Januar 2009, 20:27
von BlackJack
@abgdf: Bei OOP versucht man nicht Gegenstände aus dem "wirklichen Leben" 1:1 abzubilden. Es geht beim Programmieren immer darum das "wirkliche Leben" zu abstrahieren und nur die Teile zu modellieren die wichtig sind. Und wenn die Aspekte einer Lampe, die man abbilden möchte, abstrakt gesehen einfach nur ein Boolean sind, dann bastelt man da nicht künstlich eine Klasse drum herum.
Das kann man natürlich mit "Spielzeugbeispielen" nicht zeigen. Mit solchen OOP-Beispielen kann man eigentlich fast nur die Syntax demonstrieren. Der fast wichtigere Aspekt, wann und wie man OOP sinnvoll einsetzt ist schwieriger zu zeigen, weil man da ein Problem mit einer gewissen Komplexität für braucht.
Das Beispiel von derdon ist kürzer aber nicht so kurz das es unverständlich wäre. Der Vergleich mit Perl hinkt gewaltig. Dort ist der Schalter auch mit dem passenden Datentyp modelliert. An- und Ausschalten kann man durch direktes Zuweisen, da braucht man keine Methoden für. Und die Klasse weiss wie sie sich selbst als Zeichenkette darstellt, aber nicht so etwas spezielles wie eine Ausgabe.
Verfasst: Sonntag 18. Januar 2009, 20:57
von wuf
..... Es muss in praktischer Hinsicht noch erwähnt werden, dass wir es hier mit zwei verschiedenen Schaltertypen zu tun haben.
a) abgdf-Schalter (Kippschalter)
b) derdon-Schalter (Schrittschalter)
Gruss wuf

Verfasst: Sonntag 18. Januar 2009, 21:08
von Hyperion
wuf hat geschrieben:..... Es muss in praktischer Hinsicht noch erwähnt werden, dass wir es hier mit zwei verschiedenen Schaltertypen zu tun haben.
a) abgdf-Schalter (Kippschalter)
b) derdon-Schalter (Schrittschalter)
Naja, stimmt aber nicht so ganz! bei b.) kann man die Zustände ja auch direkt setzen! Also ist es ein Hybrid aus Kipp- und Schrittschalter

Verfasst: Sonntag 18. Januar 2009, 21:37
von wuf
...@Hyperion: Super! Eine neue Erfindung.
Gruss wuf

Verfasst: Sonntag 18. Januar 2009, 22:26
von BlackJack
Ein Schrippschalter.

Verfasst: Sonntag 18. Januar 2009, 22:32
von Hyperion
Nennt man in Berlin nicht Brötchen auch "Schrippe"?

Verfasst: Sonntag 18. Januar 2009, 22:48
von Pekh
Dann wäre das regional also ein Semmel- bzw. Weckschalter?