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

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

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

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

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

Wykład 8: klasy cz. 4

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

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

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

Do czego służą klasy?

Wykład 5: Klasy cz. 3

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

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

Programowanie obiektowe - 1.

Materiały do zajęć VII

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Rozdział 4 KLASY, OBIEKTY, METODY

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

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

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

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

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

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

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

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

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

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

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

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

Operacje wejścia/wyjścia (odsłona druga) - pliki

Technologie i usługi internetowe cz. 2

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

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

TEMAT : KLASY DZIEDZICZENIE

Wstęp do Programowania 2

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

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

Wstęp do programowania obiektowego. Wykład 2

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

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

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

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

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

Programowanie obiektowe

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

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

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

Programowanie w językach

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

ALGORYTMY I STRUKTURY DANYCH

Wprowadzenie do programowania i programowanie obiektowe

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

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

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

KLASY cz.1. Dorota Pylak

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

Technologie obiektowe

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Wykład 4: Klasy i Metody

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

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Część 4 życie programu

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

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

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

Laboratorium 1 - Programowanie proceduralne i obiektowe

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

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

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

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

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

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

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Definiowanie własnych klas

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

Programowanie, część I

Do czego służą klasy?

Argumenty wywołania programu, operacje na plikach

Konstruktor destruktor Programowanie obiektowe

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Język C++ wykład VIII

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

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

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

Język C++ Programowanie obiektowe

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Transkrypt:

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

Ogłoszenia 17 stycznia 2017 planowany jest termin 0 egzaminu. o Do terminu 0 mogą przystąpić wszystkie osoby które mają zaliczone sprawozdania zaliczenie z laboratorium nie jest wymagane. o Przed terminem 0 sprawdzam sprawozdania przesłane do 13.01.2017 godz. 12:00 o Obowiązuje (oczywiście) materiał z dotychczasowych wykładów. o Na egzamin należy bezwzględnie przynieść dokument ze zdjęciem. o Wpisy po zaliczenie laboratorium, jednakże z datą nie wcześniejszą niż data 1. terminu egzaminu. 2

Ogłoszenia 17 stycznia 2017 planowany jest termin 0 egzaminu. o Do następnych terminów są dopuszczane osoby posiadające wszystkie zaliczenia cząstkowe. o Na następnych terminach obowiązuje materiał z wszystkich wykładów. o Każdą ocenę pozytywną z egzaminu można poprawić brana pod uwagę jest ocena z poprawy! o Chęć poprawy oceny pozytywnej należy zgłosić (drogą elektroniczną bądź osobiście) najpóźniej 3 dni przed planowanym terminem. 3

OPERACJE NA PLIKACH Biblioteka odpowiedzialna za obsługę plików: fstream o Do działania na plikach niezbędne jest włączenie odpowiedniego pliku nagłówkowego dyrektywą #include <fstream> o o o By móc odczytać coś z pliku bądź do niego coś zapisać należy ten plik otworzyć w odpowiednim trybie, np.: ifstream plik("dane1.dat",ios::in); ofstream plik("dane2.dat",ios::out); Sprawdzenie, czy udało się otworzyć plik: if(plik) {...} Po zakończeniu działania na pliku należy go zamknąć: plik.close(); 4

OPERACJE NA PLIKACH Tryby otwarcia pliku: Tryb ios::in ios::out ios::app ios::ate ios::trunc ios::nocreate ios::noreplace Opis (input) otwórz plik do odczytu (output) otwórz plik do zapisu (utwórz nowy lub wyczyść zawartość już istniejącego) (append) dopisz do końca pliku. Dane mogą być zapisane wyłącznie na końcu pliku (at end) otwórz plik do zapisu i przejdź na koniec pliku. Dane mogą być zapisane gdziekolwiek w pliku. (truncate) jeśli plik istnieje, usuń jego zawartość (jest to także domyślne działanie ios::out) operacja otwarcia nie powiedzie się, jeśli plik nie istnieje operacja otwarcia nie powiedzie się, jeśli plik istnieje 5

OPERACJE NA PLIKACH Przykład: zapis do pliku 6

