Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Object-Orienteret Programmering og Design Kilde: Joe Hummel.

Lignende præsentationer


Præsentationer af emnet: "Object-Orienteret Programmering og Design Kilde: Joe Hummel."— Præsentationens transcript:

1 Object-Orienteret Programmering og Design Kilde: Joe Hummel

2 2 Nordjyllands Erhvervakademi - 2007 Indhold “Classes, objects and object-oriented programming (OOP) play a fundamental role in.NET. C# features full support for the object- oriented programming paradigm…” Designe dine egne klasser Nedlægge objekter og garbage collection Arv

3 3 Nordjyllands Erhvervakademi - 2007 Del 1 Designe dine egne klasser…

4 4 Nordjyllands Erhvervakademi - 2007 Motivation.NET indeholder tusindvis af forprogrammerede klasser i FCL Så hvorfor lave dine egne? –for at modelere entiteter der er unikke for dit domæne… Eksempler: –ansatte –kunder –produkter –ordrer –dokumenter –etc.

5 5 Nordjyllands Erhvervakademi - 2007 Simple class members C# understøtter standard fields (attributer), metoder og konstruktører –med standard tilgang: public, private, protected public class Person { public string Name; // fields public int Age; public Person() // default constructor { this.Name = "?"; this.Age = -1; } public Person(string name, int age) // parameterized ctor { this.Name = name; this.Age = age; }// ctor = konstruktør public override string ToString() // method { return this.Name; } }//class

6 6 Nordjyllands Erhvervakademi - 2007 Grundlæggende design regler Tilbyd konstruktør(er) Undlad default konstruktør for parameteriseret initialisation Overskriv ToString og Equals Data hiding: “Gem så mange detaljer som du kan" –Giv tilgang via accessors og mutators (get/set metoder) –.NET tilbyder en renere mekanisme via properties…

7 7 Nordjyllands Erhvervakademi - 2007 Properties Mål: –At give brugeren af klassen mulighed for sikkert at skrive som kode som dette –provides field-like access with method-like semantics… –… giver styring af tilgang, validering, data persistence, screen opdatering, etc. Person p; p = new Person("joe hummel", 40) p.Age = p.Age + 1;

8 8 Nordjyllands Erhvervakademi - 2007 Observation Aflæs værdi ("Get") vs. tildel værdi ("Set") Person p; p = new Person("joe hummel", 40) p.Age = p.Age + 1; Get age Set age

9 9 Nordjyllands Erhvervakademi - 2007 Property implementation Implementation options: –read-only –write-only –read-write public class Person { private string m_Name; private int m_Age;. public string Name { get {... } } public int Age { get {... } set {... } } } read-only read-write

