OOP Simulation eines Bakterienwachstums

Dungard

Mitglied
Hallo leute !

Ich bin neu hier und habe zu meinem Anliegen nichts über die Suche Funktion herausfinden können.
Und zwar bin ich noch Schüler (11.Jahrgangsstufe) und meine Seminararbeit soll sich mit folgendem Thema befassen : Simulation eines Bakterienwachstums unter Einfluss von Außenfaktoren (Antibiotika).
Das ganze soll OOP sein und dem MVC-Konzept folgen. Ich habe schon grobe Vorstellungen wie ich das ganze angehen werde...Hier mal ein paar Klassen: Zeitgeber, Bakterium, View als abstrakte Oberklasee mit den Oberklassen View1 für die Textausgabe und View2 für den Vorgang der Bakterienteilung, genausowie Antibiotikum als abstrakte Oberklasse für die (2-3) verschiedenen Antiobiotikaarten die verwendet werden.
Würdet ihr mir noch andere Klassen empfehlen, bzw meine Überlegungen verbessern? EIn weiteres Problem sehe ich auch darin, wie ich die Bakterien grafisch darstellen lassen soll...
Wär Klasse wenn ihr mir noch zusätliche Tipps geben könntet :toll:
 

Andi_CH

Top Contributor
IMO ist Antibiotikum eine reale Klasse mit einem Attribut "antibiotikaArt" welches eine enum sein kann.
Auch Bakterium muss nicht abstrakt sein, ausser es gibt Bakterien mit unterschiedlichem Verhalten. die unterschiedliche Empfinglichkeit gegen konkrete Antibiotika kann auch als Attribut abgelegt werden.
Allerdings ist es schwierig aufgrund der doch recht knappen Beschreibung etwas wirklich präzises zu sagen.

Ansonsten tönt es für den ersten Ansatz nicht schlecht, aber ich würde noch ein wenig mehr in die Analyse investieren bevor es ans Programmieren geht.
 

muckelzwerg

Bekanntes Mitglied
Hast Du denn medizinische/mathematische Grundlagen, wie sich die Simulation verhält? Davon hängt doch ganz maßgeblich ab, welche Objekte und Strukturen Du letztlich verwendest.
Es bringt ja nicht viel mit Gewalt irgendwo JavaOOP reinzuprügeln, wenn die Art der Berechnung gar keine Bakteriumsklasse empfiehlt, oder es zu Aufwändig wird.
Der Klassiker wäre wohl Conway's Game of Life - Wikipedia, the free encyclopedia, um mal einen Einstieg zu bekommen. Aber da geht es ja noch ein ganzes Stück weiter.
 

Dungard

Mitglied
erstmal danke für die ganzen antworten :toll:
Allerdings ist es schwierig aufgrund der doch recht knappen Beschreibung etwas wirklich präzises zu sagen.
Ja da hast du recht, wollte nich gleich mein gesamtes "Gedankengut" reinschreiben ;-)
Als Außenfaktoren hab ich mir folgendes gedacht: Temperatur, Nährstoffe ( in %) und eben Antibiotika. mehrere Faktoren, denke ich ,brauche ich nicht...weitere Infos folgen wenn ich meien Aufzeichungen gefunden hab

Hast Du denn medizinische/mathematische Grundlagen, wie sich die Simulation verhält?
mhm hab zumidnest zusätzlich zu mathe noch biologie belegt,aber da wird das thema auch nicht sooooo gründlich besprochen. Aufjedenfall liegt der Schwerpunkt ja nicht in der biologie.Und eine formel für das beschränkte Wachstum, hab ich etwas in meienm Buch gefunden : R(t)=k[S-B(t)]
R = Änderungsrate; S = Sättigungswert; B = aktueller Bestand; t = Zeit
würde sich diese Formel dazu eignen ?

Achja, das ganze soll in netbeans programmiert werden...
 

Andi_CH

Top Contributor
Gehen wir davon aus, dass das noch die Analysephase ist, da ist es noch nicht wichtig zu wissen WIE genau ein Antibiotika wirkt, sondern nur DASS es irgend eine Wirkung (einen berechenbaren Einfluss auf die Lebensdauer) hat.
 

muckelzwerg

Bekanntes Mitglied
Halte ich für "brutal falsch". Hauptsache mal OOP gemacht und irgendwelche Klassen gebastelt, ohne überhaupt zu klären was und WIE die Software eigentlich arbeiten soll.

