PARADYGMATY PROGRAMOWANIA



Podobne dokumenty
Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

Programowanie w języku C++ Podstawowe paradygmaty programowania

Języki i paradygmaty programowania. I. Wprowadzenie

Wykład 8: klasy cz. 4

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Podstawy Programowania Obiektowego

PARADYGMATY PROGRAMOWANIA Wykład 4

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Technologie i usługi internetowe cz. 2

Języki programowania zasady ich tworzenia

Programowanie obiektowe - 1.

Technologie cyfrowe semestr letni 2018/2019

Język programowania PASCAL

Wykład 5: Klasy cz. 3

Podstawy programowania. Wprowadzenie

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Technologie cyfrowe semestr letni 2018/2019

Języki i paradygmaty programowania

Style programowania - krótki przeglad

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Język ludzki kod maszynowy

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

TEMAT : KLASY DZIEDZICZENIE

Zaawansowane programowanie w języku C++ Klasy w C++

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Materiały do zajęć VII

Wstęp do programowania obiektowego. Wykład 2

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Style programowania - krótki przeglad

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Wykład 0 Informacje Podstawowe

Wykład 4: Klasy i Metody

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Definiowanie własnych klas

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Podstawy programowania skrót z wykładów:

Wykład 9: Polimorfizm i klasy wirtualne

Podstawy programowania obiektowego

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Historia modeli programowania

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Technologie obiektowe

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Programowanie obiektowe. Wprowadzenie

Aplikacje w środowisku Java

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Java EE produkcja oprogramowania

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

C++ - [4-7] Polimorfizm

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Wstęp do programowania

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Algorytm. a programowanie -

Do czego służą klasy?

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Wstęp do Programowania 2

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Technologie informacyjne - wykład 12 -

Język C++ Programowanie obiektowe

Materiały do laboratorium MS ACCESS BASIC

Rozdział 4 KLASY, OBIEKTY, METODY

Szablony funkcji i szablony klas

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

PARADYGMATY PROGRAMOWANIA Wykład 3

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Programowanie obiektowe

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Programowanie obiektowe

Szablony klas, zastosowanie szablonów w programach

Transkrypt:

PARADYGMATY PROGRAMOWANIA dr inż. Jerzy Sas, e-mail jerzy.sas@pwr.wroc.pl (w tytule e-mail'i: EDU-PP...) Literatura: 1. Grębosz J. Symfonia C++, Oficyna Kalimach, Kraków, 2000, 2005 2. Grębosz J. Pasja C++, Oficyna Kalimach, Kraków, 2000, 2005 3. Eckel B. - Thinkink in C++, Helion, 2002 4. Eckel B. _ Thinkink in Java, Wydanie 3. Helion, 2003 5. http://wazniak.mimuw.edu.pl/index.php 6. Walczak K. - Nauka programowania obiektowego w C++, W&W, W-wa, 2001 7. Kain E. - Od C do C++, Helion, 1993 8. Liberty J. - Poznaj C++, Intersoftland 1999, 9. Dumański R., Kasprzyk A., Kozłowski M. - Analiza i projektowanie obiektowe, 10. Subieta K. - Obiektowość w projektowaniu i bazach danych, Akademicka Oficyna Wydawnicza PLJ, 1998 11. Subieta K. - Słownik terminów z zakresu obiektowości, Akademicka Oficyna Wydawnicza PLJ, 1999. Program: 1. Wstęp, p`odstawowe pojęcia z zakresu języków programowania i kompilacji 2. Podstawy programowania obiektowego w C++: pojęcia podstawowe, składniki klasy, definiowanie klasy w C++, dziedziczenie, polimorfizm, metody wirtualne, wstęp do przeciążania operatorów 3. Definiowanie własnych operatorów, przeciążanie operatorów, konwersje typów, zaawansowane techniki dziedziczenia, obiektowe wejście-wyjście w C++ 4. Wyjątki 5. Szablony i wzorce projektowe 6. STL omówienie podstawowych elementów 7. Przykłady praktyczne i ćwiczenia 8. Podstawy programowania w Java 9. Elementy najważniejszych pakietów Java 10. Przykładowe programy w Javie

Paradygmat: 1) przyjęty wzorzec w jakiejś dziedzinie (np. postępowania, rozwiązywania kategorii problemów) 2) przyjęty sposób widzenia rzeczywistości w danej dziedzinie 3) niekwestionowalny zbiór pojęć i teorii tworzących podstawy danej nauki Paradygmaty programowania Programowanie imperatywne Programowanie deklaratywne Programowanie sekwencyjne Programowanie obiektowe Programowanie funkcyjne Programowanie w logice Programowanie strukturalne (proceduralne) Programowanie imperatywne - polega na podaniu sposobu wykonania zadania przez określenie kolejnych kroków (poleceń zrozumiałych dla komputera) prowadzących do wykonania zadania Programowanie deklaratywne - polega na określeniu oczekiwanych własności rozwiązania które ma być uzyskane bez podawania szczegółowego algorytmu jego uzyskania Program deklaratywny = sformułowanie problemu w pewnym języku formalnym Przykład: type r_autora = record

