Created by Jenny Degling
about 11 years ago
|
||
Det finns två olika typer av datatyp vilket är värdetyper och referenstyper. Skillnaden mellan typerna är hur de lagras i minnet. När en variabel deklareras tilldelas en del av minnet på "stacken" till att hålla dess värde. När man deklarerar en värdetyp, t ex int, char, float, så består minnet av stacken helt enkelt av ett konkret värde. Man säger därför att en värdetyp håller ett värde. När man istället deklarerar en referenstyp, t ex instansierar ett objekt från en egen definierade klass, så består minnesplatsen på stacken av en referens till en minnesadress på "heapen" där objektet finns lagrat. Vid tilldelning så kopieras referensen på stacken till heapen så att båda variablerna får samma referens och pekar på samma minnesadress i heapen.
Redogör för skillnaden mellan värd-och referenstyper och ge ett exempel på hur skillnaden ser ut.
Vad är de fyra grundläggande principerna i objektorienterad programmering?
Vilka är de viktigaste begreppen kopplade till metoder?
Varför är metoder användbara?
Metodsignatur, argument/parameter, return och inkapsling. En metodssignatur definierar hur metoden kan anropas, dess parametrar och vad som returners. Som ett kontrakt som bestämmer vad metoder får och kan göras. Består av metodens namn och parameterlistan.Argument eller parameter berättar vad metoden behöver för att kunna utföra sin uppgift, den data som kan skickas till en metod och som sedan metoden använder sig av för att kunna utföra uppgiften. Return, finns olika returtyper, vissa metoder kanske returnerar en string, en annan en int och det anges i metodrubriken. Om metoden inte returnerar ett värde så anges det som "void". Klasser och metoder är ett exempel på inkapsling, att man grupperar beteenden som hör tillsammans. Detta gör så att man kan begränsa åtkomsten till medlemmar genom nyckelordet "private" då det enbart är klassens medlemmar som har tillgång till det och data kan inte modifieras felaktigt utifrån klassen. Inkapsling gör även att det blir lättare att underhålla då ändringar enbart resulterar i ändringar inom den inkapslade delen.
Vad är fördelarna med OOP?
Då det är ett exempel på inkapsling så gör det att man kan begränsa åtkomsten till den inkapslade metoden vilket gör att det blir lättare att underhålla, vid en ändring behöver man nämligen inte gå in och ändra i varje metod utan bara i den inkapslade delen. När man gömmer implementationen kontrollerar man också att data inte ändras felaktigt utifrån klassen.
Abstraktion, inkapsling, arv och polymorfi. Abstraktion är ett sätt att hantera komplexitet. Man försöker identifiera vad som är viktigt i programmet det vill säga vilka objekt som behövs för implementationen av ett program och tänka på dess funktionalitet och beteende istället för själva implementationen. T ex kan abstraktionen av "Person" se olika ut i vilken kontext som begreppet används då det behövs olika funktionalitet och beteende i olika situationer. Arv definierar en är-relation, en hyacint ÄR en blomma. Det visar också på hur arvshierarkin ser ut då man kan säga att en hyacint ÄR en blomma men inte att en blomma ÄR en hyacint på samma sätt då det inte är sant i samtliga fall, jag kan ju lika gärna peka på en tulpan. Arv möjliggör att samla gemensam funktionalitet i en klass (superklass) och sedan låta andra klasser ärva denna funktionalitet (subklass). En subklass ärver ALL funktionalitet (instansvariabler, egenskaper, metoder) av sin superklass och har tillgång till alla medlemmar som är deklarerade som public eller protected. Polymorfi utgår från Liskovs substitution principle: ifall X är en subklass till Y så ska objekt av typen Y kunna bli ersatta av objekt av typen X. Alltså ifall hyacint är en subklass till Blomma så ska Blomma kunna ersättas av objekt av typen hyacint. Allt superklassen kan ska också subklassen kunna göra. När anrop med samma metodsignatur resulterar i att olika implementationer anropas kalls för polymorfi. static void Main(){Hyacint hyacint = new Hyacint();ADayOfAFlower(hyacint)} Vid parameter överföringen sker en implicit typomvandling därmed kan subklassen anta alla de beteenden som superklassen har. För att demonstrera detta så kan man skapa en lista av blommor:Listflower = new List (){ new Hyacint(), new Tulip(), new Rose(), new Sunflower()};for (int i = 0; iADayOfAFlower(animal[i]);}För att sedan veta vilken metod som anropas börjar man med objektets typ och får sedan uppåt i arvshierarkin om metoden inte är override:ad. Vid typomvandling förändras inte objekten utan är fortarande samma typ även om åtkomsten till objektet görs genom en variabel deklarerad av superklassen. Objekten vet själva bäst hur de ska utföra en viss uppgift. Polymorfi genom arv implementeras genom att metoder i superklasser deklareras som virtual eller abstract och sedan omdefinieras i barnklasser. Vilken metod som anropas avgörs vid exekveringen och inte vid kompileringen. Ett exempel är ToString-metoden som är en metod i Object-klassen vilket är den klassen som alla klasser ärver från, antingen direkt eller genom en arvskedja. Det gör att man kan anropa ToString metoden i alla klasser och om inte ToString metoden har omdefinierats i någon av subklasserna så anropas Objekt-klassens implemenation. Den går att omdefiniera då metoden är deklarerad som virtual i klassen Object.
När objekt enkapsulerar logik och data blir det ansvarigt för sitt eget beteende vilket underlättar återanvändning av programkod. Att en subklass automatiskt ärver alla sina medlemmar från superklassen underlättar också återanvädningen. All den återanvändningen gör koden mer organiserad och förhoppningsvis lättare att förstå. Det underlättar även att det återspeglar hur vi tänker i vardagslivet med klasser och objekt. Det är även väldigt flexibelt då samma klassdefinitioner kan användas i många olika tillämpningar och polymorfi gör så att samma metod kan anta olika beteenden.
New Page
Want to create your own Notes for free with GoConqr? Learn more.