Dungard, überleg Dir doch erstmal, was Du denn eigentlich simulieren willst. Welche Berechnugnsverfahren willst Du dafür benutzen?
Wenn Du lediglich Formeln für Wachstumsraten mit Parametern füllen und ausrechnen willst, brauchst Du viel eher einen Funktionsplotter, als eine Bakteriumsklasse.
Wenn Du eine ganze Population simulieren willst, brauchst Du erstmal Regeln für Nährstoffaufnahme, gegenseitige Beeinflussung, Bewegung vielleicht ...
Wenn Du jetzt Softwaretechnik machst, ohne zu wissen, was Du überhaupt brauchst, dann wirst Du hinterher entweder viele Dinge nicht machen können, oder die Software sowieso wieder umbauen und die Arbeit von vorher wegwerfen.
Solche Projekte brauchen Rapid Prototyping.
Wir reden hier ja nicht von einem Webfrontend oder sowas.
Wie willst Du denn ohne eine Simulation zu haben oder etwas darüber zu wissen, entscheiden können was für Objekte und Strukturen Du brauchst?

Wird es sowas?
YouTube - Stevens Systems Biology Modeling 2: Bacterial Growth
oder eher so?
YouTube - Simulated bacteria performing "selective stopping" behaviour in a complex environment.
oder vielleicht so?
YouTube - Fruit Senescence and Decay Simulation

Und überleg Dir mal welche "Leistung" Du mit Deiner Seminararbeit abrechnen willst. Wenn im Vordergrund eine Simulation (und nicht die Biologie) steht, dann solltest Du Dir noch viel mehr Gedanken machen und möglichst schnell klären, welche Modelle und Berechnungen Du verwenden willst.
Dann musst Du schauen, welche Parameter es gibt und ob Deine Simulation auch alles abbilden kann, was die verwendeten Formeln hergeben. Gibt es eine gute VIsualisierung? Es muss ja gar keine komplexe und schwierige Simulation sein. Aber kann man gut erkennen, was passiert? Du schreibst von einem "Zeitgeber". Hast Du Formeln, die so einen Zeitgeber verwenden?
Diese Wachstumsformel hat zwar als Parameter die Zeit, aber wo gehört da ein "Zeitgeber" für eine Simulation hin?
Kann man die Simulation vielleicht vorwärts und rückwärts laufen lassen? Kann man bestimmte Punkte direkt anwählen ...
Es gibt sehr viele Eigenschaften, die so eine Software gut oder schlecht machen können. Aber um Deine Aufgabe gut zu lösen, solltest Du sie erstmal finden. ;)
 

Dungard

Mitglied
danke für die antowrten, wenn ich euch dumm vorkomme,wundert euch nicht, schließlich hab ich ja auch nicht viel erfahrung...
naja es soll in erster Linie eine simulation sein natürlich.Ich denke mal, dass ich die bakterien dann "pünktchenartig" darstellen lassen will.Es soll auch keine komplexe Simulation werden...Unser Lehrer hatte uns einen Zeitgeber immer "vorgeworfen" zB bei der Simulation eines springenden balls.Ich bin davon ausgegangen, dass mithilfe des Zeitgebers das Bakterium weiß, wann es sich teilen soll und wann die Simulation endet.So etwas wie gegenseitige Beeinflussung will ich garnicht miteinbrignen, genausowenig wie Regeln für Nährstoffaufnahme.Man soll vor dem starten des Programms eifnach angeben können wie viel Nahrung jedem Bakterium für den ganzen prozess über zur verfügung steht, wobei 100 % so viel Nahrung sein soll, wie sich ein Bakterium bei einem exponentiellem Wachstum vermehrt (bisschen umständlich ausgedrückt, hoffentlich versteht ihrs) Und die Simluation kann man ja nur machen, wenn sich schon davor überlegungen zu klassen,objekten,beziehugnen etc geamcht hat...
 

muckelzwerg

Bekanntes Mitglied
Eigentlich solltest Du die Simulation mit einem Blatt Papier und einem Stift bzw. noch einem Taschenrechner machen können.
Und das ist jetzt KEIN altkluger Spruch. Ich habe vor einer Weile eine ähnliche Simulation (nicht mit Bakterien) gemacht und auch Dinge wie das Game of Life früher mal gebastelt. Wenn es nicht gerade auf eine total einfache Formel hinausläuft, wirst Du froh sein, wenn Du außer den zeitweise wirren und falschen Ergebnissen Deiner Software auch was hast, was Du in die Hand nehmen und kontrollieren kannst.

