"Allt du säger skall vara sant, men du behöver inte säga allt som är sant" - Göran Persson
Ruby, klassfunderingar
Visa signatur
Skrivet av iNi:
Tanken är att C samt D är separata objekt som endast används av B. Innebär "C < B" att det endast är B som har tillgång till att använda dessa, eller kan även A göra det? A är nämligen en klass som hanterar B men har inget att göra med varken C eller D.
"C < B" innebär att C ärver av B. Detta är en del av polymorfism, och man kan tänka sig att B är till exempen "fordon" och C är "bil" för att få ett hum om vad detta innebär. C är alltså ett sorts underobjekt till B. Det har inget att göra med vad B "har tillgång till", eller vad som "har tillgång till" C.
Skrivet av iNi:
Enligt god programmeringssed så ska ju klasser placeras i separata filer med samma namn. Gäller detta även subklasser? (har inte sysslat med OOP i så stor utsträckning)
Beror på språket. I C++ (och obj-C, Java, C#, etc) så är det så det fungerar. Men i Ruby (vad jag fått för mig i alla fall) brukar man istället hålla en modul per fil. Lita inte på mig till 100% på den punkten.
Skrivet av iNi:
När jag försöker skapa subklasser genom att lägga till "<" så får jag följande felkod "uninitialized constant Object::MyObject (NameError)". Jag gissar mig till att det beror på att superklassen inte har blivit inläst än. Men vad gör jag åt detta? Jag kan ju självklart läsa in superklassen först, men då uppstår ju precis samma problem då jag använder subklassen i superklassen. Jag vet att i andra programmeringsspråk så definierar man ju funktioner och klasser i headerfiler som man inkluderar för att berätta att funktionerna och klasserna faktiskt finns, men hur funkar det egentligen i ruby?
Du ska absolut inte använda en subklass i superklassen. Det är dålig design. För att ta bilexemplet igen, ett "fordon" ska inte behöva veta vad en "bil" (ett specialiserat fordon) är för att fungera. I övrigt finns det i Ruby inget som stoppar dig från att patcha en klass i efterhand (detta är en stor fördel i vissa situationer), vilket gör att du kan göra ungefär så här:
class B < A
# Ingenting
end
class C < B
# Ingenting
end
class B
# Alla definitioner i B
end
class C
# Alla definitioner i C
end
Men som sagt, superklassen ska aldrig behöva använda subklassen. Du borde nog läsa på lite om OOP-konceptet innan du fortsätter, för det låter inte riktigt som att du greppat det fullt ut.
Visa signatur
Blogg. Webboken. Pinboard, Last.fm, Facebook, Kongregate. W3fools.
Validera din HTML, men skryt inte om att du gör det.
Använd HTML5 och kom ihåg semantiken!
Citera flera
Citera
Hårdvara
- Idag Sony läcker uppgifter i rättegång – så stort är Call of Duty 12
- Igår Nvidia: "Energieffektiva RTX 4060 sparar hundralappar" 37
- Igår MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare 46
- Igår Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer 15
- Igår Nvidias nästa arkitektur för Geforce kommer år 2025 58
Mjukvara
Övrigt
- Igår Veckans fråga: Vilket operativsystem föredrar du? 83
- Igår Bilar med smarta inslag ger fler dumma fel 63
- 27 / 6 Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år" 88
- 26 / 6 Lastpass-användare rasar – kan inte logga in 59
- 26 / 6 Inet frågar SweClockers – Vad skulle du vilja förbättra på Inet.se? 53
Datorkomponenter
Ljud, bild och kommunikation
- Köpråd gamingdator, budget ca 25-33k15
- En av tre fläktar på en AIO går på högvarv2
- Benify-erbjudanden på Samsung-TV [utbruten tråd]1030
- Hej, min fjärrkontroll till Google tv'n har pajat och kan inte synka kontrollen3
- Pixel 6 pro med trasig skärm, rädda data?1
- Gå ner i vikt - tråden2972
- Borra i betongvägg61
- Bethesda: "Starfield endast något försenat – tack vare exklusiv lansering"41
- Elbilar - Tråden för intresserade20460
- Sony läcker uppgifter i rättegång – så stort är Call of Duty15
- Säljes Gamingdator 4080 / 13700KF / 32GB DDR5
- Säljes I5 12500
- Säljes LG 27'' UltraGear 27GP950 4K Nano IPS 160 Hz HDMI 2.1
- Säljes Star Wars Jedi AMD kod
- Säljes Trasig Xiaomi Mi Electric Scooter (M365) Svart
- Säljes 5800x3D + x570 Meg Unify + be quiet! Dark Rock Slim
- Säljes AMD ASUS DUAL RX6700XT
- Säljes Dell OptiPlex 7010
- Säljes Datordelar: i5 9600k + 1070 GTX mm.
- Säljes 1080 TI | Vattenblock | 1TB SSD | Apple Watch 4 Stainless | Hörlurar | Mikrofon
- Sony läcker uppgifter i rättegång – så stort är Call of Duty15
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"37
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare47
- Veckans fråga: Vilket operativsystem föredrar du?84
- Bilar med smarta inslag ger fler dumma fel63
- Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer15
- Nvidias nästa arkitektur för Geforce kommer år 202558
- Microsoft vill strömma Windows från molnet72
- Starfield utvecklas med AMD:s välsignelse153
- Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år"88
Externa nyheter
Spelnyheter från FZ
- Över tre miljoner exemplar av Final Fantasy XVI har skeppats och sålts idag
- Sony råkar avslöja spelbudgetar och annat på grund av dålig märkpenna idag
- Alan Wake och CoD: Kallt krig snart på PS Plus igår
- Red Dead Redemption åldersmärkt igen i Korea – det spekuleras i remaster igår
- Fallout London flyttas för att slippa Starfield-konkurrensen igår