Toon posts:

[OO] het implementeren van methode die niet gebruikt worden

Pagina: 1
Acties:

Verwijderd

Topicstarter
stel ik heb de volgende java interface

code:
1
2
3
public interface IParser {
  public List parse(String line);
}


en de volgende implementaties

code:
1
2
3
4
5
public class FlatFileParser implements IParser{ 
 public List parse(String line){
   //do something
 }
}


mogelijke client code kan er zo uit zien:
code:
1
2
IParser parser = new FlatFileParser();
parser.parse("some string");


allemaal leuk en aardig. Nu wil ik een andere soort parser schrijven. Bijvoorbeeld een XML Parser. Nou is mijn vraag:

1: kan ik het volgende in IParser interface toevoegen?
code:
1
 public List parser(String file, string file);


waarvan de eerste attribute een xml instance is en de tweede attribuut een xsd. Als ik het bovenstaande method toevoegd dan moet FlatFileParser deze methode ook gaan implementeren. FlatFileParser gebruikt deze methode niet. Mijn tweede vraag is:

2: hoe kan ik voorkomen dat clients deze methode aanroepen? moet ik dan een exceptie / error gooien? of null laten teruggeven? dat laaste wekt verwarring op.

Of kan ik beter een apparte interface definieren voor de XMLParser? Wat ik eigenlijk wil is dat de client maar tegen 1 interface of aan te praten.

hebben jullie misschien een idee hoe ik dit probleem het beste aan kan pakken?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Een interface beschrijft de afspraak waaraan een parser zich moet houden. Als je een extra methode wilt aanbieden, specifiek voor 1 implementatie van zo'n parser interface, dan zul je dat bij die implementatie moeten doen. Dus toevoegen als methode aan XmlParser.

Verwijderd

Topicstarter
bigbeng schreef op zaterdag 26 mei 2007 @ 00:20:
Een interface beschrijft de afspraak waaraan een parser zich moet houden. Als je een extra methode wilt aanbieden, specifiek voor 1 implementatie van zo'n parser interface, dan zul je dat bij die implementatie moeten doen. Dus toevoegen als methode aan XmlParser.
Door het toevoegen van een specifieke methode dat bedoelt is voor een bepaalde implementatie voorkom je inderdaad dat andere implementatie (die de methode niet nodig heeft) hoeft te implementeren. Maar ik kan dan niet het volgende doen:

code:
1
2
3
IParser parser = new XMLParser();
//error omdat IParser de methode parse niet kent met 2 parameters
parser.parse("a","b");


een alternatief is misschien de interface IParser te veranderen naar

code:
1
public list parse(IFile file);


En dan voor zowel een FlatFile als een XML implementatie van IFile implementeren, waarvan de xml implementatie de constructor 2 argumenten accepteerd.

Verwijderd

Verwijderd schreef op zaterdag 26 mei 2007 @ 00:36:
[...]


Door het toevoegen van een specifieke methode dat bedoelt is voor een bepaalde implementatie voorkom je inderdaad dat andere implementatie (die de methode niet nodig heeft) hoeft te implementeren. Maar ik kan dan niet het volgende doen:

code:
1
2
3
IParser parser = new XMLParser();
//error omdat IParser de methode parse niet kent met 2 parameters
parser.parse("a","b");


een alternatief is misschien de interface IParser te veranderen naar

code:
1
public list parse(IFile file);


En dan voor zowel een FlatFile als een XML implementatie van IFile implementeren, waarvan de xml implementatie de constructor 2 argumenten accepteerd.
Die String file minimaliseert de mogelijkheden inderdaad enorm met wat je zou willen. Het alternatief is veel beter :). Echter weet ik zo te weinig over de werking van je parsers om er een uitspraak over te kunnen doen. Waarom een 2e file bij de XML Parser, maar bij de Flat file parser niet?

[ Voor 9% gewijzigd door Verwijderd op 26-05-2007 01:21 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Blijkbaar is de IParser interface niet van toepassing op (of niet goed bruikbaar voor) alle soorten parsers. Je abstractie klopt dus niet helemaal. Het is in dat geval inderdaad het beste om eens goed naar je interface te kijken en deze zo te ontwerpen dat deze beide gevallen goed ondersteund. Dit zorgt er ook voor dat je in de toekomst flexibeler kunt werken.

Noushka's Magnificent Dream | Unity