Bibliografia 1. B. Stroustrup. Jezyk C++. Wydawnictwo Naukowo-Techniczne, Warszawa,

Podobne dokumenty
Język C++ Różnice między C a C++

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

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

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Operacje wejścia/wyjścia odsłona pierwsza

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Część 4 życie programu

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

Wstęp do programowania. Wykład 1

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

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wstęp do programowania

Zmienne, stałe i operatory

Programowanie - wykład 4

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

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Język C++ zajęcia nr 1

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

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

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

Podstawy Programowania Obiektowego

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

2 Przygotował: mgr inż. Maciej Lasota

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Wstęp do programowania

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

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

Podstawy programowania w C++

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

C++ wprowadzanie zmiennych

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

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

I - Microsoft Visual Studio C++

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 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

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

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Obsługa wyjątków. Język C++ WW12

Wstęp do Programowania 2

Wstęp do Programowania 2

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Język C zajęcia nr 11. Funkcje

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

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

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

TEMAT : KLASY DZIEDZICZENIE

4. Funkcje. Przykłady

Język ludzki kod maszynowy

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

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

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

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

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

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

Wstęp do Programowania, laboratorium 02

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

PARADYGMATY PROGRAMOWANIA Wykład 2

Bogdan Kreczmer. Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska

Programowanie komputerowe. Zajęcia 1

Wyjątki (exceptions)

Wstęp do informatyki- wykład 7

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Organizacja kursu, paradygmaty, ogólnie o C i C++

Laboratorium 1 - Programowanie proceduralne i obiektowe

Wykład 8: klasy cz. 4

Szablony funkcji i szablony klas

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Pytania sprawdzające wiedzę z programowania C++

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Programowanie w językach

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

1 Podstawy c++ w pigułce.

Programowanie w języku C++

Język C++ wykład VIII

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

DYNAMICZNE PRZYDZIELANIE PAMIECI

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Tablice, funkcje - wprowadzenie

Stałe i zmienne znakowe. Stała znakowa: znak

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

C-struktury wykład. Dorota Pylak

STL: Lekcja 1&2. Filozofia STL

Wykład 5: Klasy cz. 3

Języki i metodyka programowania. Wprowadzenie do języka C

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

1 Podstawy c++ w pigułce.

Transkrypt:

Programowanie obiektowe (OOP) Dr. Inż. Hab. Siergiej Fialko, IMK-PK, http://torus.uck.pk.edu.pl/~fialko sfialko@riad.pk.edu.pl Bibliografia 1. B. Stroustrup. Jezyk C++. Wydawnictwo Naukowo-Techniczne, Warszawa, 2. Herbert Schildt. Programowanie C++. Wydawnictwo RM, Warszawa, 2002. 3. S. B. Lippman, J. Lajoie. Podstawy języka C++, Wydawnictwo Naukowo- Techniczne, Warszawa. 1

Programowanie obiektowe (OOP) Rozmiar kodu Mały ilość linij kodu (ilk) < 10 000 Średni 10 000 < ilk < 100 000 Duży ilk > 100 000 Typ języka programowania asembler, FORTRAN Języki strukturalne C, Pascal Języki obiektowe C++ Cechy języków strukturalnych: obsluga samodzieljnych procedur, zmiennych lokalnych, duża liczba konstrukcji warunkowych, możliwość rezygnacji ze stosowania instrukcji goto Program, napisany w języku strukturalnym (na przykład, w C), jest tworzony poprzez definiowanie funkcji, z których każda może operować na dowolnym typie danych,wykorzystywanych przez program. W każdym języku obiektowym definiuje się dane oraz procedury, które mogą operować wyłącznie na tych danych. Typ danych określa, jakiego rodzaju 2 operacje mogą być dokonywane.

Cechy języków obiektowych: hermetyzacja (inkapsulacja), polimorfizm, dziedziczenie. Hermetyzacja to mechanizm, łączący w całość kod i dane, na których on operuje, zabezpieczający je przed zewnętrzną ingerencja i niepoprawnym użyciem. Kod i dane są połączone w obiekcie, który i realizuje hermetyzacje Znajdujące się wewnątrz obiektu kod i dane mogą być prywatne lub publiczne Prywatny kod i dane są dostępne tylko w obszarze obiektu. Zewnątrz obiektu składniki prywatne są ukryte ani prywatny kod, ani prywatne dane nie mogą być wykorzystywane przez fragmenty programu, znajdujące się poza obiektem Publiczny kod i dane są dostępne dla innych elementów programu, znajdujących się jak wewnątrz obiektu, tak i poza nim. Najczęściej składniki publiczne obiektu są wykorzystywane do tworzenia interfejsu do prywatnych elementów obiektu. 3