id : integer; nazwisko, imie : string; narodowosc : (polska, angielska, rosyjska, niemiecka); end; r_ksiazki = record id : integer; tytul : string; id_autora : integer; ilosc_wypozyczen : integer; end; var aut = array [0.. 1000] of r_autora; ksiazki = array [0.. 1000] of r_ksiazki; Zadanie: Znajdź narodowość, z której książki są najczęściej wypożyczane Program imperatywny: dla każdej książki wyznacz narodowość autora; utwórz tabelę liczności wypozyczeń dla każdej książki dla każdej książki: dodaj jej liczbę wypożyczeń do tabeli liczności na pozycji odpowiadającej narodowości; znajdź pozycję w tabeli liczności o maksymalnej liczbie wypożyczeń; zwróć narodowość odpowiadającą znalezionej pozycji Program deklaratywny: Znajdź narodowość, z której książki są najczęściej wypożyczane wyrażone w języku formalnym (np. SQL) SELECT NARODOWOSC FROM SELECT SUM(ILOSC_WYPOZYCZEN) AS SUMA, NARODOWOSC FROM AUT, KSIAZKI WHERE KSIAZKI.ID_AUTORA = AUT.ID WHERE SUMA = MAX( T1.SUMA ) Cechy programu imperatywnego: Obliczenia rozumiemy tu jako sekwencję poleceń zmieniających krok po kroku stan maszyny, aż do uzyskania oczekiwanego wyniku. Stan maszyny należy rozumieć jako zawartość całej pamięci oraz rejestrów i znaczników procesora. Ten sposób patrzenia na programy związany jest ściśle z budową sprzętu komputerowego o architekturze von Neumanna, w którym poszczególne instrukcje (w kodzie maszynowym) to właśnie polecenia zmieniające ów globalny stan. Języki wysokiego poziomu takie jak Fortran, Algol, Pascal, Ada lub C posługują się pewnymi abstrakcjami, ale wciąż odpowiadają paradygmatowi programowania imperatywnego.

