Come posso creare istanze di classi che richiedono una grande quantità di componenti e attributi? Prendi ad esempio una macchina. Un'auto ha centinaia di sotto componenti ciascuno con le proprie proprietà specifiche. Ci sarebbero migliaia di parametri per passare o lavorare con. Alcuni componenti si ripetono anche all'interno dell'auto (ruote, porte, freni, molle, ecc.). Ho fatto due classi di auto dimostrative e ho inventato due modi per inizializzarle. Neanche io sono felice.
First Way : annida tutte le sottoclassi e inizializza l'auto con un'enorme affermazione. Non mi piace perché non posso creare prima i componenti secondari e costruire lentamente. Cosa succede se non so quanto saranno grandi le ruote, cosa faccio? Devo specificare i valori di default? Cosa succede se ho bisogno di più porte? Questo sarebbe utilizzabile se la classe avesse effettivamente bisogno di migliaia di argomenti come una vera macchina?
Class Car(Size, TireType, Displacement, Cylinders, ECU, Fuel Type, PowerLockButton, Gears, ShiftLeverLength, ClutchType, GearKnob, Computer, TorqueConverter, FluidType, Links, SpringRate, BushingMaterial, ShockType)
Class Wheels(Size, TireType)
Class Engine(Displacement, Cylinders, ECU, Fuel Type)
Class Door(PowerLockButton)
Class Transimission(Gears)
Class ManaulTransmission Inherits From Transmission(ShiftLeverLength, ClutchType, GearKnob)
Class AutomaticTransmission Inherits From Transimission(Computer, TorqueConverter, FluidType)
Class Suspension(Links, SpringRate, BushingMaterial, ShockType)
FordMustang = Car(20", Michelin, 5.0L, 8Cylinders, Delphi, Gasoline, NoPowerLock, 6Gears, 3inches, SportClutch, MetalKnob, StiffLinks, 550lbRate, PolyUrethaneBushing, MagneticShocks)
BMW530i = Car(18", Continental, 3.0L, 6Cylinders, Bosch, Gasoline, YesPowerLock, 6Gears, BoschTransComputer, MediumTorqueConverter, ExpensiveFluid, ModerateLinks, 45lbRate, RubberBushing, SachsShocks)
Secondo passaggio: crea le classi di componenti Car e poi le aggregale tutte in una classe di auto. Non mi piace perché devo usare molte linee di codice per costruire l'auto e quel codice sembra orfano seduto allo scoperto. Inoltre, non utilizzerò mai nessuno di questi componenti (ruota, motore, trasmissione, ecc.) In qualcosa di diverso dall'interno di un'auto, quindi perché lasciarli al di fuori dell'ambito della classe dell'auto?
Class Wheels(Size, TireType)
Class Engine(Displacement, Cylinders, ECU, Fuel Type)
Class Door(PowerLockButton)
Class Transimission(Gears)
Class ManaulTransmission Inherits From Transmission(ShiftLeverLength, ClutchType, GearKnob)
Class AutomaticTransmission Inherits From Transimission(Computer, TorqueConverter, FluidType)
Class Suspension(Links, SpringRate, BushingMaterial, ShockType)
Class Car(Wheels, Engine, Door, Transimission, Suspension)
BMW530iWheels = Wheels(18', Continental)
BMW530iEngine = Engine(3.0L, 6Cylinders, Bosch, Gasoline)
BMW530iDoor = Door(YesPowerLock)
BMW530iTransmission = AutomaticTransmission(6Gears, BoschTransComputer, MediumTorqueConverter, ExpensiveFluid)
BMW530iSuspension = Suspension(ModerateLinks, 45lbRate, RubberBushing, SachsShocks)
BMW530i = Car(BMW530iWheels, BMW530iEngine, BMW530iDoor, BMW530iTransmission, BMW530iSuspension)
Qualche idea su come questo può essere fatto in modo affidabile? La mia preoccupazione è che l'uno o l'altro modo che prendo diventerà travolgente da usare quando il numero di attributi è estremamente alto. Ciò che mai puoi contribuire sarà molto apprezzato.