letavino
Goto Top

Anfängerfrage zu Objektorientierung

Hallo,
ich schreibe gerade mein erstes objektorientiertes Programm.

Nun habe ich eine, wahrscheinlich vollkommen banale, Frage.

Beispiel:
Ich möchte mehrere Autoobjekte erzeugen, ein paar Opel, einige Audi und mehrere Mercedes.
Die Autos unterscheiden sich nur durch ihre Attribute.

Sollte ich nun eine Klasse "Auto" erzeugen und Klassen "Opel", "Audi" und "Mercedes" davon erben lassen?
Oder ist "Auto" die einzige Klasse und man übergibt lediglich einen Typ, der mit Switch Case die benötigten Werte setzt?

Ich würde zu ersterem tendieren, ein anderer meinte, dass die zweite Methode die richtige sei.

Mfg, Florian

Content-Key: 184865

Url: https://administrator.de/contentid/184865

Printed on: April 24, 2024 at 19:04 o'clock

Member: ITSchlumpf
ITSchlumpf May 11, 2012 at 10:40:48 (UTC)
Goto Top
Hoi Letavino,

eigentlich brauchst du nur die Klasse Auto mit nem Attribut Marke/Hersteller. Unterklassen sind ja in der regel ja nur weiterführungen zu deiner Oberklasse.
Beispiel:

Fahrzeug (Oberklasse)
Auto (unterklasse)
Zweirad(unterklasse)
Fahrrad (unterklasse von Zweirad)
Motorrad (unterklasse von Zweirad)
etc.

Oder unterscheiden sich die Marken in ihren Attributen wesentlich?


Gruß
Schlumpf
Member: Letavino
Letavino May 11, 2012 at 10:49:01 (UTC)
Goto Top
Hallo Schlumpf,
die Attribute unterscheiden sich nicht, nur deren Werte.

Dann werde ich es mal bei der klasse Auto belassen und das ganze in Unterklassen aufsplitten, wenn markenabhängige Attributen hinzukommen sollten.

Vielen Dank für deine Hilfe! face-smile
Member: Guenni
Guenni May 17, 2012 at 16:28:51 (UTC)
Goto Top
Hi Letavino,

ob Opel, Mercedes oder VW, ein Auto bleibt ein Auto mit individuellen Eigenschaften, die einfach(er) mittels Formular/DB verwaltet werden können.

Daher brauchst du eigentlich nicht den Umweg über eine Klasse zu gehen, um versch. Autos zu verwalten.

Wenn du OOP lernen willst, würde ich den Vorschlag von ITSchlumpf aufgreifen.


Meine Idee wäre jetzt: Du erstellst eine Klasse, z.B. c_fahrzeug, mit Eigenschaften, die jedes Fahrzeug hat: Hersteller, Marke (oder Modell), Baujahr . . . etc..

Die individuellen Eigenschaften verschiedener Fahrzeuge legst du in eigenen Klassen ab, also Klassen für Autos, Fahrräder etc.. die dann die Eigenschaften

von c_fahrzeug erben, die allen gemeinsam sind.


Um die Eigenschaften mit Werten zu füllen, erstellst du in der Klasse c_fahrzeug eine (oder mehrere) Methode(n) ohne Parameter und Funktion.

Ohne Funktion heißt, keine Anweisung(en). Das Gleiche machst du, um Eigenschaften auszugeben. Diese Methode(n) sind dann in der erbenden Klasse verfügbar,

und können überschrieben werden. Das heißt, in jeder erbenden Klasse wird der gleiche Methodenname verwendet, Parameter und Funktion sind individuell zu setzen.

Beispiel:

<?php
class c_fahrzeug{
	protected $hersteller;
	protected $marke;
	protected $typ;
	protected $baujahr;
	protected $neu;
	public function setze_eigenschaft(){
		
	}
	public function zeige_eigenschaft(){
		
	}
};

class c_auto extends c_fahrzeug{
	protected $motor;
	protected $klima;
	protected $navi;
	protected $hifi;
	public function setze_eigenschaft($hersteller,$motor){
		$this->hersteller=$hersteller;
		$this->motor=$motor;
	}
	public function zeige_eigenschaft(){
		echo '<p>Hersteller Auto: '.$this->hersteller.'<p>';  
		echo '<p>Motor: '.$this->motor.'<p>';  
	}
};

class c_fahrrad extends c_fahrzeug{
	protected $rahmen;
	protected $schaltung;
	public function setze_eigenschaft($hersteller,$rahmen){
		$this->hersteller=$hersteller;
		$this->rahmen=$rahmen;
	}
	public function zeige_eigenschaft(){
		echo '<p>Hersteller Fahrrad: '.$this->hersteller.'<p>';  
		echo '<p>Rahmen: '.$this->rahmen.'<p>';  
	}
};

//Ein Auto
$auto=new c_auto;
$auto->setze_eigenschaft('VW','Diesel');  
$auto->zeige_eigenschaft();

//Ein Fahrrad
$fahrrad=new c_fahrrad;
$fahrrad->setze_eigenschaft('Koga Miyata','Kohlefaser');  
$fahrrad->zeige_eigenschaft();

//Ausgabe der Objekteigenschaften
echo '<pre>';  
var_dump($auto);
echo '</pre>';  

echo '<pre>';  
var_dump($fahrrad);
echo '</pre>';  
?>

Gruß
Günni