Schwierige Aufgabe
Lorenz Räsch
- javascript
Wir machen einen Fernkurs über Javascript, können aber leider nicht die nachfolgende Aufgabe lösen.
Wer kann uns helfen??
Wie löst man folgende Aufgabe?
Objektbasierend mit JavaScript
Bitte reichen Sie den vollständigen HTML-Code inklusive JavaScript ein:
1. Sie sollen ein Objekt mit dem Namen Rechteck entwerfen. Es soll die zwei Eigenschaften Höhe und Breite haben. Entwicken Sie dabei den Konstruktor.
2. Sie sollen die Methode fläche()einfügen. Sie erlaubt es, die Fläche eines Objektes vom Typ Rechteck zu bestimmen.
3. Erzeugen Sie bitte eine Instanz vom Typ Rechteck, und geben Sie die Eigenschaften sowie die Fläche für einen beliebigen Fall aus.
Hier mein Lösungsvorschlag:
<html>
<head>
<title></title>
</head>
<body>
<p><script language="JavaScript">
<!--
function Rechteck(hoehe,breite)
{
this.x=hoehe;
this.y=breite;
this.f=hoehe*breite;
}
function Flaeche()
{
Flaeche=hoehe*breite
}
r=new Rechteck(10,200)
document.write("Hoehe:"+r.x+"<br>")
document.write("Breite:"+r.y+"<br>")
r.flaeche
//-->
</script></p>
</body>
</html>
Hallo Lorenz! (<-- Begruessungen sind zur Zeit total trendy *g*)
Wir machen einen Fernkurs über Javascript, können aber leider nicht die nachfolgende Aufgabe lösen.
Klingt eher wie ne Schulaufgabe... Und merke: Fast alles gab es schon mal hier und findet sich im Archiv. Als Anregung kannst Du ja mal nach <../../sfarchiv/1999_4/t08295.htm> schauen. Aber da Du Dir ja schon selber Gedanken gemacht hast, will ich mal nicht so sein.
function Rechteck(hoehe,breite)
{
»» this.x=hoehe;
»» this.y=breite;
»» this.f=hoehe*breite;
}
function Flaeche()
{
»» Flaeche=hoehe*breite
}
r=new Rechteck(10,200)
document.write("Hoehe:"+r.x+"<br>")
»» document.write("Breite:"+r.y+"<br>")
»» r.flaeche
1. Du berechnest die Flache schon im Konstruktor, aber auch noch mal in Flaeche(). Entscheide Dich fuer eines. Der bessere Weg ist wahrscheinlich, die Flaeche erst zu berechnen, wenn sie gebraucht wird, da sie sonst auch bei jeder Aenderung der Ausmasse des Rechtecks neu berechnet werden muesste, was schon wieder eine Fehlerquelle ist, denn laut Murphy's Law vergisst Du es garantiert einmal.
2. Zugriff von aussen auf objektinterne Daten ist bad style! Defuer definiert man Zugriffesmethoden, also z.B. GetHeight und GetWidth.
function Rechteck(hoehe, breite) {
this.x = hoehe;
this.y = breite;
this.SetHeight = Rechteck_SetHeight;
this.GetHeight = Rechteck_GetHeight;
this.SetWidth = Rechteck_SetWidth;
this.GetWidth = Rechteck_GetWidth;
this.GetFlaeche = Rechteck_GetFlaeche;
}
function Rechteck_SetHeight(new_height) { this.x = new_height; }
function Rechteck_SetWidth(new_width) { this.y = new_width; }
function Rechteck_GetHeight() { return this.x; }
function Rechteck_GetWidth() { return this.y; }
function Rechteck_GetFlaeche() {
return this.x * this.y;
}
r = new Rechteck(10. 200);
document.write("Hoehe: " + r.GetHeight() + "<br>");
document.write("Breite: " + r.GetWidth() + "<br>");
document.write("Flaeche: " + r.GetFlaeche() + "<br>");
Uebrigens ist der Titel eines Postings dazu da, den Inhalt treffend zusammenzufassen. "Schwierige Aufgabe" ist nicht nur falsch (ist naemlich gar nicht schwierig ;-) ), sondern auch alles andere als beschreibend.
So long
» 1. Sie sollen ein Objekt mit dem Namen Rechteck entwerfen. Es soll die zwei Eigenschaften Höhe und Breite haben. Entwicken Sie dabei den Konstruktor.
»
» 2. Sie sollen die Methode fläche()einfügen. Sie erlaubt es, die Fläche eines Objektes vom Typ Rechteck zu bestimmen.
»
» 3. Erzeugen Sie bitte eine Instanz vom Typ Rechteck, und geben Sie die Eigenschaften sowie die Fläche für einen beliebigen Fall aus.
» [...]
Die Lösung war schon gar nicht schlecht, eine _echte_ Methode fehlte dem Objekt noch. Hier mein Lösungsvorschlag:
<html>
<head></head>
<body>
<script type="text/javascript">
<!--
// Deklaration der "Klasse" Rechteck - Die Anführungszeichen sollen nur darauf
// hinweisen, dass es in JavaScript eigentlich gar keine Klassen gibt, sondern
// "nur" Prototypen
function Rechteck(h, b) {
this.hoehe = h; // Zwei Attribute der "Klasse" Rechteck
this.breite = b;
this.flaeche = Rechteck_flaeche} // Eine Methode der "Klasse" Rechteck
// Deklaration der Methode flaeche() der "Klasse" Rechteck
function Rechteck_flaeche() {
return this.hoehe * this.breite}
// "Instanziierung" eines Exemplars der "Klasse" Rechteck
var meinRechteck = new Rechteck (10,200);
// Ausgabe
document.write('Höhe des Rechtecks: ' + meinRechteck.hoehe + '<br>');
document.write('Breite des Rechtecks: ' + meinRechteck.breite + '<br>');
document.write('Fläche des Rechtecks: ' + meinRechteck.flaeche());
//-->
</script>
</body>
</html>
Enjoy IT,
Andreas Braza
----------------------------------------------------------------------