Permalänk
Medlem

C# Knas eller begränsning?

Nu är jag lite osäker om detta är en begränsning.

Målet är att skicka flera variablar till en metod från main på ett knasigt sätt.

Nu är denna metoden statisk (dvs du kan inte ankalla variabler ifrån den), och på så sätt går det inte länka variabler från metoden.

Sedan ska jag inte använda Ref eller Out och kan därför inte ankalla variabler beroende på namn.

Är detta en begränsning i språket dvs omöjligt eller finns det något sätt alls att gå förbi detta?

Permalänk
Medlem

Alltså, vad menar du egentligen?

Vill du alltså komma åt variabler i helt olika scope?

Permalänk
Medlem
Skrivet av Helllodar:

Nu är denna metoden statisk (dvs du kan inte ankalla variabler ifrån den), och på så sätt går det inte länka variabler från metoden.

Jodå det går utmärkt om variablerna är deklarerade utanför main blocket eller i main blocket.
Variabler deklarerade inuti andra block kommer du inte åt direkt. Vad det så du menade?

Permalänk
Medlem

Förstår inte vad du menar.

Däremot kan jag passa på att varna dig för static metoder. De har sina användingsområden men... oftast när jag sett statiska metoder är det någon klant som inte har haft koll på vad de gjort och varför och en förklaring jag hört som jag knappt kunde sluta skratta åt till dennes förtret var orsaken att "det är ju jobbigt att skapa upp klasser" hehehehehe.

Så, vad vill du göra och varför? Vill du tex konvertera ett eller flera objekt a till ett objekt b, isf har jag full förståelse för en statisk extension method.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem
Skrivet av ozo64:

Jodå det går utmärkt om variablerna är deklarerade utanför main blocket eller i main blocket.
Variabler deklarerade inuti andra block kommer du inte åt direkt. Vad det så du menade?

Jupp, dom är deklarerade i olika block, antar det här är en begränsning i språket.

Skrivet av IceDread:

Förstår inte vad du menar.

Däremot kan jag passa på att varna dig för static metoder. De har sina användingsområden men... oftast när jag sett statiska metoder är det någon klant som inte har haft koll på vad de gjort och varför och en förklaring jag hört som jag knappt kunde sluta skratta åt till dennes förtret var orsaken att "det är ju jobbigt att skapa upp klasser" hehehehehe.

Så, vad vill du göra och varför? Vill du tex konvertera ett eller flera objekt a till ett objekt b, isf har jag full förståelse för en statisk extension method.

Mål är simpelhet och effektivitet så mycket som möjligt, men jag gissar på att jag slog till en begränsning eller bottleneck då blocken inte kan ändra infon på varandra.

Permalänk
Medlem

Det är jätteskönt att inte komma åt variabler utanför scope. Hade blivit drygt med stora program om saker som i, n, j redan var upptagna i andra metoder. Nej tack!

Permalänk
Medlem

Det är en begränsning för att man inte ska råka ändra i variabler av misstag.

Permalänk
Medlem
Skrivet av Helllodar:

Jupp, dom är deklarerade i olika block, antar det här är en begränsning i språket.

Mål är simpelhet och effektivitet så mycket som möjligt, men jag gissar på att jag slog till en begränsning eller bottleneck då blocken inte kan ändra infon på varandra.

Aha, du har alltså flera st statiska metoder och du vill komma åt variabler som existerar i de andra statiska metoderna?
Det går inte, en parameter skapad i en metod existerar endast däri. Du lär antingen då flytta ur variablerna ur metoderna till klassen, eller skicka dem vidare till de andra metoderna.

Om du lägger upp kod här så kan säker jag eller annan senare ta en titt och ge lösningsförslag om du inte grejar det.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem
Skrivet av IceDread:

Aha, du har alltså flera st statiska metoder och du vill komma åt variabler som existerar i de andra statiska metoderna?
Det går inte, en parameter skapad i en metod existerar endast däri. Du lär antingen då flytta ur variablerna ur metoderna till klassen, eller skicka dem vidare till de andra metoderna.

