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

Podobne dokumenty
Wykład nr 5. Temat: Klasy i abstrakcja danych, cz. I. W.S. Gilbert

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

Podstawy Programowania Obiektowego

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

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

Programowanie obiektowe

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Wykład 8: klasy cz. 4

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

int suma; pralka czerwona; // definicja egzemplarza obiektu pralka * wskaŝ; // definicja wskaźnika pralka & ruda = czerwona; // definicja referencji

Do czego służą klasy?

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

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

Wykład 5: Klasy cz. 3

Materiały do zajęć VII

Programowanie obiektowe - 1.

Język programowania. Andrzej Bobyk

Technologie i usługi internetowe cz. 2

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Rozdział 4 KLASY, OBIEKTY, METODY

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

KLASY cz.1. Dorota Pylak

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

Wstęp do programowania obiektowego. Wykład 2

Do czego służą klasy?

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

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie komputerowe. Zajęcia 7

Wstęp do Programowania 2

Język C++ zajęcia nr 2

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

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

TEMAT : KLASY DZIEDZICZENIE

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

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

Definiowanie własnych klas

Technologie obiektowe

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

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

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Definicje klas i obiektów. Tomasz Borzyszkowski

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

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

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

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

Programowanie obiektowe

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

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

Programowanie obiektowe

Język C++ Programowanie obiektowe

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

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

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

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Wstęp do programowania

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie Obiektowe i C++

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.

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

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

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

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

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Definiowanie własnych klas

Podstawy Języka Java

ALGORYTMY I STRUKTURY DANYCH

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Wykład 5 Okna MDI i SDI, dziedziczenie

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

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

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

Podstawy Programowania Obiektowego

Enkapsulacja, dziedziczenie, polimorfizm

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

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

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

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

Szablony klas, zastosowanie szablonów w programach

PHP 5 język obiektowy

Programowanie w Internecie. Java

Języki i paradygmaty programowania

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

Konstruktor destruktor Programowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 4

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Klasa, metody, rozwijanie w linii

Transkrypt:

Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.

Definiowanie struktur

Deklaracja struktury struct Nasz_Typ; //deklaracja struktury o nazwie Nasz_Typ --------------------------------------------------------------------------- Definicja struktury struct Nasz_Typ //ciało struktury // //definicja struktury o nazwie Nasz_Typ }; //średnik!!! --------------------------------------------------------------------------- Składniki struktury struct Nasz_Typ //tutaj są składniki struktury, tj. zmienne różnych typów, także typów //zdefiniowanych przez użytkownika, np. obiektów innych struktur }; int skladnik1; float skladnik2; double skladnik3[20];

Definicja obiektów struktury int zmienna; //definicja zwykłej zmiennej typu int Nasz_Typ obiekt; //definicja obiektu (zmiennej) typu Nasz_Typ Nasz_Typ &referencja=obiekt; //definicja referencji obiektu typu Nasz_Typ Nasz_Typ *wskaznik=&obiekt; //definicja wskaźnika do typu Nasz_Typ --------------------------------------------------------------------------- Odnoszenie się do składników struktury obiekt.skladnik referencja.skladnik wskaznik->skladnik

Przykład struktury Czas struct Czas //definicja struktury int godzina; int minuta; //dane składowe struktury int sekunda; }; //-------------------------------------------------------------------------- void Wyswietl_Godzine(Czas cz) //definicja funkcji globalnej cout<<cz.godzina<< : <<cz.minuta<< : <<cz.sekunda<<endl; } //-------------------------------------------------------------------------- main() Czas poczatek_zajec; //definicja obiektu struktury Czas poczatek_zajec.godzina=11; //ustawianie składowych struktury poczatek_zajec.minuta=45; //... poczatek_zajec.godzina=0; //... Wyswietl_Godzine(poczatek_zajec); //wywołanie funkcji globalnej Czas koniec_zajec; //definicja obiektu struktury Czas poczatek_zajec.godzina=13; poczatek_zajec.minuta=15; poczatek_zajec.godzina=0; } Wyswietl_Godzine(koniec_zajec);

