Permalänk
Inaktiv

(C#)Tips på bra guider om OOP

Hejsan, nu har det gått ett halvår sen jag skapade min senaste tråd om programmering och skulle behöva lite riktilinjer. Jag började programmera för första gången i sommras och nu snart ett år senare har jag börjat behärska språket mer och utvecklas snabbare.

Just nu håller jag på att göra ett 2D hack n slash RPG med 3 polare i XNA och det går framåt. (Video kommer om 2 veckor tänkte jag, då ska det vara klart).
Vi har gjort en egen spelmotor med tiles, allt har animationer, collision, AI etc. Dock känner jag att koden är rätt oplanerad och slarvigt gjord, kanske är det för att vi lärt oss sjukt mycket under projektets gång och bara byggt på hela tiden.

Men men, jag letar efter bra guider på hyfsat avancerad OOP i c#. En bra grund iallafall så att man har något att stå på. Jag planerar att göra ett top down rpg som sommarprojekt med brist på att göra annat, dock känner jag att mina kunskaper brister när det gäller "efficient" kod.
Tänk er scenariot:

Jag kan programmera det, men jag vill göra det smartare och effektivare.

Jag skulle vara sjukt tacksam om ni delade med er av guider etc som kan hjälpa mig bli en bättre programmerare.
Något i stil med detta, där polymorphism etc tas upp: http://www.csharp-station.com/

ps Jag vet att det finns MSDN etc som förklarar exakt allt, jag har dock svårt för att lära mig av dessa sidor och deras exempel.

Går första året på gymnasiet om någon undrar.

Permalänk
Medlem

Om ni nu verkligen har gjort en "spelmotor" så tror jag inte du/ni behöver lära er OOP?
Finns mycket bra böcker där ute som går igenom på vad man bör tänka på när man gör en spelmotor.

Sen tycker jag ni ska fokusera på språket i förstahand och inte ger er in på att göra ett RPG spel.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Så länge du förstår grunden och har hyffsad koll på just OOP så kommer resten med tiden, just polymorphism är något som tar tid att bearbeta sig igenom för att läsa sig att bli bättre på, det enda som hjälper är enbart erfarenheter där finns inte så mycket att läsa på.

Men vill du bli bättre på det, och även lära dig lite som kommer hjälpa dig i framtiden är att läsa på och försöka följa SOLID prinsiperna http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) Det sagt dessa är riktlinjer och bör inte följas till 100% men att försöka följa dom brukar underlätta, specielt när man sitter i projekt med flera personer.

Med hjälp av Solid bör du i alla fall börja få en grund till polymorphism bland annat, men som sagt va följ den där det känns lågiskt, ibland funkar den inte överallt och tyvärr finns det vissa som envisas att det ska följas till 100% när det ibland bara försvårar. Men överlag är det bra att följa den.

Efter du börjat med det så skulle jag rekomendera att du pluggar Design patterns, notera här att använda ett design patern bara för att, är heller inte att rekomendera, men det är bra att känna till dom, hur de funkar och hur du kan implementera dom själv, men att enbart använda sig av dom bara för att är bara dumt. Men att använda sig av dom där de faktist löser dina problem är vad de är gjorda för. Finns tyvärr de som också tror på att man enbart ska använda dessa.... Du har några här http://csharpdesignpatterns.codeplex.com/

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 5090
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck, Rog Ally + de fiesta konsoler.

Permalänk
Medlem

Den bästa videon någonsin om hur man bör skriva kod för att den ska bli enkel att underhålla, o.s.v.: http://www.infoq.com/presentations/Simple-Made-Easy Du kanske inte fattar allt, men du borde kunna lära dig en del ändå. Du kan också kolla på följande video, av samma person, där han tar upp lite fler exempel. Den första är dock bäst. http://www.youtube.com/watch?v=rI8tNMsozo0

Permalänk
Medlem
Skrivet av MugiMugi:

Så länge du förstår grunden och har hyffsad koll på just OOP så kommer resten med tiden, just polymorphism är något som tar tid att bearbeta sig igenom för att läsa sig att bli bättre på, det enda som hjälper är enbart erfarenheter där finns inte så mycket att läsa på.

Det håller jag inte med om. Det finns mycket att läsa som kan hjälpa en. Man kommer inte på alla bra idéer själv. Förutom videorna ovan så finns t.ex. http://shaffner.us/cs/papers/tarpit.pdf som bara är en av många saker man kan läsa.

Skrivet av MugiMugi:

Men vill du bli bättre på det, och även lära dig lite som kommer hjälpa dig i framtiden är att läsa på och försöka följa SOLID prinsiperna http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) Det sagt dessa är riktlinjer och bör inte följas till 100% men att försöka följa dom brukar underlätta, specielt när man sitter i projekt med flera personer.

Med hjälp av Solid bör du i alla fall börja få en grund till polymorphism bland annat, men som sagt va följ den där det känns lågiskt, ibland funkar den inte överallt och tyvärr finns det vissa som envisas att det ska följas till 100% när det ibland bara försvårar. Men överlag är det bra att följa den.

Efter du börjat med det så skulle jag rekomendera att du pluggar Design patterns, notera här att använda ett design patern bara för att, är heller inte att rekomendera, men det är bra att känna till dom, hur de funkar och hur du kan implementera dom själv, men att enbart använda sig av dom bara för att är bara dumt. Men att använda sig av dom där de faktist löser dina problem är vad de är gjorda för. Finns tyvärr de som också tror på att man enbart ska använda dessa.... Du har några här http://csharpdesignpatterns.codeplex.com/

"SOLID"-reglerna verkar rätt vettiga. Men principen med "simplicity" som diskuteras i videorna jag nämnde i inlägget ovan är mer generell och näst intill aldrig fel.

Och för övrigt är http://www.infoq.com/presentations/Value-Values bra också.

Om du bara programmerat knappt ett år så kan du säkert bli mycket bättre på OOP. Men OOP som det ser ut i Java eller C# är inte en jättrebra modell/paradigm för att skriva förvaltningsbara program i.

Permalänk
Inaktiv

Så det finns alltså tekniker som är bra i speciella fall, men generellt så är det bara att rånöta programmering så fastnar det till slut? Kul att veta! Ska kolla in de länkarna ni tipsat om och studera lite, tack så jättemycket för er hjälp.

Permalänk
Inaktiv
Skrivet av NoPaiN^:

Om ni nu verkligen har gjort en "spelmotor" så tror jag inte du/ni behöver lära er OOP?
Finns mycket bra böcker där ute som går igenom på vad man bör tänka på när man gör en spelmotor.

Sen tycker jag ni ska fokusera på språket i förstahand och inte ger er in på att göra ett RPG spel.

Det är en rätt enkel så kallad tile engine där vi kan spawna blocks med collision med ett musklick. Även spawna fiender och andra objekt. Dock inte motorn som är det jag behöver OOP mest till, vill bara bli bättre på det generellt.

Permalänk
Medlem
Skrivet av anon182011:

Så det finns alltså tekniker som är bra i speciella fall, men generellt så är det bara att rånöta programmering så fastnar det till slut? Kul att veta! Ska kolla in de länkarna ni tipsat om och studera lite, tack så jättemycket för er hjälp.

Nej. Det finns tekniker som alltid är bra. Och man tjänar mycket på att läsa böcker, bloggar, o.s.v. Det är inte alls säkert att det fastnar till slut bara för att man nöter.

Permalänk
Inaktiv
Skrivet av tufflax:

Nej. Det finns tekniker som alltid är bra. Och man tjänar mycket på att läsa böcker, bloggar, o.s.v. Det är inte alls säkert att det fastnar till slut bara för att man nöter.

