Technologie cyfrowe semestr letni 2018/2019

Podobne dokumenty
Technologie cyfrowe semestr letni 2018/2019

Programowanie obiektowe

Dziedziczenie & W slajdach są materiały zapożyczone z

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

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

Mechanizm dziedziczenia

Podstawy Programowania Obiektowego

Język C++ wykład VIII

Programowanie obiektowe język C++

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

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

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

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

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

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

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie i struktury danych

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

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.

Programowanie Obiektowe i C++ Marcin Benke

PARADYGMATY PROGRAMOWANIA Wykład 4

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

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

Wstęp do Programowania 2

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

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

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

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

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

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

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

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

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

Programowanie obiektowe w C++ Wykład 12

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

dr inż. Jarosław Forenc

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

Laboratorium 1 - Programowanie proceduralne i obiektowe

Wprowadzenie do języka Java

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Szablon klasy std::vector

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

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

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

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

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

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Mechanizm dziedziczenia

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

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

TEMAT : KLASY POLIMORFIZM

Programowanie obiektowe

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

Wstęp do programowania obiektowego, wykład 7

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

TEMAT : KLASY DZIEDZICZENIE

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Programowanie obiektowe - 1.

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Plik klasy. h deklaracje klas

Programowanie obiektowe. Wprowadzenie

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

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

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

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

Do czego służą klasy?

Programowanie Obiektowe i C++

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

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

Programowanie obiektowe w języku

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

Języki programowania - podstawy

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

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

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

Rzutowanie i konwersje

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

Paradygmaty programowania

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Wstęp do programowania. Wykład 1

Wprowadzenie do programowanie obiektowego w języku C++

Języki i paradygmaty programowania

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

Listy powiązane zorientowane obiektowo

Abstrakcyjny typ danych

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

Transkrypt:

Technologie cyfrowe semestr letni 2018/2019 Tomasz Kazimierczuk Wykład 8 (15.04.2019)

Kompilacja Kompilacja programu (kodu): proces tłumaczenia kodu napisanego w wybranym języku na kod maszynowy, zrozumiały dla procesora. Wynikiem kompilacji jest program, który można uruchomić. W czasie kompilacji jest analizowany cały kod, co oznacza, że nie może w nim być nigdzie błędów językowych. Interpretacja: wykonywanie kodu programu krok po kroku, bez analizy poprawności językowej całości. Interpretacja jest prowadzona do napotkania błędu w kodzie, lub poprawnego zakończenia działania programu. Języki kompilowane: C++ Języki interpretowane: PHP, Java, Python Wykład 7 2

C++ jest językiem kompilowanym 1. Tworzymy kod źródłowy w pliku tekstowym #include <iostream> using namespace std; int main() { cout << "Hello world"; program.cpp } return 0; 2. Kompilujemy program $ g++ program.cpp o program 3. Uruchamiamy program $./program Hello world

Paradygmaty programowania Imperatywne Deklaratywne Proceduralne Logiczne Obiektowe Funkcyjne

Przykład 2 function GreatestCommonDivisor(a, b: Int64): Int64; begin if (a < 0) then a := -a; if (b < 0) then b := -b; if (a = 0) then Exit(b); if (b = 0) then Exit(a); while not (a = b) do begin if (a > b) then a := a - b else b := b - a; end; Result := a; end;

Przykład: programowanie deklaratywne SELECT Student.Imie, Student.Nazwisko, Ocena.Ocena FROM Student JOIN Ocena ON Student.id = Ocena.StudentId WHERE Ocena.Przedmiot = Mechanika kwantowa AND Ocena.Ocena > 2;