Überleg Dir mal, wie ein Baktierum "funktioniert". Die Viecher teilen sich doch nach binärer Kernspaltung (binary fission).
Dafür sammeln sie vorher Nährstoffe, verdoppeln ihren Inhalt und trennen sich dann.
Also wirst Du wohl eine Nährstoffaufnahme pro Zeit haben. Die wird sich daraus zusammensetzen, dass die Bakterie eine gewisse "Saugleistung" hat, mit der Sie Nährstoffe aufnehmen kann und dass die Umgebung eine gewisse Schubleistung hat, mit der sie Nährstoffe anbieten kann.
Wenn Du an der Stelle einen guten Schnitt machst, kannst Du später mit ein paar Handgriffen aus "immer 100% verfügbar" eine Bitmap machen, die den Nährboden darstellt und "ausgesaugt" wird. Vielleicht ist dafür ja doch Zeit.

Dann werden die Bakterien mit den Nährstoffen etwas machen. Haben die einen Verbrauch? Ich vermute schon. Also gibt es einen "Hunger", mit dem die Nährstoffe verbraucht werden. Was passiert wenn nichts mehr da ist? Wahrscheinlich wird das Bakterium dann absterben oder in Stasis gehen. Damit hättest Du einen Pfad des Lebenszyklus' einigermaßen abgedeckt. Theoretisch würden an der Stelle vielleicht wieder Nährstoffe in die Umgebung abgegeben falls die Bakterie dann richtig "stirbt". Falls Du die Nährstoffe später doch mit einer Karte (Bitmap zum leichten Selbstmalen) umsetzt, wäre das unter Umständen auch möglich.

Hat die Bakterie genug Nährstoffe, dann wird sie ihren "Inhalt" verdoppeln und sich dann irgendwann teilen.
Soll das in einem "Sprung" geschehen? Oder soll dieser Vorgang beobachtbar (differenzierbar) sein?
Vielleicht will man sehen, wie die Bakterie in ihrem Inneren neue Elemente erzeugt und ihren Zustand verändert.
Da müsste es dann ein "Fortschreiten" geben. Wie sieht das Innere der Bakterie aus? Was davon willst Du abbilden?

Mach Dir mal ein paar Gedanken, wie die Biester funktionieren sollen, dann wird es auch leichter die ganze Softwaretechnik zu klären.
 

Andi_CH

Top Contributor
Halte ich für "brutal falsch". Hauptsache mal OOP gemacht und irgendwelche Klassen gebastelt, ohne überhaupt zu klären was und WIE die Software eigentlich arbeiten soll.
...
Aber um Deine Aufgabe gut zu lösen, solltest Du sie erstmal finden. ;)

Hm was findest du total falsch? Ich hoffe ja schon du meinst nicht meine Aussage, denn dann würdest du dir selbst widersprechen ;-)
Also wie finde ich die Aufgabe:

OOP heisst Objekt Oriented Programming - das kommt zuletzt. Vor dem Programmieren kommt noch OOA und OOD.

OOA: Wer meint in der Analysephase gehe es darum wie Sofware etwas macht liegt BRUTAL falsch:
Es geht eben genau darum heraus zu finden was gemacht werden soll - es reicht wirklich zu sagen, dass "ein Antibiotikum einen berechenbaren Einfluss auf die Lebensdauer einer Bakterium hat und dass es die Vermehrungsrate nicht beeinflusst".
In Grossprojekten ist in der Analysephase sogar unklar was überhaupt durch Software, was von Hardware, was von Menschen erledigt werden soll.
Sehr wichtig ist auch festzuhalten was durch den zu analysierenden Prozess NICHT gemacht wird.
(z.B. "Es kommen während dem Prozess keine neuen Infektionen dazu", "Es gibt keine Angewöhnung von Bakterien an Antibiotika")

OOD: Danach, in der Designphase geht es darum das zu verfeinern und sich zu überlegen wie etwas gemacht werden soll. (z.B. "Ein bestimmtes Antibiotikum verkürzt die Lebendauer eines bestimmten Bakteriums um einen bestimmten Prozentsatz" und ist das ein Attribut von Bakterium, eines von Antibiotkum oder eine eigene Klasse)
Es kann durchaus sein, dass man in dieser Phase an der Analyse etwas ändert. In grösseren Projekten konzentriert man sich hier auf einen oder wenige Aspekte der Analyse - man will ja irgendwann ein Zwischenresultat vorweisen können.

