Schaltung realisieren

Mein Problem ist folgendes:
Code:
public class NANDGlied extends Schaltglied {  // NANDGleid erbt von Schaltglied
public NANDGlied(String Name) {
super(Name);
Ausgang =true;
}
public void aktualisiereAusgang() {
boolean e1 =false;
boolean e2 = false;
if(Eingang1 !=null)
e1 = Eingang1.Ausgang;
if(Eingang2 !=null)
e2 = Eingang2.Ausgang;
Ausgang = ! (e1 && e2);
}
}
Wir sollen den Code in Worten erklären. Ich weiß nicht ganz, wie ich das machen soll, da ich nicht alles verstehe.

Hier noch die Klasse Schaltglied
Code:
public class Schaltglied {

private String Name;

protected boolean Ausgang;

protected Schaltglied Eingang1;

protected Schaltglied Eingang2;

private SchaltgliederListe verbundenMit;
 
Dann fang doch einfach mal an den Teil zu erklären, den du verstehst und stell konkrete Fragen zu den Teilen die du nicht verstehst
 
Das NANDGlied erbt erstmal die Attribute der Klasse Schaltglied, da NANDGlieder auch Schaltglieder in abgeänderter Form sind.
Mit super() kann in einem Konstruktor einer Unterklasse ein Konstruktor der Oberklasse aufgerufen werden. Ausgang wird zu Beginn auf boolean = true gesetzt.
In der Methode aktualisiereAusgang() werden nun die beiden Eingänge der Schalter auf boolean = false gesetzt. Bis hier hin bin ich gekommen.

Und noch zusätzlich als Anhang zur Frage:
Ein NAND-Glied hat am Ausgang den Wert false , wenn beide Eingänge den Wert true haben. Andernfalls hat der Ausgang den Wert true. Ist ein Eingang unbeschaltet, so hat dieser den Wert false.
 
Ist dir generell klar, was ein NAND ist?
https://de.wikipedia.org/wiki/NAND-Gatter

Du hast 2 Eingangsbits und verknüpfst sie zu einem Ausgangsbit. Das Eingangsbit kann das Ausgangsbit eines anderen Gatters sein. In deinem Fall kennt ein Gatter seine Vorgänger.

Java:
public class NANDGlied extends Schaltglied { 
    public NANDGlied(String Name) {
        // Ruft den Konstruktor von Schaltglied auf
        super(Name);
       
        // initialisiere "high" an Ausgang (geerbtes Feld von Schaltglied)
        Ausgang = true;
    }
   
    public void aktualisiereAusgang() {
        // Initialisiere "low" an den Eingängen, kein Strom, wie bei nicht vorhandenen Eingang
        boolean e1 = false; 
        boolean e2 = false;
       
        // high oder low an den Eingängen? Schaue dazu auf die Vorgängergatter. Diese betrachten ggf. auch Vorgängergatter
        // wird nur betrachtet falls tatsächlich Eingänge vorhanden sind, sonst bleibt es bei "low"
        if(Eingang1 != null) e1 = Eingang1.Ausgang; 
        if(Eingang2 != null) e2 = Eingang2.Ausgang;
       
        // die eigentliche NAND ("Not And") Verknüpfung
        Ausgang = ! (e1 && e2);
    }
}


Aber - und das ist meine ganz persönliche Meinung - dieser Code ist nicht vorbildlich. Warum?
# Capital Named Variables: Eingang --> eingang, Ausgang --> ausgang - Java Namens Konvention
# Feste Anzahl von Eingängen vorgegeben durch Schaltglied: Not-Gatter hat nur einen. Außerdem müsste ein Nicht-Gatter Eingang (Einfaches Bit high/low) hier theoretisch auch ein Schaltglied sein und dieses Bit hat eigentlich keinen Eingang. Die Eingänge für diese Typen dann zu ignorieren stellt mir die Rückenhaare auf.
 

Neue Themen


Zurück
Oben