OOP (ang. object-oriented programming) – czyli programowanie obiektowe.
Większość współczesnych aplikacji pisana jest w językach obiektowych. Czym zatem są te obiekty? Często spotykam się ze stwierdzeniem, że „wszystko jest obiektem”. Wystarczy tylko rozejrzeć się wokół siebie żeby się z tym zgodzić. Szklanka, łyżka, stół, szafka itd. To wszystko są obiekty. Obiekty składają się z innych obiektów. Np. dom składa się z dachu, drzwi, okien. Drzwi z klamki, zawiasów itd. W zależności od potrzeb, powiązania między obiektami możemy rozpatrywać na różnych poziomach. Możemy także wyróżnić pojęcie „klasy”. Klasa określa nam typy obiektów, ale ich nie konkretyzuje np. Jaś jest obiektem, a człowiek to klasa. Inaczej mówiąc, Jaś jest obiektem klasy człowiek. Dom Jasia jest obiektem klasy Dom.
A co to ma wszystko wspólnego z programowaniem?
Jak się przekonamy, bardzo dużo. Programując w językach obiektowych możemy nasze programy składać z obiektów jak z klocków.
Obiekty a programowanie
Gdy próbujemy opisać jakiś obiekt z otaczającej nas rzeczywistości trudno nam wymienić jego wszystkie cechy. W zasadzie jest to niemożliwe. Programując, nie możemy sobie na to pozwolić, tak więc obiekty w naszych programach muszą być ściśle zdefiniowane. Musimy wiedzieć z jakich cech się składają i jakie wartości mają te cechy, dlatego należy zdecydować się jakie cechy są ważne i umieścić je w definicji klasy. Pozostałe cechy należy odrzucić
Zdefiniujmy więc klasę Dom:
Cechy: | - kolor ścian |
- kolor dachu | |
- drzwi | |
- okno |
Tyle nam wystarczy, a więc sami decydujemy jak dokładnego opisu nam potrzeba. Definicja klas powinna być adekwatna do celu jaki chcemy osiągnąć, np. jeśli w naszym programie będziemy musieli rozróżniać obiekty klasy Dom po kolorze ścian, to tylko ta cecha nam wystarczy, pozostałe będą zbędne.
Zdefiniujmy obiekt klasy Dom:
Dom Jasia | |
---|---|
Kolor ścian: | biały |
Kolor dachu: | czarny |
Drzwi: | drzwi Jasia |
Okno: | okno małe |
Kolory to proste typy, które nie są obiektami. Jednak drzwi i okna to też obiekty, a więc potrzeba nam definicji klas: Drzwi oraz Okno.
Drzwi | |
---|---|
Cechy: | - materiał |
- kolor | |
- stan | |
Okno | |
Cechy: | - szerokość |
- wysokość | |
- stan |
A następnie obiekty:
Drzwi Jasia | |
---|---|
Materiał: | drewno |
Kolor: | brązowy |
Stan: | zamknięte |
Okno małe | |
Szerokość: | 0.5 metra |
Wysokość: | 1 metr |
Stan: | zamknięte |
Cechy możemy utożsamiać ze zmiennymi w programowaniu (w klasie są to tzw. pola). Dodatkowo obiekt może wykonywać ustalone czynności, np. drzwi i okna mogą się otwierać. Możemy także założyć, że dom potrafi zmieniać swój kolor. Funkcje te nazywamy metodami.
Ostateczne definicje klas wyglądają następująco:
Dom | |
---|---|
Pola: | - kolor ścian |
- kolor dachu | |
- drzwi | |
- okno | |
Metody: | - zmień kolor ścian |
- zmień kolor dachu | |
Drzwi | |
Cechy: | - materiał |
- kolor | |
- stan | |
Metody: | - zamknij |
- otwórz | |
Okno | |
Cechy: | - szerokość |
- wysokość | |
- stan | |
Metody: | - zamknij |
- otwórz |
Jak to zrobić w C#?
Przyjrzyjmy się programowi w C#, który stworzy nam taki własny mini-świat. Przypuszczam, że nie będzie łatwo go zrozumieć, ponieważ na tym etapie nie posiadamy wystarczającej wiedzy. Wystarczy, że oswoimy się z widokiem kodu napisanego w C#, a w ramach pracy domowej możemy spróbować przeanalizować linijkę po linijce i zastanowić się co mogą znaczyć. Na dokładne opisanie poszczególnych instrukcji przyjdzie czas w dalszych częściach kursu.
class Drzwi
{
public string Material;
public string Kolor;
public string Stan;
public void Otworz()
{
Stan = "Otwarte";
}
public void Zamknij()
{
Stan = "Zamknięte";
}
}
class Okno
{
public double Szerokosc;
public double Wysokosc;
public string Stan;
public void Otworz()
{
Stan = "Otwarte";
}
public void Zamknij()
{
Stan = "Zamknięte";
}
}
class Dom
{
public string KolorScian;
public string KolorDachu;
public Drzwi DrzwiDomu;
public Okno OknoDomu;
public void ZmienKolorScian(string kolor)
{
KolorScian = kolor;
}
public void ZmienKolorDachu(string kolor)
{
KolorDachu = kolor;
}
}
class KlasaGlowna
{
static void Main()
{
Drzwi drzwiJasia = new Drzwi();
drzwiJasia.Kolor = "brązowy";
drzwiJasia.Material = "drewno";
drzwiJasia.Stan = "zamknięte";
Okno oknoJasia = new Okno();
oknoJasia.Szerokosc = 0.5;
oknoJasia.Wysokosc = 1;
oknoJasia.Stan = "zamknięte";
Dom domJasia = new Dom();
domJasia.DrzwiDomu = drzwiJasia;
domJasia.OknoDomu = oknoJasia;
domJasia.KolorScian = "biały";
domJasia.KolorDachu = "czarny";
}
}