Klassdiagram

Inledning

När man pratar om OOP (Objektorienterad programmering) så underlättar det om man har ett språk att beskriva klasser på. Det har blivit dags att lära sig lite grunder i språket UML (Universal Modelling Language). Detta kommer att underlätta när vi beskriver klasser. Vi börjar med ett exempel:

Exempel

1. Klassdiagram

bild

Ett klassdiagram ritas som en box med tre delar; överst namnet på klassen, sedan dess data-medlemmar och sist medlemsmetoderna. Data-medlemmarna brukar också kallas klassens attribut. De publika delarna i klassen är det som brukar kallas klassens gränssnitt, mer om detta senare.

1. Kod

Exempel 1a
public class MyClass
{
    public int var1;
 
    public MyClass()
    {
    }
    public void DoSomething()
    {
    }
}

Kan du se vad som betyder vad? UML är alltså ett slags förklarande diagram över hur klasser ska byggas.

Överst anges klassnamnet. Nästa del anger attributen till klassen, dvs. alla medlemsvariabler som ska ingå i klassen. Sista avdelningen listar alla metoder som ska ingå. Det finns många saker som inte går att beskriva med UML men fördelarna med UML är den överblick som ges av koden. I dessa sammanhang brukar man tala om design av kod. Med det menas ofta hur saker hänger ihop i ett större perspektiv. UML’en berättar mer om hur utvecklaren har tänkt snarare än hur själva programmeringen är gjord.

Publika data-medlemmar brukar nuförtiden skrivas som egenskaper i C# med get och set. Framöver bör du använda egenskaper överallt där du påträffar publika attribut. Exemplet ovan borde därför se ut såhär:

Exempel 1b
public class MyClass
{
    public int var { get; set; }
 
    public MyClass()
    {
    }
    public void DoSomething()
    {
    }
}

Vi tar ett nytt exempel:

2. Klassdiagram

bild

2. Kod

Exempel 2

public class MyClass
{
    private int var1;
 
    public MyClass()
    {
    }
    private void DoSomething()
    {
    }
}

Vad var skillnaden jämfört med klassdiagrammet i exempel 1?

Jo, de små tecknen framför attribut och metoder bestämmer synligheten enligt följande:

  • + motsvarar public
  • # motsvarar protected
  •  motsvarar private

Vi tar ytterligare ett exempel:

3. Klassdiagram

3. Kod

Exempel 3
public class MyClass
{
    private int var1;
 
    public MyClass()
    {
    }
    private string DoSomething(string input)
    {
    }
    public static void DoSomeThingElse()
    {
    }
}

Märk skillnaden på metoden DoSomething. Den har nu fått både en in- och en ut-parameter. Vill man vara extra tydligt så kan man även markera med : void att en metod inte ska returnera något. Det skriver man dock aldrig på konstruktorer.

Lägg också märke till DoSomeThingElse som är understruken. Det betyder att medlemmen är static. Statiska variabler eller metoder hör till själva klassen och tillhör inget objekt. Du har stött på statiska metoder när du skrev dina första Console Applications. Då vet du också kanske redan att statiska metoder inte kan nå andra medlemmar i klassen om inte de också är statiska.

Arv i UML

Ett UML-diagram över ett spel eller ett program innehåller som regel flera klasser. En av de viktigaste sakerna att förmedla med ett UML-diagram är hur klasserna bbygger på varandra, dvs. vilka arv som finns mellan dem. Detta anges med pilar mellan klasserna. Studera exemplet nedan:

4. Klassdiagram

bild

4. Kod

Exempel 4
public class GameObj
{
    protected Vector2 position;
     
    public GameObj()
    {
    }
    public void Update()
    {
    }
    public void Draw()
    {
    }
}
 
public class Player : GameObj
{
    private string name;
     
    public void SetName(string s)
    {
    }
}

Klassen Player ärver från klassen GameObj.

Det finns fler detaljer som ett klassdiagram kan avslöja, bl.a. lite om hur klasser använder andra klasser men det klarar vi oss utan än så länge.

Det du ska ha koll på är hur man ritar ett klassdiagram för att beskriva strukturen. Det inkluderar namn på klassen, medlemmars namn, vilka som räknas som data och vilka som räknas som metoder, synligheten på medlemmarna samt datatyper för data och inparametrar/returparametrar. En hel del alltså.

Vi kommer framöver att använda oss av klassdiagram för att beskriva OOP strukturer på ett enklare sätt. Vill du också skapa digitala UML-diagram så finns det en hel del program att välja på. Vill man ha ett klassiskt utseende så kan t.ex. Voilet UML Editor fungera bra.

Övningar

Övning 1

Hur ser klassen ut till följande klassdiagram?

Övning 2

Hur ser klasserna ut till följande klassdiagram?

(strukturen är hämtad från vårt exempel på MonoGame Asteroids. Du kan själv kontrollera om du fick till strukturen på klasserna korrekt.)

Övning 3

Rita ett klassdiagram över klassen Board från kodexemplet nedan.
Övning 3
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Chess
{
    public class Board
    {
        private const int BoardSize = 8;
        private readonly Piece[,] _pieces = new Piece[BoardSize, BoardSize];

        public void AddPiece(Piece piece, BoardCoordinate coordinate)
        {
            if (!coordinate.IsValidCoordinateForBoardSize(BoardSize))
                throw new ArgumentOutOfRangeException("BoardCoordinate");

            _pieces[coordinate.X, coordinate.Y] = piece;    
        }

        public Piece GetPiece(BoardCoordinate coordinate)
        {
            return _pieces[coordinate.X, coordinate.Y];
        }
    }
}

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Scroll to top