Klassenobj. als Parameter b. d. Instanzierung von Klassen ?

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
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Hallo,
aller Angang ist schwer :? ! Aber vielleicht könnt Ihr mir ja auf die Sprünge helfen ! :wink:

Folgendes Problem:
Es gibt eine Klasse A und eine davon geerbte Klasse AB.
Jetzt möchte ich bei der Instanzierung ein Objekt der Klasse A als Parameter an die Klasse AB übergeben mit

Code: Alles auswählen

a=A()
b=AB(a)
Wie deklariere ich denn jetzt die Klasse AB ?

Code: Alles auswählen

class AB(A):
    def __init__(self,???)
um die Daten in a für die Berechnung der Attribute in AB zu benutzen.

Kann man denn irgendwie den Typ des Parameters mit angeben ? Das konnte ich bislang in keinem Tutorial finden. :(

Könnte mir da jemand helfen ? :wink:
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

In Python gibt es keine Deklarationen. Es gibt nur Definitionen. Klassen und Funktionen werden definiert (über das class- bzw def-Statement). Variablen werden weder deklariert, noch definiert, sondern einfach verwendet. Sie entstehen bei der ersten Zuweisung und sind bloß Namen, die mit Objekten assoziiert sind. Variablen haben in Python keinen Typ, oder besser gesagt, sie haben alle denselben Typ: Referenz auf ein Objekt. Man kann jeder Variablen jedes Objekt zuweisen. Für jemanden, der von statisch typisierten Sprachen kommt, mag das gefährlich und unübersichtlich klingen. Das ist es aber gar nicht. Es ermöglicht sogar Techniken, die in streng statisch typisierten Sprachen kaum möglich wären, wie zB. Duck Typing.

In Deinem Fall würde man also gar nichts besonderes machen (alle Beispiele sind in Python 3.x):

Code: Alles auswählen

class A:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class AB(A):
    def __init__(self, a):
        self.name = a.name
        self.age = a.age
Oder man könnte das __init__() der Basisklasse aufrufen:

Code: Alles auswählen

class AB(A):
    def __init__(self, a):
        A.__init__(self, a.name, a.age)
Wie es halt im konkreten Fall praktischer ist.

Die __init__()-Methode in Python ist kein Konstruktor, sondern ein Initialisierer (daher auch ihr Name). Das Objekt besteht bereits, wenn sie aufgerufen wird. Man könnte theoretisch auch sowas machen:

Code: Alles auswählen

class A:
    pass

def make_A(name, age):
    a = A()
    a.name = name
    a.age = age
    return a

x = make_A('joe', 35)
print(x.name, x.age)
Das würde man aber nicht machen, denn es gibt ja __init__(). Es ginge auch das:

Code: Alles auswählen

class A:
    pass

def init_A(a, name, age):
    a.name = name
    a.age = age

A.__init__ = init_A

x = A('joe', 35)
print(x.name, x.age)
Tatsächlich ist die Definition einer Methode im Rumpf einer Klasse nichts weiter als syntactic sugar für ziemlich genau sowas. Das funktioniert u.a. deswegen, weil Funktionen auch wieder nur Objekte sind.

Wie das alles genau funktioniert steht in der Python Languge Reference, insbesondere in den Kapiteln 3 (Data Model) und 4 (Execution Model). Das Tutorial kennst du ja bereits.

Ich empfehle zusätzlich diese Lektüre:
In specifications, Murphy's Law supersedes Ohm's.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@mephisto-online: das Konstrukt eine Exemplar einer Elternklasse zur Initialisierung einer Kindklasse zu verwenden, hört sich für mich nicht nach einem guten Design an. Vererbung in Python wird sowieso viel seltener benutzt als z.B. in Java, weil man keine strenge Typprüfung hat, und deshalb die Eigenschaften einer Klasse entscheidend sind, nicht ihr Typ. Das ist das von pillmuncher angesprochene Duck-Typing.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Sirius3 hat geschrieben:@mephisto-online: das Konstrukt eine Exemplar einer Elternklasse zur Initialisierung einer Kindklasse zu verwenden, hört sich für mich nicht nach einem guten Design an. Vererbung in Python wird sowieso viel seltener benutzt als z.B. in Java, weil man keine strenge Typprüfung hat, und deshalb die Eigenschaften einer Klasse entscheidend sind, nicht ihr Typ. Das ist das von pillmuncher angesprochene Duck-Typing.
Ok ! Dock-Typing, muss ich mir wohl dringend anschauen. Aber warum sollte ich die Vererbung nicht nutzen, wenn Klasse A ein Teil der Klasse B ist ? Die zusätzlichen Attribute in B sollen mit den Attributen der Klasse A berechnet werden. Klasse B möchte ich dann als sowas wie einen Datensatz halten, natürlich dann auch mit den dazu gehörigen Attributen aus A.

Wenn man das in Python eigentlich anders macht, würde ich dan natürlich auch anders machen. Muss die Python-Denke erst mal verinnerlichen. Das ist für einen Java- und C++-Geschädigten ja erst mal ein Weg !
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mephisto-online hat geschrieben: Aber warum sollte ich die Vererbung nicht nutzen, wenn Klasse A ein Teil der Klasse B ist ?
*Ist* B denn ein A? Oder *hat* B ein A? Je nach dem entscheidet sich die Sinnhaftigkeit einer Vererbung ;-)