(define (sieve n) (define (aux u v) (let ((p (car v))) (if (> (* p p) n) (let rev-append ((u u) (v v)) Przykład 2: programowanie funkcyjne (if (null? u) v (rev-append (cdr u) (cons (car u) v)))) (aux (cons p u) (let wheel ((u '()) (v (cdr v)) (a (* p p))) (cond ((null? v) (reverse u)) ((= (car v) a) (wheel u (cdr v) (+ a p))) ((> (car v) a) (wheel u v (+ a p))) (else (wheel (cons (car v) u) (cdr v) a)))))))) (aux '(2) (let range ((v '()) (k (if (odd? n) n (- n 1)))) (if (< k 3) v (range (cons k v) (- k 2))))))

Programowanie imperatywne Kolejne instrukcje zmieniają stan (np. wartości zmiennych) Podstawowe typy zmiennych: int liczba całkowita, np. 2235 double liczba rzeczywista, np. 3.14 char pojedynczy znak ASCII (litera) bool wartość logiczna (prawda lub fałsz)

Język Python Struktury danych: elementy algorytmu przechowujące informacje. zmienna: miejsce na konkretne dane. Zmienna ma swoją nazwę, typ i wartość. Wykład 7 9

Język Python Wyrażenia: operacje na zmiennych, wzory. Wykład 7 10

Prześledźmy program (C++): #include <iostream> using namespace std; Standardowy początek int main() { int a = 0; int b = 0; a = 8; b = 9 + a; b = b + b; Wypisywanie wartości zmiennych cout << a << " " << b << "\n"; } return 0; Standardowy koniec

Prześledźmy program (Python): a = 8 b = 9 + a b = b + b print (a, " ", b)

Funkcja Argumenty zmienne lokalne Wynik double srednia(double x, double y) { return (x+y) / 2; } def srednia(x,y): return (x+y)/2.0

Systemy typowania Wieloznaczność pojęcia strongly typed / weakly typed Sprawdzanie błędów typów podczas kompilacji? Sprawdzanie błędów typów podczas wykonania? Związanie zmienej z typem? Związanie wartości z typem? Nieco lepiej: dynamically / statically typed

Programowanie obiektowe

Przykład wykorzystania obiektu Obiekt X jest instancją klasy Y Obiekt = tożsamość + stan + zachowanie vector<int> v; v.push_back(5); v.push_back(6); v.push_back(3); Obiekt = dane + metody cout << "Aktualnie w wektorze jest " << v.size() << " elementow" << endl; cout << "Pierwszym elementem jest" << v.front() << endl;

Przykład (C++) class A{ private: int x, y; public: void setvaluex(int a) { x = a; } void setvaluey(int b); }; int main(){ A obj; obj.x = 3; obj.setvaluey(3);... niedozwolone

Przykład (Python) class A: def set_value_x(self, a): self.x = a def set_value_y(self, b): self.y = b # Tutaj wlasciwy kod: obj = A() obj.set_value_y(3) obj.y = 3

Przykład (Python) class A: def set_value_x(self, a): self._x = a def set_value_y(self, b): self._y = b # Tutaj wlasciwy kod: obj = A() obj.set_value_y(3) obj._y = 3 Można, ale nie należy

Przykład konstruktora class Sredniacz: def init (self): self._n = 0 self._suma = 0 def dodaj(self, x): self._suma += x self._n += 1 def srednia(self): return self._suma / self._n

Koncepcja Abstrakcja Enkapsulacja Ochrona informacji Polimorfizm Dziedziczenie Realizacja w C++ Klasy Klasy public/protected/private Przeładowanie operatorów, wzorce, metody wirtualne Dziedziczenie klas

Dziedziczenie Dziedziczenie pozwala stworzyć nową klasę przy wykorzystaniu już istniejącej klasy. Dziedziczenie to modyfikacja typu polegająca na jego przystosowaniu do określonych warunków jest to więc rodzaj specjalizacji. Tekst zapożyczony z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt

Dziedziczenie Nomenklatura: klasa bazowa (podstawowa albo nadklasa) to klasa, z której dziedziczą inne klasy; klasa pochodna (podklasa) to nowa klasa, która dziedziczy strukturę informacyjną i funkcjonalność z innej klasy. Rysunek schematyczny: klasa bazowa klasa pochodna

Przykład Klasa bazowa Macierz Klasa pochodna - MacierzKwadratowa

class Macierz { public: Macierz(int n, int m); int liczba_wierszy(); int liczba_kolumn(); void wypisz(); void ustaw_wartosc(int wiersz, int kolumna, double wartosc); double wartosc(int wiersz, int kolumna); void pomnoz_przez(double r); private: int w, k; vector< vector<double> > dane; };

class MacierzKwadratowa : public Macierz { public: MacierzKwadratowa(int n); }; double wyznacznik();

class Macierz: def init (self, n, m): self._w = n self._k = m self._dane = [[0]*n for i in range(m)] def liczba_wierszy(self): return self._w def liczba_kolumn(self): return self._k def wypisz(self): for i in range(self._w): for j in range(self._k): print(self.wartosc(i,j),", ") print("\n") def wartosc(self, wiersz, kolumna): return self._dane[kolumna,wiersz]

class MacierzKwadratowa(Macierz): def init (self, n): super(macierz, self). init (n,n) def wyznacznik(self): # tutaj kod z obliczeniami Python uciążliwa możliwość zupełnego re-definiowania konstruktora i destruktora

Zasada podstawienia Liskov Funkcje które używają wskaźników lub referencji do klas bazowych, muszą być w stanie używać również obiektów klas dziedziczących po klasach bazowych, bez dokładnej znajomości tych obiektów Kontrprzykład: void przetwarzajfigurę(figura& ifigura) { if(typeid(ifigura) == typeid(prostokąt)) przetwarzajprostokąt(static_cast<prostokąt&>(ifigura)); else if(typeid(ifigura) == typeid(okrąg)) przetwarzajokrąg(static_cast<okrąg&>(ifigura)); } else if(typeid(ifigura) == typeid(kwadrat)) przetwarzajkwadrat(static_cast<kwadrat&>(ifigura));

Dostęp do składników W klasie pochodnej nie ma dostępu do odziedziczonych składników prywatnych (czyli private). W klasie pochodnej jest dostęp do odziedziczonych składników nieprywatnych (czyli protected i public). Składniki chronione (czyli protected) są dostępne tylko w klasie bieżącej i w klasach pochodnych ale nie na zewnątrz.

Dostęp do składników Klasa pochodna też decyduje o zakresie widoczności odziedziczonych składników nieprywatnych poprzez sposób dziedziczenia (public, protected, private): przy dziedziczeniu publicznym odziedziczone składniki nieprywatne zachowują swój zakres widoczności; przy dziedziczeniu chronionym odziedziczone składniki nieprywatne stają się chronione; przy dziedziczeniu prywatnym odziedziczone składniki nieprywatne stają się prywatne. Domyślny sposób dziedziczenia to private.

Hierarchia klas Dziedziczenie może mieć wiele poziomów. Jedna klasa może być klasą bazową dla wielu innych klas. klasa A klasa B klasa D klasa C klasa E klasa F klasa G klasa D