Feedback sull'assegnazione dell'eredità

2

Quindi ho questo incarico java per il college e mi stavo chiedendo se qualcuno qui potrebbe darmi qualche feedback su cosa stavo pensando un po 'di questo mezzo.

Ho un file .csv con dettagli di costruzione: ecco un esempio dei dati con cui lavorerò.

Orapartedeglistatidiassegnazione-

Entriesinthebuildinglistcanbecategorisedinatleastthreeways:bycategoryA,BorC.Eachcategoryisassociatedwiththesamedataasabove,butyouwillberequiredtohandlethemdifferentlyinyourdirectory.Youshouldformulateasuitableobjectmodelforthisdata,makinguseofappropriate(abstract)superclasses,andsubclasses.(Thisisanexerciseininheritance,soalthoughthedirectoryisrathersimple,youshouldcreateanobjectmodelwithinheritance.)

QuindistavopensandodiandareconunasuperclasseBuildingepoiavereunasottoclassediListedBuilding.AvreiquindialtretresottoclassidiCategoriaA/B/Cchesiereditanodallacostruzionequotata.Mastavopensandodifareinmodochelacostruzionedellalistafosselasuperclassedatochecisaràunsolotipodiedificioinquestoincarico.PerquantoriguardaleclassiCategory,nonconterrannoalcunnuovoattributosuciòcheListedhagiàdall'aspetto,maunodeglistatidelleattività-

Displaysuitableinformationforeachentryreturned,dependingoncategory.Althoughtheinformationstoredforeachcategoryisthesame,youshouldpresentitasfollows:itemsofcategoryAshouldappearinALLCAPITALSwithalldatafields;itemsofcategoryBshouldbeinlowercasewithalldatafields;itemsofcategoryCshouldbeinlowercaseandomitthecouncilandparish.Theobjectmodelyouhavecreatedshouldtakecareofthesedifferences.

Ora,quandodicecheilmodelloaoggettidovrebbeoccuparsidiquesto,direstichedovrebbeesserciunaclassedicategoriaA/B/Cecheogniclassedovrebbeaveregetterpericampididatichemanipolerannoidatimododescrittonell'attività.adesempio,l'outputinminuscolo?Eperl'omissionedialcunicampiperlaCategoriaC,dovreisemplicementenonincludereungetterperquellidellacategoriaCperchénonsarannousati?

EDITdiagrammadiclassediciòchehoora getEntry () è astratto e verrà utilizzato dalle sottoclassi per creare una stringa appropriata determinata dai requisiti dell'attività per ciascuna categoria.

    
posta screencut 24.02.2018 - 03:12
fonte

1 risposta

1

Direzione errata?

Utilizzando una sottoclasse Building superclasse e una ListedBuilding provi a soddisfare il seguente requisito:

You should formulate a suitable object model for this data, making use of appropriate (abstract) superclasses, and subclasses.

Tuttavia in realtà si introduce solo una classe artificiale ListedBuilding, perché nulla nella narrativa del compito (almeno la parte che hai divulgato qui) lascia immaginare edifici che non sarebbero elencati.

Lettura alternativa

Ecco cosa può essere compreso:

  • Dall'esempio csv e dalla narrativa, sappiamo che tutti gli oggetti Building hanno gli stessi attributi, indipendentemente dalla loro categoria. Questo sembra un buon candidato per la superclasse.
  • Dalla narrazione sappiamo che gli oggetti Building dovranno essere gestiti in modo diverso a seconda della categoria. Ciò suggerisce che BuildingXxx potrebbe essere un potenziale candidato di sottoclasse per un oggetto di categoria Xxx.
  • Sappiamo anche che ogni oggetto Building deve essere rappresentato in modo diverso, a seconda della sua categoria. Ciò suggerisce che non ha senso implementare la rappresentazione per la superclasse, ma che ciascuna sottoclasse deve avere il suo. Il metodo di rappresentazione è quindi un buon candidato per essere astratto.
  • Un classe astratta non è un'interfaccia : non richiede che ogni sottoclasse implementi ciascun metodo della superclasse! È possibile avere alcuni getter e setter comuni implementati per la superclasse e disporre di un metodo di rappresentazione astratta dichiarato nella superclasse, ma implementato solo per le sottoclassi.

Ulteriori pensieri

La denominazione delle classi è molto importante. Se vedi nel codice di qualcun altro una classe CategoryXxx , pensi che sia un edificio della categoria Xxx? O potrebbe essere una classe che descrive la categoria stessa indipendentemente da un edificio specifico? Quindi meglio evitare qualsiasi rischio di incomprensione e usare nomi di classe univoci.

È un incarico sull'eredità. Nella vita reale, tuttavia, verrai incoraggiato a preferire la composizione sull'ereditarietà . Ad esempio, con il modello di ereditarietà, un Building non può modificare Category . Questo articolo fornisce ulteriori informazioni su come scegliere tra composizione ed ereditarietà .

Sembri preoccupato per DRY , che è una buona cosa. Come vedi, puoi benissimo evitare la ripetizione di getter e setter perché con l'astrazione, TU decidi cosa è comune e cosa può differire. Apprezzerai sicuramente che puoi anche mescolarli entrambi, avendo un comportamento con una parte comune ma facendo uso di comportamenti astratti. Questo è chiamato il modello di progettazione del modello di modello .

    
risposta data 24.02.2018 - 20:10
fonte