Im übrigen ist es auch in C++ / Java imho nicht üblich, einen Konstruktor zu schreiben, der ein Exemplar der Oberklasse als Parameter übernimmt und mit den Attributen zusätzliche Attribute "füllt". Einen Typen in einen anderen "verwandeln" regelt man dort eher über Casting oder nutzt einfach nur den Polymorphismus aus.

Das Wort "berechnen" lässt mich auch irgend wie an der Sinnhaftigkeit der Vererbung zweifeln... wenn A Attribute beinhaltet, mit denen in B etwas berechnet wird, dann würde ich B nicht als A ansehen, sondern eher als Attribut von B (was dann wieder einer Komposition entspräche). Evtl. hast Du hier auch ein typisches Decorator-Problem oder so...

Vielleicht wirst Du doch ein wenig konkreter mit Deinem Problem? Evtl. ist das hier ein XY-Problem und wir können bereits am Ansatz "schrauben" ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

mephisto-online hat geschrieben:Aber warum sollte ich die Vererbung nicht nutzen, wenn Klasse A ein Teil der Klasse B ist ?
Wenn A ein Teil der Klasse B ist, dann besteht gerade keine Vererbungsbeziehung.
mephisto-online hat geschrieben:Wenn man das in Python eigentlich anders macht, würde ich dan natürlich auch anders machen. Muss die Python-Denke erst mal verinnerlichen. Das ist für einen Java- und C++-Geschädigten ja erst mal ein Weg !
Das wird in C++ auch nicht so gemacht.
Das Leben ist wie ein Tennisball.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Also weiter:
pillmuncher hat geschrieben:In Python gibt es keine Deklarationen. Es gibt nur Definitionen. Klassen und Funktionen werden definiert (über das class- bzw def-Statement). Variablen werden weder deklariert, noch definiert, sondern einfach verwendet. Sie entstehen bei der ersten Zuweisung und sind bloß Namen, die mit Objekten assoziiert sind.
Ja, sind es dann nicht auch Objekte ?
pillmuncher hat geschrieben:Variablen haben in Python keinen Typ, oder besser gesagt, sie haben alle denselben Typ: Referenz auf ein Objekt. Man kann jeder Variablen jedes Objekt zuweisen. Für jemanden, der von statisch typisierten Sprachen kommt, mag das gefährlich und unübersichtlich klingen. Das ist es aber gar nicht. Es ermöglicht sogar Techniken, die in streng statisch typisierten Sprachen kaum möglich wären, wie zB. Duck Typing.
Ohje ! Da ist ja echt komplettes Umdenken angesagt ! (oder vielleicht auch eher nicht so viel Denken ?)
pillmuncher hat geschrieben: Oder man könnte das __init__() der Basisklasse aufrufen:

Code: Alles auswählen

class AB(A):
    def __init__(self, a):
        A.__init__(self, a.name, a.age)
Das mit dem A.__init__() habe ich mir auch in etwa so vorgestellt...
pillmuncher hat geschrieben: ...Man könnte theoretisch auch sowas machen:

Code: Alles auswählen

class A:
    pass

def make_A(name, age):
    a = A()
    a.name = name
    a.age = age
    return a
Finde ich jetzt nicht so ganz sinnvoll ...
pillmuncher hat geschrieben: Das würde man aber nicht machen, denn es gibt ja __init__(). Es ginge auch das:

Code: Alles auswählen

class A:
    pass

def init_A(a, name, age):
    a.name = name
    a.age = age

A.__init__ = init_A
Genau so dachte ich mir das eigentlich. Genau das war eigentlich meine Frage ! Nur mit dem "pass" (soll wohl heissen: weitermachen, kommt später) muss ich wohl doch erst noch mal "rtfM" betreiben ...
Zuletzt geändert von mephisto-online am Mittwoch 22. Januar 2014, 01:41, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

mephisto-online hat geschrieben:Ja, sind es dann nicht auch Objekte ?
Alles was du an einen Namen binden kannst, ist in Python ein Objekt.
mephisto-online hat geschrieben:Ohje ! Da ist ja echt komplettes Umdenken angesagt ! (oder vielleicht auch eher nicht so viel Denken ?)
Nein, eigentlich musst du dich nicht groß umstellen. Stell dir einfach alles als "Referenz auf ein Objekt" vor.
mephisto-online hat geschrieben:Das würde man aber nicht machen, denn es gibt ja __init__(). Es ginge auch das:

Code: Alles auswählen

class A:
    pass

def init_A(a, name, age):
    a.name = name
    a.age = age

A.__init__ = init_A
Genau so dachte ich mir das eigentlich. Ein bisschen habe ich wohl doch schon kappiert :D Genau das war eigentlich meine Frage ! Nur mit dem "pass" (soll wohl heissen: weitermachen, kommt später) muss ich wohl doch erst noch mal "rtfM" betreiben ...[/quote]
Das ist keine Antwort auf deine Frage. pillmuncher hat lediglich gezeigt, dass __init__ kein Konstruktor ist.
mephisto-online hat geschrieben:D.h., Klassen sind in Python endlich das, was sie in Java und Co. mal werden sollten :mrgreen: .
Ja, mehr oder weniger. Allerdings sollten Java und C++ nie so werden.
mephisto-online hat geschrieben:Und C++ lass ich jetzt mal lieber weg. Da ist mir fast schlecht geworden, als ich bemerkt habe, was sie da für eine verquarzte Sache aus C und Java gemixt haben.
C++ ist über ein Jahrzehnt älter als Java ;-) Und C++ als "verquarzte Sache" zu bezeichnen ist schon sehr "mutig". Wenn du die Einsatzgebiete und Ideen hinter der Sprache nicht verstanden hast, dann solltest du dich vielleicht ein wenig zurückhalten ;-)
Das Leben ist wie ein Tennisball.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

@ EyDu
A ist Teilmenge von B. Die Attribute in A sollen entweder manuell eingegeben werden oder von Files importiert. Klasse B soll die Attribute von A halten und damit sollen weitere B-Attribute berechnet werden. Die Attribute in B sollen dann als Datensatz in einer Datenbank abgespeichert werden. Ich möchte aber auch in der Lage sein, mehrere solcher Datensätze im Arbeitsbereich zu halten, um damit zu arbeiten. Muss ich wohl nochmal drüber nachdenken. Vielleicht ist da ja eine Klasse auch nicht der richtige Ansatz.