Sama definicja struktury nie definiuje żadnych obiektów. Struktura to typ obiektu, a nie sam obiekt. W definicji struktury składniki nie mogą być inicjalizowane. Mogą im być nadawane wartości w ciele jakiejś funkcji, np. funkcji main lub funkcji ustaw. struct Czas int godzina; int minuta=45; int sekunda=0; }; //BŁĄD!!! //BŁĄD!!! Dla każdego obiektu danej struktury istnieje w pamięci komputera osobny zestaw składników-danych tej struktury.

Terminologia obiektowa

Słownictwo obiektowe Projektowanie zorientowane obiektowo (ang. object-oriented design, OOD) = programowanie obiektowe (ang. object-oriented programming, OOP) metodyka tworzenia programów komputerowych, która definiuje programy za pomocą obiektów, czyli elementów łączących stan (dane) i zachowanie (metody, funkcje). Obiektowy program program komputerowy wyrażony jako zbiór obiektów komunikujących się pomiędzy sobą w celu wykonywania zadań. Klasa podstawowe pojęcie w programowaniu obiektowym. Klasy zawierają dane (atrybuty) oraz funkcje (zachowania), które są ze sobą ściśle związane. Na podstawie danej klasy mogą być wytwarzane konkretne egzemplarze obiektów (obiekty). Klasa to typ danych użytkownika (programisty). Dane klasy zwane są danymi składowymi, natomiast funkcje funkcjami składowymi (lub metodami). Klasa to typ obiektu, a nie sam obiekt. Obiekt egzemplarz typu zdefiniowanego przez użytkownika, podobnie jak egzemplarz typu wbudowanego w język, np. int zwany jest zmienną. Hermetyzacja (ukrywanie informacji) inaczej niż obiekty, które doskonale wiedzą, w jaki sposób komunikować się między sobą za pomocą interfejsu, klienci klas nie powinni mieć informacji o tym, jak klasy zostały zaimplementowane szczegóły implementacyjne ukryte są przed klientami korzystających z klas.

Definiowanie klas

Deklaracja klasy class Nasz_Typ; //deklaracja klasy o nazwie Nasz_Typ --------------------------------------------------------------------------- Definicja klasy class Nasz_Typ //ciało klasy // //definicja klasy o nazwie Nasz_Typ }; //średnik!!! --------------------------------------------------------------------------- Składniki klasy class Nasz_Typ //tutaj są składniki klasy //tj. dane składowe klasy i funkcje składowe klasy //inne składniki klasy, np. obiekty innych klas, funkcje zaprzyjaźnione }; int skladnik;

Definicja obiektów klasy int zmienna; //definicja zwykłej zmiennej typu int Nasz_Typ obiekt; //definicja obiektu (zmiennej) typu Nasz_Typ Nasz_Typ &referencja=obiekt; //definicja referencji obiektu typu Nasz_Typ Nasz_Typ *wskaznik=&obiekt; //definicja wskaźnika do typu Nasz_Typ --------------------------------------------------------------------------- Odnoszenie się do składników klasy obiekt.skladnik referencja.skladnik wskaznik->skladnik --------------------------------------------------------------------------- Zakres ważności składników klasy Nazwy deklarowane w klasie mają zakres ważności równy obszarowi całej klasy. Inaczej niż to było np. w zwykłych funkcjach, gdzie dana była znana od miejsca definicji aż do końca funkcji.

Enkapsulacja Definicja klasy sprawia, że dane i funkcje składowe klasy nie są luźno rozrzucone w programie, ale są zamknięte jakby w kapsule. Do posługiwania się danymi składowymi klasy służą jej funkcje składowe (a także np. funkcje zaprzyjaźnione). --------------------------------------------------------------------------- Etykiety dostępu do składników klasy Istnieją etykiety, za pomocą których można określać dostęp do składników klasy. private: protected: public: Składnik private jest dostępny tylko dla funkcji składowych danej klasy (oraz dla funkcji zaprzyjaźnionych z tą klasą). Składnik protected jest dostępny tak, jak składnik private, ale dodatkowo jest jeszcze dostępny dla klas wywodzących się (dziedziczących) z danej klasy. Składnik public jest dostępny bez ograniczeń. Zwykle są to wybrane funkcje składowe, za pomocą których dokonuje się z zewnątrz operacji na danych prywatnych.