Ja mycket av programmeringen jag kan har jag lärt mig från diverse bloggar, forum och klasskompisar och inte bara läraren. Ska kolla vidare på "Simplicity" som du länkade.

Permalänk
Medlem

Paikz, har du kollat på "Simple Made Easy"? Jag är rätt nyfiken på om du fick ut någonting av det; om du förstod vad han pratade om.

Permalänk
Inaktiv
Skrivet av tufflax:

Paikz, har du kollat på "Simple Made Easy"? Jag är rätt nyfiken på om du fick ut någonting av det; om du förstod vad han pratade om.

Tittade på videon och fick mig en rejäl tänkare, haha. Även om jag inte fattar allt han sa så förstår jag grundtanken.
Vårt spelprojekt är snart klart och när jag tittar på koden så ser jag direkt att programmet om man uttrycker sig på hans sätt inte är "simpelt".

Allt är beroende av varann. Även om vi har gjort klasser som ser organiserade ut så är de beroende och kopplas ihop. Jobbar man vidare på det så blir det så "intertwined" att det blir sjukt svårt att flexibelt ändra i programmet. Just så känner jag nu i och med vårt spel. Jag lärde mig faktiskt riktigt mycket. Inte något konkret utan mest ett tankesätt man tillämpar varje gång man startar något nytt och kodar.

Det är vad jag tolkade det som iallafall.

*Reminder för mig själv*
http://www.codeproject.com/Articles/16838/The-Use-of-Queues-i...

Permalänk
Medlem

Component/entity system är ett sätt att strukturera sin kod på som är ganska vanligt. Kort kan man säga att det går ut på att istället för att du har en klassisk OO objekt-hierarki (Player som ärver av Movable som ärver av PhysicsObject som ärver av Object tex), så delar man upp koden i komponenter som enbart har data (Position kanske har x,y, Health har hp osv) och diverse system som gör saker med komponenterna. Detta är bra eftersom den vanliga objekt-hierarkin lätt blir väldigt tjock och komplicerad och svår att hålla styr på.

Kanske inte världens bästa förklaring, så istället har jag några länkar du kan titta på:
http://t-machine.org/index.php/2007/09/03/entity-systems-are-...
http://entity-systems.wikidot.com/start
http://thelinuxlich.github.io/artemis_CSharp/ (ett lib i c# som bygger på det, även om du vill bygga själv kan det vara intressant att se hur någon annan löst problemet)

Permalänk
Inaktiv
Skrivet av vb:

Component/entity system etc etc

Tack så mycket för tipsen. Ska definitivt kolla in dina länkar! Riktigt roligt nu när man har fått lite länkar så att jag får ideer om hur jag härnäst ska bygga upp mina program effektivare. Blir något att hålla sig sysselsatt med i sommar.

Permalänk
Medlem
Skrivet av anon182011:

Tittade på videon och fick mig en rejäl tänkare, haha. Även om jag inte fattar allt han sa så förstår jag grundtanken.
Vårt spelprojekt är snart klart och när jag tittar på koden så ser jag direkt att programmet om man uttrycker sig på hans sätt inte är "simpelt".

Allt är beroende av varann. Även om vi har gjort klasser som ser organiserade ut så är de beroende och kopplas ihop. Jobbar man vidare på det så blir det så "intertwined" att det blir sjukt svårt att flexibelt ändra i programmet. Just så känner jag nu i och med vårt spel. Jag lärde mig faktiskt riktigt mycket. Inte något konkret utan mest ett tankesätt man tillämpar varje gång man startar något nytt och kodar.

Det är vad jag tolkade det som iallafall.

*Reminder för mig själv*
http://www.codeproject.com/Articles/16838/The-Use-of-Queues-i...

OK! Kul att du lärde dig nått! Du inser kanske också nu att C# är "complext". T.ex. mutable state, syntax, arv, klasser, o.s.v. är allt complext. Btw kolla på "The value of values"också som jag pasteade ovan.