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



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

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

Programowanie obiektowe - 1.

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

Języki i paradygmaty programowania

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

Podstawy Programowania Obiektowego

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

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

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

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Technologie i usługi internetowe cz. 2

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

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

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

Modelowanie i Programowanie Obiektowe

Wykład 8: klasy cz. 4

Wstęp do Programowania 2

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

Podstawy programowania obiektowego

Materiały do zajęć VII

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

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

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wykład 4: Klasy i Metody

Technologie obiektowe

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

Dokumentacja do API Javy.

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

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

Definiowanie własnych klas

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

Programowanie obiektowe język C++

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

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

Do czego służą klasy?

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

TEMAT : KLASY DZIEDZICZENIE

Zaawansowane programowanie w C++ (PCP)

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

Podstawy Języka Java

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

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

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

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

dr inż. Jarosław Forenc

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

PARADYGMATY PROGRAMOWANIA Wykład 2

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

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

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Język programowania. Andrzej Bobyk

Definicje klas i obiektów. Tomasz Borzyszkowski

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

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

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

Szablony funkcji i szablony klas

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

Wstęp do programowania obiektowego. Wykład 2

Podstawy Programowania Obiektowego

Programowanie obiektowe w języku

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

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

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

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

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

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

Kurs WWW. Paweł Rajba.

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe

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

Technologie cyfrowe semestr letni 2018/2019

Technologie cyfrowe semestr letni 2018/2019

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

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Języki i metody programowania Java. Wykład 2 (część 2)

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

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

Wykład 5: Klasy cz. 3

Do czego służą klasy?

Wykład 0 Informacje Podstawowe

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

KLASY cz.1. Dorota Pylak

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

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

Transkrypt:

Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Literatura Języki i paradygmaty programowania Wykład 2 1. C. S. Horstman, G. Cornell, core Java 2 Podstawy, Helion 2003 2. B. Eckel, Thinking in Java, Helion 2003 3. http://wazniak.mimuw.edu.pl 4. http://pl.wikipedia.org 5. J. Grębosz, Symfonia C++ Tom I, II, III, Oficyna Kallimach 1999 6. S. Prata, Szkoła Programowania Język C++, Robomatic 2002 7. www.programowanieobiektowe.pl dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 2/18

Programowanie obiektowe jako jeden ze sposobów programowania Paradygmaty programowania Programowanie proceduralne Programowanie strukturalne Programowanie imperatywne Programowanie obiektowe Programowanie funkcyjne Programowanie uogólnione Programowanie zdarzeniowe Programowanie logiczne Programowanie aspektowe Programowanie deklaratywne Programowanie agentowe Programowanie modularne dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 3/18

Historia programowania obiektowego Za pierwszy prawdziwie obiektowy język programowania uważany jest Simula 67, który powstał w latach 60-tych ubiegłego stulecia. Język ten powstał podczas pracy nad symulacją statków. To w tym języku po raz pierwszy wprowadzono pojęcie klasy i egzemplarza danej klasy. Dzięki temu językowi możliwa była tzw. symulacja, czyli odwzorowanie obiektów świata rzeczywistego na obiekty używane w programie. Idea programowania obiektowego została następnie dopracowana w języku Smalltalk (1971), w którym obiekty mogą byd tworzone i modyfikowane dynamicznie, tzn. w trakcie działania programu (w przeciwieostwie do statycznych programów). Powstanie języka C++ (1983) przyczyniło się w sposób szczególny do rozpowszechnienia idei programowania obiektowego. Cechy obiektowości pojawiły się również w wielu innych językach programowania takich jak np. Ada, Eiffel, Basic, Pascal, Lisp. Dzisiaj jednym z najpopularniejszych obiektowych języków programowania jest Java (1991). Przykłady innych obiektowych języków programowania: Python, Perl, C#, Ruby, Ocaml, PHP5. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 4/18

Dlaczego programowanie obiektowe? Programy komputerowe zbliżone są do ludzkiego sposobu postrzegania rzeczywistości. Łatwiej jest zrozumied kod i pomysły innych programistów i tym samym współpracowad w zespole oraz ponownie wykorzystywad istniejące rozwiązania. Ten sam, naturalny dla ludzi sposób myślenia i te same pojęcia można użyd przy analizie problemu, który ma byd rozwiązany i przy projektowaniu jego programowego rozwiązania. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 5/18

