Räckvidd och synlighet
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Synlighet (meddelandesändning) Det går bara att skicka meddelanden från ett objekt (A) till ett objekt (B) som man kan ”komma åt”. Det finns 5 sätt att komma åt ett objekt. Attribut-synlighet - Om B är ett attribut hos A Parameter-synlighet - Om A fått B som ett argument i en metod Lokalt deklarerad synlighet - Om A deklarerat (skapat) B inuti en egen metod Global synlighet - Om B är ett globalt synligt objekt, vilket vi i C# kan ”simulera” genom att använda ”public static” eller ”public const”. ”Self” - ett objekt kan alltid skicka meddelanden till sig själv.
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 33 Synlighet (meddelandesändning) Attribute visibility Parameter visibility Locally declared visibility Global visibility Self Kyrka präst: Person makechild() marry() void makeChild(Person make, Person maka ) { Person barn = new Person(); make.addBarn(barn); maka.addBarn(barn) this.marry(make, maka); }
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 44 Synlighet (inkapsling) Bara för att man kommer åt objektet, är det inte säkert att man kommer åt objektets alla attribut och operationer. Genom ”Inkapsling” döljer vi sådant som ingen annan än objektet självt skall få röra. Grundprincipen är att ett objekt aldrig skall visa upp sina attribut direkt, utan begränsa åtkomsten via exempelvis accessors (get-metoder) och mutators (set-metoder).
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 55 Synlighet (inkapsling) private ( - ) Endast synlig och åtkomlig från objekt tillhörande den egna klassen protected ( # ) Synlig och åtkomlig från objekt tillhörande den egna klassen eller någon av dess subklasser public ( + ) Synlig och åtkomlig från alla objekt I C# finns även: internal Synlig och åtkomlig från objekt tillhörande den egna klassen eller andra klasser som finns i samma assembly protected internal Synlig och åtkomlig från objekt tillhörande den egna klassen eller någon av dess subklasser, samt andra klasser som finns i samma assembly Klassen - attr: Typ # attr: Typ + attr: Typ Samma typ av inkapsling kan göras på både attribut och operationer