Post on 21-Jun-2022
© Winstrand Development
2013-01-28 1
Objektorienterad programmering
Objektorienterad Programmering
(OOP)
Murach’s: kap 12-16
© Winstrand Development 2013-01-28
2
Objektorienterad programmering
• 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
3
Objektorienterad programmering
• 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
4
Objektorienterad programmering
• Klasser – En klass består av följande
element (ett urval) Namn Beskrivning
Fält En variabel deklarerad i klassen och tillhör varje
objekt även kallad instansvariabel (instance
variable). Är (bör) alltid vara privat.
Properties
(egenskaper)
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.
Konstruktor En speciell metod som anropas när en instans
objektet skapas. Ex. string name = new string();
Metoder 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.
Events
(händelser)
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
5
Objektorienterad programmering
• 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)
•Länken mellan presentation och
data
•Utför beräkningar
Datalagret
(Data layer/tier, Database Layer)
•Åtkomst till databaser.
•ADO.NET
© Winstrand Development 2013-01-28
6
Objektorienterad programmering
• 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
7
Objektorienterad programmering
• 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
8
Objektorienterad programmering
• 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
9
• Skapa en klass
Objektorienterad programmering
1
2
3
© Winstrand Development 2013-01-28
10
Objektorienterad programmering
• 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
11
Objektorienterad programmering
• 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
12
Objektorienterad programmering
• Fält - Exempel
class Product
{
private decimal price;
private string name;
//...
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");
}
}
private void btnCreate_Click(object sender, EventArgs e)
{
Product p = new Product("name", 100);
p.ApplyDiscount(0.1m);
MessageBox.Show(p.GetDisplayText());
}
© Winstrand Development 2013-01-28
13
Objektorienterad programmering
• 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
14
Objektorienterad programmering
• 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
15
Objektorienterad programmering
• 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
16
Objektorienterad programmering
• Överlagring class Library
{
List<Book> bookList = new List<Book>();
public string GetBookTitle(string author)
{
string title = "";
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;
}
//...
}
class Book
{
public string Title { get; set; }
public string Author { get; set; }
public int Id { get; set; }
}
© Winstrand Development 2013-01-28
17
Objektorienterad programmering
• 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
18
Objektorienterad programmering
• 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
19
Objektorienterad programmering
• 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;
}
}
}