Java, går det att skippa ärvd konstruktor?

Permalänk
Medlem

Java, går det att skippa ärvd konstruktor?

Hej SweClockare,

Går det att tvinga java att ej ta med en konstruktor ifall jag kör extends?

// Konstruktor för class Card. public Card (String suit, int rank) { this.suit = suit; this.rank = rank; } // Konstruktor för class Deck. public Deck (Card card) // Skulle helst inte alls vilja ha denna konstruktor. { super(card.getSuit(card), card.getRank(card)); // Kan annars nöja mig med att ej ha med super container (card, count); }

Dold text

Det är inte hela världen, men skulle underlätta i att skapa en hand som hanterar samtliga kort.

Tack på förhand!

Edit. Har lagt till spoiler klamrar för att slippa wall of text

Permalänk
Inaktiv

Förstår inte din uppbyggnad, är Deck en subklass av Card? Det låter inte så logiskt. Deck borde ha en lista av Cards.

Permalänk
Medlem
Skrivet av anon150287:

Förstår inte din uppbyggnad, är Deck en subklass av Card? Det låter inte så logiskt. Deck borde ha en lista av Cards.

Deck är en subklass av Cards.

Min tanke är att jag vill ha en klass som ska specifikt skapa ett kort, inte en kortlek utan bara ett kort. Sedan vill jag ha en subclass som är deck, som ärver kort. Den ska bara hantera kortlekar, både fördefinierad och egengjord.

När dessa två är skapade kan jag tänka mig skapa olika kortspel eller annat, varav varför jag vill skilja dem. I vissa fall kanske jag bara vill köra krig, dvs dra varsitt random kort och se vilket som är högst/lägst. I andra fall vill jag skapa black jack.

Permalänk
Medlem
Skrivet av Razki:

Deck är en subklass av Cards.

Min tanke är att jag vill ha en klass som ska specifikt skapa ett kort, inte en kortlek utan bara ett kort. Sedan vill jag ha en subclass som är deck, som ärver kort. Den ska bara hantera kortlekar, både fördefinierad och egengjord.

När dessa två är skapade kan jag tänka mig skapa olika kortspel eller annat, varav varför jag vill skilja dem. I vissa fall kanske jag bara vill köra krig, dvs dra varsitt random kort och se vilket som är högst/lägst. I andra fall vill jag skapa black jack.

Du förklarar inte varför du vill att Deck ska ärva av Card bara att du vill att det ska vara så.
Jag förstår varför du vill skilja Deck och Card, det är högst logiskt, men i ditt fall har du inte gjort det då du ärver av Kort-klassen.

Om du bara vill skapa ett kort, ha en statisk metod på Deck-klassen för att skapa kortet, eller tillämpa den logiken i ett Strategy-mönster för varje speltyp, ha en separat logikklass för spelet eller kör med Factory-mönstret för att skapa kort. Kort-klassen i sig bör lämpligtvis inte vara den som skapar kortet, till det räknas alla subklasser av Kort.
Personligen kan jag inte se poängen med att skapa ett kort rakt upp och ner men jag kanske misstolkar hur du kommer använda metoden senare.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Du förklarar inte varför du vill att Deck ska ärva av Card bara att du vill att det ska vara så.
Jag förstår varför du vill skilja Deck och Card, det är högst logiskt, men i ditt fall har du inte gjort det då du ärver av Kort-klassen.

Om du bara vill skapa ett kort, ha en statisk metod på Deck-klassen för att skapa kortet, eller tillämpa den logiken i ett Strategy-mönster för varje speltyp, ha en separat logikklass för spelet eller kör med Factory-mönstret för att skapa kort. Kort-klassen i sig bör lämpligtvis inte vara den som skapar kortet, till det räknas alla subklasser av Kort.
Personligen kan jag inte se poängen med att skapa ett kort rakt upp och ner men jag kanske misstolkar hur du kommer använda metoden senare.