OOP: Und dann geht es in die Implementation - auch hier wird entschieden was zuerst gemacht und getestet werden soll.

Dann beginnt das Ganze von vorne - immer wieder - in der Analyse wird man allerdings hoffentlich mit jedem Loop weniger zu tun haben.

Implementation und Test ist erfahrungsgemäss nur etwa 33% des Gesamtaufwandes - die anderen 66% werden etwa zu gleichen Teilen für Analyse und Design gebraucht. (Ja ich weiss, es gibt Leute hier die etwas anderes behaupten aber ich behaupte nicht, ich weiss :) - also bitte keine entsprechende Diskussion hier - und die Angaben betreffen wohl kaum nur ein e Person, sondern die Verteilung des Gesamtaufwandes in einem Projekt)

Und noch etwas - ob meine Aussagen betreffend Bakterien und Antibiotika für die Problemstellung sinnvoll sind, weiss ich nicht - das waren nur Beispiele.
 

muckelzwerg

Bekanntes Mitglied
Andi_CH eines ist auf jeden Fall falsch. Sich mit Dir länger über sowas zu unterhalten. Zumindest für mich ist das falsch.
Ich sag das ja nicht einfach so, weil es mir grad Spaß macht. Sicherlich kann man sich mal irren, aber eine gewisse Tendenz bei wissenschaftlicher Arbeit ist mir dann wohl doch nicht entgangen. ;)
Nicht umsonst hießt die klassische Gliederung für entsprechende Arbeiten in etwa "Einleitung/Motivation, Grundlagen, Analyse, Konzept/design, Umsetzung/Implementierung, Evaluation".
Nicht nur die Software sollte OOP sein, sondern auch der Arbeitsvorgang an sich wird möglichst modularisiert. Schon mal mit mehr als einer Person im Team gearbeitet? Da kommst Du nicht weit mit "ach machen wir mal ein Klassendiagramm und irgendwie OOP, den Rest sehen wir später".
Die Implementierung ist eigentlich der unwichtigste und uninteressanteste Teil so einer Arbeit, wenn es nicht gerade explizit um ein Projekt aus der Softwaretechnik o.Ä. geht.
Interessant nur, dass Du auf der einen Seite SELBST von Analyse und Design sprichst, auf der anderen Seite von "keine Ahnung WIE irgendwas gemacht wird" und das Dungard noch genau NULL Analyse gemacht hat, um Fragen wie "Was bewirkt ein Antibiotikum?" oder auch nur "Wie funktioniert eine Bakterie" zu beantworten. Genau diese Fragen willst Du aber vorher geklärt haben. Also was nun, hm?

Einleitung/Motivation fällt für ihn extrem kurz aus. "Seminararbeit" reicht ja fast schon ;)
Grundlagen muss er sich erstmal draufschaffen.
"Gibt es schon Bakteriensimulation? Was ist da möglich? Was wird da gemacht? Welche Vorgänge werden überhaupt simuliert? Welche Verfahren werden verwendet? ..."
Die Analyse müsste er anschließend machen und seine konkrete Zielsetzung auf das Wissen aus den Grundlagen (und sein Allgemeinwissen) anwenden. Bei der Analyse kombiniert man die Richtung, die man einschlagen will, mit den Informationen, die man im Grundlagenabschnitt erarbeitet hat. Gerade bei kleineren Projekten ist das dann nur eine einfache "Anforderungsanalyse" bzw. ein abstraktes Pflichtenheft.
Gut ist, wenn aus der Analyse bereits Ziele formuliert werden können, mit denen man später die Umsetzung wieder bemessen kann.
Das muss in seinem Fall ja nichts besonders großes sein. Aber wenigstens einmal hinsetzen und ein paar Worte auf Papier kritzeln, oder auch in den Rechner tippen, wäre schon ganz gut.
Konzept ist das, woran er gerade knabbert und auf die Implementierung ausweicht. Hier wird entworfen, welche konkreten Teile das Projekt enthalten soll und Vorgaben für die Implementierung gemacht.
Und erst DANN geht es mit Klassendiagrammen und OOP los. Wer weiß, vielleicht braucht man auch grad mal gar kein OOP für die eigentlche Simulation, sondern ein extrem schnelles Löserprogram, das ohne jede Klasse auf einem großen Feld arbeitet, nur Zahlen bröselt, möglichst in C programmiert wird und regelmäßig den aktuellen Stand an die Java-Visualisierung weitergibt.
Aber die Laufzeiten und Komplexitäten kennt man nunmal nicht, wenn man sich keine Gedanken macht, welche Verfahren man überhaupt anwenden will, oder es schnell ausprobiert. (>>Rapid Prototyping)