Przykładowo, instrukcje podstawienia działają na danych pobranych z pamięci i umieszczają wynik w tejże pamięci, zaś abstrakcją komórek pamięci są zmienne. 1 Programowanie sekwencyjne: program jest ciągiem prostych instrukcji o ustalonej postaci tekstowej kolejność wykonania instrukcji może być zmieniana za pomocą instrukcji skoku warunkowego i bezwarunkowego skok może nastąpić do dowolnego miejsca w programie, można tworzyć podprogramy, do których można przejść z dowolnego miejsca w programie a następnie powrócić do tego miejsca Przykładowe języki: Assembler, BASIC (wczesne wersje), Fortran (wczesne wersje) Programowanie strukturalne: z ciągów instrukcji można tworzyć instrukcje złożone; instrukcje można zagnieżdżać (w szczególności można zagnieżdżać instrukcje złożone, instrukcja skoku (aczkolwiek zwykle dopuszczalna) jest zdecydowanie niezalecana niekiedy istnieje możliwość zagnieżdżania podprogramów, pojawia się pojęcie zmiennych lokalnych. Przykładowe języki: Pascal, C, Ada, BASIC (nowsze wersje) Programowanie obiektowe: program traktuje się jako zbiór autonomicznych i porozumiewających się ze sobą bytów programistycznych zwanych obiektami, obiekt jest połączeniem danych i wykonywanych na tych danych operacji, program powstaje jako model wycinka rzeczywistości, w której też wyróżniamy obiekty obiekty dzielimy na kategorie - dla każdej kategorii tworzymy wzorzec zwany klasą Przykładowe języki: Java, C++, C# Programowanie deklaratywne: Programowanie funkcyjne: Program jest funkcją wyznaczającą wynik działania programu Przykład - obliczanie wartosci ciągu Fibonacciego: 1 Żródło: http://wazniak.mimuw.edu.pl/index.php?title=paradygmaty_programowania/wyk%c5%82ad_1:_co_to_jest_paradygmat_progra mowania%3f

procedure proc_imper( ind : integer, var wynik : real) begin if (ind = 1) wynik := 3 else if (wyn = 2) wynik := 2 else begin w_2 := 3; w_1 := 2; for i := 3 to ind do begin wynik := w_2 + w_1; w_2 := w_1; w_1 := wynik; end; end; end; function func_deklar( ind : integer ) : real; begin if (ind = 1) func_deklar := 3 else if (wyn = 2) func_deklar := 2; else func_deklar := func_deklar( ind - 2) + func_deklar( ind - 1); end; Cechy programu funkcyjnego: nie ma zmiennych (stanu programu) - tylko argumenty funkcji nie ma trwałych efektów ubocznych wykonania funkcji nie ma instrukcji iteracyjnych instrukcjom iteracyjnym odpowiada rekurencja, do rozwiązania bardziej złożonych problemów definiuje się liczne funkcje pomocnicze Przykładowe języki: LISP, Haskell, można ten styl stosować w większości języków strukturalnych Programowanie w logice: Problem definiuje się w taki sposób aby rozwiązanie mogło być znalezione poprzez wyznaczenie elementów z pewnego zbioru, dla których zachodzi określona własność wyrażona za pomocą formuł (predykatów) logicznych Cechy programu funkcyjnego: Program to sformułowanie własności rozwiązania w języku formalnym pozwalającym na definiowanie predykatów.

Wykonanie programu polega na znalezieniu takich danych, dla których mozna "udowodnić" spełnienie wymaganej własności. Zadaniem kompilatora i interpretera programu logicznego jest znalezienie ciągu operacji prowadzących do rozwiązania problemu (udowodnienia własności Przykład: ojciec(jan, jerzy). ojciec(jerzy, janusz). ojciec(jerzy, józef). dziadek(x, Z) :- ojciec(x, Y), ojciec(y, Z).?- dziadek(x, janusz). 2 Przykładowe języki: Prolog, SQL Inne paradygmaty programowania: programowanie sterowane danymi programowanie sterowane zdarzeniami programowanie współbieżne programowanie wizualne (języki 4GL) 2 Żródło: http://wazniak.mimuw.edu.pl/index.php?title=paradygmaty_programowania/wyk%c5%82ad_1:_co_to_jest_paradygmat_progra mowania%3f

Elementy definicji języka programowania: Składnia - opis wlaśności tekstowych poprawnych programów (pozwalający rozstrzygnąś jaki napis jest poprawnym programem) Metody opisu: - gramatyki bezkontekstowe, gramatyki atrybutowe, notacja BNF Semantyka - opis znaczenia składniowo poprawnych programów Metody opisu: metoda operacyjna, metoda denotacyjna, metoda aksjomatyczna Pragmatyka - zbiór zasad i wskazówek określających jak konstrukcje języka stosować do rozwiązywania praktycznych problemów Metoda opisu: nieformalna Etapy tworzenia programu wynikowego z tekstu napisanego przez programistę Cel: przetworzyć tekst programu w języku źródłowym na program wykonywalny Etapy Wstępne przetwarzanie tekstu, Kompilacja Konsolidacja Interpretacja (opcjonalnie)

Programowanie obiektowe w C++ Pojęcie klasy, obiektu i ich zastosowania Programowanie jako sposób modelowania świata Zastosowanie Modelowane byty Modele dokumenty, towary, osoby oraz związki pomiędzy nimi Aplikacje w bazach danych Edytory tekstu lub HTML Program do projektowania CAD Program symulacyjny (np. do analizy pracy kas w hipermarkecie) Program obliczeniowy (np. do obliczeń inżynierskich) Program używający złożonych struktur danych Program z interfejsem okienkowym typu desktop dokumenty, rozdziały, akapity, ilustracje oraz ich wzajemne położenie punkty, wielokąty powierzchnie, bryły, zestawy brył klienci, wózki/koszyki, towary, kolejki do kas, kasy, CZAS (zegar) liczby zespolone, wektory, macierze stosy, listy, kolejki, drzewa binarne, grafy dokumenty i ich położenie na biurku rekordy w bazie danych, powiązania za pomocą kluczy obcych tablice znakowe (teksty), struktury danych opisujące ich położenie na stronie oraz formatowanie tablice liczbowe struktury danych połączone w listach i tablicach tablice liczbowe zmienne dynamiczne, listy i tablice zmiennych okno główne modelujące blat biurka, okna modelujące poszczególne dokumenty Obiekt = dane + specyficzne operacje na tych danych (metody) Klasa - typ danych określający dane składowe obiektu i sposób wykonywania operacji na nich Obiekt klasy == konkret klasy

Relacja pomiędzy klasą a obiektem - taka sama jak pomiędzy definicją typu a zmienną tego typu, np. typedef struct /* definicja typu dla liczb zespolonych */ double Re, double Im } Complex;... Complex c1, c2; /* deklaracja dwóch zmiennych zespolonych */ Przykład 1) - stos jako obiekt dane: tablica elementów stosu, maksymalna ilość elementów stosu, aktualna ilość elementów na stosie metody: inicjuj, skasuj cały stos, dodaj element do stosu, zdejmij element ze stosu, podaj ilość elementów na stosie Rozważyć możliwe metody implementacji. Przykład 2) - macierz jako obiekt dane: tablica liniowa zawierająca elementy macierzy, rozmiary n x m, wartość wyznacznika, flaga oznaczająca czy dla aktualnej postaci macierzy obliczono wyznacznik, metody: inicjuj na zadany rozmiar (n, m), odczytaj wartość z pozycji (i, j), wstaw wartość na pozycji (i, j), odczytaj wektor-wiersz (j) odczytaj wektor-kolumnę (i) dodaj/odejmij/pomnóż przez inną macierz (M), pomnóż przez wektor, oblicz wyznacznik, odwróć macierz, ustaw macierz jednostkową skasuj Przykład 3) - punkty i wielokąty Punkt 2D dane: współrzędna x współrzędna y

