Design um boolsche ausdrücke zu speichern & auszuwerten

zzuegg

Mitglied
Hallo,

Der Titel ist ein wenig wage, da ich das Problem nicht in einem Satz definieren konnte.

Es geht um ein EntitySystem. Zur Zeit habe ich folgendes Design:
Java:
class Object{
 List<Component> components
}

class ObjectEvaluator{
 List<Component> neededComponents
}

Folglich wird der ObjectEvaluator für jedes Object aufgerufen wenn
Java:
Pseudo:
Object.components.contains(ObjectEvaluator.neededComponents)

Das ganze wird intern über einen MapperService zimlich performant gelöst.

Jetzt möchte ich das System erweitern, sodass ich den Evaluatoren einen boolschen Ausdruck anstatt den neededComponents zuweisen kann, zb:
Java:
class ObjectEvaluator{
 //evaluate for all Objects with components: 
 BoolscherAusdruck neededComponents=ComponentA.class && ComponentB.class && (ComponentC.class || ComponentD.class)
}

Hab leider keine Ahnung wie sich sowas implementieren lässt.
Wäre für jeden Ansatz dankbar...
 

Marco13

Top Contributor
Etwas weniger Pseudocode wäre vielleicht hilfreich. Tut's vielleicht schon sowas wie
Java:
interface Evaluator<T> {
    boolean evaluate(T t);
}

class OrEvaluator<T> implements Evaluator<T> {
    private Evaluator<T> e0;    
    private Evaluator<T> e1;
...
    @Override  
    public boolean evaluate(T t) {
        return e0.evaluate(t) || e1.evaluate(t);
    }
}
(analog mit And und Not) ähnlich zu ganz normalen "Predicates", wie man sie in vielen Bibliotheken findet?
 

zzuegg

Mitglied
Hmm, ich versuchs mit weniger pseudo code:

Ich habe folgende classen:

Java:
public abstract class EntityComponent implements Comparable{

    @Override
    public int compareTo(Object o) {
        return(this.getClass().getName().compareTo(o.getClass().getName()));
    }
    
}

Die eigentlichen Componenten schauen dann zb. so aus:

Java:
public class EC_Position extends EntityComponent{
    private Vector3f position;

    public EC_Position(Vector3f position) {
        this.position = position;
    }

    public Vector3f getPosition() {
        return position;
    }

    public void setPosition(Vector3f position) {
        this.position = position;
    }
    
}


public class EC_Movement extends EntityComponent{
    private Vector3f movment;

    public EC_Movement(Vector3f position) {
        this.movment = position;
    }

    public Vector3f getMovment() {
        return movment;
    }


    
}


Hier die basis für alle EntitySysteme:

Java:
public abstract class EntitySystem {

    public enum SystemThreadType {

        RenderThread, EntityThread
    };
    Class[] dependingComponents;
    EntityMonkey entityMonkey;
    SystemThreadType type;
    boolean backgroundEvaluation;
    boolean enabled;

    public EntitySystem(Class[] dependingComponents, EntityMonkey entityMonkey, SystemThreadType type, boolean backgroundEvaluation) {
        this.dependingComponents = dependingComponents;
        this.entityMonkey = entityMonkey;
        this.type = type;
        this.backgroundEvaluation = backgroundEvaluation;
        this.enabled = true;
    }

    public Class[] getDependingComponents() {
        return dependingComponents;
    }

    public EntityMonkey getEntityMonkey() {
        return entityMonkey;
    }

