OOD Handboek

13Ontwerp- en codechecklist, compileerfouten

#Klassendiagram

  • Alle klassen en interfaces uit de probleembeschrijving staan erin
  • Zichtbaarheid (+ - #) en types bij álles, ook void
  • «abstract» / cursief en «interface» aangegeven
  • Abstracte methodes cursief
  • Pijlen: driehoek naar ouder/interface, doorgetrokken vs gestippeld
  • Multipliciteit aan beide kanten van associaties
  • Constructors met parameters
  • Geërfde leden niet herhaald (alleen overrides)
  • Exception-klasse + waar die gegooid wordt
  • Pattern zichtbaar (bv. Singleton: - constructor, static onderstreept)
  • Diagram klopt met de code (namen, types)

#Code

  • Elke klasse/interface in een eigen bestand, juiste namespace
  • Velden private, properties met juiste get/set
  • Validatie in setters/constructor met juiste exception + nameof
  • : base(...) in elke subklasse-constructor
  • override bij abstracte methodes en ToString()
  • decimal + m-suffix voor geld, geen magic numbers (const)
  • Geen dubbele code (gedeelde basisklasse)
  • Afhankelijkheden via interface (logger)
  • Belangrijke gebeurtenissen en fouten gelogd
  • Program.cs demonstreert elke functionaliteit met duidelijke uitvoer
  • Project bouwt zonder fouten en waarschuwingen

#Veelvoorkomende compileerfouten

FoutOorzaak → oplossing
CS0534"does not implement inherited abstract member": abstracte methode niet overridden → public override ... toevoegen
CS0535"does not implement interface member": interface-lid ontbreekt of is niet public
CS0115"no suitable method found to override": ouder-methode niet virtual/abstract, of andere signatuur
CS0144"cannot create an instance of the abstract type": new op abstracte klasse
CS7036"no argument given that corresponds to the required parameter": : base(...) vergeten
CS0122"inaccessible due to its protection level": lid is private/protected
CS0200"property is read only": property heeft geen (bereikbare) set
CS0266"cannot implicitly convert": downcast zonder cast → is/as/(Type)
CS0664double-literal naar decimal → 0.25m
CS0019operator op decimal en double → één type gebruiken
CS0161"not all code paths return a value": return of throw ontbreekt
CS0246"type could not be found": klasse in andere namespace → using DeelMobiel;

#Runtime-fouten

NullReferenceExceptionobject niet aangemaakt (lijst niet = new()?)
InvalidCastExceptionharde downcast naar verkeerd type
ArgumentOutOfRangeException bij indexlijst[i] met i ≥ Count