Polimorfizm realizuje generalną idee jeden interfejs wiele metod. Nadaje możliwość jednemu interfejsowi kontrolować dostęp do ogólnej klasy akcji. O tym, jaka konkretnie akcja pozostanie wybrana, decyduje sytuacja. Na przykład, w języku C, który nie wspiera polimorfizmu, dla obliczenia wartości bezwzględnej liczb całkowitych, liczb całkowitych typu long i liczb zmiennoprzecinkowych używamy różne funkcje abs(), labs(), fabs(). W języku C++ przy użyci polimorfizmu te funkcje mogą mieć taką samą nazwę (jedyny interfejs) i zupełnie różne realizacji int abs(int val); long abs(long val); double abs(double val); Kompilator automatycznie wybierze, która z trzech funkcji ma być wywołana po typu argumentu faktychnego: pierwsza, jeśli typ argumentu faktycznego jest int, drugą, jeśli long, trzecią, jeśli double. 4

W języku C++ można wykorzystywać tą samą nazwę funkcji dla wielu różnych akcji przeciążenie funkcji (function overloading), a również zastosowywać te same operatory dla działań nad różnymi obiektami przeciążenie operatorów (operator overloading). Polimorfizm zmniejsza złożoność programu i polepsza jej czytelność, zezwala jeden interfejs na różne akcji. Dziedziczenie to proces, w którym obiekt otrzymuje właściwości innego obiektu. Jest to bardzo ważne, gdyż pozwala realizować zasadę klasyfikacji. Okazuje się, że większość informacji można uporządkować w sposób hierarchiczny. Na przykład, autobus i pociąg są częścią klasy transport, klasa transport jest częścią klasy maszyny. Gdyby nie dziedziczenie, cechy każdego obiektu trzeba by było definiować każdorazowo w sposób jawny. Jednak, dzięki klasyfikacji, dla obiektu trzeba zdefiniować te cechy, które czynią go niepowtarzalnym w obrębie klasy. Mechanizm dziedziczenia sprawdza, że obiekt może być specyficznym egzemplarzem bardziej ogólnej klasy. 5

Pierwszy program na C++ # include <iostream> using namespace std; int main() { int i; cout << hello, C++ << \n ; //komentarz jednoliniowy /* Wieloliniowe komentarze są dopuszczalne*/ //wprowadż liczbe, stosując instrukcje >> cin >> i; //wyświetli i cout << i = << i << i *i = << i*i << \n ; } return 0; 6

# include <iostream> To jest analog C - #include <stdio.h>. W standardzie C++ używają nowy styl nagłówkowy. Przecież stary styl #include <iostream.h> też będzie działało. using namespace std; Będzie wykorzystana przestrzeń nazw std. Przestrzeń nazw tworzy deklaratywny obszar, w którym umieszczone są różne elementy programu. Pomaga uporządkować duże programy. Instrukcja using mówi, że chcemy posłużyć się przestrzenią nazw std, w której jest zadeklarowana cała biblioteka standardu C++. Biblioteki C nie wymagają instrukcji using dla tego że domyślnie dostępne w globalnej przestrzeni nazw. int main() lista parametrów jest pusta, przecież void nie jest potrzebne. W języku C to by wyglądało tak: int main(void); cout << hello, C++ << \n //komentarz jednoliniowy /* Wieloliniowe komentarze są dopuszczalne*/ 7

W języku C brakuje operatorów wejścia\wyjścia, więc ich role przy organizacji we\wy z monitora\na monitor wykonują funkcje printf(...), scanf(...). W języku C++ dla wykonania wyjścia istnieje operator <<, a wejścia - >>. W języku C to są operatory przesunięcia w lewo, w prawo. W C++ operatory te wykonują jak przesunięcie w lewo\prawo, tak i wyjście\wejście, jeśli są użyte z słowem cout\cin. Insertion to stream cout: Extraction from stream cin: cout << a; cin >> b; Instrukcja C++ cout << ten wiersz będzie wyświetlony na monitorze << \n ; dokonuje wyprowadzenie wiersza tekstowego w potok standardowy cout, który jest związany z monitorem, jak tylko program C++ zaczyna działanie. Standardowy potok C++ cout jest podobny do potoku C stdout. W języku C to działanie wyglądało by tak: printf( ten wiersz będzie wyświetlony na monitorze ); printf( \n ); 8

Analogicznie, instrukcja cin >> i wykonuje czytanie danych z standardowego potoku wejściowego cin, związanego z monitorem, i przypisuje te dane zmiennej o nazwie i. Przetworzenie formatowe jest wykonane automatycznie na podstawie typu zmiennej i. W języku C to działanie (odczyt z standardowego potoku stdin) wyglądało by tak: scanf( %d, &i); //jeśli i to zmienna typu int scanf( %lf, &i); //jeśli i to zmienna typu double... Operatory <<, >> nadają możliwość wyprowadzać i wprowadzać (nie koniecznie na\z monitor(a)) dane dowolnego typu podstawowego. 9

Przykłady: double a = 0.3; int i = 15; char ch = 'a'; char str[] = abcde ; cout << a = << a << i = << i << ch = << ch << str: << str << endl; double b; cout << wprowadż dane: << endl; cin >> b;... Przykład W0 Przy wprowadzeniu wierszy tekstowych operator >> zatrzymuje się po wykryciu pierwszej spacji. Będzie wprowadzone tylko pierwsze słowo, a pozostała cześć wiersza nie. Działa to dokładnie tak samo, jak pobieranie wiersza tekstowego funkcją scanf( %s, str) ; 10

