02. Programowanie obiektowe
Autor:
Daniel Celeda
Opublikowano:
6 grudnia 2005
Odsłon:
150 679
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";
}
}
Komentarze
kurs się przyda tym bardziej że jutro mam sprawdzian z programowania :D
pepe,
6 czerwca 2006, 20:53
dobre:>
kuba565,
1 czerwca 2007, 20:28
Dobry Kurs łatwo się czyta :)
Paweł,
31 sierpnia 2007, 09:41
Trochę to łopatologiczne jak dla ludzi którzy znają C++... Może przejdę od razu do dalszych części ;)
OwcA,
3 września 2007, 21:39
OOP (ang. object-oriented programming) – czyli programowanie obiektowe
programowanie zorientowane obiektowo - but nevermind;)
Gandalf,
4 października 2007, 16:19
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.
e7_,
13 listopada 2007, 19:37
Nie czytam kursu, bo mi się nie chce.
Ja tam umiem wszystko z HTML-a.
Powiem więcej.
Umiem też CSS i Java Script.
Haker,
16 kwietnia 2008, 11:21
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!!
Taikoubou,
30 kwietnia 2008, 21:45
Świetny kurs!!!!!!!!
Mon,
22 czerwca 2008, 11:35
a ja mam kolos pojutrze;)
Mon,
22 czerwca 2008, 11:36
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#?
seba000,
14 sierpnia 2008, 15:44
no akurat java ma dużo wspólnego :) ale html hmmm no nie powiem Haker prawdziwy z Ciebie hakier :D
Pokorny,
21 października 2008, 11:32
Kto się zgodzi z moją opinnią??
Informatyk,
17 listopada 2008, 17:50
ja sie zgadzam
ja,
27 czerwca 2009, 19:59
lipa na max"a brak zdefiniowanych konstruktorów i destruktorów metody żle zdefiniowane... brak opisu... i wogóle do niczego ten kurs...
Infoboot,
12 marca 2010, 16:37
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
janek,
31 marca 2010, 19:02
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!
maalybond,
7 lipca 2010, 20:29
Zajfajny kurs :)
Ulfarn,
14 marca 2012, 21:45
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 !
jozik,
2 lipca 2012, 23:22
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 ^^
Qlczas,
26 października 2012, 12:58