Programmierparadigmen

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.
Antworten
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Hallo zusammen,...

ist schon eine Weile her, dass ich hier aktiv war. Eigentlich programmiere ich nichts mehr, aber es hat sich ergeben, dass ich mich mit Programmierparadigmen beschäftigen muss.
Mit Python lassen sich ja so alle(?) umsetzen. Ich wäre für einfache Beispiele zur Demonstration sehr dankbar. IOder einfach auch Links dazu.
Auch zu Quellen wo die Theorie zum Thema möglichst einfach und dennoch korrekt besprochen wird.

Ich habe mir Pyhton 2.7.8 installiert.

Offensichtlich hat die Pyhton 3 Python 2 nie wirklich abgelöst.

LG, rolgal_reloaded
BlackJack

@rolgal_reloaded: Das ist eine *sehr* weitläufige Frage. Das fängt ja schon bei der Definition von „Programmierparadigma” an, was sich direkt darauf auswirkt welche es überhaupt gibt. Und die Frage klingt ein wenig nach „macht mal meine Hausaufgabe ich mag nicht selber recherchieren”. ;-)
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Eben sehr weitläufig, bevor ich mich verzettel, würde ich durch entsprechenden Input gerne die richtige Richtung einschlagen.

Gerade für dich, wäre es wohl ein leichtes an einem kleinen Beispiel funktionale, prozuderale, objektorientierte, usw. Programmierung darzulegen.
Das würde mir den Einstieg sicher sehr erleichtern.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Wie gut findest du bzw. ihr dieses Skriptum?

http://atlas.tk.informatik.tu-darmstadt ... I-T1.5.pdf
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Was die Paradigmen angeht lass ich erst mal Peter van Roys "Programming Paradigms for Dummies: What Every Programmer Should Know hier liegen. Ein tolles Paper das dir zeigen sollte, dass sich mit Python nur ein kleiner Bruchteil einsetzen laesst.

Aber zu den drei Paradigmen, die Python wirklich unterstuetzt: Was ist denn dein Ziel? Natuerlich kann man die Fibonnacci Zahlen auf alle 3 Wege berechnen lassen .. nur macht es keinen Sinn. Paradigmen sind kein Selbstzweck, sondern ein Mittel zum Zweck.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

cofi hat geschrieben:Was die Paradigmen angeht lass ich erst mal Peter van Roys "Programming Paradigms for Dummies: What Every Programmer Should Know hier liegen. Ein tolles Paper das dir zeigen sollte, dass sich mit Python nur ein kleiner Bruchteil einsetzen laesst.

Aber zu den drei Paradigmen, die Python wirklich unterstuetzt: Was ist denn dein Ziel? Natuerlich kann man die Fibonnacci Zahlen auf alle 3 Wege berechnen lassen .. nur macht es keinen Sinn. Paradigmen sind kein Selbstzweck, sondern ein Mittel zum Zweck.

Sicher tolles Papier, aber ich bräuchte etwas in Deutsch. Es müssen ja nicht explizit alle Paradigmen umgesetzt werden. An einfachen Beispielen, sollen - sagen wie mal die gängisten - Paradigmen veranschaulicht werden.

Nicht zu mathematisch wäre auch gut.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

100% prozedural wirst Du mit Python nicht hinbekommen. Du kriegst ja noch nicht einmal eine Datei auf, ohne dass da ein Objekt angelegt wird. Prozedural mit Python kann dann also nur heißen, Du definierst selbst keine Klassen, arbeitest aber mit den eingebauten Klassen der ganzen Python-Bibliotheken.

Das gleiche Problem einmal objektorientiert und einmal prozedural zu lösen macht nicht wirklich Sinn. Ob prozedural oder objektorientiert ist ja nicht eine Frage der persönliche Vorliebe des Entwicklers. Es gibt Probleme die sind einfacher prozedural zu lösen und es gibt Probleme die sind objektorientiert einfacher zu lösen.

