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
Modulare Programmierung
-
- 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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.).
- ...
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
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
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.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?
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
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
Die ist ziemlich gut und das PI-System von Leonidas ist sowieso klasse
lg
- 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:
Dieser Charakter verhaelt sich so:
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:
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.
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)
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!
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!
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).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.
lg
P.S.: Die Engine bzw. der Editor von NWN1 hat mir damals eine menge Fun gemacht. War ziemlich genial (Und die Scriptsprache erst...).
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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 Skriptanweisungensape hat geschrieben:P.S.: Die Engine bzw. der Editor von NWN1 hat mir damals eine menge Fun gemacht. War ziemlich genial (Und die Scriptsprache erst...).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice