Beste mede-tweakers,
Ik ben mijn brein al enkele uren aan het breken maar kom er niet uit. Ik wil op 2 packages van een Java project het LSP en OCP toepassen maar loop vast op een vraag.
Situatie
In het project bevindt zich deze abstracte base klasse:
Dit is een basis interface om bepaalde waarden uit een hardwarematig of gesimuleerd kompas te lezen. Er is een implementatie gemaakt , genaamd COMPortCompass, die de compoort gebruikt om e.e.a. uit te lezen. Dit is naar mijn mening prima. Het probleem zit hem nu in de 2de klasse, genaamd CompassSimulator. Deze klasse heeft de volgende inhoud:
Voor meer informatie het klassediagram van de package:
http://www.digatech.nl/senacompass.jpg
Probleemomschrijving
Mijn vraag nu is, is dit geen schending van het liskov substitution principle? Ik denk van niet en dat het initialiseren van een bepaalde interface meer een slechte ontwerpbeslissing is dan dat het te maken heeft met LSP. Zoals ik kan beoordelen veranderen de 'aan te nemen' impliciete precondities ook niet.
Alvast bedankt,
Michel
Ik ben mijn brein al enkele uren aan het breken maar kom er niet uit. Ik wil op 2 packages van een Java project het LSP en OCP toepassen maar loop vast op een vraag.
Situatie
In het project bevindt zich deze abstracte base klasse:
Java:
1
2
3
4
5
6
7
8
| abstract class Compass extends Observable { private double bearingvalue = 0.0; public void stop() {} public boolean isConnected() { return true; } public double getBearingvalue() { return bearingvalue; } public void init() { } } |
Dit is een basis interface om bepaalde waarden uit een hardwarematig of gesimuleerd kompas te lezen. Er is een implementatie gemaakt , genaamd COMPortCompass, die de compoort gebruikt om e.e.a. uit te lezen. Dit is naar mijn mening prima. Het probleem zit hem nu in de 2de klasse, genaamd CompassSimulator. Deze klasse heeft de volgende inhoud:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public class CompassSimulator extends Compass { private sena.simulator.Facade simulator; public CompassSimulator() { simulator = new sena.simulator.Facade(); simulator.initialize(); simulator.setHeadingEngine(true, this); } public void setBearing(double bearing){ bearingvalue = bearing; setChanged(); notifyObservers("UPDATE_BEARING"); } } |
Voor meer informatie het klassediagram van de package:
http://www.digatech.nl/senacompass.jpg
Probleemomschrijving
Mijn vraag nu is, is dit geen schending van het liskov substitution principle? Ik denk van niet en dat het initialiseren van een bepaalde interface meer een slechte ontwerpbeslissing is dan dat het te maken heeft met LSP. Zoals ik kan beoordelen veranderen de 'aan te nemen' impliciete precondities ook niet.
Alvast bedankt,
Michel