Jag har inte börjat definera Deck ännu, då jag ville se ifall jag kunde slippa använda mig av ärvd konstruktor mest för att den stör min planering.

Till och börja med kan jag säga att jag är en "Hobby" programmerare. Jag har varken skolats eller jobbat med det, även om det är vad jag vill i framtiden. Så jag saknar lärdom i struktur, tänk och även företags programmering. Däremot är det något jag tänker ändra på genom att ta en utbildning som kan komplettera mitt försummande av struktur.
När jag tar mig an en utmaning finns det två alternativ, antingen löser jag en uppgifter eller så gör jag det inte. Vilket verktyg jag använder för att lösa är strunt samma.

Jag satte upp ett mål för mig själv att skapa ett virtuellt kort. Senare är tanken att jag ska kunna samla dessa virtuella kort och skapa en kortlek. En kortlek kan te sig på olika sätt, och därför vill jag att den som använder kortleken ska ha friheten att antingen kunna ha en standard kortlek eller en egengjord (bara 10or, 1-10, knäckt-Kung, Ess 1;11 Etc). I ett senare skedde kan jag tänka mig göra spel kortspel, black jack, poker, hold'em osv.

Här är koden för mitt kort. Jag kommer förmodligen addera flera metoder, men just nu räcker det med det jag har skapat.

