EINFÜHRUNG, ALGORITHMEN UND DATENSTRUKTUREN51. Lehrhilfe zur Vorlesung: Komponentenbasierte Programmierung
R. Dumke, Otto-von-Guericke-Universität Magdeburg,
Fakultät für Informatik |
Eine Komponente ist eine software-basierte, fachbezogene Zusammenfassung von Funktionalität, die nach technologischen Aspekten, wie der einfachen Integrierbarkeit und jeweils nur über eine eindeutige Schnittstelle zu ihrer Anwendung nutzbar zu sein, konzipiert wurde. |
Unsere Klassendefinitionen haben wir zumeist so ausgerichtet, daß sie eine themenbezogene Funktionalität darstellten. So zum Beispiel in der folgenden Form aus unserem Bank-Account-Beispiel:

Komponenten könnten natürlich auch mehrere Objekte bzw. Klassen beinhalten, so daß eine komponentenbasierte Lösung unseres Account-Beispiels auch lauten könnte:

Wir wollen nun im folgenden eine javabezogene Möglichkeit kennenlernen, derartige komponentenbasierte Systeme aufzubauen.

Nun wollen wir uns erst einmal die genaue Definition einer solchen Bohne anschauen, wie sie von Sun selbst angegeben wird.
JavaBeans components, or Beans, are reusable software components that can be manipulated visually in a builder tool. Beans can be combined to create traditional applications, or their smaller web-oriented brethren, applets. In additional, applets can be designed to work as reusable Beans. |
JavaBeans haben folgende allgemeinen Eigenschaften:

Mit der visuellen Beschreibung wird gleichzeitig der Bean-Code erzeugt. Die Arbarbeitung des generierten Codes liefert dann zum Beispiel die Java-Anwendung:

Für die Implementation von JavaBeans stehen uns unter anderem folgende Klassen zur Verfügung:
import java.applet.*;Die Kapselung als Komponente besteht also hierbei darin, daß ein Bildobjekt erzeugt wird, welches innerhalb eines Fensters bearbeitet werden kann. Die Klasse, die dieses Bild verwendet sei die BeanTest-Klasse. Sie definiert die Darstellung unserer (Bild-) Bohne in einem Fenster. Die BeanTest-Klasse ist dann wie folgt definiert.
import java.awt.*;
import java.awt.event.*;
import java.beans.*;public class Bohne extends Applet implements Runnable {
Image image;
Thread thread;
Point curLoc = new Point(0,0);
int scale = 1;
public void init() {
image = getImage(getDocumentBase(), "skr4900.gif");
MediaTracker tracker = new MediaTracker(this);
try{
tracker.addImage(image, 0);
tracker.waitForAll(0);
} catch (Exception e) { e.printStackTrace(); }
}public void start() {
(thread = new Thread(this)).start();
}public void stop() {
thread = null;
}public void paint(Graphics g) {
if (Beans.isDesignTime()) {
g.drawImage(image, curLoc.x, curLoc.y, this);
} else { g.drawImage(image, curLoc.x, curLoc.y,
image.getWidth(null)/scale, image.getHeight(null)/scale, this);
}
}public void run() {
int inc = 1;
while (thread == Thread.currentThread()) {
try {
if (!Beans.isDesignTime()) {
if (scale == 1) { inc = 1; }
else if (scale ==5 ) { inc = -1;}
scale +=inc;
repaint();
}
Thread.sleep(300);
} catch (Exception e) { ; }
}
}
}
import java.awt.*;Die beiden Ausgaben bzw. Darstellungen (für die Animation (rechts) haben wir nur ein Bild ausgewählt) lauten dann zum Beispiel.
import java.awt.event.*;
import java.beans.*;class BeanTest extends Frame implements ItemListener {
static Bohne bohne;
Checkbox designTimeCb = new Checkbox("bearbeitet",true);BeanTest() {
super("Beans-Beispiel");
designTimeCb.addItemListener(this);
add(bohne, BorderLayout.CENTER);
add(designTimeCb, BorderLayout.SOUTH);
setSize(200, 200);
show();
bohne.start();
}public void itemStateChanged(ItemEvent evt) {
Beans.setDesignTime(designTimeCb.getState());
((Component) bohne).repaint();
}public static void main(String[] args) {
Beans.setDesignTime(true);
try{
bohne = (Bohne)Beans.instantiate(
BeanTest.class.getClassLoader(),"Bohne");
new BeanTest();
} catch (Exception e) {e.printStackTrace();
System.err.println("Bean-Def-Fehler.");
System.exit(1);
}
}
}
![]() |
![]() |
Damit haben wir uns bereits speziellen Java-Technologien zugewandt. Eine weitere Vertiefung zu diesem Gebiet finden wir innerhalb der Softwartechnik I unter dem Link CASE sowie schließlich in der Lehrveranstaltung Web Engineering .

Siehe auch unseren Begriffskatalog, den wir insbesondere auch für die Prüfungsvorbereitung zusammen gefaßt und entsprechend gekennzeichnet haben