Nein, ich wollte C++ nicht schlecht machen. Kann ich ja auch gar nicht beurteilen, weil ich ja gerade erst mal angefangen hatte, diese zu lernen. Schlecht ist sie bestimmt nicht, sonst würde sie ja nicht so häufig eingesetzt. Nee, die Idee dahinter habe ich nicht gesehen, das ist richtig. Verquarzt war da auch nicht der richtige Ausdruck für das, was ich meinte. War ja auch blöd, dass ich überhaupt meine Meinung gesagt habe. Es ging mir ja eigentlich um was anderes. Ich bitte um Entschuldigung. Und die C++-Anhänger in diesem Forum möchte ich ja auch nicht verletzen.

Aber vielleicht sollte ich ja doch auch besser bei Java bleiben und erst noch mal ein wenig über Python lesen und probieren, anstatt die Leute hier mit dummen Newbie-Fragen zu nerven.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

mephisto-online hat geschrieben:A ist Teilmenge von B
Wenn A an keiner anderen Programmstelle separat Verwendung findet, dann brauchst Du keine Vererbung, sondern nur eine Klasse.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

EyDu hat geschrieben:Und C++ als "verquarzte Sache" zu bezeichnen ist schon sehr "mutig".
Weil es die Sprache nicht ausreichend diffamiert? :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: +1 :-)

@mephisto-online: Das eine Programmiersprache häufig eingesetzt wird muss kein Zeichen dafür sein, dass sie gut ist. PHP und VisualBasic werden/wurden auch häufig eingesetzt. ;-)
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Stimmt, ist bei Betriebssystemen ja auch so ... Das ich da nicht dran gedacht habe ! :oops:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Vielleicht sollten wir uns ein wenig von dem abstrakten Beispiel lösen und das konkrete Problem betrachten. Was genau möchtest du denn modellieren? Um was für Dateien handelt es sich, was sind A und B und warum sollen die in eine Datenbank? Dann bekommst du hoffentlich eine saubere Lösung.
mephisto-online hat geschrieben:Nein, ich wollte C++ nicht schlecht machen. Kann ich ja auch gar nicht beurteilen, weil ich ja gerade erst mal angefangen hatte, diese zu lernen. Schlecht ist sie bestimmt nicht, sonst würde sie ja nicht so häufig eingesetzt. Nee, die Idee dahinter habe ich nicht gesehen, das ist richtig. Verquarzt war da auch nicht der richtige Ausdruck für das, was ich meinte. War ja auch blöd, dass ich überhaupt meine Meinung gesagt habe. Es ging mir ja eigentlich um was anderes. Ich bitte um Entschuldigung. Und die C++-Anhänger in diesem Forum möchte ich ja auch nicht verletzen.
Du musst dich doch für nichts entschuldigen, hier hängt wohl keiner so sehr an einer Sprache, dass er sie nicht sofort für eine bessere verlassen würde. (Mensch, fast wie im echten Leben :D ) Natürlich hat C++ viel Stärken und Schwächen, wie immer hängt die Verwendung einer Sprache aber vom Einsatzgebiet ab. Ich würde damit sicher niemals "alltägliche" Anwendungen schreiben, dafür wäre mir meine Lebenszeit zu Schade. Ich arbeite allerdings die meiste Zeit in performancekritischen Bereichen mit Echzeitanforderungen, da braucht man vollständige Kontrolle, Templates um Indirektstufen aufzulösen und auf keinen Fall einen Garbage Collector. In dem Bereich funktioniert C++ wunderbar.
mephisto-online hat geschrieben:Aber vielleicht sollte ich ja doch auch besser bei Java bleiben und erst noch mal ein wenig über Python lesen und probieren, anstatt die Leute hier mit dummen Newbie-Fragen zu nerven.
pillmuncher hat dir ganz am Anfang schon einige Links zusammengestellt, die würde ich an deiner Stelle durcharbeiten. Dumm stellst du dich aber nicht an, manchmal stolpert man eben über etwas.
Das Leben ist wie ein Tennisball.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