Natürlich fallen die verschiedenen Abschnitte bei einer Seminararbeit nicht so umfangreich aus, wie bei einer Thesis oder anderen wissenschaftlichen Arbeit. Dadurch werden sie aber noch lange nicht sinnlos.
Hauptsache mal den Pet-Shop kosntruiert, ohne zu wissen, ob Bakterien überhaupt in einen Hamsterkäfig passen, zahlt sich nicht aus.


Aber natürlich ist das nur MEINE Meinung. Vielleicht halten wir einfach fest, dass Du die Sache komplett anders siehst und sparen den weiteren Sauerstoff.
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Ja ja Muckelzwerg - ganz offensichtlich habe ich wesentlich mehr Erfahrung als Du. Es ist also reine Zeitverschwendung sich auf dein Niveau runterzulassen und weiter zu diskutieren.

Schade dass du den TO so in die Irre führst!

Tschüss, von mir wird man in diesem Thread sicher nichts mehr lesen!
 

muckelzwerg

Bekanntes Mitglied
Schon klar Chef. Du hast den Masterplan. Im Gegensatz zu uns Ahnungslosen schreibst Du hier nur, weil Dir vom Geldzählen und Golfspielen immer so schnell langweilig wird. Und solche Knaller wie "auf Dein Niveau herunterlassen" oder die Länge eines Char[][] in Java zu ermitteln, wenn nach C++ gefragt ist und dann noch frech werden, schlaue Sprüche im Damenthread wie "die Lösung hab ich längst gepostet, was diskutiert ihr noch", Dein allgemeiner Geltungsbedarf und die ganze hochnäsig Art sind bloß Tarnung, damit die Industriespione Dich nicht erkennen.

Hauptsache ein gesundes Selbstbewustsein. ;)



Dungard, ich habe eine ähnliche Simulation vor etwa einem Jahr entwickelt. Da ging es zwar nicht um Bakterien, aber letztlich genauso um Objekte, die Nährstoffe aufnehmen, verarbeiten und sich vermehren/verändern. Mit ein bisschen Überlegen kannst Du da viel mehr erreichen, als Du denkst. Dank Java sind Dinge wie z.B. Bilddateien als Nährboden recht schnell gemacht. Da geht am Ende vielleicht deutlich mehr, als Du Dir bisher denkst. Oder z.B. Reaktionen auf Antibiotika und die Entwicklung von Resistenzen.
Überleg Dir vor allem einmal, wie die Bakterien ihren Zustand ändern. Sind da alle Informationen "lokal"? Kann also die Bakterie ganz für sich entscheiden, was passiert? Oder brauchst Du einen Beobachter, der auch Informationen berücksichtigen kann, die erst aus der Gesamtheit der Bakterienpopulation (Position, Ausdehnung, Dichte ...) erzeugt werden können?
Wie sieht der kleinste Schritt aus? Wie war die Bakterie vor und wie ist sie nach einem Simulationsschritt?
Überleg Dir mal, wie Du das steuern willst. Da könntest Du z.B. Ersetzungssysteme verwenden. Für die Bakterien gibt es dann "Programme" bestehend aus Produktionsregeln.
(Bedingung) -> (Reaktion)
in der einfachsten Form. Damit lässt sich sowas wie (Nährstoffe > 10) -> (vergrößere zweiten Kern) oder (zweiter Kern vollständig) -> (teile dich) abbilden.
Erweitert man die Produktionsregeln z.B. um eine Wahrscheinlichkeit
(Bedingung) -> (p) (Reaktion)
lässt sich zum Beispiel sowas machen (Antibiotikum vorhanden) -> (5%) (bilde Resistenz).
Da wird es dann auf einmal richtig interessant und dann lohnt sich eine Simulation auch.
 

Dungard

Mitglied
oke vielen vielen danke...
@muckeltwerg: Ich wer dann mal das amchen, was du so geschriben ahst.Leuctet irgendwie ja auch ein :D
wenn ihr wollt könnte ich mal in gewissen Zeitabständen meien Fortschritte mitteilen, wenn ihr/du das wollt. Hab ja
schließlich noch Zeit bis Dezember ;-)
 

Oben