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