współrzędna w metody: ustaw współrzędną x/y, odczytaj współrzędną x/y przesuń o podany wektor (u, v) skaluj przez podany współczynnik, obróć wokół (0,0) o kąt a. Wielokąt 2D: dane: ilość wierzchołków, tablica lub lista wierzchołków, pole powierzchni, flaga oznaczająca czy pole powierzchni obliczone, metody: inicjuj jako trójkąt (p1, p2, p3) inicjuj jako pusty podaj tablicę wierzchołków, podaj ilość wierzchołków, dodaj wierzchołek po wskazanym (n, p), usuń wskazany wierzchołek (n) podaj pole powierzchni, przesuń o wektor (u, v), skaluj przez podany współczynnik (w), obróć wokół (0,0) o kąt a. Metodologie programowania Metodologia Struktury danych niestrukturalne typy proste, tablice typów prostych strukturalne obiektowe rekordy, zbiory, zagnieżdżanie typów j/w obiekty Konstrukcje programowe instrukcje proste, podprogramy instrukcje strukturalne, zagnieżdżanie procedur i funkcji metody obiektów Cechy łatwa implementacja, nieczytelność programów, trudności w modelowaniu czytelność programów, ułatwienie analizy programu, trudności w modelowaniu łatwość modelowania, Języki Assembler, Fortran Basic Pascal, C, PL/I Modula, C++, Java, Delphi-

