Øistein Wind Willassen wrote:
>> Prøv at beskrive dit problem. Det er sandsynligvis en designfejl
>> der gør at det ønske er opstået.
>
> Jeg er ved at lave et aktiespil, og har derfor (indtil videre) 3
> klasser: Aktie-klassen; her oprettes, købes, sælges etc. aktier
> Lån-klassen; her lånes, tilbagebetales penge etc.
> Spil-klassen; her køres spillet.
>
> Mit problem er nu, at når jeg køber en aktie i aktieklassen skal der
> trækkes et beløb fra pengebeholdningen i lån-klassen.
Det lyder ikke helt så objektorienteret som det gerne måtte være, det lyder
snarere funktionsorienteret.
Hvis der er flere spillere ad gangen, så skal du også have en Spillerklasse,
og ihvertfald en Aktieklasse, altså en klasse for en enkelt aktie med navn,
værdi etc.
Hvis aktierne skal handles et bestemt sted, altså der skal holdes styr på
kurser og hvor mange der er til salg etc. så vil det være nærliggende at
kalde denne klasse for en Børs.
Hvis en Spiller køber en Aktie på Børs'en, så skylder denne Spiller Børs'en
penge.
Dvs at hver spiller har sin egen konto.
Hvis denne konto ikke må være negativ, så kan Spiller'en gå i Bank'en (din
nuværende Lån-klasse) og låne penge.
Måske er det også en god ide at lave en Konto klasse, som hver spiller kan
bruge. Man kan næsten aldrig få for mange klasser
Dvs at en Spiller kommer til at indeholde nogle af disse attributter og
metoder:
public class Spiller {
private Konto konto;
public void købAktie( Børs børs, Aktie aktie )
{
børs.købAktie( aktie );
konto.udtræk( aktie.getPålydendeværdi() );
}
public void sælgAktie( Børs børs, Aktie aktie )
{
int salgspris = børs.sælgAktie( aktie );
konto.indsæt( salgspris );
}
public void lånPenge( Bank bank, int beløb )
{
bank.opretLån( this, beløb );
konto.indsæt( beløb );
}
}
Børs klassen skal holde styr på de forskellige aktiers værdier, og er
egentlig ligeglad med hvem der køber og sælger dem.
Bank klassen derimod opretter en lånekonto for hver enkelt spiller, og
derfor er det nødvendigt at man sender Spiller objektet med til banken.
Bank kan se således ud:
public class Bank {
// et map over spillere og deres lånkonto
private java.util.Map kontoplan;
public Bank ()
{
kontoplan = new java.util.HashMap();
}
public void opretLån( Spiller spiller, int beløb )
{
// find spillerens konto
Konto konto = (Konto)kontoplan.get( spiller );
// hvis denne spiller ikke har lånt penge før, opret en ny konto
if( konto==null)
{
konto = new Konto();
kontoplan.put( spiller, konto );
}
// lån penge
konto.udtræk( beløb );
}
}
Hvorvidt spilleren skal holde styr på sine aktier eller om aktierne skal
holde styr på hvem der ejer dem, er helt op til dig.
> Jeg går i tænkeboks...
Det er heller ikke et helt simpelt projekt du er gået i gang med.
Håber du kunne bruge ovenstående til noget.
--
Mvh
Peter Lind