[c++, win32] Errorrapportage vanuit OO-structuur..

Pagina: 1
Acties:

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Ik heb hier een stukje OO code dat zelf verantwoordelijk is voor het persistent maken van zichzelf en zijn member objecten. (Het kreng kan zichzelf opslaan op schijf.)

En zoals bekend kan er met IO het een en ander verkeerd gaan. De weergave van het geheel is een boom structuur van een aantal verschillende objecten. Het hoofd object wat direct via een singleton aanroepbaar is, heeft dus de public interface voor de IO.

Onderandere functies als: saveWorkspace, saveWorkspaceAs en loadWorkspace. Daarnaast nog diverse export functies die ook schijf IO tot gevolg hebben.

Omdat het een boom van objecten is, heb ik gekozen voor exceptions. Een metohde die ik erg makkelijk en prettig vind werken. Echter omdat mijn geheel van buiten simpel te benaderen moet zijn, wil ik graag een manier hebben om makkelijk aan te geven of en wat er fout is gegaan. Dat het dus makkelijk te zien is dat er iets mis ging omdat de file al geopend was, of omdat de file niet bestond of etc. etc..

Ikzelf dacht aan het checken op een return waarde van de diverse functies. Is die nul, dan is er iets mis en moet je een bepaalde member waarde van mijn oo verhaal bekijken omdat die een nummer bevat die aangeeft wat er mis is gegaan. De standaard Win32 methode dus.

Maar ik zou graag willen weten wat voor mogelijkheden andere mensen zien. Of of er nog dingen zijn waar ik zo over zou kunnen struikelen. Ja het is in verband met een school opdracht. Maar ik dacht, och, het geheel is van dusdanige algemene aard dat het zeker interresant is voor de willekeurige liefhebber.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Je kunt zelf exception extenden en er de benodigde functionaliteit aan hangen.. maw.. Maak een DDDException :) (wel een wat toepasselijkere naam verzinnen)..

Die exception kun je vervolgens zelf zo uitgebreid maken als je wilt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Waarom gooi je je exception dan ook niet naar buiten door?

Kijk anders eens naar de Exception-loze aanpak van java.io.PrintWriter ...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op woensdag 19 december 2001 21:23 schreef The - DDD het volgende:
Omdat het een boom van objecten is, heb ik gekozen voor exceptions. Een metohde die ik erg makkelijk en prettig vind werken. Echter omdat mijn geheel van buiten simpel te benaderen moet zijn, wil ik graag een manier hebben om makkelijk aan te geven of en wat er fout is gegaan. Dat het dus makkelijk te zien is dat er iets mis ging omdat de file al geopend was, of omdat de file niet bestond of etc. etc..

Ikzelf dacht aan het checken op een return waarde van de diverse functies. Is die nul, dan is er iets mis en moet je een bepaalde member waarde van mijn oo verhaal bekijken omdat die een nummer bevat die aangeeft wat er mis is gegaan. De standaard Win32 methode dus.
Het nadeel van de return-waarde methode is natuurlijk dat je per functie maar 1 return value hebt, die 1 type heeft. Voor exceptions geldt ook de beperking in aantal (1), maar daar heb je keus uit meer types.

Wat detailinformatie betreft: Exceptions zou je by reference moeten vangen. Vervolgens kun je ze dus polymorphisch afhandelen - als je meer wil weten kun je verder gespecialiseerde methoden gebruiken of dynamic_cast<>en. Het voordeel van deze aanpak is dat een type duidelijker aan kan geven wat er fout ging dan een nummer. Vergelijk : FileNofFoundException.FileName() en -42. Wat is er makkelijker te lezen in je sourcefile?

Het grote voordeel van Win32-stijl numerieke codes is dat ze het ook in VB doen. :)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Owh, ik zie nu pas dat het voor c++ is... Terwijl ik van java uitging |:(.. hmm . zou niet weten hoe het bij c++ gaat...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'