przy nierozważnym użyciu - zmniejszenie czytelności i ryzyka błędów Pascal Dlaczego warto stosować styl obiektowy Aspekt projektowy: większe zbliżenie kodu do modelowanego fragmentu rzeczywistości, powiązanie danych i wykonywanych na nich operacji możliwość modelowania hierarchii obiektów i modelowania Aspekt programistyczny: możliwość ukrycia szczegółów implementacji - hermetyzacja, ograniczenie dostępności do składowych obiektu, możliwość zmiany sposobu implementacji bez zmiany interfejsu, zwiększenie czytelności zapisu poprzez jawne powiązanie danych z operacjami na nich Definiowanie klas w C++ Prototyp klasy (deklaracja) - specyfikacja danych i metod klasy Implementacja klasy (definicja) - kod metod klasy. Prototyp klasy x - w pliku x.h Implementacja klasy x - w pliku x.cpp Składnia definicji klasy w EBNF: <definicja klasy> ::= class <nazwa klasy> <sekcja>* }; <sekcja> ::= <kwalifikator dostępu><deklaracja składowej>* <kwalifikator dostępu> ::= public: private: protected: <deklaracja składowej> ::= <deklaracja danej>; <deklaracja metody>; <deklaracja metody> ::= <deklaracja funkcji> Kwalifikator dostępu - określa możliwość używania określonej składowej klasy: public - dostęp nieograniczony, private - dostęp tylko z metod tej klasy, protected - dostęp tylko z metod tej klasy i z metod klas dziedziczących od tej klasy. Po zdefiniowaniu nazwa klasy staje się typem zmiennych. Przykład: class Point2D private: double x;

double y; double w; int calc_dist_to_zero(); }; public: void set_x( double x_coord ); void set_y( double y_coord ); double get_x( void ); double dist_to_zero; Definiowanie metod klasy: <definicja metody> ::= <specyfikacja typu> <nazwa klasy> ::<nazwa metody> ( <parametry> ) <ciało metody> Jeśli metoda będzie zdefiniowana bezpośrednio w definicji klasy to zostanie uznana za metodę inline Przykład: double Point2D::get_x( void ) return x / w; } void Point2D::set_x( double x_coord ) x = x_coord * w; calc_dist_to_zero(); } Deklarowanie obiektów klasy (konkretów): <deklaracja obiektów> = <nazwa klasy> <nazwa obiektu>, ; Przykład: Point2D p1, p2, p3; // deklarowanie pojedynczych // obiektów Point2D points[10]; // deklarowanie tablicy obiektów Odwoływanie się do składowych klasy wewnątrz metod obiektu - bezpośrednio przez nazwę składowej spoza obiektu - przez podanie identyfikatora obiektu i nazwy składowej. p1.set_x( 10.3); x = p1.get_y();

