19
© Winstrand Development 2013-01-28 1 Objektorienterad programmering Objektorienterad Programmering (OOP) Murach’s: kap 12-16

Objektorienterad Programmering (OOP) - Winstrand

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Objektorienterad Programmering (OOP) - Winstrand

© Winstrand Development

2013-01-28 1

Objektorienterad programmering

Objektorienterad Programmering

(OOP)

Murach’s: kap 12-16

Page 2: Objektorienterad Programmering (OOP) - Winstrand

© 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.

Page 3: Objektorienterad Programmering (OOP) - Winstrand

© 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...

}

Page 4: Objektorienterad Programmering (OOP) - Winstrand

© 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).

Page 5: Objektorienterad Programmering (OOP) - Winstrand

© 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

Page 6: Objektorienterad Programmering (OOP) - Winstrand

© 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.

Page 7: Objektorienterad Programmering (OOP) - Winstrand

© 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

}

}

Page 8: Objektorienterad Programmering (OOP) - Winstrand

© 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

Page 9: Objektorienterad Programmering (OOP) - Winstrand

© Winstrand Development 2013-01-28

9

• Skapa en klass

Objektorienterad programmering

1

2

3

Page 10: Objektorienterad Programmering (OOP) - Winstrand

© 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

Page 11: Objektorienterad Programmering (OOP) - Winstrand

© 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...

}

Page 12: Objektorienterad Programmering (OOP) - Winstrand

© 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());

}

Page 13: Objektorienterad Programmering (OOP) - Winstrand

© 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;

}

}

Page 14: Objektorienterad Programmering (OOP) - Winstrand

© 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());

}

Page 15: Objektorienterad Programmering (OOP) - Winstrand

© 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

Page 16: Objektorienterad Programmering (OOP) - Winstrand

© 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; }

}

Page 17: Objektorienterad Programmering (OOP) - Winstrand

© 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;

}

}

Page 18: Objektorienterad Programmering (OOP) - Winstrand

© 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;

}

}

Page 19: Objektorienterad Programmering (OOP) - Winstrand

© 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;

}

}

}