28. oktober 2007 - 19:35Der er
5 kommentarer og 2 løsninger
Gode råd fundet her på eksperten
Hej.
Jeg har fundet et nogle gode råd i en gammel tråd her på eksperten, hvor der stod gode råd inden programmering.
Her er et par udplug, jeg ikke lige fanger: - Overvej om du vil bruge interfaces - Brug try-finally, try-except hvor du kan! - Prøv at lave det objektorienteret fra starten. Lav nogle gode baseobjekter hvorfra man kan nedarve og udvide funktionalitet.
Kan jeg få en til at uddybe, hvad der måske menes med disse 3 ting, inden jeg begynder at kaste mig ud i et project.
Det lyder som noget jeg kunne have fundet på at skrive :-)
Om man skal bruge interfaces eller arbejde med "klassisk" objektorientering, kræver lidt baggrundsviden som her mest går på abstrakte klasser. Et eksempel på en abstrakt klasse er TStrings hvorfra bl.a. TStringList nedarver. Her er defineret abstrakte metoder; de er KUN defineret, ikke lavet endnu. Det er opgaven for de klasser der nedarver.
Fordelen er at man kan definere en GemIDatabase i baseklassen, som den kan bruge i andre metoder defineret i klassen. Baseklassen behøver altså ikke vide hvad der sker i metoden. Den skal bare være oprettet af klasserne der nedarver.
Eksempel: En adresseklasse skal lave en GemIDatabase funktion som gemmer adresse, postnr og kommunekode, mens en personklasse skal gemme navn og cpr-nummer. På den kan kode der ellers skulle kopieres mellem klasserne, flyttes til baseklassen. Det er en stor fordel at man kun retter fejl ét sted.
Men - man kan godt nedarve fra en abstrakt klasse uden at programmere alle de abstrakte metoder der ligger heri. Der kommer kun en advarsel - først når man kører programmet vil det fejle.
Interfaces definerer også funktioner og - med god vilje - gør lidt det samme som abstrakte klasser. To vigtige fordele er, at alle metoderne SKAL programmeres og at man kan lave noget der ligner multipel nedarving, eksempelvis implementere et data og et liste-interface i samme klasse. Det er besværligt at gøre pænt med traditionel OOP.
----------- o -----------
Try-finally sikrer at systemet nulstiller en operation, også selvom den fejler. I nedenstående stump kode bliver cursoren sat tilbage selvom metoden fejlede.
1. Man kan ikke definere attributter (variable). Man kan ikke lave property Attribut : integer read fAttribut write fAttribut. Man bliver nødt til at lave SetAttribut, GetAttribut funktioner og lade implementøren oprette fAttribut.
2. Generelt synes jeg de er ret besværlige at bruge
@hrc Det var faktisk dine egne råd, som jeg fandt, da jeg søgte lidt rundt på gamle spørgsmål her i gruppen. Der var flere råd i posen, men der var lige de ovenstående 3, som jeg kunne bruge lidt uddybning til.
Ud fra besvarelserne er jeg lidt ked af, at jeg ikke har lvoet flere points, da det ikke bare er en "en-linies" besvarelse, der blev givet.
@Arne v og hrc Ud fra de 30 points, der er udlovet, synes jeg, at en fordeling 10 (arne v) / 20 (hrc) vil være mest fair
Nu har jeg kun snakket om metoder der er "virtual; abstract;". Man kan sagtens have virtuelle metoder i baseklassen som derved kaldes før koden i de nedarvede klasser.
Jeg har en "procedure FillListItem(aListItem: TListItem); virtual;" der fylder en linje i et TListView. I baseklassen sættes følgende.
begin aListItem.SubItems.ClearM aListItem.Data := self; aListItem.ImageIndex := -1; end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.