Założenia paradygmatu obiektowego Abstrakcja Jest to ograniczenie cech obiektu ze świata rzeczywistego do cech istotnych, kluczowych z punktu widzenia programisty. Abstrakcja ma za zadanie uprościd rozwiązanie problemu i zwiększyd jego ogólnośd. Hermetyzacja, zwana inaczej enkapsulacją, jest kluczowym zagadnieniem programowania zorientowanego obiektowo. Polega ona na ukrywaniu implementacji przed użytkownikiem obiektu. Hermetyzacja zapewnia, że obiekt nie może zmieniad stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Dziedziczenie umożliwia definicję i tworzenie obiektów na podstawie obiektów bardziej ogólnych. Polimorfizm umożliwia dostosowanie działania obiektów do własnych oczekiwao poprzez łączenie funkcjonalności zarówno dziedziczonej, jak i implementowanej samodzielnie. Idea polimorfizmu bazuje na tym, że użytkownik obiektu nie wie i nie musi wiedzied, czy konkretne zachowanie wykorzystywanego obiektu zostało zrealizowane bezpośrednio w tym obiekcie czy też w tym, po którym dziedziczy on swoje właściwości. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 6/18

Klasa i obiekt Języki i paradygmaty programowania Wykład 2 Klasa jest najważniejszym z pojęd związanym z programowaniem zorientowanym obiektowo. Klasa jest szablonem, czy też projektem na podstawie którego tworzone są obiekty, które posiadają pewne cechy i funkcje. Zatem klasa jest narzędziem, za pomocą którego tłumaczy się abstrakcję na typ użytkownika. Zadaniem obiektów w programie jest reprezentowanie wybranych, istotnych cech i funkcji rzeczywistego obiektu Właściwości obiektów: Zachowanie obiektu co można zrobid dzięki temu obiektowi i jakie metody (funkcje) można dla niego wywoływad? Stan obiektu jak obiekt reaguje na działanie tych metod? Tożsamośd obiektu w jaki sposób można odróżnid ten obiekt od innych, posiadając to samo zachowanie i stan? dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 7/18

Programowanie obiektowe vs. programowanie proceduralne Programowanie zorientowane obiektowo Zidentyfikowanie zadania Podzielenie każdego zadania na kilka mniejszych elementarnych Implementacja zadao elementarnych (tzw. podejście od ogółu do szczegółu) Programowanie proceduralne Tworzenie procedur wykonujących proste zadania Łączenie prostych procedur w bardziej skomplikowane Powstanie pożądanej aplikacji (tzw. podejście od szczegółu do ogółu) metoda metoda Obiekt funkcja funkcja metoda metoda metoda metoda Obiekt Obiekt funkcja funkcja funkcja Dane globalne dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 8/18

Przykład klasy w języku C++ Deklaracja klasy Implementacja funkcji składowych klasy //plik pracownik.h class Pracownik private: char imie[30]; char nazwisko[30]; char stanowisko[40]; double zasadnicza; double premia; double pensja; void obliczpensje() pensja = premia + zasadnicza; public: void aktualizuj(double zas, double pr); void pokaz(); ; //plik pracownik.cc #include <iostream> using namespace std; #include pracownik.h void Pracownik::aktualizuj(double zas, double pr) zasadnicza = zas; premia = pr; obliczpensje(); void Pracownik::pokaz() cout <<"Pracownik: "<< imie <<" "<<nazwisko<<'\n'; cout <<"Pensja: "<< pensja <<"\n"; aktualizuj pokaz Pracownik imie nazwisko stanowisko zasadnicza premia pensja obliczpensje() dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 9/18

Przykład klasy w języku Java //plik Pracownik.java import java.util.*; class Pracownik private String imie; private String nazwisko; private String stanowisko; private double zasadnicza; private double premia; private double pensja; private void obliczpensje() pensja = premia + zasadnicza; public void aktualizuj(double zas, double pr) zasadnicza = zas; premia = pr; obliczpensje(); public void pokaz() System.out.println( Pracownik: + imie + + nazwisko); System.out.println( Pensja: + pensja); dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 10/18

Typy użytkownika, czyli zastosowanie klas Poniższy program napisany w języku C++, używa obiektów klasy Pracownik. Użycie klasy Pracownik. Język Java. //plik testpracownik.cc #include pracownik.h int main() Pracownik janek; Pracownik zenek; janek.aktualizuj(1400,200); zenek.aktualizuj(1560,100); janek.pokaz(); zenek.pokaz(); return 0; //plik testpracownik.java import java.util.*; public class testpracownik.java public static void main(string [] args) Pracownik janek = new Pracownik(); Pracownik zenek = new Pracownik(); janek.aktualizuj(1400,200); zenek.aktualizuj(1560,100); janek.pokaz(); zenek.pokaz(); dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 11/18

Ogólnie o klasach //C++ class NazwaKlasy private: dane składowe klasy public: funkcje składowe (prototypy) klasy Języki i paradygmaty programowania Wykład 2 Zawartośd części publicznej to tzw. interfejs publiczny Zamknięcie danych składowych klasy w części prywatnej to enkapsulacja danych Funkcje składowe klasy nazywane są metodami. Obiekty utworzone na podstawie danej klasy nazywane są instancjami tej klasy. Przykłady definicji obiektów na przykładzie klasy Student. Student s1; Student* s2 = new Student; Student tab1s[10]; Student* tab2s = new Student[10]; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 12/18