EyDu hat geschrieben:Vielleicht sollten wir uns ein wenig von dem abstrakten Beispiel lösen und das konkrete Problem betrachten. Was genau möchtest du denn modellieren? Um was für Dateien handelt es sich, was sind A und B und warum sollen die in eine Datenbank? Dann bekommst du hoffentlich eine saubere Lösung.
Modellieren brauche ich nicht mehr, weil ich das System in einem etwas kleineren Umfang schon in C, Java und C# umgesetzt habe und ein paar Leute damit auch schon länger arbeiten. Leider brauch man aber eigentlich alle 3 Programme, um alles machen zu können. Als Datentausch untereinander funktioniert momentan vorsintflutlich über speziell formatierte Textfiles, die gesamte Datenhaltung geschieht in einem C#-Programm in einer MS-SQL-Datenbank (tolles System, was ? :lol: Ist halt naturgewachsen ! Aber stabil ! 8) ). Erst wollte ich das Java-Programm entsprechend für alle Funktionalitäten weiterentwickeln. Aber es macht z.B. einfach keinen Spass, Grafiken in Swing zu realisieren, ist auch nicht mehr ganz zeitgemäß. Es macht auch keinen Spass, immer einen Windows-Rechner (momentan eine VM) für die Datenbank haben zu müssen. Also habe ich mich dazu entschieden, alles jetzt noch einmal neu zu machen. Die Qt-Bibliotheken bieten mir alles, was ich benötige, Oberfläche, Grafik bis hin zu 3D, SQL-Datenbank (soll MariaDB werden), Web, etc. :wink: Deshalb habe ich auch als erstes versucht, das Ganze mit C++ zu machen, weil die Qt-Programmierung damit am besten dokumentiert ist. Dafür war mir dann aber (wie hier jemand so schön sagte) meine Lebenszeit zu schade und jetzt möchte ich halt lieber ein wenig davon in Python investieren. :D

Mein Projekt also noch mal nochmal genauer abstrahiert:

Die Eingangsdaten bestehen aus, (nehmen wir mal exemplarisch z.B.)
Name, Vorname, Wohnort, Geburtsdatum, Gewicht, Datum der Gewichtsermittlung,
welche über eine Eingabe-Maske eingegeben werden oder von Textdatei geladen (oder gespeichert, soll dann XML werden).
Daraus werden dann z.B. unterschiedliche BMIs berechnet (in meinem Fall sind es etwas komplexere Rechnungen :shock: und mehrere Werte 8) ).
Diese Ergebnisse werden zusammen mit den Eingangsdaten in der Datenbank abgelegt.

Mehrere Datensätze aus der Datenbank lassen sich dann zur Auswertung zu "Arbeits-Sätzen" zusammenstellen.
Es lassen sich verschiedene Grafiken/Charts, wie z.B. Zeitverläufe erstellen.

That's it ! :wink:

Als ToDo gibt es dann irgendwann noch ein Web-Interface. 8)

Mein Subject momentan ist es jetzt erst mal, zu klären, wie ich die erforderlichen "Datenstrukturen" (so hieß das bei mir in Info) in Python abbilden kann. Da komm ich halt wegen der Typlosigkeit von Bezeichnern/Variablen/Objekten erst mal ins Schleudern, weshalb ich mich eigentlich auch hier hin gewandt hatte. Ist aber leider bis jetzt teilweise dumm (von mir) gelaufen.
EyDu hat geschrieben:pillmuncher hat dir ganz am Anfang schon einige Links zusammengestellt, die würde ich an deiner Stelle durcharbeiten. Dumm stellst du dich aber nicht an, manchmal stolpert man eben über etwas.
Ja, am Anfang tu ich mich immer schwer, aber wenn ich es dann einmal verstanden habe, dann auch richtig ! Gut Ding brauch halt bei mir Weil. :oops:

