Thomas Schmidt: Anfängerfrage objektorientierte Programmierung

Beitrag lesen

Hallo Forum,

für mein neues Projekt möchte endlich mal lernen, wie man objektorientiert programmiert. Ich hab mich etwas in die Materie eingelesen und dazu eine prinzipielle Frage.

Ich möchte mehrere Objekte erstellen, die eine Eigenschaft (Status) und eine Methode (setzeStatus) besitzen. Abhängig vom Status sollen 2 Bilder gewechselt werden. Diese Bilder sind für jeweils mehere Objekte gleich (hier nur jeweils 2 als Beispiel). Ich hab 2 Lösungen:

Lösung 1:

function BinaerElement(id,bild0,bild1) {  
 this.setzeStatus = function(wert) {  
  if (wert) document.getElementById(id).src = bild1.src;  
  else document.getElementById(id).src = bild0.src;  
  this.status = wert;  
 }  
}  
  
function FensterWaag(id){  
 this.constructor(id, BildFensterWaagGeschl, BildFensterWaagOffen);  
}  
FensterWaag.prototype = new BinaerElement();  
  
function FensterSenkr(id){  
 this.constructor(id, BildFensterSenkrGeschl, BildFensterSenkrOffen);  
}  
FensterSenkr.prototype = new BinaerElement();  
  
var Fenster0 = new FensterWaag("fenster0");  
var Fenster1 = new FensterWaag("fenster1");  
var Fenster2 = new FensterSenkr("fenster2");  
var Fenster3 = new FensterSenkr("fenster3");

Lösung 2:

function statuswechsel (wert) {  
 if (wert) document.getElementById(this.id).src = this.bild1.src;  
  else document.getElementById(this.id).src = this.bild0.src;  
  this.status = wert;  
}  
  
function FensterWaag(id) {  
 this.id = id;  
 this.bild0 = BildFensterWaagGeschl;  
 this.bild1 = BildFensterWaagOffen;  
 this.setzeStatus = statuswechsel;  
}  
  
function FensterSenkr(id) {  
 this.id = id;  
 this.bild0 = BildFensterSenkrGeschl;  
 this.bild1 = BildFensterSenkrOffen;  
 this.setzeStatus = statuswechsel;  
}  
  
var Fenster0 = new FensterWaag("fenster0");  
var Fenster1 = new FensterWaag("fenster1");  
var Fenster2 = new FensterSenkr("fenster2");  
var Fenster3 = new FensterSenkr("fenster3");  
  

Welche ist vorzuziehen? Ich tendiere zu Lösung 1, sie erscheint mir eleganter. Lösung 2 finde ich zwar simpler, dafür sind noch die öffentlichen Eigenschaften id, bild0 und bild1 dazugekommen. Gibts noch eine Lösung?

Vielen Dank schon mal!

Tom