510 likes | 762 Views
Programowanie C++. T: Różnice pomiędzy programowaniem strukturalnym a obiektowym. Programowanie strukturalne. Programowanie strukturalne jest paradygmatem (podstawą, fundamentem) programowania.
E N D
Programowanie C++ T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Programowanie strukturalne • Programowanie strukturalne jest paradygmatem (podstawą, fundamentem) programowania. • W programowaniu strukturalnym stosuje się moduły, które to komunikują się ze sobą odpowiednio zaplanowanymi interfejsami. • Kod programu dzielony jest na funkcje wywołane z jej parametrami, dzięki czemu nie korzystają ze zmiennych globalnych. • Jako struktury algorymiczne stosuje się: sekwencję operacji, funkcję warunkową, pętle (iterację) oraz rekurencję.
Programowanie obiektowe • Podstawą programowania obiektowego jest wprowadzenie pojęcia obiektu. Wewnątrz, którego wyróżniamy jego atrybuty oraz metody. • Najważniejsza cechy programowania obiektowego: • abstrakcja, • hermetyzacja, • dziedziczenie, • polimorfizm.
Programowanie obiektowe • Abstrakcja – każdy obiekt to pewien model, który wykonuje pewne prace, opisuje i zmienia swój stan oraz komunikuje się z innymi obiektami. • przykład z człowiekiem jako mężczyzną i kobietą. • Hermetyzacja - enkapsulacja (ukrywanie implementacji) – zapewnia, że obiekt nie może zmienić stanu atrybutów innych obiektów w nieoczekiwany sposób, a jedynie metody są uprawnione do zmiany jego stanu.
Programowanie obiektowe • Dziedziczenie - nazywamy mechanizm współdzielenia metod między klasami, klasa może dziedziczyć po innej klasie, oznacza to, że oprócz swoich własnych atrybutów oraz metod, uzyskuje także te pochodzące z klasy, z której dziedziczy. • Polimorfizm - to cecha dzięki której jeden interfejs może być stosowany do wykonania różnych zadań. • przykład z metodą daj_głos dla klasy pies i kot
Różnice • Programowanie strukturalne wykorzystuje funkcje, te funkcje pracują na pewnych zmiennych i oddają wynik. Jednak nie komunikują się między sobą. • Programowanie obiektowe grupuje zmienne i metody w jedną całość, czyli obiekt. Wywołanie metody powoduje zmianę stanu obiektu, jego atrybutów. W podejściu obiektowym zmienne powiązane są logicznie ze sobą tak jak w rzeczywistości. Zmiana jednego atrybutu może zmienić wartość innego.
Programowanie C++ T: Obiektowość jako podstawa naturalnego postrzegania świata
Co nazywamy obiektem w świecie rzeczywistym? • Wszystko może być obiektem. • drzewa, • kwiaty, • rzeki, • domy, • miasta, • ludzie, • samochód • …
Projekt i twór • Zanim stworzymy jakiś obiekt, trzeba ustalić czym ten obiekt będzie. W zależności od tego, czy chcemy stworzyć wirtualny samochód, czy motor, należy określić dwie rzeczy: • jakie atrybuty będzie miał ten obiekt, • jakie będzie miał metody działania.
Programowanie C++ T: Definicje klas i obiektów.
Klasa • Klasa to byt programistyczny określający jakie atrybuty i metody będą miały obiekty, które zostaną utworzone na jej podstawie.
Obiekt • Aby „ożywić” klasę, należy utworzyć jej tak zwaną instancję – czyli po prostu utworzyć jej obiekt.
Programowanie C++ T: Przykłady odwzorowania rzeczywistości w kategoriach obiektów
Programowanie C++ T: Opracowanie obiektowego opisu przykładowego programu
Programowanie C++ T: Definiowanie klas, składniki klasy
Definicja klasy classNaszaNazwaKlasy { … // pola i metody składowe klasy };
Przykład klasy classNazwaKlasy { public: //specyfikator dostępu //definiowanie pól intpoleInt; floatpoleFloat; //deklarowanie metod int Metoda1(); void Metoda2(); };
Przykład definicji metody classbryla { public: floata,b,h; floatObliczObjetosc(); }; //definicja metody poza definicją klasy floatbryla::ObliczObjetosc() { return a*b*h; }
Przykład definicji metody classbryla { public: floata,b,h; //definicja metody wewnątrz klasy floatObliczObjetosc() { return a*b*h; }; };
Programowanie C++ T: Definiowanie obiektów, odwoływanie się do składowych obiektu
Deklaracja obiektu NazwaKlasy Obiekt; // deklaracja wskaźnika do obiektu NazwaKlasy *ObiektWsk = newNazwaKlasy;
Dostęp do pól i metod //przypisanie wartości Obiekt.poleInt = 0; Obiekt.poleFloat = 9.04; //wywołanie metody obiektu Obiekt.Metoda1();
Dostęp do pól i metod //przypisanie wartości ObiektWsk->poleInt = 0; ObiektWsk->poleFloat = 9.04; //wywołanie metody obiektu ObiektWsk->Metoda1();
Niszczenie obiektu deleteObiektWsk;
Przykład • bryła.cpp
Programowanie C++ T: Hermetyzacja danych
Enkapsulacja • Polega na ukrywaniu metod i atrybutów dla klas zewnętrznych. • Dostęp do metod i atrybutów możliwy jest tylko z wewnątrz klasy, do której one należą lub z klas zaprzyjaźnionych i klas dziedziczących.
Kontrola dostępu • Poziom dostępności do metod i atrybutów można regulować za pomocą modyfikatorów. • Modyfikatory: • public - pozwala na wolny, nieograniczony dostęp do atrybutów z dowolnej, innej klasy, • private - dostęp do atrybutów tylko i wyłącznie dla klasy, której są elementami, • protected - atrybuty będą dostępne jedynie dla bieżącej klasy oraz dla wszystkich klas po niej dziedziczących.
Przykład • bank.cpp
Programowanie C++ T: Konstruktory i dekonstruktory
Konstruktor • Jest specyficzną funkcją, która jest wywoływana zawsze gdy tworzony jest obiekt. • Jeśli programista nie utworzy go, kompilator automatycznie utworzy konstruktor, który nic nie robi. • Możemy stworzyć własny konstruktor, który będzie posiadła stworzone przez nas własności np. będzie inicjował wartości atrybutów obiektu.
Przykład classprzykładowa { public: // deklaracja atrybutów przykładowa (typ argument) { // // ciało konstruktora }; };
Przykład classsamochod { public: string marka, model; samochod () { marka=”brak”; model=”brak”; }; samochod (string m1, string m2) { marka=m1; model=m2; }; };
Lista inicjalizacyjna • Oczekuje się by obiekt po utworzeniu był w pełni gotowy do użycia. Aby to spełnić konstruktor powinien dokonywać pełnej inicjalizacji wszystkich atrybutów/danych w obiektach. • Sposób inicjalizacji może zależeć od sposobu konstrukcji samego obiektu. • Informacji potrzebnych do inicjalizacji składowych obiektu nie można podawać w miejscu ich definicji, lecz muszą one stanowić nierozłączną część konstruktora.
Przykład classsamochod { public: string marka, model; samochod (string m1, string m2) : marka(m1), model(m2) { // po dwukropku znajduje się lista inicjalizacyjna }; };
Destruktor • Podczas życia obiektu rezerwujemy pamięć, którą chcielibyśmy zwolnić zawsze po usunięciu obiektu. • Pierwszym wariantem jest pamiętanie o wywołaniu funkcji, która będzie za to odpowiedzialna. Takie podejście jest niezalecane i ryzykowne, ponieważ bardzo łatwo zapomnieć o wywoływaniu tej funkcji. • Zalecanym rozwiązaniem jest wykorzystanie destruktorów. Destruktor jest specjalną funkcją, która jest wywoływana zawsze tuż przed zniszczeniem (usunięciem) obiektu z pamięci.
Przykład classsamochod { public: string marka, model; samochod () {}; // inne atrubuty i metody ~samochód () { // ciało destruktora }; };
Programowanie C++ T: Zagnieżdżona definicja klasy
Zagnieżdżona definicja klasy • W C++ można umieścić deklarację klasy w innej klasie. • Klasą zagnieżdżoną to klasa zadeklarowana w jej wnętrzu. • Funkcje składowe klasy zewnętrznej mogą tworzyć obiekty klasy zagnieżdżonej i używać ich. • Na zewnątrz klasa wewnętrzna jest widoczna jeśli umieszczona została w sekcji public.
Przykład classsamochod { public: string marka, model, rocznik; samochod () {…}; class mechanik // klasa zagnieżdżona { string imię; mechanik () {…}; }; };
Programowanie C++ T: Przeładowanie operatorów i nazw funkcji
Przeładowanie/przeciążeniemetod • Język C++ umożliwia tworzenie wielu metod o tej samej nazwie w ramach jednej klasy. • Aby program wiedział, której metody użyć w danym momencie, muszą one się różnić typem lub liczbą argumentów. • przeciążanie (ang. overloading).
Przeładowanie/przeciążenieoperatorów • Przeładowywanie operatorów, jest to definiowanie operatorów dla własnych typów. • Można tego dokonać w większości przypadków jako metodę.
przeładować można następujące operatory: + - * / % // operator modulo ^ & ~ ! = // gdy go nie zdefi-niujemyrobi to za nas kompilator < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- , // gdy go nie zdefiniuje-my robi to za nas kompilator ->* -> () // operator wywołania funkcji [] new// ponizsze operatory gdy ich nie zdefiniujemy robi to za nas kompilator new[] delete delete[]
Przykład • wektor.cpp
Programowanie C++ T: Zaprzyjaźnione funkcje klasy
Funkcje zaprzyjaźnione • Funkcja zaprzyjaźniona z klasą to funkcja, która mimo, że nie należy do klasy posiada pełny dostęp do wszystkich składników tej klasy.
Przykład • wektor2.cpp