Podstaw programowania obiektowego wkład 5 klas i obiekt namespace ConsoleApplication1 // współrzędne punktu int, ; Jak, korzstając z dotchczasowej wiedz, zdefiniować w programie punkt? = 3; = 2; Może tak? // wpisanie informacji Console.WriteLine(" (0, 1)",, ); Console.ReadKe(); A co, jeśli punktów jest więcej? A co, jeśli punkt może mieć kolor, nazwę, znacznik widoczności, etc? 1/28
2/28 namespace ConsoleApplication1 // tworzenie punktu p1 = new (); p1. = 3; p1. = 2; Rozwiązanie: stworzenie klas reprezentującej punkt. Tworzenie obiektu klas. // wpisanie informacji Console.WriteLine(" (0, 1)", p1., p1.); Console.ReadKe(); class Definicja klas.
3/28 namespace ConsoleApplication1 // tworzenie punktu p1 = new (); p1. = 3; p1. = 2; // wpisanie informacji Console.WriteLine(" (0, 1)", p1., p1.); Console.ReadKe(); class p1 Ta instrukcja powołuje do żcia obiekt strukturę zawierającą dwie wartości tpu int (zgodnie z definicją).
4/28 namespace ConsoleApplication1 // tworzenie punktu p1 = new (); p1. = 3; p1. = 2; p1 Kropka pozwala odwołać się do składników (składowch) obiektu. 3 2 // wpisanie informacji Console.WriteLine(" (0, 1)", p1., p1.); Console.ReadKe(); class (3, 2)
// tworzenie punktów p1 = new (); p2 = new (); p1. = 3; p1. = 2; p2. = 5; p2. = 1; Na podstawie tej samej definicji klas możem stworzć wiele obiektów. p1 p2 3 2 5 1 // wpisanie informacji Console.WriteLine(" 1 (0, 1)", p1., p1.); Console.WriteLine(" 2 (0, 1)", p2., p2.); Console.ReadKe(); class (3, 2) (5, 1) 5/28
class // przesuń punkt o wektor [d, d] public void Przesuń(int d, int d) += d; p1 += d; p1 = new (); p1. = 3; p1. = 2; 3 2 Klasa to nie tlko struktura. Klas mogą mieć metod. p1 4 2 (3, 2) Console.WriteLine(" (0, 1)", p1., p1.); p1.przesuń(1, 0); Console.WriteLine(" (0, 1)", p1., p1.); (4, 2) 6/28
class // przesuń punkt o wektor [d, d] public void Przesuń(int d, int d) += d; += d; p1 = new (); p1. = 3; p1. = 2; p1 Jak to działa? 3 2 Console.WriteLine(" (0, 1)", p1., p1.); p1.przesuń(1, 0); Console.WriteLine(" (0, 1)", p1., p1.); 7/28
class // przesuń punkt o wektor [d, d] public void Przesuń(int d, int d) d 1 d 0 += d; += d; p1 = new (); p1. = 3; p1. = 2; this Jak to działa? 3 2 Console.WriteLine(" (0, 1)", p1., p1.); p1.przesuń(1, 0); Console.WriteLine(" (0, 1)", p1., p1.); 8/28
class // przesuń punkt o wektor [d, d] public void Przesuń(int d, int d) += d; += d; Można też zapisać: this. += d; this. += d; p1 = new (); p1. = 3; p1. = 2; d 1 d 0 this Jak to działa? 4 2 Console.WriteLine(" (0, 1)", p1., p1.); p1.przesuń(1, 0); Console.WriteLine(" (0, 1)", p1., p1.); 9/28
class // przesuń punkt o wektor [d, d] public void Przesuń(int d, int d) += d; += d; p1 = new (); p1. = 3; p1. = 2; p1 Jak to działa? 4 2 Console.WriteLine(" (0, 1)", p1., p1.); p1.przesuń(1, 0); Console.WriteLine(" (0, 1)", p1., p1.); 10/28
class public void Przesuń(int d, int d)... public () Console.WriteLine("to jest konstruktor"); p1 = new (); p2 = new (); p1. = 3; p1. = 2; p2. = 5; p2. = 1; p1 Specjalnm tpem metod jest konstruktor. 3 2 p2 to jest konstruktor 5 1 to jest konstruktor Console.WriteLine(" 1 (0, 1)", p1., p1.); Console.WriteLine(" 2 (0, 1)", p2., p2.); 11/28
12/28 class public void Przesuń(int d, int d)... inicjalizacja zmiennch. public (int, int ) this. = ; this. = ; p1 = new (3, 2); p2 = new (5, 1); Przeważnie zadaniem konstruktora jest Można też zapisać w mniej niejednoznaczn sposób: public (int, int ) = ; = ; p1 3 2 p2 5 1 Console.WriteLine(" 1 (0, 1)", p1., p1.); Console.WriteLine(" 2 (0, 1)", p2., p2.);
13/28 class public void Przesuń(int d, int d)... inicjalizacja zmiennch. public (int, int ) this. = ; this. = ; 3 2 p1 = new (3, 2); p2 = new (5, 1); this Przeważnie zadaniem konstruktora jest Console.WriteLine(" 1 (0, 1)", p1., p1.); Console.WriteLine(" 2 (0, 1)", p2., p2.);
14/28 class Ciekawostka: konstruktor domśln.... main... p = new (); class public (int, int ) this. = ; this. = ; Dlaczego przestało to działać?... main... p = new ();
15/28 class Specjalna metoda: ToString(). public void Przesuń(int d, int d)... public (int, int )... public override string ToString() return "jak to działa?"; jak to działa? p1 = new (3, 2); Console.WriteLine(" 0", p1); Można to też zapisać: Console.WriteLine(" 0", p1.tostring());
16/28 class public void Przesuń(int d, int d) reprezentacji... obiektu. public (int, int )... public override string ToString() return "(" + + ", " + + ")"; p1 = new (3, 2); Console.WriteLine(" 0", p1); Zadaniem metod ToString() jest zwrócenie tekstowej (3, 2)
17/28 class private int, ; public void Przesuń(int d, int d) += d; += d; public (int, int ) = ; = ; public override string ToString() return "(" + + ", " + + ")"; p1 = new (3, 2); p1.przesuń(1, 0); Console.WriteLine(p1); Pojęcie hermetzacji. To, co jest istotne dla użtkownika klas, nosi nazwę interfejsu. Jest to funkcjonalność, z jakiej można skorzstać. Powinien bć publiczn i nie powinien się zbt często zmieniać.
18/28 class private int, ; public void Przesuń(int d, int d) += d; += d; public (int, int ) = ; = ; public override string ToString() return "(" + + ", " + + ")"; p1 = new (3, 2); p1.przesuń(1, 0); Console.WriteLine(p1); Pojęcie hermetzacji. Implementacja nie jest ważna dla użtkownika klas. Jest prwatną sprawą twórc klas i może zmieniać się bez ostrzeżenia. To ona sprawia, że interfejs działa.
19/28 Przkład: Klasa Konto. Konto konto = new Konto(); konto.wpłać(1000); konto.wpłać(250); Console.WriteLine(konto.Saldo()); Console.WriteLine(konto); class Konto... public void Wpłać(double kwota)... public void Wpłać(double kwota)... public double Saldo()... public override string ToString()...
Przkład: Klasa Konto. Konto konto = new Konto(); konto.wpłać(1000); konto.wpłać(250); Console.WriteLine(konto.Saldo()); Console.WriteLine(konto); class Konto private double suma; public void Wpłać(double kwota) suma += kwota; public void Wpłać(double kwota) suma -= kwota; public double Saldo() return suma; public override string ToString() return suma.tostring("f2"); 20/28
21/28 class Konto Przkład: Klasa Konto. private double suma; public void Wpłać(double kwota) suma += kwota; public void Wpłać(double kwota) if (kwota <= 0 kwota > suma) Console.WriteLine("Nie możesz wpłacić."); return; suma -= kwota; public double Saldo() return suma; public override string ToString() return suma.tostring("f2"); Jaką to: Konto.Wpłać(250); ma przewagę nad tm? Konto.suma -= 250;
Zespolona z1 = new Zespolona(), z2 = new Zespolona(2, 1), z3 = new Zespolona(3); Przkład: Klasa Zespolona. z1.dodaj(z2); z2 = z1.plus(z3); Console.WriteLine(z2); class Zespolona... public Zespolona()... public Zespolona(double r)... 5+1i public Zespolona(double r, double i)... public void Dodaj(Zespolona z)... public Zespolona Plus(Zespolona z)... public override string ToString()... 22/28
23/28 class Zespolona Przkład: Klasa Zespolona. private double re, im; public Zespolona() this.re = 0; this.im = 0; Konstruktor public Zespolona(double r) this.re = r; this.im = 0; public Zespolona(double r, double i) this.re = r; this.im = i; public void Dodaj(Zespolona z)... public Zespolona Plus(Zespolona z)... public override string ToString()...
24/28 class Zespolona Przkład: Klasa Zespolona. private double re, im; public Zespolona() Można tak, gdż public Zespolona(double r) składowe domślnie są zerowane. this.re = r; this.im = 0; public Zespolona(double r, double i) this.re = r; this.im = i; public void Dodaj(Zespolona z)... public Zespolona Plus(Zespolona z)... public override string ToString()...
25/28 class Zespolona private double re, im; public Zespolona() public Zespolona(double r) : this(r, 0) public Zespolona(double r, double i) this.re = r; this.im = i; public void Dodaj(Zespolona z)... public Zespolona Plus(Zespolona z)... public override string ToString()... Przkład: Klasa Zespolona. Zadanie pozostawione innemu konstruktorowi.
26/28 class Zespolona private double re, im; public Zespolona() public Zespolona(double r) : this(r, 0) public Zespolona(double r, double i)... public void Dodaj(Zespolona z)... public Zespolona Plus(Zespolona z)... public override string ToString() if (im >= 0) return re + "+" + im + "i"; return re + "" + im + "i"; Przkład: Klasa Zespolona. Bez znaku + jeśli wartość urojona jest ujemna.
27/28 class Zespolona private double re, im; public Zespolona() public Zespolona(double r) : this(r, 0) public Zespolona(double r, double i)... public void Dodaj(Zespolona z) this.re += z.re; this.im += z.im; public Zespolona Plus(Zespolona z)... public override string ToString()... Przkład: Klasa Zespolona. Dodajem do samego siebie. this Zespolona re im z Zespolona re im
28/28 class Zespolona private double re, im; public Zespolona() public Zespolona(double r) : this(r, 0) public Zespolona(double r, double i)... public void Dodaj(Zespolona z)... public Zespolona Plus(Zespolona z) Zespolona wnik = new Zespolona(); wnik.re = this.re + z.re; wnik.im = this.im + z.im; return wnik; public override string ToString()... Przkład: Klasa Zespolona. Musim zwrócić sumę siebie i przekazanego argumentu - jakąś nową zmienną zespoloną. this Zespolona re im z Zespolona re im wnik Zespolona re im