dtz = p1.dist_to_zero; x = p1.x; // BŁĄD - składowa x jest prywatna for (i=0; i < 10; i++) points[i].set_x( 10.6); points[i].set_y( 10.5 + i ); distance_total += points[i].dist_to_zero; } Tworzenie dynamicznych obiektów w pamięci tworzenie obiektu w pamięci - operator new likwidacja obiektu - operator delete <deklaracja wskaźnika do obiektu> = <nazwa klasy> ( * <nazwa obiektu ), ; Point2D *p1, *p2, *p3; // deklaracja wskaźników do // trzech obiektów lub lepiej typedef Point2D *Point2DPtr Pointer2DPtr p1, p2, p3; Pointer2DPtr points[10]; // tablica 10 wskaznikow Pointer2DPtr p_10; // wskaznik na tablice 10 // obiektow Tworzenie obiektów: p1 = new Point2D; p2 = new Point2D; p3 = new Point2D; for (i = 0; i < 10; i++) points[i] = new Point2D; p_5 = new Point2D [ 10 ]; Odwoływanie się: p1->set_x( 10.3); x = p1->get_y(); dtz = p1->dist_to_zero; for (i=0; i < 10; i++) points[i]->set_x( 10.6); points[i]->set_y( 10.5 + i ); distance_total += points[i]->dist_to_zero; }

for (i=0; i < 10; i++) p_10[i].set_x( 10.6); p_10[i].set_y( 10.5 + i ); distance_total += p_10[i].dist_to_zero; } Kasowanie obiektów: delete p1; delete p2; delete p3; for (i=0; i < 10; i++) delete points[i]; } delete [] p_10; Konstruktory i destruktory konstruktor - metoda wywoływana automatycznie w momencie tworzenia obiektu używana do inicjalizacji danych obiektu. Cechy konstruktora: ma taką samą nazwę jak klasa, nie zwraca żadnej wartości. Przykład: class Point2D private: double x; double y; double w;... public: Point2D( void ); Point2D( double coord_x, double coord_y );... double dist_to_zero; }; Point2D::Point2D( void ) x = 0.0; y = 0.0; w = 1.0; dist_to_zero = 0.0; } Point2D::Point2D( double coord_x, double coord_y ) x := coord_x; y = coord_y; w = 1.0;

} dist_to_zero = sqrt(sqr(x) + sqr(y));... Point2D p1; // wywołuje pierwszy konstruktor Point2D p2(10.3, 4.5);// wywołuje drugi konstruktor Przy użyciu wartości domyślnych parametrów można te dwa konstruktory zastąpić jednym: Point2D::Point2D( double coord_x = 0.0, double coord_y = 0.0 ) x := coord_x; y = coord_y; w = 1.0; dist_to_zero = sqrt(sqr(x) + sqr(y)); } konstruktor domyślny - konstruktor, nie wymagający jawnego podawania parametrów aktualnych Konstruktory a tablice obiektów Jeśli istnieje konstruktor domyślny możliwa inicjalicacja tablicy obiektów w postaci Point2D points[3]; Jeśli konstruktor domyślny nie istnieje to należy podać jawnie parametry konstruktora: Point2D points[3] = Points2D(10.3, 15.7 ), Points2D( 8.1, 5.3 ), Points2D( 5.9, 1.7 ) }; Point2DPtr p1 = new Point2D( 10,1. 1.7 ); Jeśli konstruktor domyślny nie istnieje to nie można alokować tablicy obiektów. destruktor - metoda wywoływana automatycznie w momencie gdy obiekt przestaje być dostępny, zwykle używana do zwalniania pamięci zaalokowanej przez obiekt Cechy destruktora: ma nazwę postaci ~XXX gdzie XXX jest nazwą klasy, nie przyjmuje parametrów i nie zwraca wartości, dla zadeklarowanych zmiennych obiektowych wywołuje się gdy zmienna przestaje być dostępna a dla zmiennych dynamicznych w momencie użycia operatora delete. Zadania do wykonania: 1. Napisać klasę i jej implementację modelującą stos

2. Napisać klasę (bez implementacji metod) do modelowania brył w 3D 3. Napisać klasę i jej implementację do wykonywania operacji algebraicznych na wektorach. 4. Napisać klasę i jej implementację do zarządzania zbiorem liczb naturalnych