OPERACJE NA PLIKACH Przykład: zapis do pliku v2 7

OPERACJE NA PLIKACH Przykład: odczyt z pliku 8

PARAMETRY URUCHOMIENIA Dane do programu można przesłać za pomocą parametrów uruchomienia (wywołania). np. uruchamiamy (w konsoli): obliczenia.exe p1 p2 p3 o Aby korzystanie z parametrów wywołania było możliwe, funkcja main programu powinna być zdefiniowana z nagłówkiem: int main(int argc, char **argv) lub: int main(int argc, char *argv[]) o o Pierwszy argument, o zwyczajowej nazwie argc (argument counter), jest liczbą parametrów podanych podczas wywołania programu. Drugi argument, o zwyczajowej nazwie argv (argument vector), to tablica parametrów (tablica wskaźników do ciągów znaków). 9

PARAMETRY URUCHOMIENIA o o o Pierwszym parametrem (o numerze 0) jest nazwa wywoływanego program (zatem liczba parametrów jest zawsze równa co najmniej 1...). Wszystkie parametry wywołania są przesyłane do funkcji main jako C-stringi! Jeśli chcemy przekazać jako pojedynczy parametr napisy zawierające spacje należy je ująć w cudzysłowy. o Zatem jeśli mamy np. program programik.exe to można go wywołać np.: programik.exe 12.5 wyraz "kilka wyrazow jako jeden parametr" o Podczas tworzenia programu: to też jest napis! - Code::Blocks: Project / Set programs arguments - DevC++: Uruchom / Parametry... 10

PARAMETRY URUCHOMIENIA Przykład 11

Zaczynamy (nareszcie!) PROGRAMOWANIE ORIENTOWANE OBIEKTOWO programowanie zorientowane obiektowo programowanie obiektowe (Object Oriented Programming, OOP) 12

KLASY I OBIEKTY Czym jest obiekt? 13

KLASY I OBIEKTY Własne typy danych - wprowadzenie o Pewne typy danych, jak int, float, double czy char są wbudowane w język C++. Pozwalają na tworzenie zmiennych (obiektów) tych typów. o W języku C++ można tworzyć własne typy danych w postaci klas i struktur. Na ich bazie można tworzyć obiekty własnych typów. o Własne typy (klasy) umożliwiają powiązanie danych z funkcjami - znaczy to, że kompilator nie dopuści do tego, by do funkcji oczekującej argumentu typu temperatura wysłać argument typu konto_bankowe... o Klasa to plany budowy obiektów danej klasy. By z nich skorzystać, należy stworzyć przynajmniej jeden obiekt danej klasy. o Obiektem może być w zasadzie dowolna rzecz. Programista wykorzystuje obiekty jako elementy składowe programu. 14

KLASY I OBIEKTY Własne typy danych - wprowadzenie o Np. można stworzyć klasę Samochod. Klasę tą opisuje: o zestaw wartości (dane składowe), np.: marka, kolor, silnik, masa, predkosc. o zestaw możliwych zachowań (funkcje składowe), np.: przyspiesz, hamuj, skrec, cofaj. o Elementami składowymi klasy mogą być nie tylko zmienne typów wbudowanych, ale też obiekty innych klas (obiekty składowe), np. elementami klasy Komputer mogą być obiekty klas: Obudowa, Plyta_glowna, Grafika, Pamiec itp. 15

KLASY I OBIEKTY Potrafi (funkcje): Klasa Pies - oddychać - szczekać - biegać -... Ma cechy (dane): - imię? - wiek? - waga? A oto konkretne egzemplarze (obiekty) klasy Pies: -... Bajka 5 miesięcy 10 kg Astra 2 lata 20 kg 16

KLASY I OBIEKTY Własne typy danych - wprowadzenie o Wszystkie elementy (dane składowe i funkcje składowe) są znane w całej klasie (nazwy deklarowane w klasie mają obszar ważności całej klasy). o Dotychczas (w programowaniu strukturalnym) zmienna np. wewnątrz funkcji była znana od momentu definicji tej zmiennej do końca tej funkcji. o Istota programowania obiektowego polega na umiejętnym wymyślaniu typów (klas) oraz na ponownym używaniu typów (klas) już wcześniej zdefiniowanych 17