Die Links habe ich mir natürlich schon alle angeschaut (und in meiner Link-"Datenbank" verewigt), teilweise kannte ich sie schon, einige sind auch sehr interessant. In meinem Stadium wünsche ich mir aber eher noch etwas mit "Learnig by doing", wie in dem bereits halb durchgearbeiteten Tutorial http://de.wikibooks.org/wiki/Python_unt ... cite_ref-6 (halb deshalb, weil die zweite Hälfte mehr auf die "Spezial-Pakete" eingeht und nicht auf die Sprache selbst). Natürlich habe ich parallel auch damit begonnen, erste Teile meines Programms in Python zu denken, zu strukturieren und zu schreiben. Hierfür hatte ich auch schon sämliche Entwicklungsumgebungen, die mir unter Manjaro-KDE/Arch/AUR zur Verfügung stehen, angetestet (auch einfach Konsole/Editor). Das war auch erst mal ein Weg. Habe mich jetzt für NinjaIDE :P entschieden, PyCharm habe ich als Alternative auch noch installiert gelassen. :wink:
BlackJack

@mephisto-online: Der Datenbankentwurf steht also schon? Und es sind schon Daten vorhanden? Dann würde ich für den Zugriff darauf SQLAlchemy empfehlen. Denn spätestens wenn eine Weboberfläche dazu kommt möchte man die SQL-Klassen von Qt vielleicht nicht unbedingt als Abhängigkeit haben.

Modellieren musst Du trotzdem noch es sei denn Du willst das Modell von C, C#, und Java 1:1 auf Python übertragen, was aber keinen Sinn macht — dann braucht man keine andere Programmiersprache zu verwenden. Zumal zumindest C so stark von C# und Java abweicht, das da wahrscheinlich auch schon Unterschiede beim Modell bestehen.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Ja, Danke. GsD habe ich mit dem Datenbank-Zeugs und SQL nicht mehr sehr viel zu tun (habe aber die DB damals eingerichtet). Einer von uns hat das aber ziemlich gut drauf (er hat noch nie was anderes gemacht und wahrscheinlich ist mittlerweile auch nicht mehr viel übrig von dem, was ich damals mal eingerichtet habe. Irgendwie hat er ständig daran rumgefummelt). Er meint, er könnte die Daten irgendwie aus der MSSQL-DB exportieren in wieder nach mysql (mariadb) importieren. Da bin ich auch mal gespannt, ob das klappt. Habe gelesen, dass das wohl nicht ganz so einfach ist...

Aber für die Zugriffe auf die DB bin ich sehr wohl zuständig. Ich bin da aber vielleicht zu naiv, was Web-Interfaces angeht (habe ich noch nie gemacht). Eigentlich dachte ich, dass ich das alles mit Qt erschlagen kann. Muss mich wohl mal damit auseinandersetzen, damit ich mir da jetzt mit den Qt-SQL-Libs nichts verbaue.
SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL.
Quelle: http://www.sqlalchemy.org/

Das klingt ja eigentlich phantastisch ! Werde mir SQLAlchemie auf jeden Fall mal näher anzuschauen.

Danke für den Tip ! :wink:

P.S.: Vielleicht noch nen Tip für ne gute Datenbank-Designer-GUI für Linux ? Mein Kollege ist MS gewohnt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich deisgne Datenbanken indem ich Models schreibe und schaue was rauskommt. Händisches Datenbankdesign mit irgendwelchen Designern finde ich ziemlich suboptimal, weil man dann immer die Models hinterherbaut und dann feststellt dass das alles nicht so optimal ist. Wir arbeiten gerade an einer mit dem Postgres Designer gemachten Datenbank, und die Relationen sind total furchtbar, weil man für alles ständig verschiedene Dinge joinen muss, die so nicht notwändig wären.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sirius3 hat geschrieben:das Konstrukt eine Exemplar einer Elternklasse zur Initialisierung einer Kindklasse zu verwenden, hört sich für mich nicht nach einem guten Design an.
Zumindest in Fällen, wo die Kind-Klasse lediglich ein Wrapper für ihre Basisklasse ist und die selbe Schnittstelle anbietet (s. Dekorator-Pattern), kann man das IMHO durchaus so machen.
Antworten