Komentarze /*To jest komentarz wieloliniowy wieloliniowe komentarze są dopuszczalne */ //To jest komentarz jednoliniowy /* To jest komentarz wieloliniowy //To jest włożenie komentarza jednoliniowego w komentarz wieloliniowy*/ Dekłarowanie zmiennych lokalnych W języku C zmienne lokalne muszą być deklarowane na początku bloku. W C++ zmienne lokalne można deklarować w dowolnym miejscu bloku. Porada: deklarować zmienne nie na początku kodu tylko w tych wypadkach, kiedy to jest uzasadnione, na przykład, w funkcjach z dużą ilością linij kodu. 11

Brak domyślnego przekształcania na typ int. W języku C jeśli funkcje zwraca zmienne, typ której nie jest jawnie zadeklarowany, to domyślnie typ tej zmiennej jest traktowany jako int. W języku C++ typ zwracany przez funkcje, należy zadeklarować jawnie. Typ bool W C++ zdefiniowano wbudowany typ logiczny bool. Obiekt typu bool może przechowywać tylko wartości true, false, które są słowami kluczowymi, zdefiniowanymi w C++. Wartości różne od 0 są przekształcane na wartość true, a zero na false. Odwrotnie, true jest zamieniane na 1, a false na 0. Stary styl i nowy Istnieje dwie wersji C++ - stara, którą używali programiści w poprzednim dziesięcioleciu, i nowa standard C++. Podstawowe założenia obu wersji są podobne, przecież standard C++ zawiera szereg rozszerzeń w stosunku do tradycyjnego C++. 12

Stary styl można jeszcze często spotkać w programach już napisanych. Nowe programy należy pisać w standardzie C++. Różnica pomiędzy starym i nowym stylem dotyczy głównie dwóch rzeczy: nowej postaci nagłówków oraz instrukcji namespace. Stary styl: #include <iostream.h> int main() { return 0; } Nowy styl: #include <iostream> using namespace std; int main() { return 0; } 13

W języku C #include <nazwa_pliku.h> powoduje dołączenie pliku o nazwie nazwa_pliku.h. W standardzie C++ #include <id_nazwa> jest identyfikatorem standardowym, które mogą być przez kompilator odwzorowane na odpowiednie pliki, lecz nie jest to koniecznie. Używane w C++ nagłówki nowego typu to konstrukcje abstrakcyjne, który gwarantują że zostaną zadeklarowane odpowiednie prototypy i definicje wymagane przez biblioteki C++. Nagłówki nowego typu nie są nazwami plików, więc nie zawierają rozszerzenia.h <vector> <fstream> <string>... 14

Można używać nagłówki starego typu <string.h> <math.h>... To nie jest błąd, przecież standard C++ wymaga zastosowywać odpowiedniki : <cstring>, <cmath>... Odpowiedniki są konstruowane tak: dodajemy do nazwy nagłówku starego typu c i odrzucamy.h Przestrzeń nazw to po prostu pewien zadeklarowany obszar. Przestrzenie nazw są stosowane w celu identyfikacji nazw i uniknięcia ich konfliktów. Elementy zadeklarowane w jednej przestrzeni nazw są odseparowane od elementów zadeklarowanych w innej. 15

namespace MY_NAMESPACE_1 { int i; void fun(int j, char *str); }; namespace MY_NAMESPACE_2 { int i; void fun(int j, char *str); }; void MY_NAMESPACE_1::fun(int j, char *str) { cout << j = << j << str: << str << endl; } void MY_NAMESPACE_2::fun(int j, char *str) { cout << j*j = << j*j << str: << str <<!!! << endl; } 16

int i; //należy do globalnej przestrzeni nazw void fun(int j, char *str) { cout << j*j*j = << j*j*j << str: << [ << str << ] << endl; } int main() { MY_NAMESPACE_1::i = 1; //należy do przestrzeni nazw MY_NAMESPACE_1 MY_NAMESPACE_2::i = 2; //należy do przestrzeni nazw MY_NAMESPACE_2... //To są różne zmienne są umieszczone w różnych adresach pamięci // Dla tego nie powstaje konfliktu nazw; :: - operator zakresu. MY_NAMESPACE_1::fun(10, abcd ); //wywołujemy funkcje z przestrzeni nazw // MY_NAMESPACE_1 MY_NAMESPACE_2::fun(15, efgk ); //wywołujemy funkcje z przestrzeni nazw // MY_NAMESPACE_2 fun(20, tunm ); //wywołujemy funkcje z globalnej przestrzeni nazw 17

Nazwy funkcji bibliotecznych C są zadeklarowane w globalnej przestrzeni nazw. Nazwy funkcji bibliotecznych C++ umieszczone w przestrzeni nazw std. Instrukcje using namespace std udostępnia nazwy, umieszczone w przestrzeni nazw std. 18