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());
}
}