import java.util.*; public class Card { private Random rnd = new Random(); private String suit; private int rank; ////////////////////////////////////////// // // Add a new Card Object. You may add and change values. // ////////////////////////////////////////// public Card (String suit, int rank) { this.suit = suit; this.rank = rank; } public String getSuit(Card card) { return card.suit; } public void setSuit(Card card, String suit) { card.suit = suit; } public int getRank(Card card) { return card.rank; } /** * setRank(Card card, int rank) */ public void setRank(Card card, int rank) { card.rank = rank; } /** * * Preferable values for max and min is 14 and 0 which will give a range of 1-14 [Ace = 1 or 14] * * @return Card (String suit, int rank), suit is random from a list with 4 values Heart, Diamond, Club and Spade. Rank is ( rnd.nextInt (max)+min) * @param min returns error if min is < 0 * @param max the max value the card can be. * */ public Card randomCard(int max, int min) { // Create a list of suits String [] list = {"Heart", "Diamond", "Club", "Spade"}; // Return a random suit and a random number return new Card( list[rnd.nextInt(4)] , (rnd.nextInt(max)+1+min) ); } }

Dold text

En kortlek behöver kort och därför önskar jag att Deck ärver kort, då den behöver använda dessa funktioner. Jag kan tänka mig att istället för ärva skapa separata kort objekt ( Card king = new Card("Club", 13); ), men jag vill helst lära mig mer hur arv fungerar och integreras i kod.

Exempel,
Card -> Deck -> Black Jack
Card -> War
Deck -> Något annat.

Jag har bara skrivit ut vilka metoder som jag önskar ha i Deck classen men så här ser början ut.

import java.util.LinkedHashMap; import java.util.Map; public class Deck extends Card { private Map<Card, Integer> deck = new LinkedHashMap<Card, Integer>(); private int count = 0; ////////////////////////////////////////// // // Add cards to a Deck // ////////////////////////////////////////// public Deck(Card card) { super(card.getSuit(card), card.getRank(card)); container (card, count); } public void customDeck() { } public void container (Card card, int count) { deck.put(card, count); count++; } public void resetDeck () { } ////////////////////////////////////////// // // Deck Functions // ////////////////////////////////////////// public Map<Card, Integer> getDeck() { return deck; } public void setDeck(Map<Card, Integer> deck) { this.deck = deck; } public void suitInDeck () { } public void rankInDeck () { } public void sizeOfDeck() { } public void sortDeck () { } }

Dold text

Jag har döpt metoden till container, men tanken var att container egentligen skulle vara handen, och att för varje kort som adderas till container så ökas antalet. Min tanke var att använda getters/setters för att ta ut objekt ur container. Helst skulle jag inte vilja att det skapades en konstruktor, då jag vill använda annan metod för att samla min kortlek, men om jag inte får bort konstruktorn får jag jobba med det och se vad det kan erbjuda.

För att komma tillbaka till ämnet, kan jag använda extends utan att behöva ärva Card konstruktor eller måste jag köra utan extends i klassen Deck för att kunna få min vilja fylld?

Tack för att ni tar er tid och assistans. Uppskattas mycket då jag annars sitter i mina egna tankebanor. Jag vill även tillägga att min kod kanske får era ögon att blöda, men det är strunt samma. Jag älskar att utveckla och innan jag lär mig korrekt tänker jag lösa mina utmaningar innanför och utanför boxen.

Edit. Har lagt till spoiler klamrar för att slippa wall of text

Permalänk
Skrivet av Razki:

Jag har inte börjat definera Deck ännu, då jag ville se ifall jag kunde slippa använda mig av ärvd konstruktor mest för att den stör min planering.

Till och börja med kan jag säga att jag är en "Hobby" programmerare. Jag har varken skolats eller jobbat med det, även om det är vad jag vill i framtiden. Så jag saknar lärdom i struktur, tänk och även företags programmering. Däremot är det något jag tänker ändra på genom att ta en utbildning som kan komplettera mitt försummande av struktur.
När jag tar mig an en utmaning finns det två alternativ, antingen löser jag en uppgifter eller så gör jag det inte. Vilket verktyg jag använder för att lösa är strunt samma.

Jag satte upp ett mål för mig själv att skapa ett virtuellt kort. Senare är tanken att jag ska kunna samla dessa virtuella kort och skapa en kortlek. En kortlek kan te sig på olika sätt, och därför vill jag att den som använder kortleken ska ha friheten att antingen kunna ha en standard kortlek eller en egengjord (bara 10or, 1-10, knäckt-Kung, Ess 1;11 Etc). I ett senare skedde kan jag tänka mig göra spel kortspel, black jack, poker, hold'em osv.

Här är koden för mitt kort. Jag kommer förmodligen addera flera metoder, men just nu räcker det med det jag har skapat.

import java.util.*; public class Card { private Random rnd = new Random(); private String suit; private int rank; ////////////////////////////////////////// // // Add a new Card Object. You may add and change values. // ////////////////////////////////////////// public Card (String suit, int rank) { this.suit = suit; this.rank = rank; } public String getSuit(Card card) { return card.suit; } public void setSuit(Card card, String suit) { card.suit = suit; } public int getRank(Card card) { return card.rank; } /** * setRank(Card card, int rank) */ public void setRank(Card card, int rank) { card.rank = rank; } /** * * Preferable values for max and min is 14 and 0 which will give a range of 1-14 [Ace = 1 or 14] * * @return Card (String suit, int rank), suit is random from a list with 4 values Heart, Diamond, Club and Spade. Rank is ( rnd.nextInt (max)+min) * @param min returns error if min is < 0 * @param max the max value the card can be. * */ public Card randomCard(int max, int min) { // Create a list of suits String [] list = {"Heart", "Diamond", "Club", "Spade"}; // Return a random suit and a random number return new Card( list[rnd.nextInt(4)] , (rnd.nextInt(max)+1+min) ); } }

En kortlek behöver kort och därför önskar jag att Deck ärver kort, då den behöver använda dessa funktioner. Jag kan tänka mig att istället för ärva skapa separata kort objekt ( Card king = new Card("Club", 13); ), men jag vill helst lära mig mer hur arv fungerar och integreras i kod.

Exempel,
Card -> Deck -> Black Jack
Card -> War
Deck -> Något annat.

Jag har bara skrivit ut vilka metoder som jag önskar ha i Deck classen men så här ser början ut.

import java.util.LinkedHashMap; import java.util.Map; public class Deck extends Card { private Map<Card, Integer> deck = new LinkedHashMap<Card, Integer>(); private int count = 0; ////////////////////////////////////////// // // Add cards to a Deck // ////////////////////////////////////////// public Deck(Card card) { super(card.getSuit(card), card.getRank(card)); container (card, count); } public void customDeck() { } public void container (Card card, int count) { deck.put(card, count); count++; } public void resetDeck () { } ////////////////////////////////////////// // // Deck Functions // ////////////////////////////////////////// public Map<Card, Integer> getDeck() { return deck; } public void setDeck(Map<Card, Integer> deck) { this.deck = deck; } public void suitInDeck () { } public void rankInDeck () { } public void sizeOfDeck() { } public void sortDeck () { } }

Jag har döpt metoden till container, men tanken var att container egentligen skulle vara handen, och att för varje kort som adderas till container så ökas antalet. Min tanke var att använda getters/setters för att ta ut objekt ur container. Helst skulle jag inte vilja att det skapades en konstruktor, då jag vill använda annan metod för att samla min kortlek, men om jag inte får bort konstruktorn får jag jobba med det och se vad det kan erbjuda.

För att komma tillbaka till ämnet, kan jag använda extends utan att behöva ärva Card konstruktor eller måste jag köra utan extends i klassen Deck för att kunna få min vilja fylld?

Tack för att ni tar er tid och assistans. Uppskattas mycket då jag annars sitter i mina egna tankebanor. Jag vill även tillägga att min kod kanske får era ögon att blöda, men det är strunt samma. Jag älskar att utveckla och innan jag lär mig korrekt tänker jag lösa mina utmaningar innanför och utanför boxen.

Du tänker fel vad ärvande klasser är, om man skulle se det från ett verklighetsperspektiv så om du har en klass bil kan du ha en ärvande klass Ford som specificerar speciella egenskaper för just bilmärket Ford, under där kanske du har en ärvande struktur med modeller av Ford-bilar. Det viktiga att tänka på är att när du ärver något säger du att det är ett sådant objekt. Då beskriver man i bil grundläggande egenskaper för en bil, i nästa steg Ford beskriver du egenskaper för bilar av typen Ford och under det för modeller av typen ford... Då kanman också specialicera de metoder man har så att de behandlar de specialfall som uppkommer.

Ser man då till det du byggt nu så säger du att en kortlek är ett spelkort och Black Jack är en kortlek. Det du var ute efter var väl att Black Jack använder en specifik kortlek (som då mycket väl kan ärva av kortlek, och heta t.ex. Black Jack-kortlek) och att denna kortlek ska bestå av spelkort.

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Permalänk
Medlem
Skrivet av gaminggirl:

Du tänker fel vad ärvande klasser är, om man skulle se det från ett verklighetsperspektiv så om du har en klass bil kan du ha en ärvande klass Ford som specificerar speciella egenskaper för just bilmärket Ford, under där kanske du har en ärvande struktur med modeller av Ford-bilar. Det viktiga att tänka på är att när du ärver något säger du att det är ett sådant objekt. Då beskriver man i bil grundläggande egenskaper för en bil, i nästa steg Ford beskriver du egenskaper för bilar av typen Ford och under det för modeller av typen ford... Då kanman också specialicera de metoder man har så att de behandlar de specialfall som uppkommer.

Ser man då till det du byggt nu så säger du att en kortlek är ett spelkort och Black Jack är en kortlek. Det du var ute efter var väl att Black Jack använder en specifik kortlek (som då mycket väl kan ärva av kortlek, och heta t.ex. Black Jack-kortlek) och att denna kortlek ska bestå av spelkort.

Rätta mig ifall jag har missuppfattat, men du rekommenderar mig att istället för att separerar kort & kortlek, så kombinerar jag dem. Där kortlek blir själva konstruktion och är uppbyggd av kort som metod?

I sin tur kan jag sedan göra en subclass av kortlek som heter black jack, som ärver en kortlek, men som även har möjligheten till att skapa enstaka kort?

Tack på förhand!

Permalänk
Medlem
Skrivet av Razki:

För att komma tillbaka till ämnet, kan jag använda extends utan att behöva ärva Card konstruktor eller måste jag köra utan extends i klassen Deck för att kunna få min vilja fylld?

Det var ett tag sen jag kodade Java... men jag tror att det går att lösa.
Kalla på super() i Decks konstruktor, alltså utan några argument så kommer den implicita defaultkonstruktorn i Card att kallas. Om det inte fungerar får du deklarera en explicit defaultkonstruktor (en konstruktor utan några argument) i klassen Card och testa igen.

Jag vill ytterligare poängtera att detta är helt fel, rent objektivt.

Vi tar några liknelser som är i samma anda

public class Animal { } public class Zoo extends Animal { } public class AlcoholBottle { ] public class AlcoholStore extends AlcoholBottle { } public class Pizza { } public class Pizzeria extends Pizza { }

Varför detta är fel
Exempelvis AlcoholBottle har egenskaperna "Tillverkare", "Alkoholvolymprocent", "Smak", etc...
När AlcoholStore ärver från AlcoholBottle så kommer dessa egenskaper också att ärvas. Det är inte rimligt att en alkoholbutik har egenskapen "smak". Dessutom så kan man säga att en subklass är en "typ" av superklassen. En alkoholbutik är inte en typ av en alkoholflaska. Det är två separata saker som inte bör ha något arv mellan sig.

Vidare så vill jag lägga till att kortspelet Krig kräver en kortlek. Precis som det gör i "verkligheten". Att bara skapa ett kort helt random(?) är inte jämförbart med hur spelet ser ut om en kortlek används.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Det var ett tag sen jag kodade Java... men jag tror att det går att lösa.
Kalla på super() i Decks konstruktor, alltså utan några argument så kommer den implicita defaultkonstruktorn i Card att kallas. Om det inte fungerar får du deklarera en explicit defaultkonstruktor (en konstruktor utan några argument) i klassen Card och testa igen.

Jag vill ytterligare poängtera att detta är helt fel, rent objektivt.

Vi tar några liknelser som är i samma anda

public class Animal { } public class Zoo extends Animal { } public class AlcoholBottle { ] public class AlcoholStore extends AlcoholBottle { } public class Pizza { } public class Pizzeria extends Pizza { }

Varför detta är fel
Exempelvis AlcoholBottle har egenskaperna "Tillverkare", "Alkoholvolymprocent", "Smak", etc...
När AlcoholStore ärver från AlcoholBottle så kommer dessa egenskaper också att ärvas. Det är inte rimligt att en alkoholbutik har egenskapen "smak". Dessutom så kan man säga att en subklass är en "typ" av superklassen. En alkoholbutik är inte en typ av en alkoholflaska. Det är två separata saker som inte bör ha något arv mellan sig.

Vidare så vill jag lägga till att kortspelet Krig kräver en kortlek. Precis som det gör i "verkligheten". Att bara skapa ett kort helt random(?) är inte jämförbart med hur spelet ser ut om en kortlek används.

Du har rätt i att krig är från en kortlek, men min tanke var att eventuellt kan jag någon gång få användning av ett helt slumpmässigt kort. Behöver kanske inte följa vår standard (Ess(L)-Ess(H), Hjärter, Ruter, Spader och Klöver) utan kan vara en helt påhittad kort som följer en helt unik struktur (Menig(L)-General(H), Offensiv, Defensiv, Hybrid).

Dessa klasser jag skapar är något jag samlar i mitt egna bibliotek för att eventuellt kunna återanvända senare

Skulle det vara mer rekommenderat att istället för att använda "(Card card)", köra på "(Object obj/card)" för att kunna tänka utanför boxen och återanvända kort men i ett helt annat syfte, ungefär som mitt exempel med Menig och General?

Edit. Heter Menig & General

Permalänk
Medlem
Skrivet av Razki:

Du har rätt i att krig är från en kortlek, men min tanke var att eventuellt kan jag någon gång få användning av ett helt slumpmässigt kort. Behöver kanske inte följa vår standard (Ess(L)-Ess(H), Hjärter, Ruter, Spader och Klöver) utan kan vara en helt påhittad kort som följer en helt unik struktur (Mening(L)-General(H), Offensiv, Defensiv, Hybrid).

Dessa klasser jag skapar är något jag samlar i mitt egna bibliotek för att eventuellt kunna återanvända senare

Skulle det vara mer rekommenderat att istället för att använda "(Card card)", köra på "(Object obj/card)" för att kunna tänka utanför boxen och återanvända kort men i ett helt annat syfte, ungefär som mitt exempel med Mening och General?

Abstraktion är bra men för mycket abstraktion resulterar i Object. Object är en näst intill värdelös typ just för att den är så abstrakt.

En alldeles för abstrakt modellering av spelkort leder till att ett pokerkort är ett Card och ett UNO-kort är ett Card och en List<Card> kan innehålla både pokerkort och UNO-kort. Finns det någon poäng med att kunna blanda dessa två spelkort, och hur ska du arbeta med en lista av dem. Har de några värden som faktiskt är jämförbara?

När du låter Deck ärva Card så säger du att Deck ÄR ett spelkort, vilket borde trigga varningsklockor. Alla intressanta metoder som Card kan tänkas ha, t ex getSuite() och getValue() kommer även att finnas på Deck. Kan Deck returnera ett vettigt värde för dessa metoder; har Deck en färg/valör?

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Razki:

Du har rätt i att krig är från en kortlek, men min tanke var att eventuellt kan jag någon gång få användning av ett helt slumpmässigt kort. Behöver kanske inte följa vår standard (Ess(L)-Ess(H), Hjärter, Ruter, Spader och Klöver) utan kan vara en helt påhittad kort som följer en helt unik struktur (Menig(L)-General(H), Offensiv, Defensiv, Hybrid).

Dessa klasser jag skapar är något jag samlar i mitt egna bibliotek för att eventuellt kunna återanvända senare

Skulle det vara mer rekommenderat att istället för att använda "(Card card)", köra på "(Object obj/card)" för att kunna tänka utanför boxen och återanvända kort men i ett helt annat syfte, ungefär som mitt exempel med Menig och General?

Edit. Heter Menig & General

Det är bra att du tänker så pass abstrakt och det är nice med en samling av hjälpklasser i bibliotek.

Jag antar att du vill ha stöd för att hantera olika kort? Typ UNO, och alla andra typer av kort som inte är traditionella kort från en traditionell kortlek.
Risken finns ju att egenskaperna och funktionaliteten kring alla korttyper inte har något gemensamt och inte går att applicera på samma sätt som traditionella kort. Då kan det bli jobbigare att lösa problemet än om man hade det separerat.

Ett sätt att angripa det är att göra basklasser.

Card och Deck bör inte vara styrda åt att användas som traditionella kort. Card bör vara en väldigt sparsam klass. Deck kan ha lite fler metoder som går att utföra på alla former av kortlekar. Blanda, Ta första kortet, snegla på kort med index x, osv osv.

Därefter kan du ärva till andra klasser, exempelvis:
UnoDeck extends Deck
UnoCard extends Card

TraditionalDeck extends Deck
TraditionalCard extends Card

Ett annat alternativ är att du arbetar mer med interface istället för arv. Då kan du göra alla klasser helt oberoende av varandra med arv och istället kolla om objektet ärver av ett specifikt interface. Exempelvis IDeckShuffleable som avgör om kortleken går att blanda, respektive implementation av detta interface bestämmer hur blandningen går till. Självklart kan du lagra olika former av blandningsmetoder i någon DeckHelper-klass eller använda statiska metoder.

Om du vill göra det tillräckligt abstrakt och inte råka ut för att du måste göra om (så många gånger) så rekommenderar jag att du letar upp vilka strukturer du vill kunna hantera. Det är först då du ser begränsningarna eller fördelarna med att göra på olika sätt.

Att låta basklassen Card hantera ALLA olika korttyper är inte så lämpligt skulle jag säga. Det finns många olika korttyper i andra spel än traditionella och inte bara att klassen blir stor, det blir även drygt att underhålla och att få en översikt vad som händer/hur den fungerar.

I princip så rekommenderar jag att det är kortlekarna som är "factories". Korten skapas, tas bort, blandas och generellt hanteras i kortleksklasserna. På så sätt så behöver du inte tänka så mycket på hur konstruktorerna ser ut då kortlekarna sätter egenskaperna, istället för konstruktorn till respektive kort-klass.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Razki, du bör aldrig implementera saker för att "du kan ha användning av dem i framtiden". Gör implementationen så att den bara är så komplex att den klarar att hantera du vill att den ska hantera idag. Om du väl i framtiden vill använda det till något annat, får du göra de modifikationerna då.

Genom att reducera komplexiteten gör du det lättare för dig själv, och minskar risken för att saker inte fungerar som de borde (buggar, dålig prestanda etc.). Dessutom är det troligare att du vet bättre om det stöd du vill ha i framtiden när du faktiskt ska använda detta, i framtiden, och då bättre kan implementera detta stöd.

Visa signatur

Redbox: Asrock B650 Lightning ATX, 7800x3D -20CCO, XFX 6950XT, 2x32GB Corsair Vengence 6400 CL32, WD SN770 2TB, Corsair RMe 1000, Lian Li Lancool 216, Peerless Assassin 120 SE
Purpbox: Z87-Pro, I5 4670K@4.2, Sapphire 290 TRI-X, 2x8GB Crucial Tactical@stock, Deep Silence 1
Samsung Evo 250+500GB + QVO 1TB, 2x1TB 7200RPM backup/lagring
Det var bättre förr: E5300 2600MHz -> 3640MHz, Celeron 300A -> 450MHz

Permalänk
Medlem
Skrivet av e1m1:

Razki, du bör aldrig implementera saker för att "du kan ha användning av dem i framtiden". Gör implementationen så att den bara är så komplex att den klarar att hantera du vill att den ska hantera idag. Om du väl i framtiden vill använda det till något annat, får du göra de modifikationerna då.

Genom att reducera komplexiteten gör du det lättare för dig själv, och minskar risken för att saker inte fungerar som de borde (buggar, dålig prestanda etc.). Dessutom är det troligare att du vet bättre om det stöd du vill ha i framtiden när du faktiskt ska använda detta, i framtiden, och då bättre kan implementera detta stöd.

Tack för tipset, ibland kan idéerna eskalera ganska snabbt och så sitter man där med ett alldeles för stort projekt som man har alldeles för lite koll på Ibland vill man bara ta sig an världen i ett enda svep, men jag måste lära mig att börja smått för att sedan växa

Permalänk
Skrivet av Razki:

Rätta mig ifall jag har missuppfattat, men du rekommenderar mig att istället för att separerar kort & kortlek, så kombinerar jag dem. Där kortlek blir själva konstruktion och är uppbyggd av kort som metod?

I sin tur kan jag sedan göra en subclass av kortlek som heter black jack, som ärver en kortlek, men som även har möjligheten till att skapa enstaka kort?

Tack på förhand!

Jag förstår inte riktigt hur du menar så jag försöker förklara lite bättre vad jag menar. Jag menar att du ska ha en klass som heter Card, denna tar hand om allt som gäller ett kort (det har en färg, och en valör t.ex). Sedan har du en klass Deck som har en samling kort (t.ex. en lista) och som då kan göra saker som blanda, dra kort osv. Sedan kan du t.ex. ha en underklass BlackJackDeck som då ärver alla de egenskaper Deck har, dvs. den kommer kunna saker som att blanda och sådär, men du kan ändra det om du vill det ska vara annorlunda för just den här leken.

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)