Wie überzeuge ich einen Zweifler?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
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. :twisted:

Und der Unterschied beim "nur" recherchieren ist, dass das keine grosse Aussagekraft hat. Ich habe auch Implementierungen vorgeschlagen!
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
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 ;-)
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
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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 :roll:
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

@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.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Wir bekehren keine Ungläubigen! Wir verbrennen sie!

- Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
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.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

..... 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)

:P

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 :-D
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

...@Hyperion: Super! Eine neue Erfindung. :lol:

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Nennt man in Berlin nicht Brötchen auch "Schrippe"? ;-)
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Dann wäre das regional also ein Semmel- bzw. Weckschalter?
Antworten