Programming
C++
Turbo Pascal
Delphi
Ver. 1.0 Beta, Don't have a compiler? Now you can write simple scripts ONLINE! This is a basic version -does not include all the Pascal statements. Only to learn basics
Programowanie obiektowe -wstęp z podstawami. Dziedziczenie a także funkcje prywatne i publiczne
Programowanie obiektowe
Żeby sobie zdać sprawę z tego czym jest programowanie obiektowe -warto zdać sobie sprawę jak wyglądało programowanie przedtem. Jeszcze kilka -kilkanaście lat temu programy pisano z modułów -czyli plików w których występowały instrukcje jak ma działać program -jedna funkcja pod drugą. Był też program główny, który uruchamiał po kolei zaprogramowane instrukcje. Każdy program miał szereg zmiennych -obszarów pamięci w których przechowywał najistotniejsze dane -reszta zmiennych była deklarowana w modułach i funkcjach. Gdy znaleziono jakiś błąd -trzeba było zbadać, w którym to module i poprawić program. Praktycznie każdy moduł mógł korzystać z funkcji każdego innego modułu. Robiło się dość spore zagęszczenie w kodzie, coraz mniejsza przejżystość. Największe problemy pojawiały się ze zmiennymi. Gdy zaszła potrzeba rozbudowania programu, np. żeby robił to samo, ale w kilku niezależnych procesach (np. notatnik edytujący więcej niż 1 plik na raz) -trzeba było przerabiać zmienne na tablice, tablice jednowymiarowe na dwuwymiarowe, itd. Po przerobieniu zmiennych trzeba było zedytować każdą funkcję, która korzystała z tych zmiennych. Powielanie bardzo podobnego kodu stawało się uciążliwe. W końcu ktoś wpadł na pomysł, żeby upodobnić programowanie do rzeczywistości. Jeśli np. piszemy grę komputerową, w której jest ludzik -niech będzie niezależny od reszty -niech żyje własnym życiem. Niech program główny nie zajmuje się obliczaniem spadającego śniegu, a krok dalej obliczaniem pozycji ludzika -niech od tego będą 2 osobne programy. Takie podejście ułatwiło wyobrażanie sobie przez programistę wirtualnego świata i przenoszenie go do komputera. Obecnie programista programując obiekty wyobraża sobie jak ma działać tylko ten 1 obiekt -dla ułatwienia przyjmijmy, że zapomina o całej reszcie. Wyobraża sobie jakie funkcje należy oprogramować w kodzie ludzika, żeby był w pełni przydatny w kodzie. Programuje mu metody -jak ma się zachowywać gdy chodzi, gdy skacze. Osobno także programuje śnieg. Opisuje zachowanie opadania płatka śniegu -nie interesuje go co w tym czasie wykona kod ludzika. Poza tym każdy obiekt ma swój obszar pamięci, w którym zapisuje się jego dane -pozycję, potrzebne parametry, funkcje do działania. Dzięki temu podejściu każdy oprogramowany obiekt można dowolnie klonować. Powielanie obiektu jest tak proste -jak napisanie tekstu na ekranie monitora. Wystarczy dziesięciokrotne wywołanie funkcji new lub create (w zależności od języka programowania) na danym obiekcie i na ekranie może pojawić się 10 ludzików -choć oprogramowaliśmy tylko 1 obiekt. To samo dotyczy przykładu notatnika -możemy otworzyć 10 plików na raz -nie zmieniając specjalnie kodu programu, który robił to dla jednego pliku. Obecnie nie ma problemu by w dobrze napisanym programie dodać nowe okno wykonujące podobne zadanie. Poniżej zostało objaśnione działanie pewnych struktur programistycznych. Nie są to oficjalne defenicje, a jedynie opis ich funkcjonalności, w celu ogólnego wyjaśnienia. Przykłady tu podane mają na celu pomóc Ci zrozumieć kompilator języka obiektowego a nie służyć jako pomoc do egzaminu. KlasyKlasy są odrębnymi obiektami, które mają zaplanowaną określoną funkcjonalność. Nie powinny miksować tej funkcjonalności, ale powinne logicznie odseparować od siebie zależności programu. Klasy pozwalają na oprogramowanie kodu który ma własne zmienne, metody (czyli funkcje i procedury) oraz inne zagnieżdżone obiekty. KonstruktoryKonstruktor jest szczególną procedurą wewnątrz klasy, która zawsze jest wykonywana podczas tworzenia obiektu. Konstruktory umożliwiają podstawienie wartości startowych oraz inicjalizacje obiektów, z których korzysta oprogramowywana klasa. Konstruktor powinien sprawić, żeby dowolna publiczna metoda klasy działała zawsze poprawnie, tzn. nie mogła wywołać błędu z powodu braku jakiegoś podelementu. Tak więc programując konstruktor należy pobrać niezbędne dane jako parametry oraz zarezerwować pamięć i utworzyć obiekty podrzędne. InterfejsyInterfejsy gwarantują, że dana klasa spełnia określone kryteria. Weźmy pod uwagę interfejsy w świecie rzeczywistym, w komputerze. Są nimi po prostu złącza komputera, takie jak USB, PCI, DVI. Każde z tych złączy jest gotowe na podpięcie dowolnego urządzenia spełniające standardy interfejsu. Do USB możesz podpiąć mysz, klawiaturę, kamerę internetową, cokolwiek spełnia standard (+5V, -5V, DATA-, DATA+). Każdy powyższy interfejs jest udostępniony publicznie, żeby firmy produkujące urządzenia wiedziały jak należy budować komunikację. Zewnętrzne urządzenia nie mogą wykraczać poza interfejs, czyli interfejs ma za zadanie udostępnić wystarczająće możliwości, żeby urządzenie działało. Podobnie interfejsy w programowaniu udostępniają zestaw procedur i funckji jakimi można się z nimi komunikować. Klasy mogą mowić kompilatorowi, że implementują interfejs, a więc są gotowe obsłużyć wszystkie zaplanowane procedury. To daje programiście możliwość wrzucenia dowolnych klas do jednego worka spełniającego dany interfejs. Dzięki temu możesz budować niezwykle uniwersalne programy, bez konieczności oprogramowania ich zachowania w szczególnych kryteriach. SkładanieKlasy pozwalają na zagnieżdżanie wewnątrz nich innych klas. To daje sporą elestyczność. Klasa nadrzędna może służyć jako dekorator, czyli wywoływać procedury i funkcje klasy podrzędnej, ale przy okazji dokładać coś od siebie. Składanie często jest lepszym rozwiązaniem niż dziedziczenie, ale często rónież nie docenianym. DziedziczenieObiekty umożliwiają coś co bardzo pomaga tworzyć nowe rzeczy -odbiegające nieco od reszty obiektów, ale mające podobne funkcje. W językach programowania nazywa się to dziedziczeniem. Można zaprogramować obiekt podstawowy -podstawową funkcjonalność, którą powinien mieć każdy obiekt zachowujący się podobnie -bez względu na to jaki będzie miał końcowy kształt. Pisze się wtedy osobny program dla funkcji wspólnej, a także osobny program dla każdego dziedziczonego obiektu -ale w obiektach dziedziczonych programuje się tylko to, co odbiega od obiektu podstawowego. Języki programowania z reguły pozwalają na nadpisywanie -czyli całkowitą zmianę funkcji podstawowej lub rozszerzanie funkcji podstawowej. Dziedziczyć można z dowolnym zagnieżdżeniem, czyli dziedziczenie można zagnieżdżać tyle razy ile jest potrzeba. W systemie Windows obiekty graficzne takie jak przyciski, okna, scroll bary, pola tekstowe dziedziczą z kilku obiektów. Pierwszy podstawowy to np. standardowy obiekt, który ma podstawowe parametry obsługujące komunikację z systemem. Kolejny to np. obiekt graficzny, który zawiera funkcje ułatwiające systemowi rysowanie obiektów na ekranie a także zmienne takie jak widoczność, pozycja na ekranie. Później następuje rozgałęzienie obiektów -jedne idą w stronę edycji tekstów, obsługi klawiatury, drugie w stronę obsługi określonych zdarzeń -np. przesunięcia scrollu. Ostatecznie każdy obiekt jaki widać na ekranie jest inny -choć systemowi jest nimi bardzo łątwo zarządzać -bo mają "wspólnego przodka" -wspólny obiekt, który ułątwia komunikację systemu z obiektem. Obiekty mają funkcje wewnętrzne -tzw. prywatne -widoczne tylko wewnątrz tego obiektu oraz zewnętrzne -którymi można się posługiwać wewnątrz jak i na zewnątrz obiektu. Funkcje zewnętrzne może wykonywać każdy inny obiekt, czy program główny -jeśli tylko "widzi" obsługiwany obiekt. To tak jak w przypadku człowieka -część naszych "funkcji" możemy sami zrobić -np. ruszyć ręką, rozmawiać, jeść. Mamy też wbudowane funkcje prywatne, które lepiej, że są od nas niezależne -szybkość tętna serca, obsługa oka, odczyt obrazu, rozpoznawanie mowy. W programowaniu obiektowym zakładamy, że obiekty działają poprawnie. Nie przejmujemy się co się dzieje wewnątrz nich (przynajmniej do czasu gdy wszystko działa poprawnie). Dzięki temu programowanie obiektowe jest prostsze i często ogranicza się do korzystania z funkcji zewnętrznych -publicznych i odpowiedniego wywoływania ich z programu głównego i innych obiektów. Czyli już nie myślimy jak mamy ruszać nogami ludzika -że ma przesuwać się o 5 pikseli co kilka klatek animacji -tylko wywołujemy funkcję idź -a on sam rusza nogami. Ograniczamy się do tych funkcji jakie udostępnia obiekt. Mam nadzieję, że teraz wyraźniej widać zalety programowania obiektowego. Łatwiejsze przeniesienie realnego świata w świat wirtualny, lepsze zarządzanie kodem, lepsza obsługa błędów, w efekcie mniej kodu i wszystko trzyma się porządku. |
ON-LINE scripts!
In tutorial
programowanie obiektowe, dziedziczenie, obiekt, funkcje prywatne, funkcje publiczne