2012-04-12 5 views
1

Wir haben eine Elternklasse - Plattform. Alle spezifischen Geräteklassen werden von dieser Elternklasse geerbt - Device1, Device2, ..... DeviceN.Vererbung - Umgang mit kindspezifischen Code in der Basisklasse

Ausgehend von der Geräteeingabe erstellen wir ein Objekt der jeweiligen Geräteklasse und arbeiten entsprechend.

Wenige Dinge, die ich in diesem Code beobachtete, ist die Behandlung von gerätespezifischem Verhalten in der Basisklasse (Platform-Klasse). Beispiel

function doSomething 
{ 
    initiateSomething(); 
    . 
    if ($base->getPlatform() eq 'Device1') 
    { 
     ........ 
    } 
    startSomething(); 
    doneSomething(); 
} 

Dieser Typ des bedingten gerätespezifischen Codes wird auf verschiedene Stellen in der Elternklasse verteilt. Dieser Code ist spezifisch für Device1 und nicht für andere Geräte. Ich dachte daran, diesen gerätespezifischen Code in die Device1-Klasse als Funktion zu setzen und ihn hier aufzurufen, aber das hat auch nicht funktioniert. Da diese Funktion nur für Device1 implementiert ist, schlägt der Code für andere Geräte fehl.

Ihre Hilfe wird sehr geschätzt.

Antwort

1

Sie können dies implementieren, indem für bestimmte Haken mit Pre/Post-Anrufe Ihrer Funktionen:

function doSomething 
{ 
    initiateSomething(); 
    . 
    preDoSomething(); 
    startSomething(); 
    doneSomething(); 
} 

BaseDevice 
{ 
    preDoSomething(){/+no-op+/} 
} 

Device1 
{ 
    preDoSomething() 
    { 
     ........ 
    } 
}