KLASY I OBIEKTY Definiowanie klas: Klasę definiuje się za pomocą słowa kluczowego class po którym następuje jej nazwa: class Rower // definicja klasy Rower { //... // ciało klasy }; // obowiązkowo średnik na końcu! Obiekty danej klasy tworzy się podając nazwę klasy i nazwę obiektu: Rower goral; // stworzenie obiektu klasy Rower czyli analogicznie, jak dla typów wbudowanych: int zmienna; // stworzenie obiektu (zmiennej) typu int Sama deklaracja klasy: class Rower; // deklaracja klasy Rower (średnik na końcu) 18

KLASY I OBIEKTY Przykład: 19

KLASY I OBIEKTY Można też tworzyć referencje oraz wskaźniki do takich obiektów. Np. rozbudowując funkcję main() w programie z poprzedniego slajdu: Referencja: Samochod &autko=wymarzony; // definiujemy referencję autko.wlacz_silnik(); // i korzystamy z niej... cout<<"uruchomilem silnik samochodu "<<autko.model<<endl; Do składnika klasy w przypadku referencji odnosimy się tak samo, jak za pomocą nazwy tego obiektu (wszak referencja to inna nazwa tego samego obiektu...), czyli za pomocą operatora w postaci kropki. Po co? Np. przesyłanie obiektów do funkcji... Wskaźnik: Samochod *wsk=&wymarzony; // tworzymy wskaźnik i ustawiamy go wsk->wlacz_silnik(); // korzystamy ze wskaźnika - zauważ -> cout<<"uruchomilem silnik samochodu "<<wsk->model<<endl; Do składnika klasy w przypadku wskaźnika odnosimy się za pomocą operatora w postaci ->. 20

