02. Programowanie obiektowe

02. Programowanie obiektowe

 Daniel Celeda
Daniel Celeda
00:00
06.12.2005
22 komentarze
232555 wyświetleń

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


Spodobał Ci się ten artykuł? Podziel się z innymi!

Źródło:

Polecamy również w kategorii Kurs C#, cz. I

Komentarze

  • pepe 20:53 06.06.2006

    kurs się przyda tym bardziej że jutro mam sprawdzian z programowania :D

  • kuba565 20:28 01.06.2007

    dobre:>

  • Paweł 09:41 31.08.2007

    Dobry Kurs łatwo się czyta :)

  • OwcA 21:39 03.09.2007

    Trochę to łopatologiczne jak dla ludzi którzy znają C++... Może przejdę od razu do dalszych części ;)

  • Gandalf 16:19 04.10.2007

    OOP (ang. object-oriented programming) – czyli programowanie obiektowe programowanie zorientowane obiektowo - but nevermind;)

  • e7_ 19:37 13.11.2007

    Już dawno chciałem rozpocząć zabawę z programowaniem, ale wszystkie kursy i inne pomoce były pisane w ten sposób jak by to wszystko było dla każdego oczywiste i jasne. A tutaj opisane dosłownie jak dla 10-latka i postrzegam to jako MEGAplus. Nawet tym starszym jak się będzie w ten sposób tłumaczyć to wszystko pochłoną błyskawicznie.

  • Haker 11:21 16.04.2008

    Nie czytam kursu, bo mi się nie chce. Ja tam umiem wszystko z HTML-a. Powiem więcej. Umiem też CSS i Java Script.

  • Taikoubou 21:45 30.04.2008

    Haker... kogo? kogo? kogo? kogo to interesuje??? nie chcesz to nie czytaj i nie wyjeżdżaj tu z przechwłkami... A co do kursu to jest w deche ^^ świetna robota!!

  • Mon 11:35 22.06.2008

    Świetny kurs!!!!!!!!

  • Mon 11:36 22.06.2008

    a ja mam kolos pojutrze;)

  • seba000 15:44 14.08.2008

    Haker taki mądry jesteś? Ja znam b.dobrze pascala, delphi, action-script, musnąłem assemblera , html"a i biorę się za c# . Pozatym co ma html , java i css do c#?

  • Pokorny 11:32 21.10.2008

    <p>no akurat java ma dużo wspólnego :) ale html hmmm no nie powiem Haker prawdziwy z Ciebie hakier :D</p>

  • Informatyk 17:50 17.11.2008

    <p>Kto się zgodzi z moją opinnią??</p>

  • ja 19:59 27.06.2009

    <p>ja sie zgadzam</p> <p> </p>

  • Infoboot 16:37 12.03.2010

    lipa na max"a brak zdefiniowanych konstruktorów i destruktorów metody żle zdefiniowane... brak opisu... i wogóle do niczego ten kurs...

  • janek 19:02 31.03.2010

    infoboot na samym poczatku masz napisane ze bedzie niektorych rzeczy brakowalo, i ze pisac na forum. twoj komentarz mowi o tobie tyle ze albo jestes wtornym analfabeta i nie rozumiesz co czytasz , albo ze nie czytasz wszystkiego. a jak nie czytasz od poczatku to twoje komentarze co do tego sa zbedne. kurs niezly, puki co jestem w trakcie czytania

  • maalybond 20:29 07.07.2010

    Rewelacyjny tutorial, musnąłem wczesnie troche c++, teraz gdy czytam tego tutka to wszystko się odświerza i jest bardzo przyjemnie wytłumaczone. Dzięki!

  • Ulfarn 21:45 14.03.2012

    Zajfajny kurs :)

  • jozik 23:22 02.07.2012

    jest 02 lipiec początek upalnego lata, a mnie to chwyciło: nareszcie coś napisane dla mnie :) i żeby tylko tego różni mędrcy nie spaskudzili !

  • Qlczas 12:58 26.10.2012

    dzięki za ten kurs! po 5 latach przerwy odświeżam sobie materiał z 3 semestrów nauki C# na studiach... ale tym razem to ogarniam ^^

  • Dim 18:53 28.09.2014

    proszę o info, w KlasaGlowna -> drzwiJasia.Stan = "zamknięte" czy ten wyraz "zamknięte" nie musi być napisane z dużej litery jak stan określony w metodzie class Drzwi?

  • xx 10:39 05.02.2015

    zamykanie Close(); deklaracja zmiennych double a, b, c, delta, X1, X2, pierw; Convert.ToDouble a = Convert.ToDouble(txtA.Text); MessageBox.Show MessageBox.Show("Moja liczba = " + a.ToString()); Convert.ToString lbDelta.Text = Convert.ToString(delta); pierwiastek pierw = Math.Sqrt(delta); potęga double b = Math.Pow(a, 2); tablica 1D int[] tab1D = new int[5]; tab1D[0] = 1; max, min for (int i = 0; i < 5; i++) { if (tab1D[i] > max) max = tab1D[i]; if (tab1D[i] < min) min = tab1D[i]; } tablica 2D double[,] tab2D = new double[3, 3]; widoczność if(button1.Visible == false) button1.Visible = true; else button1.Visible = false; zaznaczenie string s=""; if (radioButton1.Checked==true) s="zaznaczono 1"; wykres chart1.Series[0].Points.AddXY(i, y); wybrane comboBox1.SelectedIndex = 3; 2 pętle for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) if (i == j) tab2D[i, j] = 1; if (i < j) tab2D[i, j] = 2; if (i > j) tab2D[i, j] = 0;

Skomentuj

Autor