OOP i Delphi

Tags:    delphi
Skrevet af Bruger #58 @ 16.06.2001
OOP - Hvordan og hvorfor

I denne artikel vil jeg fortælle lidt om hvad objektorienteret programmering (OOP) er, hvorfor du skal bruge det, og hvordan du bruger det. Denne artikelserie skal tages som en slags opfølger til Mark Grays artikel "Klasser i Delphi - Kort fortalt". Jeg vil anbefale at du først læser den artikel.

Hvad er OO, og hvor skal jeg bruge det?

Ideen med at skrive objektorienteret (OO) er, at næsten alting i et program kan opfattes som et objekt der "kan" forskellige ting. For eksempel kan en TShape tegne sig selv når der er brug for det. (Når du ændrer dens form eller noget der har dækket for den bliver fjernet.). Hvis du lavede dit eget objekt, lad os kalde det TLastvogn, vil det selv kunne udregne sin vægt efter hvor mange TKasse den indeholder, og ud fra sin vægt, hestekræfter o.l. udregne sin maksimale fart. Dvs. at et objekt kan respondere til ændringer i dets egenskaber (properties), og derved ændre andre egenskaber. TLastvogn kan også have nogen metoder, som f.eks. KørTil. (Du kan ikke bruge Æ, Ø eller Å i objektnavne, metoder, egenskaber e.l., det er kun for lethedens skyld jeg bruger det her.) KørTil vil så tage en destination, f.eks. en TStorby eller TVarelager. Lastvognen vil så se på et TLandkort or finde den korteste rute til destinationen. Men hvis der nu sker en hændelse som f.eks. et trafikuheld? Så kunne du have en hændelse (event), OnTrafikuheld. Der kunne du så skrive kode til hvad lastvognen skal gøre i det tilfælde, og den kode kan være forskellig for hver enkelt Lastvogn. (De har hver sin chauffør, men en Lastvogn kan ikke bære mere fordi den har en anden chauffør.) Når du skal bruge OOP er det altid en god ide at lave en lignende beskrivelse af sit problem, hvilke objekter man har brug for, og hvad de forskellige objekter skal kunne.

Hvordan bruger jeg OO?

Alt objektorienteret i Delphi starter med TObjekt. TObjekt har kun nogen meget grundlæggende, men også meget vigtige metoder. Alle objekter i Delphi nedstammer fra TObjekt på den ene eller den anden måde. Du opretter er ny objekttype med TYPE kommandoen:
type
  TLastvogn = class(TObject)
For at tilføje en egenskab skal der en felt-variabel eller to metoder til. Her tilføjer jeg
egenskaben AntalKasser:
  private
    FAntalKasser: cardinal;
  public
    property AntalKasser: cardinal
     read  FAntalKasser
     write FAntalKasser;
Først definerer jeg en PRIVATE variabel, FAntalKasser, og derefter definerer jeg en PUBLIC egenskab AntalKasser. Jeg definerer begge af typen CARDINAL, fordi det af logiske grunde ikke er muligt at have et negativt antal kasser. READ og WRITE delen af min egenskab fortæller Delphi at den skal bruge FAntalKasser til at skrive og hente værdien af AntalKasser. En egenskab indeholder ikke værdien i sig selv, men afhænger altså af at kunne få sin værdi et andet sted fra. Jeg definerer nu en egenskab til:
 private
    FKasseVaegt: cardinal;
    function GetVaegt: cardinal;
  public
    property KasseVaegt: cardinal
     read  FKasseVaegt
     write FKasseVaegt;
    property Vaegt: cardinal
     read  GetVaegt;
Egenskaber KasseVaegt er der ikke noget specielt ved. Vaegt, til gengæld, den er lidt speciel. Læg mærke til at den ikke har en WRITE del. Dvs. at den egenskab er Read-Only. Desuden er det ikke en variabel, men en funktion der er angivet efter READ. Meningen med det er, at det så er funktionen GetVaegt der bliver kaldt, i stedet for en variabel der bliver læst. Funktionen GetVaegt kunne se sådan ud:
function TLastvogn.GetVaegt: cardinal;
begin
  Result := AntalKasser * KasseVaegt;
end;
Meget simpelt. Når du beder om lastvognens samlede vægt bliver den udregnet på stedet. Der mangler dog én ting i funktionen, nemlig at regne med at lastvognen også vejer noget i sig selv, men det er nemt at tilføje. I næste artikel vil jeg komme ind på avancerede objektrelationer (TLandkort, TDestination, TVarelager og hvordan de kan spille sammen) og events.


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (1)

User
Bruger #3976 @ 29.05.03 00:12
Laver man en ny UNIT til den man har i forvejen og hvad er det for noget med at jeg kan trykke : Ctrl+Shiff+C og få eller andet frem ?
Du skal være logget ind for at skrive en kommentar.
t