Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.
PODSTAWOWE POJĘCIA PROGRAMOWNIA OBIEKTOWEGO
• Paradygmat : nabyty sposb myślenia na jakiś temat, kształtujący świadomie i podświadomie rozumowanie i działanie. W uproszczeniu można powiedzieć, że jest to styl programowania. • Paradygmaty programowania : • programowanie proceduralne • programowanie modularne • abstrakcyjne typy danych • programowanie obiektowe • programowanie uoglnione • Język wspiera dany styl programowania, jeśli dostarcza mechanizmw dzięki ktrym programowania w tym stylu jest wygodne (łatwe, bezpieczne, efektywne). Język taki ma dostatecznie dużo udogodnień, przypadkowe odstępstwa są kontrolowane, posiada potrzebne biblioteki standardowe. • Język umożliwia dany styl programowania, jeśli dostarcza mechanizmw, ktre pozwalają programować w tym stylu, ale wymagany jest pewien wysiłek lub umiejętności. • Język C++ • bazuje na języku C • wspiera rżne style programowania. • nie jest czystym językiem obiektowym, jest językiem hybrydowym 1 Wykład 1 Programowanie proceduralne • Paradygmat : Zadecyduj, jakie chcesz mieć procedury; stosuj najlepsze algorytmy jakie możesz znaleźć. • Procedura : wyodrębniona z programu głwnego sekwencja instrukcji o nadanej nazwie, wskazująca konkretne zadanie do wykonania. • Przykład : // Funkcja obliczająca pierwiastek kwadratowy double sqrt(double arg) { // kod obliczania pierwiastka kwadratowego } // Funkcja głwna int main () { double pierw; // Wywołanie funkcji obliczania pierwiastka pierw=sqrt(2.0); ... } 2 Wykład 1 Programowanie modularne • Paradygmat : Zdecyduj, jakie chcesz mieć moduły; podziel program w taki sposb, aby ukryć dane w modułach. • Moduł : zbir powiązanych ze sobą procedur wraz z danymi, na ktrych działają. • Programowanie modularne: rozbicie programu na mniejsze składniki, ktre mogą być konstruowane niezależnie, następnie łączenie ich w całość w celu uformowania kompletnego programu. • Przykład: Moduł 1: interfejs stosu w pliku stos.h namespace Stos { void wloz(char); char zdejmij(); } Moduł 2: implementacja stosu w pliku stos.cpp #include "stos.h" // dołącz interfejs namespace Stos { const int max_rozmiar=200; char v[max_rozmiar]; int wierzcholek=0; } void Stos::wloz(char c) { /* sprawdź czy stos nie jest pełny i włż c */ } char Stos::zdejmij() { /* sprawdź czy stos nie jest pusty i zdejmij element */ } Moduł 3: kod użytkownika korzystającego ze stosu w pliku zadanie.cpp #include "stos.h" int main() { Stos::wloz('a'); ... } 3 Wykład 1 Abstrakcyjne typy danych czyli typy zdefiniowane przez użytkownika (programowania w stylu obiektowym) • Paradygmat : Zadecyduj jakie chcesz mieć typy; dla każdego typu dostarcz pełny zbir operacji. • Tradycyjny język: • ustalony zbir wbudowanych typw danych dla powszechnie stosowanych rodzajw zmiennych • typy definiowane były według sposobu przechowywania informacji w komputerze • programista musiał myśleć na poziomie przechowywania danych • Wspłczesny język: • pozwala na dodawanie nowych typw, łącząc na rżne sposoby typy istniejące, • nowy typ grupuje cechy i czynności związane z określonym bytem, • nowe typy traktowane są tak samo jak gdyby były wbudowane w język. • Klasa : narzędzie do tworzenia nowych typw danych • Przykład: class complex { double re, in; public: complex() // domyślna liczba zespolona { re=im=0;} complex(double r, double i ) // tworzenie z dwch składnikw { re=r; im=i;} complex(double r) // tworzenie ze skalara { re=r; im=0;} // definicje funkcji operacji // na liczbach zespolonych: // +, -, *, / == != }; void f() { complex a(2), b=1/a, c; c=a+b; ... } 4 Wykład 1 Programowanie obiektowe • Paradygmat : Zdecyduj, jakie chcesz mieć klasy; dla każdej klasy dostarcz pełny zbir operacji; korzystając z mechanizmu dziedziczenia jawnie wskaż co jest wsplne. • Oprogramowanie konwencjonalne: rozwiązuje konkretne problemy • Oprogramowanie obiektowe: modeluje system • Efekty: • oprogramowanie konwencjonalne Î program rozwiązuje pierwotne zadanie, jest niedopasowany do radzenia sobie z innymi zadaniami, nawet jeśli odnoszą się do tych samych rzeczywistych obiektw; nowe programy budowane są od podstaw , • oprogramowanie obiektowe - model może być użyty do rozwiązania całego szeregu zadań, w tym zadania pierwotnego; nowe programy składane są z części już istniejących. • Cechy programowania obiektowego: • abstrakcyjne typy danych • hermetyzacja danych • dziedziczenie • polimorfizm • Hermetyzacja (ang. encapsulation , kapsułkowanie, enkapsulacja) - ograniczenie dostępności danych i funkcji wewnętrznych klas i obiektw, udostępnianie ich jedynie za pomocą specjalnych funkcji nazywanych metodami lub komunikatami • dane zabezpieczone są przed wpływem obcych obiektw, • obce obiekty uniezależniane są od danych, ewentualne zmiany ograniczane są do pojedynczego obiektu. Użytkownik klasy musi wiedzieć tylko jak nazywa się dana operacja, do czego służy, jak się ją wywołuje. • Dziedziczenie : • jedna klasa obiektw może być zdefiniowana jako szczeglny przypadek innej oglniejszej klasy, a definicje metod i pl danych klasy oglniejszej umieszczane są automatycznie w klasie szczeglnej, • klasa oglna nazywana jest klasą bazową a klasa szczeglna klasą pochodną , • klasy pochodne mogą definiować swoje własne metody i pola danych, ktre mogą przesłaniać dziedziczone metody i pola danych, • klasa może dziedziczyć właściwości więcej niż jednej klasy - dziedziczenie wielobazowe . • Polimorfizm : wielopostaciowość - możliwość istnienia wielu metod o tej samej nazwie, powiązana z możliwością wyboru konkretnej metody podczas wykonywania. Polimorfizm związany jest z dziedziczeniem Î pozwala w klasie pochodnej redefiniować funkcję składową zachowując tę samą nazwę, typ i liczbę argumentw. 5 Wykład 1 • |
Menu
|