Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Podobne dokumenty
Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa PROJEKTOWANIE OBIEKTOWE

Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Podejście obiektowe składowe modelu:

Analiza obiektowa. Analiza obiektowa. Analiza obiektowa. Obiektowe metody inżynierii oprogramowania OBIEKTOWE METODY INŻYNIERII OPROGRAMOWANIA

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Słownik programisty: Struktury jako typy abstrakcyjne

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

Definiowanie własnych klas

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

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

Podstawy Programowania Obiektowego

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

Do czego służą klasy?

TEMAT : KLASY DZIEDZICZENIE

Wykład 4: Klasy i Metody

Technologie obiektowe

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

Wykład 8: klasy cz. 4

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

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Materiały do zajęć VII

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

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

Podstawy algorytmiki i programowania - wykład 4 C-struktury

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

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

KLASY cz.1. Dorota Pylak

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

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

Programowanie obiektowe - 1.

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Rozszerzenia składni C vs. C++

Do czego służą klasy?

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

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Programowanie obiektowe

Programowanie obiektowe

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Wstęp do programowania obiektowego. Wykład 2

Laboratorium 1 - Programowanie proceduralne i obiektowe

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

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

Wykład 5: Klasy cz. 3

Programowanie 2. Język C++. Wykład 3.

Technologie i usługi internetowe cz. 2

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Język C++ Programowanie obiektowe

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Lab 9 Podstawy Programowania

Programowanie obiektowe w C++ Wykład 02 Temat wiodący: Koncepcja klasy. Obiekty.

Programowanie obiektowe

Definiowanie własnych klas

Enkapsulacja, dziedziczenie, polimorfizm

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Aplikacje w środowisku Java

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Programowanie, część I

OBIEKTY PHP. G. Panuś

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

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

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

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

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

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

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Czym są właściwości. Poprawne projektowanie klas

Programowanie obiektowe

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Struktury Struktura polami struct struct struct struct

Definicje klas i obiektów. Tomasz Borzyszkowski

Mechanizm dziedziczenia

Wykład 3 Składnia języka C# (cz. 2)

Rozdział 4 KLASY, OBIEKTY, METODY

Diagramy klas. dr Jarosław Skaruz

Wykład 5 Okna MDI i SDI, dziedziczenie

Programowanie komputerowe. Zajęcia 7

Programowanie Obiektowe i C++

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 9

Język programowania. Andrzej Bobyk

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Dziedziczenie. Ogólna postać dziedziczenia klas:

Wstęp do programowania

Transkrypt:

Różne właściwości Funkcje tak samo jak zmienne mają swoje miejsce w pamięci, gdzie są zapisane. Można więc uzyskać ich adres. Podobnie jak adres tablicy jest zwracany przez jej nazwę, podaną bez nawiasu kwadratowego, adres funkcji uzyskuje się za pomocą nazwy funkcji pozbawionej listy argumentów. Można tworzyć tablice wskaźników do funkcji i wywoływać funkcje nie po nazwie, a po numerze w tablicy Różne właściwości Wskaźniki do funkcji - przykład: int suma (int a, int b) { return a+b; int main () { int (*wsk_suma)(int, int); // zmienna wskaźnikowa wsk_suma = suma; // przypisanie adresu funkcji do wskaźnika printf("4+5=%d\n", (*wsk_suma)(4,5)); return 0; 65 66 Różne właściwości Tablice wskaźników do funkcji - przykład: void ErrMsg() { printf("blad\n"); void OKMsg() { printf("ok\n"); void YesMsg() { printf("tak\n"); void NoMsg() { printf("nie\n"); void (*func_table[])() = {ErrMsg, OKMsg, YesMsg, NoMsg int main () { srand( (unsigned)time( NULL ) ); double r = rand(); int i = floor(4*r/rand_max); (*func_table[i])(); return 0; 67 C++ - KLASY 68 C++ jest językiem programowania obiektowego pozwala na budowaniu programów działających na obiektach. Obiekty, to egzemplarze/instancje utworzone wg opisu zawartego w definicji typu. Typy obiektowe w C++ są rozszerzeniem typów używanych do tworzenia zmiennych w C Rozszerzenie polega na: dodaniu reguł dostępu do składników/atrybutów/pól obiektu dodaniu właściwości usługowych metod, które mogą wykonywać działania wykorzystując składniki obiektu dodaniu usługi inicjalizacji przy tworzeniu i usługi kończenia przy usuwaniu obiektów Deklarowanie klasy przypomina deklarowanie typu strukturalnego: struct osoba1 class osoba2 { { public : char imie[20]; char imie[20]; char nazwisko[30]; char nazwisko[30]; int wiek; int wiek; 69 70 1

Deklaracja instancji: osoba1 PanX; osoba2 PanY; Odwołanie: strcpy(panx.imie,"mel"); strcpy(panx.nazwisko, "Gibson"); PanX.wiek = 58; strcpy(pany.imie, "Danny"); strcpy(pany.nazwisko, "Glover"); PanY.wiek = 68; Czym różnią się te dwa obiekty? 71 Projektując klasę należy odpowiedzieć sobie na kilka pytań: 1. Co charakteryzuje stan wewnętrzny obiektów i jak go reprezentuje? 2. Czy można definiować jakieś niezmienniki stanu wewnętrznego obiektów? 3. Które z cech obiektu można udostępniać publicznie, a które powinny być kontrolowane? 4. Jak będą tworzone i inicjowane obiekty; czy dopuszczamy istnienie obiektów z nieokreślonym stanem wewnętrznym? 5. Czy likwidacja obiektu wymaga czynności porządkowych? 6. Jakie operacje będą wykonywane na obiektach? 7. Jak program ma korzystać z definicji klasy? 72 Odpowiedzi dla klasy reprezentującej butelkę mleka: 1. Co charakteryzuje stan wewnętrzny obiektów i jak go reprezentuje? - Maksymalna pojemność butelki i jej zawartość. 2. Czy można definiować jakieś niezmienniki stanu wewnętrznego obiektów? - Zawartość niemniejsza od zera i nie większa od pojemności. 3. Które z cech obiektu można udostępniać publicznie, a które powinny być kontrolowane? - Pojemność musi pozostać niezmienna, zawartość może być modyfikowana tylko tak, aby zachować niezmienniki. 4. Jak będą tworzone i inicjowane obiekty; czy dopuszczamy istnienie obiektów z nieokreślonym stanem wewnętrznym? - Tworzony obiekt butelka mleka musi być na początku pusta (zawartość równa zero). Nie ma butelek z niekreślonym stanem wewnętrznym. Odpowiedzi dla klasy reprezentującej butelkę mleka: 5. Czy likwidacja obiektu wymaga czynności porządkowych? - Jeżeli w butelce jest mleko, to należy najpierw je wylać. 6. Jakie operacje będą wykonywane na obiektach? - Wlać mleko i wylać mleko. Można jeszcze umyć, wstawić kwiatki.. 7. Jak program ma korzystać z definicji klasy? Może tworzyć obiekty, a może to być tylko klasa bazowa (o tym później). 73 74 Prawa dostępu: public - składniki są widoczne wszędzie gdzie jest użyty obiekt danej klasy private - składniki są widoczne tylko wewnątrz danej klasy. W praktyce oznacza to, że tylko funkcje danej klasy mogą czytać i zapisywać tego typu składniki protected w porównaniu z private, zakres widoczności jest poszerzony o klasy wywodzące się z aktualnej klasy, tzw. klasy dziedziczące (to zostanie wyjaśnione przy okazji omawiania dziedziczenia) kapsułkowanie/hermetyzacja ukrywaniu pewnych danych składowych lub metod obiektów danej klasy tak, aby były one dostępne tylko metodom wewnętrznym danej klasy lub funkcjom z nią zaprzyjaźnionym (o funkcjach zaprzyjaźnionych będzie jeszcze mowa). Kapsułkowanie uodparnia tworzony model systemu na błędy nieprawidłowego zapisu lub niepowołanego odczytu składowych klasy (kto te błędy może popełnić? nieumiejętny programista) Kapsułkowanie nie ma sensu w przypadku struktur w C, bo struktury nie mają własnych metod, stąd kapsułkowanie zamknęłoby całkowicie dostęp do składowych struktury Po co komu prawa dostępu? 75 76 2

Abstrakcja proceduralna i hermetyzacja to fundamentalne założenia modelu obiektowego: na danym poziomie szczegółowości użytkownikowi (programiście) udostępnia się tylko te właściwości obiektu, które są istotne z punktu widzenia jego potrzeb na tym poziomie szczegółowości. Pozostałe właściwości, choć istnieją i są konieczne dla poprawnego funkcjonowania obiektu, mogą pozostać dla użytkownika całkowicie nieznane. Przykład z życia: znajomość budowy silnika samochodowego i swobodny dostęp do jego elementów nie są konieczne do poprawnego korzystania z samochodu Różnice miedzy struct i class Domyślnie wszystkie składowe obiektu typu struct są publicznie dostępne można ich używać (odczyt/zapis, wywołanie) wszędzie tam, gdzie widoczna jest definicja struktury tego typu Domyślnie wszystkie składowe obiektu typu class są publicznie niedostępne. Aby stały się dostępne, musimy je zadeklarować jako dostępne. Kod deklaracji klasy jest podzielony na trzy rodzaje sekcji. Przynależność składowych do sekcji określa prawa dostępu. Prawa dostępu do składowych klasy dzielą się: typu public typu private typu protected 77 78 class JakasKlasa { int s1; int s2; int s3; int s4; int s5; protected: int s6; class JakasInnaKlasa { int d1;// domyślnie: private int d2; protected: int d3; int d4; int d5; Metody Skoro składowe klasy mogą być niedostępne z zewnątrz (private), to po co je w ogóle deklarować i tak nikt z nich nie skorzysta (nie będzie do nich zapisywał, ani też je odczytywał)? Składowymi klasy mogą być nie tylko zmienne (pola), ale również funkcje. Takie funkcje nazywane są metodami klasy. Metody podlegają takim samych ograniczeniom praw dostępu co zmienne. Wszystkie metody będące składowymi danej klasy mają prawa dostępu do zmiennych zadeklarowanych jako private i protected w tej klasie. 79 80 // składowa private // metoda składowa klasy (inline) // metoda składowa klasy Mam pustą szklankę oraz gąbkę. Nasączam gąbkę 100 ml wody, po czym trzy razy wyciskam wodę z gąbki do szklanki. Jedno wyciśniecie powoduje, że z gąbki ubywa połowa zawartości wody. Ile wody jest teraz w szklance? 81 82 3

Związki z podręcznikami o modelowaniu obiektowym Struktury i klasy zawierające metody nazywane są abstrakcyjnymi typami danych zmienne utworzone za pomocą abstrakcyjnych typów danych obiektami wywoływanie metod składowych obiektów określa się mianem wysyłania do nich komunikatów rezultatem wysyłania komunikatów jest uruchamianie procesów działających na atrybutach obiektów wysyłanie komunikatów do obiektów to podstawowe działanie związane z programowaniem obiektowym 83 Zmienne: Typy zmiennych są określone w specyfikacji języka C i C++. Są to np.: int, double, char. Zdefiniować można sobie typy reprezentujące struktury oraz stałe wyliczeniowe. Zmienne to instancje. W kodzie programu możemy do zmiennej zapisać wartość lub odczytać ze zmiennej wartość. Wobec zmiennej strukturalnej możemy to zrobić dla każdej z jej składowych. Obiekty: Typy obiektów są definiowane wyłącznie przez użytkownika. Każda klasa napisana przez programistę jest nowym typem obiektowym. Obiekty to instancje. W kodzie programu możemy do pól składowych obiektu zapisać wartość lub odczytać z nich wartość. Możemy też wywołać metodę należącą do obiektu. 84 Definiując klasę (typ obiektowy) możemy w niej zadeklarować jedną lub więcej metod. Deklarując obiekt, możemy te metody wywołać na rzecz tego obiektu. Mając kilka obiektów tego samego typu, na rzecz każdego z nich możemy wywołać tę samą metodę. Jej działanie może być jednak różne dla każdego z obiektów, ponieważ pola składowe tych obiektów nie muszą być zapisane tymi samymi wartościami. Słownik programisty: 1. klasa 2. obiekt (instancja) 3. składowe obiektu 4. pole vs. metoda 5. definicja vs. deklaracja 6. wywołanie metody na rzecz obiektu 7. kapsułkowanie (hermetyzacja) 85 86 Struktury jako typy abstrakcyjne W C++ struktury też mogą mieć składowe metody. Te metody są domyślnie deklarowane jako public. struct Stru { void prin(int b) { printf("%i",c); Co jeszcze mogą mieć struktury w C++? Mogą mieć definiowane prawa dostępu do swoich składowych, np.: struct X { int x; void init(); int fun(int y); Struktury w C++ różnią się od klas tym, że ich domyślne składowe są publiczne, natomiast w klasach prywatne. Więcej różnic nie ma.. 87 88 4

Zagnieżdżanie struktur struct Bloczek { struct Scianka { int b; Scianka należy do przestrzeni nazw typu strukturalnego Bloczek. Obiekt typu Bloczek zawiera pola a i b. Dostęp do typu strukturalnego Scianka jest tylko za pośrednictwem Bloczek: Prawa dostępu do składowych klasy PRAWA PRZYJACIÓŁ KLASY Bloczek::Scianka s; 89 90 Dostęp z zewnątrz: double limit; water_temp T; T.limit = 100; Dostęp z wewnątrz: double set_temp(double nt) { if (nt<limit && nt>0) water_temp T; T.set_temp(36.6); 91 92 Składowe prywatne obiektu są dostępne tylko dla metod składowych tego obiektu (tj. metod: get_temp i set_temp). Składowe publiczne są dostępne wszystkim, tj. zarówno w kodzie metod składowych jak i funkcji zewnętrznych oraz metod innych klas. Składowe prywatne obiektu są dostępne tylko dla metod składowych tego obiektu (tj. metod: get_temp i set_temp). Składowe publiczne są dostępne wszystkim, tj. zarówno w kodzie metod składowych jak i funkcji zewnętrznych oraz metod innych klas. Np.: int main() { water_temp T1,T2; double x = T1.t; // nie wolno! T1.set_temp(36.6); double y = T1.get_temp(); T2.set_temp(T1.get_temp()); 93 94 5