SŁOWNICTWO OBIEKTOWE o Programowanie zorientowane obiektowo (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 (funkcje). o Program obiektowy program komputerowy wyrażony jako zbiór obiektów komunikujących się pomiędzy sobą w celu wykonywania zadań. o Klasa to typ danych tworzony przez programistę. Klasa to typ obiektu, a nie sam obiekt. o Interfejs klasy funkcje składowe klasy, które są dostępne dla użytkowników tej klasy. Funkcje te są dostępne z każdego miejsca w programie i mają pełny dostęp do wszystkich danych składowych klas. Za pomocą tych funkcji możliwe są wszelkie interakcje między obiektami klas. o Obiekt egzemplarz typu zdefiniowanego przez użytkownika, podobnie jak egzemplarz typu wbudowanego w język (np. int) zwany jest zmienną. 21

SŁOWNICTWO OBIEKTOWE o Enkapsulacja (zamknięcie w kapsule) definicja klasy sprawia, że dane składowe i funkcje składowe nie są rozmieszczone luźno w programie, tylko obudowane klasą. W momencie definicji pojedynczego egzemplarza obiektu danej klasy dostaje się realizację takiej kapsuły, ze wszystkimi danymi (atrybutami) i funkcjami (zachowaniami) obiektu. o Hermetyzacja (ukrywanie informacji) klasa powinna udostępniać na zewnątrz tylko te elementy, których dostępność jest niezbędna. W szczególności dobrym nawykiem jest uniemożliwienie bezpośredniego dostępu do danych składowych. Dostęp do nich powinny zapewniać stosowne funkcje (tzw. funkcje dostępowe). 22

KLASY I OBIEKTY Do określania dostępu do składowych klasy służą etykiety: o Etykieta private oznacza, że dane i funkcje deklarowane za nią są dostępne tylko wewnątrz klasy (zatem do danych prywatnych klasy mają dostęp tylko funkcje składowe tej klasy). o Etykieta public oznacza, że dane i funkcje deklarowane za nią są dostępne zarówno z wnętrza klasy, jak i spoza klasy. o Etykieta protected składniki określone w ten sposób są dostępne tak, jak składniki prywatne, ale są również dostępne dla klas wywodzących się od danej klasy (o tym przy innej okazji...). Kolejność etykiet nie ma znaczenia, ale często przyjmuje się następującą kolejność składników klasy (szczególnie w dużych projektach): 1. public (jako najbardziej interesujące dla użytkownika klasy); 2. protected; 3. private (jako istotne wyłącznie dla programisty tworzącego daną klasę). 23

KLASY I OBIEKTY Domyślnie (dopóki nie wystąpi żadna etykieta) wszystkie składniki klasy są prywatne. class Przykladowa_klasa { int liczba_elementow; // dane składowe prywatne (przez domniemanie) float policz(float a, float b); public: int zwroc_liczbe_elementow(); // deklaracja (tylko) void modyfikuj_liczbe elementow(); // publicznych funkcji składowych protected: double pomoc; // jakaś dana protected private: int c; double d; // kolejne dane prywatne... }; // średnik! 24

KLASY I OBIEKTY class Pralka // definicja klasy Pralka { public: void pranie(int program,int temperatura); // ogólnodostępne funkcje void wirowanie(int obroty); // składowe klasy void plukanie(); bool start_stop(); private: int nr_programu; // dane składowe klasy int temperatura_prania; int obroty_minute; string nazwa_pralki; Zegar czas; Silnik krokowy; // obiekty innych klas void pranie_wstepne(); // funkcje prywatne klasy void pranie_zasadnicze(); friend void serwis(pralka &marka_pralki); // funkcje zaprzyjaźnione friend void dane_techniczne(pralka *marka); // z daną klasą }; //------------------------------------ main() { //... Pralka Whirlpool, Bosch, Polar; //definicja 3 obiektów klasy Pralka //... } 25

KLASY vs. STRUKTURY Wielu programistów wyraźnie rozróżnia między "klasą" a "strukturą". "Struktura" jest jak sterta bitów nie poddana w ogóle (lub w niewielkim stopniu) enkapsulacji i powiązaniu z funkcjami. "Klasa" natomiast jest jak żywy i odpowiedzialny członek społeczeństwa, świadczący reszcie pewne usługi, otoczony barierą enkapsulacji i oferujący dobrze zaprojektowany interfejs. Ponieważ jest to dość powszechnie występująca konotacja, powinieneś (powinnaś) używać słowa kluczowego struct raczej tylko wtedy, gdy potrzebujesz klasy dysponującej niewielką ilością metod w przeciwnym wypadku użyj słowa class. http://klub.chip.pl/b.krzemien/c++-faq-pl/classes-and-objects.html#faq-7.8 Jedyna różnica między klasami i strukturami w C++: W klasie wszystkie dane i funkcje są domyślnie prywatne, podczas gdy w strukturze są one domyślnie publiczne. Zatem po co istnieją jednocześnie struktury oraz klasy? Struktury istniały już w C, ich pozostawienie wynikało z konieczności zachowania kompatybilności kodu... 26

KLASY I OBIEKTY o Definicja klasy nie skutkuje rezerwacją pamięci (w końcu klasa to tylko typ obiektu...). Dopiero definicja obiektu rezerwuje miejsce w pamięci na ten obiekt. o By przekonać się, ile miejsca w pamięci zajmuje obiekt danej klasy: lub: cout<<sizeof(whirlpool); cout<<sizeof(pralka); //nie musi istnieć żaden obiekt danej klasy! o Dla każdego obiektu danej klasy tworzony jest osobny zestaw danych składowych. o Natomiast funkcje składowe są w pamięci jednokrotnie dla wszystkich obiektów danej klasy. o Funkcje składowe mają pełny dostęp do wszystkich składników swojej klasy, tj. do danych (mogą z nich korzystać i je modyfikować) i do innych funkcji składowych (mogą je wywoływać). o Funkcje składowe wywołuje się na rzecz konkretnego obiektu klasy, np.: Wymarzony.wlacz_silnik(); (zauważ kropkę...) 27

KLASY I OBIEKTY Przykład: 28