Programmering i C# 3. Klasser.

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Klasser och objekt.
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Metoder i java Det finns två typer av metoder i java
Föreläsning 4 Python: mera om funktioner och parametrar
Arv.
Abstract & sealed.
Inkapsling.
Polymorfism.
Metoder.
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstruktor Ser till att objektets data är korrekt initierade MinKlass::MinKlass(); MinKlass::MinKlass(int.
Programmering i C# 2. Inledande detaljer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Klasser och objekt Klasser, objekt och instansvariabler
int res2=Math.max(tal1,tal2);
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Räckvidd och synlighet. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Synlighet (meddelandesändning) Det.
Programmering i C# 5. Structer.
Programmeringsteknik för Media1 & K1
1. En infrastruktur för programutveckling
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Programmering i C# 9. Pekare och osäker kod.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
1. Ett problem/uppgift.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
INTRODUKTION TILL PROGRAMMERING
Föreläsning 2. Allmänt STL genererar varningar i Visual C++ –”#pragma warning (disable : 4786)”
Arv repetition Arv = Är relation Tillgänglighet public, protected och private. Överklass ös Direkt härledd underklass dhu: Class dhu : public ös{} Indirekt.
7. Delegerare och notifierare
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 5 Klasser och instanser
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder.
Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
Föreläsning 3. Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner.
TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder.
1 Mer om metoder, variabler, klasser och objekt. Kursboken: - Kapitel 6 - Kapitel 8.
Presentationens avskrift:

Programmering i C# 3. Klasser

3.1 Inkapsling och datagömning Inkapsling innebär paketering av funktioner och det data de ska hantera Klasser och structer Datagömning innebär att access till data kan kontrolleras med hjälp av synlighetsmodifierare Fem nivåer: public, private, protected, internal, internal protected Programmering i C# - Kapitel 3

3.2 Fält (fields) Medlemmar kan vara funktioner, variabler eller typer Åtskilliga varianter i C#: Fält är medlemsvariabler Klassreferenser, interfacereferenser, structer Görs aldrig public i klasser, men ofta i structer Initieras automatiskt till noll (eller motsv.) Programmering i C# - Kapitel 3

Initiering av fält class Trivial // klassdeklarationen { int val = 100; // default synlighet: private string str = ”Etthundra”; double[] vec = new double[100]; MyClass obj1 = new MyClass(); YourClass obj2 = null; // endast för tydlighet // blir ändå null public int GetVal() { return val; } } Programmering i C# - Kapitel 3

Skrivskyddade fält Två sätt skrivskydda fält: Initiera med literal – const Endast typer som kan skrivas literalt Tilldela en gång – readonly I klassdeklaration eller konstruktor Alla typer, även referenser Programmering i C# - Kapitel 3

Skrivskyddade fält, exempel class Trivial { const int val = 100; const string str = ”Ständigt innehåll”; readonly SomeClass obj = new SomeClass(); public int GetVal() { return val; // alltid 100 } } Programmering i C# - Kapitel 3

Statiska fält Instansmedlemmar ingår i objekt Statiska medlemmar finns i ett enda gemensamt exemplar Refereras endast med klassnamn Konstant medlem blir också statisk! Trivial obj = new Trivial(); ... obj.val; // Fel, val är const och därmed static ... Trivial.val; // Rätt! Programmering i C# - Kapitel 3

3.3 Konstruktorer Konstruktor är en metod med samma namn som klassen Skapar objekt av klassen Kan överlagras med olika parameterlistor Ingen deklarerad returtyp Klass utan konstruktor får en parameterlös defaultkonstruktor automatiskt genererad Trivial obj = new Trivial(); // defaultkonstruktorn Programmering i C# - Kapitel 3

Egna konstruktorer class Rational { int numerator, denominator; public Rational(): this(0, 1) {} public Rational(int n): this(n, 1) {} public Rational(double val): this((int)(val * 1000), 1000) {} public Rational(int n, int d) { if (d == 0) d = 1; numerator = n; denominator = d; } } Programmering i C# - Kapitel 3

3.4 Metoder (methods) Definieras alltid med returtyp, namn och parameterlista, samt kropp Parameterlistan kan vara tom Flera metoder med samma namn men olika parameterlista tillåts (överlagring) Structparameter ger värdeanrop Referensparameter ger referensanrop Klassobjekt alltid referens Programmering i C# - Kapitel 3

Parameteröverföring static void F(int x, int[] vec) { x = 100; vec[0] = 100; } static void Main() { int i = 0; int[] iv = new int[3]; // alla är 0 F(i, iv); Console.WriteLine(”{0}, {1}”, i, iv[0]); // ”0, 100” Programmering i C# - Kapitel 3

Referensanrop med struct Referensanrop med struct fås med modifierarna ref eller out Anges både i definition och i anrop Liten skillnad: out kan vara oinitierad static void F(ref int x, int[] vec) { … // gör något med x } static void Main() { … F(ref i, iv); } // i kan ändras av anropet Programmering i C# - Kapitel 3

Statiska metoder Även metoder kan vara static Anropas via klassnamn Kan endast se andra statiska medlemmar Även const är statiska! Instansmetoder har osynlig parameter this Refererens till det aktuella objektet Statiska metoder har ingen this Programmering i C# - Kapitel 3

3.5 Egenskaper (properties) Ser ut som fält men är metoder Kan dölja ett fält som annars kunde vara public Gör aldrig fält public! Kan ha valfri logik, som en metod Kan ha set och/eller get Bara get ger skrivskydd Programmering i C# - Kapitel 3

Egenskaper exempel public string MyProp { get { return myField; } set { myField = value; } } obj.MyProp = ”Ny sträng”; Programmering i C# - Kapitel 3

Statisk egenskap som konstruktor Vanlig design i många klasser: Statiska egenskaper som returnerar typiska objekt Anropar någon konstruktor public static Color Red { get { return new Color(255, 0, 0); } } Color obj = Color.Red; Programmering i C# - Kapitel 3

3.6 Operatorer Alla operatorer är metoder i respektive klass eller struct Valfritt förse egna typer med operatorer Operatorer är statiska metoder där minst en parameter (operand) är av aktuell typ En operand: en parameter Två operander: två parametrar Programmering i C# - Kapitel 3

Operatorer forts. Endast operatorer från standarduppsättning public static X operator+(X left, X right) { … } Endast operatorer från standarduppsättning Nya kan inte uppfinnas Prioritet och associativitet enligt reglerna Unär/binär såsom operatorn Tilldelningsoperatorn kan inte överlagras Programmering i C# - Kapitel 3

Operator ++ och -- Ensam om egenheten att vara prefix eller postfix Kan inte överlagras specifikt för ++x/x++ Måste returnera objekt av aktuell typ Får ej ändra aktuellt objekts tillstånd Programmering i C# - Kapitel 3

Indexoperatorn Vanligt behov är att kunna överlagra specifikt för lvalue/rvalue Problematiskt i exempelvis C++ C# har valt annan syntax (”indexerare”) public X this[int i] { get { … } set { … } } Programmering i C# - Kapitel 3

Specialfall Kombinationerna överlagras inte explicit +=, *=, <<=, etc. Operatorn anropas, därefter tilldelning && och || överlagras med särskild syntax Mycket litet behov Ytterligare några kan ej överlagras: is, as, typeof, new, . och ?: Programmering i C# - Kapitel 3

3.7 Typomvandlare Implicit och explicit typomvandling är också egentligen metoder i klasser/structer Undantaget upcast/downcast Egna typer kan göras kompatibla med andra genom typomvandlare Syntax som liknar operatorer Programmering i C# - Kapitel 3

Typomvandlare exempel class Rational { private int numerator, denominator; ... public static implicit operator double(Rational obj) { return (double)obj.numerator/obj.denominator; } } Typomvandlaren måste markeras implicit eller explicit Programmering i C# - Kapitel 3

Typomvandlare forts. Omvandling till egen typ också relevant Exempelvis double till Rational Blir parallell till konstruktor Anropar typiskt motsvarande enparameterskonstruktor Programmering i C# - Kapitel 3

3.8 Destruktor Skräpsamlaren raderar objekt vid odefinierad tidpunkt Objekt från klasser med destruktor hanteras i särskild kö Få klasser har behov av destruktor – i de fallen måste den kunna anropas explicit Men explicit konstruktoranrop finns inte! Programmering i C# - Kapitel 3

Dispose-mönstret Resursallokerande klasser ska ha destruktor och implementera IDisposable.Dispose Anrop till Dispose bör eliminera skräpsamlarens anrop till destruktor Efter anrop till Dispose bör objektet vara oanvändbart Dispose ska klara upprepade anrop Destruktor och Dispose ska inte dubblera varann Programmering i C# - Kapitel 3

Dispose-mönstret forts. class X : IDisposable { private bool disposed = false; ~X() { Dispose(false); } public void Dispose() { Dispose(true); } private void Dispose(bool disposing) { if (Disposed) return; // API-anrop som släpper resurser if (disposing) { disposed = true; GC.SuppressFinalize(this); } } Programmering i C# - Kapitel 3