10 10 Nordjyllands Erhvervakademi - 2007 Eksempel Simpel implementation bare læser / skriver attributten: public class Person { private string m_Name; private int m_Age;. public string Name // Name property { get { return this.m_Name; } } public int Age // Age property { get { return this.m_Age; } set { this.m_Age = value; } }

11 11 Nordjyllands Erhvervakademi - 2007 Short way to write a read-write property Just declare the property and use {get; set;} The instance variable is implicit declared Cannot be used on read-only and write-only properties public class Person { private string m_Name;. public string Name { get {... } } public int Age { get; set; } } read-only read-write

12 12 Nordjyllands Erhvervakademi - 2007 Parameter overførsel C# tilbyder 3 muligheder: –pass-by-value (default) –pass-by-reference –copy-out

13 13 Nordjyllands Erhvervakademi - 2007 Pass-by-value Parameteroverførsel med Pass by value er default –data kopieres til metoden –Ændringer i parameteren indenfor metoder har kun betydning for den lokale kopi value parameter void F(int x) { x = 0; } int y = 9; F(y); y uændret

14 14 Nordjyllands Erhvervakademi - 2007 Pass-by-reference ref parameter overfører data ind og ud –brug keyword ref ved både erklæring og kald –skal bruge en variabel som parameter, altså ikke f.eks tallet 9 –variablen skal være initialiseret inden kaldet ref parameter, initieret til 9 void G(ref int x) { x += 1; } int y = 9; G(ref y); y sat til 10

15 15 Nordjyllands Erhvervakademi - 2007 Copy-out out parameter returnerer data gennem en parameter –brug keyword out ved både erklæring og kald –skal bruge en variabel som parameter, altså ikke f.eks tallet 9 –parameteren skal tildeles en værdi i metoden ellers fås compiler fejl out parameter void H(out int x) { x = 0; } int y; H(out y); y set to 0 assignment required

16 16 Nordjyllands Erhvervakademi - 2007 Del 2 Nedlæg objekter og garbage collection…

17 17 Nordjyllands Erhvervakademi - 2007 Objekt oprettelse og nedlæggelse Objekter er explicit oprettet via new Objekter er aldrig nedlagt explicit! –.NET bruger garbage collection til at nedlægge objekter –garbage collector kører på uforsigelige tidspunkter…

18 18 Nordjyllands Erhvervakademi - 2007 Finalization Objekter kan blive notificeret når de bliver garbage collected Garbage collector (GC) kalder objektets finalizer public class Person {. ~Person() // finalizer {... }

19 19 Nordjyllands Erhvervakademi - 2007 Kan du stole på finalization? Nej! –Det er uforudsigeligt –Det er dyrt (.NET lægger objektet i en speciel kø, etc.) Alternativer? –design klasser så finalization er unødvendig –tilbyd Close / Dispose metoder som brugeren af klassen kan kalde ** Warning ** As a.NET programmer, you are responsible for calling Dispose / Close. Rule of thumb: if you call Open, you need to call Close / Dispose for correct execution. Common examples are file I/O, database I/O, and XML processing.

20 20 Nordjyllands Erhvervakademi - 2007 Del 3 Arv…

21 21 Nordjyllands Erhvervakademi - 2007 Arv bruges når en afledt klasse “er-en” basisklasse giver mulighed for kodegenbrug –giver genbrug af design & polymorfisk programmering Eksemple: –en Student er-en Person Undergraduate Person StudentEmployee GraduateStaffFaculty

22 22 Nordjyllands Erhvervakademi - 2007 Implementation C# understøtter single arv - både statisk og dynamisk binding –base keyword giver dig adgang til basisklassens medlemmer public class Student : Person { private int m_ID; public Student(string name, int age, int id) // constructor :base(name, age) { this.m_ID = id; } Student Person

23 23 Nordjyllands Erhvervakademi - 2007 C#’s understøttelse af arv Hvis man ikke gør noget kaldes default konstruktøren i superklassen automatisk før subklassens konstruktør Anbefaling: Implementer subklassens konstruktør så den explicit kalder en passende kontruktør i superklassen // This time, use the C# "base" keyword to call a custom // constructor on the base class. public Manager(string fullName, ulong numbOfOpts): base(fullName) { numberOfOptions = numbOfOpts; }

24 24 Nordjyllands Erhvervakademi - 2007 C#’s understøttelse af polymorfi virtual og override keywords: Hvis en metode i superklassen skal kunne overskrives i en subklassen, skal den specifiseres som virtual: –Employee : public virtual void GiveBonus(float amount){... } Når en subklasse overskriver en virtual metode skal den specifiseres med override –Manager : public override void GiveBonus(float amount){... }

25 25 Nordjyllands Erhvervakademi - 2007 C#’s understøttelse af polymorfi Abstrakte klasser: –abstract public class Employee{...} Abstrakte metoder: En klasse som er defineret som abstrakt kan definere et antal abstrakte metoder. Abstrakte metoder kan benyttes når man vil definere en metode som ikke har en default implementation –Employee : public abstract void GiveBonus(float amount);

26 26 Nordjyllands Erhvervakademi - 2007.NET gør kraftig brug af arv Eksempler: –alle typer arver fra klassen System.Object –implementation af WinForms

27 27 Nordjyllands Erhvervakademi - 2007 Example #1: System.Object

28 28 Nordjyllands Erhvervakademi - 2007 Example #2: WinForms System.Windows.Forms namespace Object MarshalByObjectRef Component Control ScrollableControl ContainerControl Form Form1 Button CheckBox TextBoxBase TextBox RichTextBox System namespace System.ComponentModel namespace Your custom form classes inherit implementation details from many different classes up the inheritance hierarchy ButtonBase

29 29 Nordjyllands Erhvervakademi - 2007 Opsummering Object-orienteret programmering er paradigmet i.NET C# er et fuldt objekt-orienteret programmeringssprog –fields, properties, methods, constructors, overloading –garbage collection –single inheritance

30 30 Nordjyllands Erhvervakademi - 2007 References Books: –T. Archer and A. Whitechapel, "Inside C#" (2 nd edition) –S. Lippman, "C# Primer" –J. Mayo, "C# Unleashed"


Download ppt "Object-Orienteret Programmering og Design Kilde: Joe Hummel."

Lignende præsentationer


Annoncer fra Google