Objektorienterad Programmering (OOP) Murach s: kap 12-16 2013-01-28 1 Winstrand Development
Objektorienterad Programmering Förkortas OOP Objektorientering innebär att man delar in koden i olika block, klasser, som kan återanvändas C# och.net är ett helt objektorienterat Vilar på tre grundpelare: Inkapsling Arv Polymorfism Vi har tidigare använt oss av klasser och objekt, bland annat Form, Button, Random, List<T> och Math. Winstrand Development 2013-01-28 2
Klasser Definieras med nyckelordet class. Varje klass ska vara designad, och ansvara, för sitt egna område. Klassen kan ses som en svart låda (black box) //A class class MyClass // A Field private int value; // A Constructor public MyClass(int val) value = val; //other class members... Winstrand Development 2013-01-28 3
Namn Klasser En klass består av följande element (ett urval) Beskrivning Fält Properties (egenskaper) Konstruktor Metoder Events (händelser) En variabel deklarerad i klassen och tillhör varje objekt även kallad instansvariabel (instance variable). Är (bör) alltid vara privat. Tillåter ett annat objekt att komma åt ett Field i klassen. Exempelvis är Length ett property på ett string-objekt som talar om hur många tecken strängen innehåller. En speciell metod som anropas när en instans objektet skapas. Ex. string name = new string(); Någonting som kan utföras av objektet och kan anropas av andra objekt. Exempelvis anropas metoden Sort() på en lista för att sortera elementen. En signal som skickas mellan objekt som meddelar att någonting har hänt. Ex: användaren trycker på en kapp (Button). Winstrand Development 2013-01-28 4
Trelagersarkitektur (three-layered architecture) Klasserna kan delas in i olika lager Ger återanvändbarhet Presentationslagret (presentation layer/tier) Användarens gränssnitt Forms, Console, etc. Mellanlagret (Business layer/tier, Business Logic, Logic layer/tier) Datalagret (Data layer/tier, Database Layer) Länken mellan presentation och data Utför beräkningar Åtkomst till databaser. ADO.NET Winstrand Development 2013-01-28 5
Klasser och objekt En instans av en klass kallas för ett objekt Man kan tänka sig att en klass är en ritning, en definition, på ett hus medan objektet är ett hus som byggts efter ritningarna, en implementation av ritningen. Andra saker en klass kan representera är en abstraktion (Rectangle, Color) eller att liknande funktionalitet kan grupperas ihop, såsom Math-klassen. Winstrand Development 2013-01-28 6
Klasser och objekt Objekt är referenstyper Allokeras på heapen En pekare med en adress till objektet läggs på stacken //A class class MyClass // A Field private int value; // A Constructor public MyClass(int val) value = val; public partial class Form1 : Form private void btncreate_click(object sender, EventArgs e) int x = 10; //On the stack MyClass theinstance = new MyClass(x); //On the heap Winstrand Development 2013-01-28 7
Jämföra objekt //------------------------------------------ //Value assignment int val1 = 10; int val2 = val1; val2 = 20; //val1 = 10, val2 = 20; //------------------------------------------ //Reference assignment Product prod1 = new Product(29.90m, "Food"); Product prod2 = prod1; prod2.price = 40.0m; //prod2.price = 40.0m, prod1.price = 40.0m //------------------------------------------ //Reference comparison Product prod3 = new Product(50m, "Pizza"); Product prod4 = new Product(50m, "Pizza"); bool comp1 = (prod1 == prod2); //true bool comp2 = (prod3 == prod4); //false prod3 och prod4 är skapade med samma parametrar, men pekar inte mot samma objekt Winstrand Development 2013-01-28 8
Skapa en klass 3 1 2 Winstrand Development 2013-01-28 9
Klasser Inkapsling (encapsulation) Inkapsling är ett av de viktigaste begreppen inom OOP. Man definierar här åtkomsten från andra klasser, dvs. vad som är synligt. Det finns tre huvudsakliga nyckelord: public alla klasser har åtkomst private endast den egna klassen har åtkomst protected egna klassen samt ärvda klasser har åtkomst Winstrand Development 2013-01-28 10
Fält Variabler som tillhör en metod kallas fält, fields, eller ibland för medlemsvariabler Deklareras i klassen, ej inuti metoder Kan vara data- och referenstyper Tillhör instansen, alltså objektet Tillgängliga i hela klassen Ska vara private eller protected class Product private decimal price; private string name; //Other members... Winstrand Development 2013-01-28 11
Fält - Exempel class Product private decimal price; private string name; private void btncreate_click(object sender, EventArgs e) Product p = new Product("name", 100); p.applydiscount(0.1m); MessageBox.Show(p.GetDisplayText()); //... public Product(string thename, decimal theprice) //Accessing the fields name = thename; price = theprice; public void ApplyDiscount(decimal discount) price *= (1-discount); public string GetDisplayText() return name + "\t" + price.tostring("c"); Winstrand Development 2013-01-28 12
Properties (egenskaper) Ett sätt att exponera fält Innehåller två accessors get hämta ett värde set sätt värdet Kan vara read/write only En automatisk property skapas då get och set lämnas tomma public string Name get return Name; set name = value; Winstrand Development 2013-01-28 13
Properties - Exempel //Performs some validation in set public decimal Price get return price; set if (value < 0) throw new ArithmeticException("Kan inte använda negativa värden"); price = value; //Automatic property public int Id get; set; private void btncreate_click(object sender, EventArgs e) Product p = new Product("name", 100); p.id = 1; p.name = "Bok"; p.price = 10m; MessageBox.Show(p.GetDisplayText()); Winstrand Development 2013-01-28 14
Metoder Alla metoder tillhör en klass Kan också vara public eller private Överlagring (overloading) Flera metoder har samma namn men olika signatur Kan skicka med olika antal parametrar samt olika typer av parametrar Winstrand Development 2013-01-28 15
Överlagring class Library List<Book> booklist = new List<Book>(); public string GetBookTitle(string author) string title = ""; class Book public string Title get; set; public string Author get; set; public int Id get; set; foreach (Book item in booklist) if (item.author == author) title = item.title; break; return title; public string GetBookTitle(int id) string title = ""; foreach (Book item in booklist) if (item.id == id) title = item.title; break; return title; //... Winstrand Development 2013-01-28 16
Konstruktorer En speciell metod som körs när ett objekt skapas Har samma namn som klassen Har inte returvärde, inte ens void! En konstruktor utan några parametrar kallas för default constructor class Product private decimal price; private string name; public Product(string thename, decimal theprice) //Accessing the fields name = thename; price = theprice; Winstrand Development 2013-01-28 17
Konstruktorer class Product private decimal price; private string name; // Default constructor public Product() name = "UNKNOWN"; public Product(string thename) name = thename; public Product(string thename, decimal theprice) //Accessing the fields name = thename; price = theprice; Winstrand Development 2013-01-28 18
Statiska medlemmar Definieras med nyckelordet static Medlemmen tillhör klassen, inte objektet Delar eller hela klasser kan vara statiska class Library private static int maxitems = 100; public static int MaxItems get return maxitems; set maxitems = value; Winstrand Development 2013-01-28 19