Konstruktory Języki i paradygmaty programowania Wykład 2 Aby możliwe było inicjowanie pól składowych obiektu podczas jego tworzenia używa się specjalnych metod zwanych konstruktorami. Metoda ta jest wywoływana automatycznie podczas tworzenia obiektu. Nazwa konstruktora jest taka sama jak nazwa klasy. Jedna klasa może mied wiele konstruktorów. Poniżej przedstawiono prototypy konstruktorów klasy Pracownik (C++). Pracownik(); //konstruktor domyślny Pracownik(const char* i, const char* n, const char* s); Pracownik(const char* i, const char* n, const char* s = fizyczny ); Poniżej przedstawiono definicje powyższych konstruktorów. Pracownik::Pracownik() strcpy(imie,??? ); strcpy(nazwisko,??? ); zasadnicza=0; pensja=0; Pracownik::Pracownik(const char* i, const char* n, const char* s) strcpy(imie,i); strcpy(nazwisko,n); strcpy(stanowisko,s); zasadnicza=0; pensja=0; Pracownik::Pracownik(const char* i, const char* n, const char* s = fizyczny ); strcpy(imie,i); strcpy(nazwisko,n); zasadnicza=1200; premia=140; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 13/18

Konstruktory Języki i paradygmaty programowania Wykład 2 Jawne użycie konstruktora: Pracownik p1 = Pracownik( Jan, Kowalski, brygadzista ); Niejawne użycie konstruktora: Pracownik p2( Edward, Dzik ); Inne przykłady zastosowania konstruktorów: Pracownik * p3 = new Pracownik; // niejawne wywołanie konstruktora domyślnego Pracownik p4 = Pracownik(); // jawne wywołanie konstruktora domyślnego Uwaga Gdy nie dostarczymy klasie żadnych konstruktorów, wówczas kompilator utworzy konstruktor domyślny. Jeżeli zdefiniujemy natomiast dowolny konstruktor klasy, wówczas konstruktor domyślny należy zdefiniowad samemu (o ile jest potrzebny). dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 14/18

Konstruktor domyślny Języki i paradygmaty programowania Wykład 2 Konstruktor domyślny jest używany do utworzenia obiektu wtedy, gdy nie podamy wartości inicjujących. Konstruktor taki nie posiada argumentów. W poniższej deklaracji użyty jest konstruktor domyślny. Pracownik janek; Uwaga Gdy nie dostarczymy klasie żadnych konstruktorów, wówczas kompilator utworzy konstruktor domyślny. Jeżeli zdefiniujemy natomiast dowolny konstruktor klasy, wówczas konstruktor domyślny należy zdefiniowad samemu (o ile jest potrzebny). Zobacz przykład poniżej. class Zespolona private: double re; double im; public: Zespolona(int x, int y) re = x; im = y; ; int main() Zespolona z1(1,2); //poprawnie Zespolona z2; // źle return 0; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 15/18

Destruktory Języki i paradygmaty programowania Wykład 2 (C++) Po utworzeniu danego obiektu program śledzi jego istnienie aż do momentu jego wygaśnięcia. Wywoływana jest wówczas specjalna metoda klasy zwana destruktorem, której zadaniem jest posprzątanie po wygasłym obiekcie (np. zwolnienie pamięci). Tak samo jak konstruktor destruktor nie posiada wartości zwracanej ani nie posiada żadnych argumentów. Nazwa destruktora to nazwa klasy poprzedzona tyldą (~). (Java) Brak destruktorów. Odśmiecaniem pamięci zajmuje się tzw. garbage collector. Poniżej przedstawiono przykład klasy ze zdefiniowanym destruktorem: class A private: int* a; public: A(int x) a = new int(x); ; ~A() delete a; cout << Destruktor obiektu << *a << \n ; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 16/18

Kiedy wywoływany jest destruktor? Decyzję o wywołaniu destruktora podejmuje kompilator. Kod nie powinien jawnie wywoływad destruktora. Jeżeli obiekt tworzony jest w pamięci statycznej, wówczas jego destruktor wywoływany jest przed zakooczeniem programu. Jeżeli obiekt tworzony jest w sposób automatyczny wówczas destruktor jest wywoływany kiedy program opuszcza blok kodu w którym został zdefiniowany ten obiekt. Jeżeli obiekt utworzono w sposób dynamiczny (tzn. za pomocą operatora new), wówczas destruktor tego obiektu jest wywoływany automatycznie, gdy użyjemy delete do zwolnienia pamięci. Zadanie W jakiej kolejności wywołane będą destruktory obiektów klasy A utworzonych następująco: A p1(1); int main() A* p2 = new A(2); A p3(3); A p4(4); A p5(5); delete p2; return 0; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 17/18

KONIEC Dziękuję za uwagę dr Dariusz Wardowski, Katedra Analizy Nieliniowej 18/18