    public boolean isBackgroundEvaluation() {
        return backgroundEvaluation;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public SystemThreadType getType() {
        return type;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public abstract void evaluate(Entity e, double delta);
}


Der dazu passende MovementUpdater:

Java:
public class ES_MovmentUpdater extends EntitySystem{

    public ES_MovmentUpdater(EntityMonkey entityMonkey) {
        super(new Class[]{EC_Movement.class,EC_MovementUpdate.class}, entityMonkey, SystemThreadType.EntityThread, false);
    }

    @Override
    public void evaluate(Entity e, double delta) {

    }
    
}


Beim Aufruf des super Constructors werden die benötigten Componenten angegeben, (In diesem fall: EC_Movement.class und EC_MovementUpdate.class)

Ich hätte gerne einen Weg, um anstatt des Class Array's einen boolschen Ausdruck vom Typ: 'EC_Movement.class && EC_MovementUpdate.class' mitzugeben. (Oder eben einen etwas komplexeren wie: EC_Movement.class && (EC_MovementUpdate.class || EC_MovementUpdate2.class)
 

Marco13

Top Contributor
Etwas, was in Richtung des schon geposteten ging, könnte da ja nicht verkehrt sein, aber ... muss dann auch in die jeweiligen Klassen gecastet werden (oder muss man noch wissen, welche Class-Objekte dort drinstecken...?)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
S ArrayList Design Allgemeine Java-Themen 4
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
M Diverse Design-Fragen Allgemeine Java-Themen 6
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
T OOP Fehler im Design Allgemeine Java-Themen 9
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
R Parameter Adapter - Design Allgemeine Java-Themen 1
D Bezüglich Design meines Codes Allgemeine Java-Themen 1
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Java Design Frage Allgemeine Java-Themen 10
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
M OOP Design Frage Allgemeine Java-Themen 2
J Domain Driven Design - Modellierungsfrage Allgemeine Java-Themen 3
F Welches Design Pattern? Allgemeine Java-Themen 3
H MVC Design Allgemeine Java-Themen 9
J Swing Eigenes Button-design Allgemeine Java-Themen 2
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
C Gutes Code Design (3 Schichten Modell) Allgemeine Java-Themen 19
D Design Stations-Gitter Allgemeine Java-Themen 4
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
G Design Patterns für Programm Allgemeine Java-Themen 3
I Wie populär ist Design by Contract in Java und was haltet ihr davon? Allgemeine Java-Themen 5
Landei Design-Problem Formel-Parser Allgemeine Java-Themen 10
J Aktionen im State-Design-Modell Allgemeine Java-Themen 3
S Design Oberfläche Allgemeine Java-Themen 2
L Design-Frage: Platzierung der Save-Methode Allgemeine Java-Themen 3
G Domain Driven Design Model Allgemeine Java-Themen 14
G konkretes Domain Driven Design Aggregate Allgemeine Java-Themen 2
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
B Design Problem Allgemeine Java-Themen 8
faulelotte Verständnisproblem Domain Driven Design Allgemeine Java-Themen 3
S Frage zum Design der Datenstruktur Allgemeine Java-Themen 10
D design gesucht - Angabe von zu ersetzenden substrings Allgemeine Java-Themen 2
D Design ohne Getter und Setter Allgemeine Java-Themen 8
D Design: on-the-fly-Parsing + Datenstrukturen Allgemeine Java-Themen 5
N Welches design pattern? Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
T Design-Frage Allgemeine Java-Themen 14
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
S JToolBar Design Allgemeine Java-Themen 3
M Bildersyncronisierung - Design Patterns? Allgemeine Java-Themen 2
T Design - Exception in Thread Allgemeine Java-Themen 3
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
M Frage zum Design :: allgemein Allgemeine Java-Themen 6
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
U Frage zu DB Design Allgemeine Java-Themen 3
K Design / Implementierung Allgemeine Java-Themen 5
N Checkstyle - Design for Extension Allgemeine Java-Themen 4
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
E Was ist ein gutes Design fuer meine Programm? Allgemeine Java-Themen 3
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
P Apple Design Allgemeine Java-Themen 5
S design frage Allgemeine Java-Themen 10
T Design-Tipp gesucht Allgemeine Java-Themen 2
M Design von Java Klassen Allgemeine Java-Themen 2
G java design von klassen und projekten Allgemeine Java-Themen 6
K Design: Klassen in Pakete aufteilen - Eure Meinung Allgemeine Java-Themen 8
S Programmierstil / design Allgemeine Java-Themen 9
S Exception design Allgemeine Java-Themen 2
m@nu Exception-Design Allgemeine Java-Themen 4
R Design-Frage Allgemeine Java-Themen 9
N Hilfe beim Design Allgemeine Java-Themen 13
D Design Pattern: Singleton Allgemeine Java-Themen 4
Torres Design-Problem mit Jakarta Struts Allgemeine Java-Themen 2
A Anwendungs-Design (Plugin-Architektur) Allgemeine Java-Themen 4
N Boolsche Algebra via eval vereinfachen -> Ausmultiplizieren gesucht Allgemeine Java-Themen 15
D Spielerwechsel über boolsche Werte läuft inkorrekt Allgemeine Java-Themen 6
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
A Lambda-Ausdrücke Allgemeine Java-Themen 5
E Reguläre Ausdrücke: String-Ersetzung Allgemeine Java-Themen 0
M Lambada Ausdrücke - wie funktionieren und benutzt man sie? Allgemeine Java-Themen 5
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
G Reguläre Ausdrücke Allgemeine Java-Themen 11
G Reguläre Ausdrücke Allgemeine Java-Themen 2
S Reguläre Ausdrücke: Polynomterme Allgemeine Java-Themen 14
jstei001 Reguläre Ausdrücke bearbeiten/ändern Allgemeine Java-Themen 14
R Logische Ausdrücke in Java Allgemeine Java-Themen 4
C reguläre Ausdrücke finden nicht was sie finden sollen Allgemeine Java-Themen 8
Loyd Noch ne Regex-Frage: Verschachtelte Ausdrücke Allgemeine Java-Themen 4
H Geklammerte Ausdrücke nach Divide&Conquer Allgemeine Java-Themen 2
F Reguläre Ausdrücke und BBCode Allgemeine Java-Themen 10
J String für reguläre Ausdrücke escapen Allgemeine Java-Themen 2
C Reguläre Ausdrücke - X{0}?.* Allgemeine Java-Themen 8
B Parser für logische Ausdrücke Allgemeine Java-Themen 9
C Reguläre Ausdrücke, String rückwärts durchsuchen Allgemeine Java-Themen 6
J Expression Language für mathematische Ausdrücke Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben