06. oktober 2004 - 10:41
Der er
9 kommentarer og 3 løsninger
Korrekt objektorientering med abstrakt klasse
Jeg har en abstrakt klasse med 10 variabler og så har jeg 5 klasser som arver fra denne abstrakte klasse. De har hver endnu 5 variabler. Kan det passe jeg så skal definere alle 15 variabler i konstruktørerne på de 5 klasser? Her er et eksempel på hvad jeg snakker om. class AbstractBil { string hjul; string rat; string døre; public AbstractBil(string hjul, string rat, string døre) { this.hjul = hjul; this.rat = rat; this.døre = døre; } } class Mazda : AbstractBil { string mazdaService; string kofanger; public Mazda(string hjul, string rat, string døre, string mazdaService, string kofanger) { this.hjul = hjul; this.rat = rat; this.døre = døre; } } Kan I se pointen - konstruktøren i de nedarvende objekter bliver unødigt lang.
Annonceindlæg fra Barco
06. oktober 2004 - 10:44
#1
Umiddelbart kan jeg ikke se anden måde, hvis tingene skal sættes på constructor niveau. Alternativt er at lave en tom constructor, der kun sætter til standardting og derefter sætte variablerne efter initiering via properties.
06. oktober 2004 - 10:49
#2
denne her kan også være nyttig : public abstract class SomeBase { private string test; public SomeBase(string test) { this.test = test; } } public class SomeSpecialization : SomeBase { public SomeSpecialization(string test) : base(test) { // } } og du kan også "henvise" til lokale konstruktører med public SomeSpecialization(...) : this(...)
06. oktober 2004 - 10:52
#3
snepnet >> Det løser ikke problemet med, at der i en nedarvet klasse tilføjes nye egenskaber. Det gør dit eksempel ikke.
06. oktober 2004 - 10:58
#4
Hvorfor gør det ikke det ? public abstract class SomeBase { private string test; public SomeBase(string test) { this.test = test; } } public class SomeSpecialization : SomeBase { private string someOtherTest; public SomeSpecialization(string test, string someOtherTest) : base(test) { this.someOtherTest = someOtherTest; } }
06. oktober 2004 - 10:58
#5
Det løser ikke problemet med de mange parametre, men jeg synes absolut at det er kønnere at sætte super klassens members i dens constructor fremfor direkte.
06. oktober 2004 - 11:03
#6
Jeg synes iøvrigt ikke at det er et specielt OO problem. Muligheder: 1) alle data som individuelle argumenter til constructor (som du selv nævner) 2) constructor uden argumenter og set metoder / properties / public members (som Benny foreslår) 3) constructor med et argument et DTO som indeholder alle data 4) se næste kommentar På en eller anden måde skal de data ind.
06. oktober 2004 - 11:06
#7
Hvis dit klasse hiraki giver mening, så bør dine konkrete klasser nederst i dit hiraki have constructorer med få argumenter. Constructorerne kalder så opad i hirakiet. Med en masse konstanter bestemt af hvilken konkret klasse det er. Men hvis du gemmer alt det (non public), så er det usynligt hvordan du gør det og så betyder det ikke så meget om du vælger 1, 2 eller 3 der !
06. oktober 2004 - 11:07
#8
Ja, det er rigtigt, det ER kønnere. Så er det om ikke andet hurtigt lige at copy-paste base()-konstruktøren i de forskellige specialiserede klasser. Jeg takker for jeres indsigt. Svar.
06. oktober 2004 - 11:09
#9
svar herfra :o) mvh
06. oktober 2004 - 11:33
#10
Vil du ikke være med, arne_v?
06. oktober 2004 - 11:36
#11
tjo
06. oktober 2004 - 13:45
#12
De sidste 0,01 pts. er forsvundet :-)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.