Einführung in die objektorientierte Programmierung

Taschenrechner

import java.awt.*;
      import java.awt.event.*;
      public class Rechner extends Frame {
    private BorderLayout borderLayout1 = new BorderLayout();
    Button b0= new Button("0");
    Button b1= new Button("1");
    Button b2= new Button("2");
    Button b3= new Button("3");
    Button b4= new Button("4");
    Button b5= new Button("5");
    Button b6= new Button("6");
    Button b7= new Button("7");
    Button b8= new Button("8");
    Button b9= new Button("9");
    
    Button bplus= new Button("+");
    Button bminus= new Button("-");
    Button bmal= new Button("*");
    Button bgleich= new Button("=");
    
    Panel p1= new Panel();
    Panel p2= new Panel();
    
    TextField anzeige= new TextField("");
    
    int speicher=0;
    String operator="";
    
    public Rechner() {
    /* Ggf. lokale Variablen deklarieren */
    /* Layout fuer Frame festlegen */
    this.setLayout(borderLayout1);
    this.setSize(150, 200);
    this.setLocation(100, 100);
    this.setBackground(Color.gray);
    
    p1.add(b0);
    p1.add(b1);
    p1.add(b2);
    p1.add(b3);
    p1.add(b4);
    p1.add(b5);
    p1.add(b6);
    p1.add(b7);
    p1.add(b8);
    p1.add(b9);
    
    bplus.setForeground(Color.red);
    bminus.setForeground(Color.red);
    bmal.setForeground(Color.red);
    bgleich.setForeground(Color.red);
    
    p2.add(bplus); 
    p2.add(bminus);
    p2.add(bmal);
    p2.add(bgleich);
    
    p1.setLayout(new FlowLayout());
    p2.setLayout(new FlowLayout());
    
    anzeige.setEditable(false);
    
    this.add(anzeige,BorderLayout.NORTH);
    this.add(p1,BorderLayout.CENTER);
    this.add(p2,BorderLayout.SOUTH);
    
    b0.addActionListener(new ZiffernListener());
    b1.addActionListener(new ZiffernListener());
    b2.addActionListener(new ZiffernListener());
    b3.addActionListener(new ZiffernListener());
    b4.addActionListener(new ZiffernListener());
    b5.addActionListener(new ZiffernListener());
    b6.addActionListener(new ZiffernListener());
    b7.addActionListener(new ZiffernListener());
    b8.addActionListener(new ZiffernListener());
    b9.addActionListener(new ZiffernListener());
    
    bplus.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    berechnen();
    operator= "+";
    }
    }
    );
    
    bminus.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    berechnen();
    operator= "-";
    }
    }
    );
    
    bmal.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    berechnen();
    operator= "*";
    }
    }
    );
    
    bgleich.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    berechnen();
    operator= "=";
    }
    }
    );
    }
    
    void berechnen(){
    try{
    switch (operator) {
    
    case "":  speicher=  Integer.parseInt( anzeige.getText()) ;
    anzeige.setText("");
    break;
    case "+": speicher = speicher +  Integer.parseInt( anzeige.getText()) ;
    anzeige.setText(""+speicher);
    break;
    case "-": speicher = speicher -  Integer.parseInt( anzeige.getText()) ;
    anzeige.setText(""+speicher);
    break;
    case "*": speicher = speicher *  Integer.parseInt( anzeige.getText()) ;
    anzeige.setText(""+speicher);
    break;
    default: 
    }
    }
    catch ( NumberFormatException e){
    anzeige.setText("Zahl falsch");
    }
    }
    
    class ZiffernListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
    if (e.getSource()==b0) ziffer(0);
    if (e.getSource()==b1) ziffer(1);
    if (e.getSource()==b2) ziffer(2);
    if (e.getSource()==b3) ziffer(3);
    if (e.getSource()==b4) ziffer(4);
    if (e.getSource()==b5) ziffer(5);
    if (e.getSource()==b6) ziffer(6);
    if (e.getSource()==b7) ziffer(7);
    if (e.getSource()==b8) ziffer(8);
    if (e.getSource()==b9) ziffer(9); 
    } 
    }
    
    public void ziffer(int i){
    if (operator.equals("=")) {
    anzeige.setText("");  speicher=0; operator="";
    } // end of if
    anzeige.setText(anzeige.getText()+ i);
    }
    
    public static void main(String argv[]) {
    Rechner rechner = new Rechner();
    rechner.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    rechner.setVisible(true);
    }
    }

