Programmering.
Alltså, det var ju inget problem, det dök upp när jag lekte lite och tyckte det var fruktansvärt konstigt att ;); resulterade i något annat än );. Var ju bara jag som var korkad.
Vad har ni för kommentarer på Polycode? Det är ett ramverk jag väntat på ganska länge nu. Kan inte kompilera källkoden ordentligt heller då Microsoft valde att ta bort MFC från alla VS-utgåvor förutom professional.
Just nu sitter jag och leker runt lite med Lua 5.2 i Powershell och jag sitter även och pillar runt lite med SFML, som f.ö. är ganska obekvämt att arbeta med.
Ja sfml är inte kul någonstans. polycode såg nice ut. Får titta någon gång. Men känns mest än så länge som ett av alla ramverk i mängden
Så.. Jag läser programmering 1 och har fastnat lite. Kan någon förklara vad som definierar en klass och en metod?
Och de fem åtkomstdirektiven använder man för att bestämma vilka klasser som får lov att använda en metod right? Och varför vill man använda detta?
Ta det väldigt basic då det som sagt är prog 1 jag pysslar med, har ju inte så bra koll än som ni ser.
jag skall vara lite dryg och referera till wikipedia då det är troligen därifrån du kommer få massa citat.
Men i sin enkelhet är det enklare om du ser allting abstrakt. Objektorienterad programmering är designat för att tvinga fram en struktur och ett mer abstrakt tänk från programmerare så att vi kan gå från att skriva:
mov eax,0
xor eax,eax
till att skriva mer försåeliga saker som
GameObject x = new GameObject();
Ett ganska bra sätt att beskriva skillnad mellan en klass och ett objekt (och vi skippar alla fanzyword som dina lärare uppenbart försöker våldta din stackars hjärna med. här kör vi learning by doing) är att säga att klassen är ritningen och objektet är den färdiga konstruktionen. Metoder (eller funktioner som vi också kan kalla det, men någon på någon kodavdelning skulle säkert mörda mig för att kalla en klassmetod för funktion) är det som objektet kan utföra.
Vi tar ett exempel! (ingen specifik kod kommer skrivas. det är det abstrakta tänket som är viktigt). Kan du det spelar det ingen roll vilket språk du kodar så länge det har det du frågar efter. en smaksak.
Vi skall programmera en hund. För det behöver vi designa en klass (ritning) som skall representera hunden. Vi skall i ritningen ge hunden värden och färdigheter som hunden skall ha.
Vi bestämmer att hunden skall ha egenskaper/värden som får representera egenskaper hos hunden såsom färg,längd,vikt,ögon färgetc. Problemet när vi sitter och designar hunden är att vi inte vill att någon skall kunna missta sig och ändra storleken på hunden (i vilken värld kan du ändra storleken på hundar tex?). Vi bestämmer helt enkelt att alla de värdena är privata (åtkomstdirektiv). För att en utomstående däremot skall kunna ta del av de värdena (vilket de inte kan i nuläget eftersom de är privata) behöver vi metoder/funktioner i vår ritning så att den färdiga hunden kan lämna ut sin storlek (men inte få den ändrad). Vi gör en metod för varje variabel vi vill lämna ut och kallar dem tex HämtaStorlek() som kommer ge en _kopia_ på värdet (lite beroende på språk).
Det finns däremot en sak vi ändra hos hunden. Vad vi kallar den. Hunden kanske kallar sig själv "Dick Jonsson Tinkerweenie" men vi bestämmer att den får heta "fido" (ja vi lever i sverige och här är vi så inihelvete originella) och skapar därför ett publikt (åtkomstdirektiv) värde som heter Namn.
Åtkomstdirektiven är helt enkelt till för att säga till i ritningen/klassen för den som hanterar det färdiga objektet om vilka värden OCH metoder som får hanteras/ändras och inte.
litet ps på åtkomstdirektiv på metoder. funkar exakt likadant. om du skulle säga att din HämtaStorlek() vad privat så skulle enbart objektet/hunden kunna köra den och hämta ut sin storlek (ganska trist).
Om du däremot har en hund som vill kunna tänka men det är knappast något vi ser när en hund gör så kan du göra en privat metod/funktion som heter Tänk().
Klockan är sent och jag sitter och drar lite ur blotta tankarna. men jag tror du får en ganska klar blick. Men protipet är, det är inte alls krångligt när man tänker efter. Försök bara visualisera det och göra det abstrakt då objektorienterad programmering tillåter det till hög grad.
Jag har enbart arbetat med C++ C, Assembler glsl/hlsl/cg så vill du ha mer ingående djup kunskap i andra språk så kommer du bara få mina fritidsegenskaper i språk som javascript,c#,java,python som jag enbart haft en fritidshobby i.
Bra förklarat i helhet.
Jag har djup kunskap i java (jobbar som dev), front-end (javascript + vanligaste ramverken (jquery, angularjs, etc)) och hobbykunskaper i c++ och php.
Ska försöka förklara det på mitt sätt :)
En klass:
- En klass är en ritning på ett objekt. En klass kan instansieras till ett objekt som du kan utföra operationer på. Ett objekt sparas i minnet med sina attribut och kan "hålla state", alltså att attributen alltid är det du har satt dem till på just det objektet. En klass kan dock ha statiska metoder / attribut som gör att objektet inte behöver instansieras i koden, utan attributen ligger tillgängliga genom klassdefinitionen.
- En klass kan ha metoder (kommer till det sen), attribut (alltså "properties" som kan populeras med data).
- En klass kan också "generaliseras" för att göra den mer hanterbar. Detta genom "polymorphism", vill du veta mer om det är det bara att PMa.
En metod:
- En metod, eller även kallat funktion, är en chunk/bit kod som kan kallas på och exekveras (givetvis beroende på åtkomstdirektiv / enkapsulering). Praktiskt sett kan du skriva hela klassens kod, och alla operationer i en enda metod. Men detta blir oftast oläsligt, och kan vara svårt att återanvända koden till liknande saker. Detta ökar också komplexiteten i din kod, vilket oftast inte är bra.
- En metod har en returtyp (om vi inte pratar javascript eller liknande), och x antal parametrar (variabler) du "skickar in" när du kallar på metoden. Dessa parametrar/variabler/objekt har du sen tillgängligt i just den metoden, för att göra som du vill med.
Enkapsulering / Åtkomstdirektiv:
Precis som du säger används åtkomstdirektiven för att antingen förhindra, eller ge åtkomst åt både metoder och attribut i din klass.
Ett diagram för att visa på de vanligaste åtkomstdirektiven:
Ett som inte nämns i bilden är abstraheringsdirektiven, vilket handlar mer om polymorphism, och ärvande. (PMa som sagt för mer info)
Som du ser så har till exempel attribut märkta "protected", skyddats från utomstående anrop / kallelser. Men klasser som ärver denna klass, eller som ligger i samma paket som din klass, eller klassen själv, har tillgång till detta attribut.
Varför vill man använda åtkomstdirektiv?
Du kan såklart skriva public på alla metoder, och attribut om du vill.
- Varför man vill använda det handlar om både läsbar kod, lite småsäkerhet, och abstrahering och lager-tänk.
Jag har som för vana att endast göra metoder som används inne i klassen till private. (eller paketprivat om du ska enhetstesta) Detta medför "blackbox"-tänket, eller API-tänket om du ska använda min klass från ett lager ovanför, eller utifrån paketet. Endast den metod som sen i sin tur kallar på metoder inne i sin egen klass, är synlig utifrån. Det ger bättre semantik, och mer läsbarhet, då du inte blir förundrad och funderar på vilken av dessa 22 metoder du ska använda dig av, utan det finns endast några få som är beskrivliga och tillgängliga utifrån.
Ang abstrahering är här en superbra beskrivning om varför det är bra att inte ha publika variabler osv: http://java.dzone.com/articles/why-encapsulation-matters
Hoppas det inte vart för mycket svammel. Jag är oftast usel på att förklara saker man kan mycket om.
Men som sagt, jag hjälper gärna folk med programmeringsfrågor eller dylikt. Bara att PM'a.
Gött skrivet :) Nu tror jag han får svårt att misslyckas den kursen.
Vart jobbar du?
Citat från lusius
Gött skrivet :) Nu tror jag han får svårt att misslyckas den kursen.
Vart jobbar du?
Tackar!
Memnon Networks AB i Stockholm. :)
Citat från RobzInadEz
Citat från lusius
Gött skrivet :) Nu tror jag han får svårt att misslyckas den kursen.
Vart jobbar du?
Tackar!
Memnon Networks AB i Stockholm. :)
Kul :)
Arbetar just nu på en bencode parser.
Det är alltså den datorstruktur som torrent-filer använder sig av.
Okej! Min är i c++.
https://github.com/jimmiebergmann/Bit-Engine/blob/cleantype/include/Bit/System/Bencode/Value.hpp
Håller på i Flash nu! Lär oss grunderna nu i skolan och vi ska göra ett litet mini-spel!
Väldigt tillfredsställande måste jag säga!
Citat från voxel:
Okej! Min är i c++.
https://github.com/jimmiebergmann/Bit-Engine/blob/cleantype/include/Bit/System/Bencode/Value.hpp
Har du jobbat mycket med objective C?
...Jag programmerar hemsidor D:
Lär mig riktigt mycket om strukturen av allt webinnehåll, men det känns lite underklass att göra hemsidor efter programmering A,B och C dock
Du måste vara inloggad för att skriva i forumet