Probleme die prozedural einfacher sind:
  • Du kopierst die Fotos von einer Kamera in ein Verzeichnis. Nun sollen alle Fotos so umbenannt werden, sodass im Dateinamen das Aufnahmedatum enthalten ist.
  • Datenaufbereitungsprogramme: Irgendwelche numerischen Daten sollen in einer ansprechenden Grafik aufbereitet werden:
    http://matplotlib.org/gallery.html (praktisch alle Beispiele sind prozedural)
  • Hardware nahe Programmierung (ist aber nicht die Domäne von Python)
Probleme die objektorientiert einfacher sind:
  • Große Programme, schließlich geht es bei Objektorientierung um die bessere Handhabung von Komplexität
  • GUIs, schau Dir PyQt Beispiele an.
a fool with a tool is still a fool, www.magben.de, YouTube
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

@MagBen

Das hilft mir schon mal sehr weiter, ich bin auch gerade dabei mir das von Wikipedia durchzulesen:

http://de.wikipedia.org/wiki/Programmierparadigma
BlackJack

@MagBen: Rein prozedural wird man auch in einer ”prozeduralen Programmierpsrache” nicht hinbekommen. Gutes Beispiel sind Dateien die insbesondere unter Unix ziemlich OOP sind. Und bei prozedural ”darf” man Klassen mindestens für Strukturen verwenden also was `struct` in C oder `RECORD` in Pascal ist. So bekommt man dann auch eine Datei auf, in dem man das Ergebnis von `open()` als opaken Zeiger oder ein Handle auf eine Datei ansieht:

Code: Alles auswählen

In [3]: f = open('test.py')

In [4]: content = file.read(f)

In [5]: len(content)
Out[5]: 102

In [6]: file.close(f)
Und natürlich gäbe es da auch noch `os.open()`, `os.read()`, `os.close()`, …

Warum das umbenennen von Dateien in einer rein objektorientierten Programmiersprache nicht so einfach sein soll wie in einer prozeduralen, erschliesst sich mir nicht. In einer Sprache wie Io, die wirklich fast nur mit Objekten und Methoden auskommt, und nicht mal Syntax für Schleifen oder gar ``if``\s hat, könnte das beispielsweise so aussehen:

Code: Alles auswählen

Directory with(basePath) filesWithExtension(".jpg") foreach(file,
    date := ImageMetaData with(file) read at("Exif.Image.DateTime")
    path := file path pathComponent asMutable appendPathSeq(file baseName)
    newName := path .. date asString("_%Y-%m-%d.") .. file path pathExtension
    file moveTo(newName)
)
Auch für hardwarenahe Programmierung eignet sich objektorientierte Programmierung. Wie gesagt sind ”Dateien” ein gutes Beispiel. Und es handelt sich teilweise auch um grosse Programme — ein Betriebssystem ist schliesslich ziemlich umfangreich. Und auch einzelne Treiber oder Protokolle sind mitunter so gross das sich ein OOP-Ansatz lohnt um der Komplexität Herr zu werden.

@rolgal_reloaded: Bei den Programmierparadigmen darf man IMHO den Spaghetticode-Fall nicht vergessen, also das Fehlen von strukturierter Programmierung wie in den klassischen BASIC-Dialekten. Auch das unterstützt Python mit Hilfe des `goto`-Moduls, das neben einem `goto` auch ein `comefrom` anbietet: http://entrian.com/goto/ :-D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Für logische Programmierung gibt es für Python eine Reihe von miniKanren-Implementationen ;-)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@ Leonidas: Hier ist meine Version der Logikprogrammierung in Python. Reiner Source Code ohne Dokumentation oder Kommentare und bis jetzt ist es nur ein proof of concept. An Meinungen wäre ich aber sehr interessiert. Zum Einstieg empfehle ich die Module im examples-Verzeichnis.
In specifications, Murphy's Law supersedes Ohm's.
Antworten