Om du lägger upp kod här så kan säker jag eller annan senare ta en titt och ge lösningsförslag om du inte grejar det.

Skulle undvika ref/out, så kan inte skicka ut variablerna heller, men nu vet jag att det är en begränsning iaf så jag slipper pröva massor av olika spagetti koder för att försöka komma förbi det.

Permalänk
Medlem

Kan du inte lägga ut lite av din kod. Ganska svårt att förstå vad du menar? Räcker inte return?

Permalänk
Medlem
Skrivet av l4nky:

Kan du inte lägga ut lite av din kod. Ganska svårt att förstå vad du menar? Räcker inte return?

Kan lägga ut den senare, har inte tillgång just nu.

Problemet med return är att variabeln måste ha ett värde sedan början och värdet förändras aldrig egentligen.

Istället så varje gång man går in i metoden så körs koden om och om igen och skickas tillbaka, den ändras aldrig från utsidan.

Iförsig så går det skapa en struktur i metoden och returnera flera gånger från varje path, men det känns meninglöst då metoden blir själva huvudstället då, lol.

Permalänk
Datavetare
Skrivet av IceDread:

Förstår inte vad du menar.

Däremot kan jag passa på att varna dig för static metoder. De har sina användingsområden men... oftast när jag sett statiska metoder är det någon klant som inte har haft koll på vad de gjort och varför och en förklaring jag hört som jag knappt kunde sluta skratta åt till dennes förtret var orsaken att "det är ju jobbigt att skapa upp klasser" hehehehehe.

Så, vad vill du göra och varför? Vill du tex konvertera ett eller flera objekt a till ett objekt b, isf har jag full förståelse för en statisk extension method.

Säg det till Rich Hickey, har var ursprungligen en C# utvecklare och jobbade på en lång rad gigantiska projekt, bl.a. åt US-gov. För att på något rimligt sätt kunna hantera de mängder kod och den komplexitet de hade skrev de det mesta just som statiska metoder för att undvika alla problem som funktioner med associerat implicit tillstånd (i.e. "this") för med sig. Andra verkar hålla med denna ståndpunkt.