Fahnen

class Fahnenbedienung {
   private Fahnenmast fahnenmast;
   public Fahnenbedienung(Fahnenmast fahnenmast) {
   this.fahnenmast = fahnenmast;
   }
   public void aendereBeflaggung(Fahnenposition fahnenposition) {
   fahnenmast.setStatus(fahnenposition);
   }
   }

interface Fahnenbeobachter {
// Interfaces sollte man so schlank wie moeglich halten.
// Welche Methoden werden benoetigt?
public void fahnenstatusGeaendert(Fahnenmast fahnenmast);
}
import java.util.*;
class Fahnenmast {
   Fahnenposition fahnenposition;
   
   public ArrayList<Fahnenbeobachter> list= new ArrayList<Fahnenbeobachter>();
   
   public void addFahnenbeobachter(Fahnenbeobachter neuerbeobachter) {
   // Hinzufuegen eines Fahnenbeobachters. Um die Beobachter zu verwalten,
   // koennte eine java.util.ArrayList dienen.
   list.add(neuerbeobachter);
   }
   public void removeFahnenbeobachter(Fahnenbeobachter neuerbeobachter) {
   // Entfernen eines Fahnenbeobachters.
   list.remove(neuerbeobachter);
   }
   public void setStatus(Fahnenposition fahnenposition) {
   // Aendern des Fahnenstatus. Die Fahnenbeobachter sollten hierueber
   // informiert werden.
   this.fahnenposition= fahnenposition;
   for (Fahnenbeobachter b : list ) {
   b.fahnenstatusGeaendert(this);
   } // end of for
   }
   public Fahnenposition getFahnenposition() {
   // Zurueckgeben der aktuellen Fahnenposition
   return this.fahnenposition;
   }
   }
enum Fahnenposition {
   OBEN, HALBMAST, UNBEFLAGGT;
   }
public class Fahnentest {
public static void main(String[] args) {
Fahnenmast meinFahnenmast = new Fahnenmast();
Fahnenbedienung bedienung1 = new Fahnenbedienung(meinFahnenmast);
Fahnenbedienung bedienung2 = new Fahnenbedienung(meinFahnenmast);
Fahnenbeobachter anna = new Tourist("Anna");
Fahnenbeobachter bernd = new Tourist("Bernd");
Fahnenbeobachter charly = new Tourist("Charly");
bedienung1.aendereBeflaggung(Fahnenposition.OBEN);
meinFahnenmast.addFahnenbeobachter(bernd);
bedienung1.aendereBeflaggung(Fahnenposition.HALBMAST);
meinFahnenmast.addFahnenbeobachter(anna);
meinFahnenmast.addFahnenbeobachter(charly);
meinFahnenmast.removeFahnenbeobachter(bernd);
bedienung2.aendereBeflaggung(Fahnenposition.UNBEFLAGGT);
bedienung2.aendereBeflaggung(Fahnenposition.OBEN);
meinFahnenmast.addFahnenbeobachter(bernd);
}
} // Der View
class Tourist implements Fahnenbeobachter {
private String name = "Unbekannt";
public Tourist(String name) {
this.name = name;
}
public void fahnenstatusGeaendert(Fahnenmast fahnenmast) {
System.out.println(name + " vermeldet fuer den Fahnenmast: "
+ fahnenmast.getFahnenposition());
}
}