Przykład klasy Pralka class Pralka private: //definicja klasy int nr_programu; int temperatura_prania; //dane składowe int obroty_minute; //klasy char nazwa_pralki[80]; Zegar czas; Silnik krokowy; //obiekty //innych klas void pranie_wstepne(); //funkcje narzędziowe void pranie_zasadnicze(); //klasy friend void serwis(pralka &marka_pralki); //funkcje zaprzyjaźnione friend void dane_techniczne(pralka *marka); //z daną klasą public: void pranie(int program,int temperatura); void wirowanie(int minuty,int obroty); //funkcje składowe void plukanie(); //klasy bool start_stop(); }; //-------------------------------------------------------------------------- main() Pralka whirlpool,bosch; } //definicja dwóch obiektów klasy Pralka

Sama definicja klasy nie definiuje żadnych obiektów. Klasa to typ obiektu, a nie sam obiekt. W definicji klasy składniki dane nie mogą być inicjalizowane. Mogą im być nadawane wartości za pomocą konstruktora klasy lub funkcji składowych klasy, np. funkcji ustaw. class Pralka private: }; int nr_programu; int temperatura_prania=60; int obroty_minute=1000; //BŁĄD!!! //BŁĄD!!! Dla każdego obiektu danej klasy istnieje w pamięci komputera osobny zestaw składników danych tej klasy. Funkcje składowe są w pamięci tylko jednokrotnie. Funkcje składowe mają pełny dostęp do wszystkich składników swojej klasy, tj. i do danych (mogą z nich korzystać i je modyfikować), i do innych funkcji składowych (mogą je wywoływać).

Funkcje składowe klas

Funkcja składowa jest narzędziem, za pomocą którego dokonujemy operacji na danych składowych klasy, zwłaszcza na składnikach private, które są niedostępne spoza klasy. Funkcje publiczne (public) implementują zachowania i usługi, które klasa oferuje swoim klientom. Funkcje publiczne są zwykle zwane interfejsem klasy lub interfejsem publicznym. Funkcję składową wywołuje się na rzecz konkretnego obiektu klasy, tj.: Przykład: obiekt.funkcja(argumenty); class Pralka int nr_programu; int temperatura_prania; public: void pranie(int program,int temperatura); void plukanie(); }; main() Pralka whirlpool,bosch; //definicja dwóch obiektów whirlpool.pranie(nr_progr,temp_prania); //wywołanie funkcji na rzecz obiektu bosch.plukanie(); //wywołanie funkcji na rzecz obiektu }

Funkcja składowa może być zdefiniowana: wewnątrz samej definicji klasy (jest wtedy funkcją tzw. inline), poza ciałem klasy (wewnątrz klasy jest tylko deklaracja). Przykład: class Pralka int nr_programu; int temperatura_prania; public: void pranie(int program,int temperatura); void plukanie() //ta funkcja jest funkcją inline //w ten sposób należy definiować tylko bardzo krótkie funkcje } }; //---------------------------------------------------------- void Pralka::pranie(int program,int temperatura) //funkcja zdefiniowana poza ciałem klasy //... }

Programy złożone z wielu plików

Każda definicja klasy jest umieszczana w osobnym pliku nagłówkowym (ang. header file, z rozszerzeniem.h). Definicje funkcji składowych poszczególnych klas umieszczane są w osobnych plikach kodu źródłowego (ang. source-code file, z rozszerzeniem.cpp) o tej samej podstawowej części nazwy, co plik nagłówkowy. Funkcja główna programu (main()) umieszczana jest we właściwym pliku programowym (z rozszerzeniem.cpp). Pliki nagłówkowe są włączane (za pomocą dyrektywy #include nazwa.h ) do każdego pliku kodu źródłowego, w którym wykorzystywana jest dana klasa. Pliki z kodami źródłowymi są kompilowane i łączone z głównym programem.

/////////////////////////// Pralka.h plik nagłówkowy //////////////////////////////////// class Pralka int nr_programu; int temperatura_prania; public: void pranie(int program,int temperatura); void plukanie(); }; /////////////////////////// Pralka.cpp plik źródłowy //////////////////////////////////// #include Pralka.h void Pralka::pranie(int program,int temperatura) //funkcja prania //... } //---------------------------------------------------------------------------------- void Pralka::plukanie() //funkcja płukania //... } /////////////////////////// Main.cpp plik programowy //////////////////////////////////// #include Pralka.h main() Pralka whirlpool,bosch; //definicja dwóch obiektów whirlpool.pranie(nr_progr,temp_prania); bosch.plukanie(); }

Zadania laboratoryjne