1 / 50

Programowanie C++

Programowanie C++. T: Różnice pomiędzy programowaniem strukturalnym a obiektowym. Programowanie strukturalne. Programowanie strukturalne jest paradygmatem (podstawą, fundamentem) programowania.

liesel
Download Presentation

Programowanie C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programowanie C++ T: Różnice pomiędzy programowaniem strukturalnym a obiektowym

  2. 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ę.

  3. 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.

  4. 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.

  5. 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

  6. 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.

  7. Programowanie C++ T: Obiektowość jako podstawa naturalnego postrzegania świata

  8. Co nazywamy obiektem w świecie rzeczywistym? • Wszystko może być obiektem. • drzewa, • kwiaty, • rzeki, • domy, • miasta, • ludzie, • samochód • …

  9. 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.

  10. Programowanie C++ T: Definicje klas i obiektów.

  11. Klasa • Klasa to byt programistyczny określający jakie atrybuty i metody będą miały obiekty, które zostaną utworzone na jej podstawie.

  12. Obiekt • Aby „ożywić” klasę, należy utworzyć jej tak zwaną instancję – czyli po prostu utworzyć jej obiekt.

  13. Programowanie C++ T: Przykłady odwzorowania rzeczywistości w kategoriach obiektów

  14. Ćwiczenia praktyczne

  15. Programowanie C++ T: Opracowanie obiektowego opisu przykładowego programu

  16. Ćwiczenia praktyczne

  17. Programowanie C++ T: Definiowanie klas, składniki klasy

  18. Definicja klasy classNaszaNazwaKlasy { … // pola i metody składowe klasy };

  19. Przykład klasy classNazwaKlasy { public: //specyfikator dostępu //definiowanie pól intpoleInt; floatpoleFloat; //deklarowanie metod int Metoda1(); void Metoda2(); };

  20. Przykład definicji metody classbryla { public: floata,b,h; floatObliczObjetosc(); }; //definicja metody poza definicją klasy floatbryla::ObliczObjetosc() { return a*b*h; }

  21. Przykład definicji metody classbryla { public: floata,b,h; //definicja metody wewnątrz klasy floatObliczObjetosc() { return a*b*h; }; };

  22. Programowanie C++ T: Definiowanie obiektów, odwoływanie się do składowych obiektu

  23. Deklaracja obiektu NazwaKlasy Obiekt; // deklaracja wskaźnika do obiektu NazwaKlasy *ObiektWsk = newNazwaKlasy;

  24. Dostęp do pól i metod //przypisanie wartości Obiekt.poleInt = 0; Obiekt.poleFloat = 9.04; //wywołanie metody obiektu Obiekt.Metoda1();

  25. Dostęp do pól i metod //przypisanie wartości ObiektWsk->poleInt = 0; ObiektWsk->poleFloat = 9.04; //wywołanie metody obiektu ObiektWsk->Metoda1();

  26. Niszczenie obiektu deleteObiektWsk;

  27. Przykład • bryła.cpp

  28. Programowanie C++ T: Hermetyzacja danych

  29. 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.

  30. 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.

  31. Przykład • bank.cpp

  32. Programowanie C++ T: Konstruktory i dekonstruktory

  33. 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.  

  34. Przykład classprzykładowa { public: // deklaracja atrybutów przykładowa (typ argument) { // // ciało konstruktora }; };

  35. Przykład classsamochod { public: string marka, model; samochod () { marka=”brak”; model=”brak”; }; samochod (string m1, string m2) { marka=m1; model=m2; }; };

  36. 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.

  37. Przykład classsamochod { public: string marka, model; samochod (string m1, string m2) : marka(m1), model(m2) { // po dwukropku znajduje się lista inicjalizacyjna }; };

  38. 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. 

  39. Przykład classsamochod { public: string marka, model; samochod () {}; // inne atrubuty i metody ~samochód () { // ciało destruktora }; };

  40. Programowanie C++ T: Zagnieżdżona definicja klasy

  41. 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.

  42. Przykład classsamochod { public: string marka, model, rocznik; samochod () {…}; class mechanik // klasa zagnieżdżona { string imię; mechanik () {…}; }; };

  43. Programowanie C++ T: Przeładowanie operatorów i nazw funkcji

  44. 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).

  45. 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ę.

  46. 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[]

  47. Przykład • wektor.cpp

  48. Programowanie C++ T: Zaprzyjaźnione funkcje klasy

  49. 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.

  50. Przykład • wektor2.cpp

More Related