Modulare Programmierung

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
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Hallo,

da ich mich einmal mit Modularer Programmierung beschäftigen wollte, damit ich Projekte einfacher ausbauen kann, aber keine Ahnung habe, wie ich ein Programm Modular aufbaue, wollte ich euch mal fragen, wie so etwas geht.
Wie muss ich programmieren, dass ich einfach ein Modul "installieren" kann und es dann ohne viele Handgriffe einsatzbereit ist?
Habt ihr da irgendwelche Beispiele oder etwas ähnliches?

LG Tobi
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Um Programme modular zu halten
  • Nebenwirkungsfreie Funktionen benutzen
  • Programm in Module aufteilen, die voneinander so gut wie möglich unabhängig sind
  • Klassen nutzen, die ihre Funktionalität schön kapseln
Ich glaube das ist schon mal ein guter Startpunkt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Hi.
  • ...
  • Darauf achten das sich die Funktionen/Klassen möglichst Unit-Testen lassen (Ja ich weiß es geht nicht immer).
  • Funktionen schreiben die keine Seiteneffekte haben. Also z.B. auf ``global``-Objekte verzichten (Variablen) die sich mehrer Funktionen Teilen. Am besten ``global`` ganz vergessen!
  • Wie Leonidas schon schrieb: Modul schreiben die so weit wie möglich von einander unabhängig sind (Geht auch nicht immer, da vieles oft aufeinander aufbaut.).
  • ...
lg
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Ok, das sin schonma gute Tipps. Danke.
Aber noch ne Frage: Wie programmiert man Schnittstellen, damit andere, die den Quellcode nicht sehen können, Module für das Programm schreiben können?
Z.B. wie die Schnittstellen für Mods in Spielen, da sieht man ja den orig. Quellcode ja auch nicht. Wie geht das?

Lg Tobi
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

CrackPod hat geschrieben:Aber noch ne Frage: Wie programmiert man Schnittstellen, damit andere, die den Quellcode nicht sehen können, Module für das Programm schreiben können?
Z.B. wie die Schnittstellen für Mods in Spielen, da sieht man ja den orig. Quellcode ja auch nicht. Wie geht das?
Das ist ganz einfach. Du defninerst einfach eine Schnittstelle. Sieht etwa so aus, dabei bietet dieses Plugin die Klasse Parser, welche einen Sendernamen breitstellt, eine Version, einen Konstruktor und zwei Funktionen. Die eine wird aufgerufen, wenn eine HTML-Seite gescraped werden soll, die andere Wird aufgerufen, wenn der aktuelle Song angezeigt werden soll.

Zur Vereinfachung ist die Klasse von der base.BaseStation abgeleitet, die selbst schon einige kleine Funktionen bereitstellt, die der Pluginschreiber vielleicht benötigen könnte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Hallo,

hm.. Raff ich nich wirklich :oops: vielleicht kann ich das Beispiel auch nur nich abstrahieren. Wo kann ich mir mehr Beispiele ansehen?

LG Tobi
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Schau dir mal die Klasse ``PluginController`` von dieser Datei an: http://svn.projectdream.org/people/mkub ... tsonair.py
Die ist ziemlich gut und das PI-System von Leonidas ist sowieso klasse :)

lg
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Was man oft sieht, ist halt die Moeglichkeit ueber Klassen und Vererbung, wie auch in Leonidas Beispiel. D.h. du solltest dich mit objektorientierter Programmierung befassen, falls du das noch nicht getan hast. :)

Angenommen, man hat ein Spiel, in dem die Spieler ihre eigenen Charaktere erschaffen koennen. Man kann einen Standardcharaker anbieten, der verwendet wird, wenn der Spieler sich keinen eigenen Charakter gemacht hat:

Code: Alles auswählen

class Held:

    def __init__(self, name, beschreibung):
        self.beschreibung = beschreibung
        self.name = name

    def gruessen(self):
        print "Seid gegruesst."

    def angreifen(self):
        print "Stirb, Elendiger! Hua!"

    def __str__(self):
        return "%s ist %s." % (self.name, self.beschreibung)
Dieser Charakter verhaelt sich so:

Code: Alles auswählen

>>> jupp = Held("Jupp", "gross und blond")
>>> print jupp
Jupp ist gross und blond.
>>> jupp.gruessen()
Seid gegruesst.
>>> jupp.angreifen()
Stirb, Elendiger! Hua!
Wenn der Spieler einen eigenen Helden erstellen moechte, muss er nur von der Held-Klasse ableiten. Er kann dann die Eigenschaften (Atribute und Methoden) veraendern, die er anders haben moechte, der Rest uebernimmt (durch die Vererbung) die Standard-Eigenschaften des allgemeinen Helden:

Code: Alles auswählen

class Jedi(Held):

    def gruessen(self):
        print "Moege die Macht mit dir sein."

Code: Alles auswählen

>>> yoda = Jedi("Yoda", "ziemlich klein und schrullig")
>>> print yoda
Yoda ist ziemlich klein und schrullig.
>>> yoda.gruessen()
Moege die Macht mit dir sein.
>>> yoda.angreifen()
Stirb, Elendiger! Hua!
Fuer den Code des eigentlichen Spiels ist es dann egal, ob ein Held oder ein Jedi verwendet wird (vorausgesetzt der Jedi wurde richtig programmiert). Natuerlich muessen die Spieler, die eigene Helden bauen wollen, wissen, wie die Held-Klasse aussieht und was die einzelnen Funktionen machen sollen. D.h. dafuer muss eine Doku und der Quellcode einsehbar sein. Aber eben nur dafuer und nicht fuer den Rest des Spiels.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Rebecca hat geschrieben:Natuerlich muessen die Spieler, die eigene Helden bauen wollen, wissen, wie die Held-Klasse aussieht und was die einzelnen Funktionen machen sollen. D.h. dafuer muss eine Doku und der Quellcode einsehbar sein. Aber eben nur dafuer und nicht fuer den Rest des Spiels.
Und da normalerweise ein Editor angeboten wird für Modder, muss man sich als Modder für Games nicht mit low-level befassen, da der Editor anhand der eingaben in der GUI selber den Content generiert. (OK, "gute" Game-Engins (Z.B. die von TES4, G3) und deren Editoren bieten auch eine integrierte Scriptsprache für Events, KI-Manipulation, etc).


lg

P.S.: Die Engine bzw. der Editor von NWN1 hat mir damals eine menge Fun gemacht. :D War ziemlich genial (Und die Scriptsprache erst...).
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sape hat geschrieben:P.S.: Die Engine bzw. der Editor von NWN1 hat mir damals eine menge Fun gemacht. :D War ziemlich genial (Und die Scriptsprache erst...).
Benutzen die nicht Lua? Zumindest haben die älternen Baldur's Gate-Spiele immer Lua benutzt.. hat man auch zum Eingeben von Cheats verwendet. Waren dann weniger Cheats sondern normale Skriptanweisungen :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Nein, Lua wird nicht verwendet. Bei NWN1 war damals das Aurora-Toolset dabei, die eine Scriptsprache integriert hatte die an C/C++ erinnert.
Antworten