Det fungerade men han insåg att det var väldigt mycket fight-the-system, något som resulterade i språket Clojure (som initialt designades för CLR för att fungera ihop med existerade C#-kod men senare flyttades till JVM då dagens JVM har betydligt bättre prestanda än MS CLR). När väl folk lärt sig bättre kommer OOP gå till historien som datorvärldens största aprilskämt, det är så fel på så många sätt i dagens multicore värld

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Säg det till Rich Hickey, har var ursprungligen en C# utvecklare och jobbade på en lång rad gigantiska projekt, bl.a. åt US-gov. För att på något rimligt sätt kunna hantera de mängder kod och den komplexitet de hade skrev de det mesta just som statiska metoder för att undvika alla problem som funktioner med associerat implicit tillstånd (i.e. "this") för med sig. Andra verkar hålla med denna ståndpunkt.

Det fungerade men han insåg att det var väldigt mycket fight-the-system, något som resulterade i språket Clojure (som initialt designades för CLR för att fungera ihop med existerade C#-kod men senare flyttades till JVM då dagens JVM har betydligt bättre prestanda än MS CLR).

Dold text

När väl folk lärt sig bättre kommer OOP gå till historien som datorvärldens största aprilskämt, det är så fel på så många sätt i dagens multicore värld

Nu blir detta lite offtopic, men ditt uttalande fick min uppmärksamhet.

Vi förbiser personliga åsikter, vilket sätt skulle du säga är det framtida sättet att arbeta? Vad specifikt med OOP kritiserar du(vilka delar)? Tycker detta är väldigt intressant, och jag har gärna ett öppet sinne till att ändra åsikter och anpassa mig.

Permalänk
Medlem

Svårt att förstå vad du menar när du inte visar kod eller använder korrekta termer för att beskriva problemet du anser dig ha.

Kan du inte bara skapa en klass för den data du vill skicka till metoden och på samma sätt returnera en instans av en klass som beskriver din data ?

Till exempel:

public class Data { public int Start { get; set; } public string Namn { get; set; } // Whatever you need here } public Data ProcessData(Data data) { // Work on data return data; } public static void Main(string args[]) { Data data = new Data {Start = 1337, Namn = "l33t"}; data = ProcessData(data); }

Det är en av grejerna med objektorientering, du skapar klasser (modeller) som passar det du försöker lösa.

Permalänk
Medlem
Skrivet av Yoshman:

Säg det till Rich Hickey, har var ursprungligen en C# utvecklare och jobbade på en lång rad gigantiska projekt, bl.a. åt US-gov. För att på något rimligt sätt kunna hantera de mängder kod och den komplexitet de hade skrev de det mesta just som statiska metoder för att undvika alla problem som funktioner med associerat implicit tillstånd (i.e. "this") för med sig. Andra verkar hålla med denna ståndpunkt.

Det fungerade men han insåg att det var väldigt mycket fight-the-system, något som resulterade i språket Clojure (som initialt designades för CLR för att fungera ihop med existerade C#-kod men senare flyttades till JVM då dagens JVM har betydligt bättre prestanda än MS CLR). När väl folk lärt sig bättre kommer OOP gå till historien som datorvärldens största aprilskämt, det är så fel på så många sätt i dagens multicore värld

Aw finns det en käns person som gillar static och inte förstår sig på OOP, SOLID.

Uppenbarligen känner du inte till nackdelarna... publica statiska variabler varför det är dåligt och vad det kan få efekter när andra projekt nyttjar dem. Vad låg koppling och hög integrited ger för födel. Att static omöjliggör interface. Att misslyckas med att förstå SOLID.

Men det är bra.. du vet en person som gillar static så gå med det du.

Edit: Hur testar du en statisk metod om du inte köper in ett dyrt extraverktyg?

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Datavetare
Skrivet av Razki:

Nu blir detta lite offtopic, men ditt uttalande fick min uppmärksamhet.

Vi förbiser personliga åsikter, vilket sätt skulle du säga är det framtida sättet att arbeta? Vad specifikt med OOP kritiserar du(vilka delar)? Tycker detta är väldigt intressant, och jag har gärna ett öppet sinne till att ändra åsikter och anpassa mig.

Det är OT så tar det någorlunda kort/översiktligt...

En av de fundamentala grundpelarna för OOP är inkapsling, både av exakt beteende och av representation av data. Det senare är totalt inkompatibelt med god design för något som ska köras på multicore-system då det är absolut kritiskt att totalt förstå hur data representeras och under vilka omständigheter data kan läsas eller skrivas (utan den kunskapen är det svårt att göra saker korrekt och omöjligt att göra det effektivt). Här måste data definieras separat från algoritmer som jobbar på data. Detta är INTE samma sak som att all data är "immutable" och allt är rent funktionellt, det är en trevlig teori men det presterar öken i praktiken.

Finns fall som kanske är närmare mångas vardag, "objektorienterade språk" (typiskt C# och Java) är väldigt vanliga till att implementera affärslogik ovanpå någon form av RDBMS och körs ofta i något ramverk som presenterar ett gränssnitt mot Internet. OOP är ett sätt att modellera världen i form av "objekt" och förändra dessa objekts tillstånd via väldefinierade interface (uppsättning metoder). Men vilket tillstånd finns i typisk affärslogik? Typiskt väldigt lite, utan i stället handlar det om att skriva koden som på något sätt utför en transform på ett dataset för att det ska presenteras.

En av designvalen i OOP är att fokusera på tillstånd och sätt att förändra tillstånd, OOP är väldigt dålig på att hantera design av algoritmer, d.v.s. transformation av data. En algoritm har inget associerat tillstånd och kan därför inte modelleras som en klass på något rimligt sätt. Då affärslogik typiskt är algoritmer, varför då använda OOP?

Det FINNS ställen där OOP är väldigt användbart, många former av simulering passar OOP väldigt väl (så typiskt bra för spel). OOP fungerar också riktigt bra för GUI-ramverk, knappar, textboxar etc är ju typexempel på "objekt" med associerat tillstånd som rimligen har väldefinierade sätt att ändra det tillståndet.

Skrivet av IceDread:

Aw finns det en käns person som gillar static och inte förstår sig på OOP, SOLID.

Uppenbarligen känner du inte till nackdelarna... publica statiska variabler varför det är dåligt och vad det kan få efekter när andra projekt nyttjar dem. Vad låg koppling och hög integrited ger för födel. Att static omöjliggör interface. Att misslyckas med att förstå SOLID.

Men det är bra.. du vet en person som gillar static så gå med det du.

Edit: Hur testar du en statisk metod om du inte köper in ett dyrt extraverktyg?

Rich är långt ifrån den enda som ser problem med OOP.

Det sista du skrev är ju mer ett problem i specifika språk/ramverk än ett verklig problem. Det går alldeles utmärkt att testa saker i språk som C, Go, Clojure m.fl. som överhuvudtaget inte har koncept av klasser...

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av bk9rcg:

Svårt att förstå vad du menar när du inte visar kod eller använder korrekta termer för att beskriva problemet du anser dig ha.

Kan du inte bara skapa en klass för den data du vill skicka till metoden och på samma sätt returnera en instans av en klass som beskriver din data ?

Till exempel:

public class Data { public int Start { get; set; } public string Namn { get; set; } // Whatever you need here } public Data ProcessData(Data data) { // Work on data return data; } public static void Main(string args[]) { Data data = new Data {Start = 1337, Namn = "l33t"}; data = ProcessData(data); }

Det är en av grejerna med objektorientering, du skapar klasser (modeller) som passar det du försöker lösa.

Alla metoderna ska vara static, tror jag har förklarat det innan och tråden är redan löst (så länge man inte använder ref/out), det är en begränsning.

Permalänk
Medlem
Skrivet av Helllodar:

Alla metoderna ska vara static, tror jag har förklarat det innan och tråden är redan löst (så länge man inte använder ref/out), det är en begränsning.

Stöter man på "begränsningar" i språket gör man oftast något på ett knöligt och "fel" sätt.

Permalänk
Medlem
Skrivet av Yoshman:

Rich är långt ifrån den enda som ser problem med OOP.

Det sista du skrev är ju mer ett problem i specifika språk/ramverk än ett verklig problem. Det går alldeles utmärkt att testa saker i språk som C, Go, Clojure m.fl. som överhuvudtaget inte har koncept av klasser...

Du ser microsoft .net (c#, vb.net) och oracles java som en mindre företelse och inte ett problem?

Det går utmärkt att programmera utan static och testa utan static.

När du använder dig av static så inser du inte hur du stänger in dig uppenbarligen.

Skriver du bra kod så kan du byta ut moduler, lätt ändra olika delar, dvs vidare utveckla och underhålla och säkerställa med tester när det är något kritiskt eller om ni har tid för att testa allt. Kör du static så blir det inga moduler ingen utbytbarhet utan du har ett snävt ihopkopplat system som blir svårt att underhålla.

Men the gang of four har du inte hört talas om misstänker jag... och då inte heller SOLID

Men gillar du att koda som folk gjorde på 70- 80- talet så ska man göra precis som du skriver och helt ignorera personer som Martin Fowler.

Skrivet av bk9rcg:

Stöter man på "begränsningar" i språket gör man oftast något på ett knöligt och "fel" sätt.

Vill till största del instämma. Många språk är ämnade för vissa ändamål men de vidareutvecklas också. C# 5.0 som bland annat introducerade await var tex ett fint tillskott som underlättar,

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Datavetare
Skrivet av IceDread:

Du ser microsoft .net (c#, vb.net) och oracles java som en mindre företelse och inte ett problem?

Det går utmärkt att programmera utan static och testa utan static.

När du använder dig av static så inser du inte hur du stänger in dig uppenbarligen.

Skriver du bra kod så kan du byta ut moduler, lätt ändra olika delar, dvs vidare utveckla och underhålla och säkerställa med tester när det är något kritiskt eller om ni har tid för att testa allt. Kör du static så blir det inga moduler ingen utbytbarhet utan du har ett snävt ihopkopplat system som blir svårt att underhålla.

Men the gang of four har du inte hört talas om misstänker jag... och då inte heller SOLID

Men gillar du att koda som folk gjorde på 70- 80- talet så ska man göra precis som du skriver och helt ignorera personer som Martin Fowler.

För Java finns ju flera gratisramverk på code.google.com, t.ex. PowerMock, som bl.a. stödjer mocks av statiska metoder ihop med JUnit, är ju rätt uppenbart att sådant måste finnas.

Jag har undervisat OOP och gjort massor med OOP i C++ och Java, fast det var på 90- och 00-talet. Är väldigt bekant med den ursprungliga Design Patterns boken från 1994. Men dels har OOP alltid varit överanvänt och innan mitten av 00-talet var multi-core CPUer något som i princip bara fanns i extremt dyra system, inte något som finns i den billigaste lilla enhet, numera är ju till och med en 400kr RPi multicore. Av alla tänkbara sätt att programmera dessa multicore enheter måste OOP vara det absolut sämsta.

Modulär kod är helt ortogonal mot om man använder OO-, funktionell- eller procedurell-programmering. Kod som är enkel att integrera är typiskt funktioner som helt saknar implicit tillstånd och därmed bara beror av sina argument (d.v.s. inte metoder), men viktigast är att designa interface som är minimalistiska, koherenta i sin abstraktionsnivå och löser ett eller i alla fall väldigt få specifika problem, åter igen helt oberoende av typ av språk/programmeringsparadigm. I OOP är polymorfism baserat på typ (via arv) något som gång på gång visat sig motverka modularitet och göra designer stelare, polymorfism och därmed arv är ju en annan av grundstenarna i OOP. Polymorfism är definitivt något bra, felet i OOP är att det är så hårt knutet till arv när det finns så väldigt många andra selektorer än typ som borde kunna användas.

OOP är inte värdelöst på något sätt, men det borde vara ett specialverktyg för de relativt få fall det faktiskt passar i stället för att vara förvalet i alla lägen där det inte är totalt omöjligt, vilket har varit fallet under ganska lång tid nu.

För tillfället skriver jag kod som ska passera DO-178C level A, det är skrivet i C där allt kan anses vara "statiska" metoder. Kravet för testning här är att man testar varje möjlig permutation av villkorad körning som kan ändra sekvensen av satser, inte helt trivialt att skriva sådana tester men det är fullt möjligt utan några specialverktyg utöver GCC (stora bokstäver så det är alla verktyg som ingår, inte bara kompilatorn gcc), autotools och make.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

För Java finns ju flera gratisramverk på code.google.com, t.ex. PowerMock, som bl.a. stödjer mocks av statiska metoder ihop med JUnit, är ju rätt uppenbart att sådant måste finnas.

Jag har undervisat OOP och gjort massor med OOP i C++ och Java, fast det var på 90- och 00-talet. Är väldigt bekant med den ursprungliga Design Patterns boken från 1994. Men dels har OOP alltid varit överanvänt och innan mitten av 00-talet var multi-core CPUer något som i princip bara fanns i extremt dyra system, inte något som finns i den billigaste lilla enhet, numera är ju till och med en 400kr RPi multicore. Av alla tänkbara sätt att programmera dessa multicore enheter måste OOP vara det absolut sämsta.

Modulär kod är helt ortogonal mot om man använder OO-, funktionell- eller procedurell-programmering. Kod som är enkel att integrera är typiskt funktioner som helt saknar implicit tillstånd och därmed bara beror av sina argument (d.v.s. inte metoder), men viktigast är att designa interface som är minimalistiska, koherenta i sin abstraktionsnivå och löser ett eller i alla fall väldigt få specifika problem, åter igen helt oberoende av typ av språk/programmeringsparadigm. I OOP är polymorfism baserat på typ (via arv) något som gång på gång visat sig motverka modularitet och göra designer stelare, polymorfism och därmed arv är ju en annan av grundstenarna i OOP. Polymorfism är definitivt något bra, felet i OOP är att det är så hårt knutet till arv när det finns så väldigt många andra selektorer än typ som borde kunna användas.

OOP är inte värdelöst på något sätt, men det borde vara ett specialverktyg för de relativt få fall det faktiskt passar i stället för att vara förvalet i alla lägen där det inte är totalt omöjligt, vilket har varit fallet under ganska lång tid nu.

För tillfället skriver jag kod som ska passera DO-178C level A, det är skrivet i C där allt kan anses vara "statiska" metoder. Kravet för testning här är att man testar varje möjlig permutation av villkorad körning som kan ändra sekvensen av satser, inte helt trivialt att skriva sådana tester men det är fullt möjligt utan några specialverktyg utöver GCC (stora bokstäver så det är alla verktyg som ingår, inte bara kompilatorn gcc), autotools och make.

Jag tänker inte hävda att OOP lämpar sig för allt, exempelvis för inbyggda system lämpar det sig mindre bra.

Givetvis skall ett interface vara minimalistiskt, vem har hävdat annat? SOLID har många bra poänger.

Arv kan jag tycka till viss del ökar kompelxitetsnivån i onödan men det lämpar sig bra för vissa områden.

För exemplvis affärsystem, försäkringssystem, planering & logistik, bank & finans (dock inte för allt), butikslösningar med lager & inventering & beställning så lämpar sig OOP bra.

Jag har fått gå in och städa upp i flera system som krackelerat på grund av att de är skrivna i OOP språk men där kodarna har haft ett gammalmodigt mindset och helt gått emot SOLID och skrivit lösningar med nästan endast statiska stora metoder. Det finaste är när någon kodat in en statisk variabel som exponeras från en dll och när denna senare blivit uppdaterad så har de andra systemen som nyttjar den kvar föregående referens.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem

IceDread, du låter rätt förvirrad. SOLID är hur trevligt som helst, men det har inte speciellt mycket med statiska metoder och klasser att göra, att man följer SOLID principer betyder inte att man inte får skriva statisk kod. Ta t ex Math klassen i Java, vore hur dumt som helst att gnälla över att den inte är SOLID, det är inte poängen.

Håller man på med OOP är det viktigt att man håller koll på principsaker som SOLID för annars blir det rörigt som satan, men det är inte ett argument mot andra lösningar så som funktionell programmering som har sina egna stora fördelar. Sen tror jag å andra sidan inte som Yoshman att OOP kommer försvinna och glömmas bort, det är alldeles för passande för stora områden... men jag tror andra paradigm kommer ta och få större plats i framtiden när fler inser att OOP inte är den optimala lösningen för all form av mjukvara.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Avstängd

Läs på lite om seperation of concernes och decoupling. Om du känner att du har ett problem med att komma åt medlemmar kan det bero på att du inte ska göra det. Du ska ha väldefinierade klasser med enbart ett användningområde. Jag ogillar när utomstående klasser ändrar på state i en annan klass.

Ett bra sätt att kommunicera mellan komponenter i ett system är via händelse aggregering (Event aggregation). Instanser av klasser lyssnar och skickar händelser mellan varandra helt utan att känna till varandra, detta skapar solida domäner där komponenter blir helt utbytbara och enkla att förvalta. Läs även på om Inversion of Control då även dessa hjälper till att decoupla din dom

Visa signatur