Programowanie obiektowe

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Programowanie obiektowe
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe 2013/2014
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Ekonometria WYKŁAD 10 Piotr Ciżkowicz Katedra Międzynarodowych Studiów Porównawczych.
OBOWIĄZKI INFORMACYJNE BENEFICJENTA Zintegrowane Inwestycje Terytorialne Aglomeracji Wałbrzyskiej.
1. 2 Przed sprawdzianem/egzaminem 3 Przygotowania do sprawdzianu/egzaminu Przygotowania Styczeń – ostatnie zmiany w danych przekazanych OKE Luty – powołanie.
Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
Pionierka ogół umiejętności związanych z budowaniem przez harcerzy.
CO TO SĄ PROJEKTY INNOWACYJNE? PROJEKTY INNOWACYJNE WYTYCZNE EFS NIE WSKAZUJĄ ODRĘBNEJ DEFINICJI INNOWACYJNOŚCI.
Umowy Partnerskie w projektach zbiór najważniejszych składników Uwaga! Poniżej znajdują się jedynie praktyczne wskazówki dotyczące tworzenia umów. Dokładne.
EWALUACJA PROJEKTU WSPÓŁFINANSOWANEGO ZE ŚRODKÓW UNII EUROPEJSKIE J „Wyrównywanie dysproporcji w dostępie do przedszkoli dzieci z terenów wiejskich, w.
EWALUACJA JAKO ISTOTNY ELEMENT PROJEKTÓW SYSTEMOWYCH Sonia Rzeczkowska.
Zmienne losowe Zmienne losowe oznacza się dużymi literami alfabetu łacińskiego, na przykład X, Y, Z. Natomiast wartości jakie one przyjmują odpowiednio.
Coaching w poradnictwie zawodowym i edukacji. PLAN Definicja, proces - zmiana Możliwość wykorzystania coachingu w poradnictwie zawodowym i edukacji Model.
Materiały pochodzą z Platformy Edukacyjnej Portalu Wszelkie treści i zasoby edukacyjne publikowane na łamach Portalu
Wyższa Szkoła Informatyki i Zarządzania w Bielsku-Białej Wydział Informatyki Kierunek: Informatyka Specjalność: Systemy Informatyczne PRACA DYPLOMOWA INŻYNIERSKA.
MATURA 2007 podstawowe informacje o zmianach w egzaminie.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Metody sztucznej inteligencji - Technologie rozmyte i neuronowe 2015/2016 Perceptrony proste nieliniowe i wielowarstwowe © Kazimierz Duzinkiewicz, dr hab.
, + - = 0,5 CZYTAJ DOKŁADNIE ZADANIA I POLECENIA. IM TRUDNIEJSZE ZADANIE, TYM BARDZIEJ WARTO JE PRZECZYTAĆ KILKA RAZY.
Język Java Paweł Rajba
Dziedziczenie, polimorfizm, Interfejsy
Test analizy wariancji dla wielu średnich – klasyfikacja pojedyncza
Patryk Jasik pok. 415 GB Języki programowania Patryk Jasik pok. 415 GB
Programowanie Obiektowe – Wykład 1
Kurs języka C++ – organizacja zajęć ( )
Schematy blokowe.
Kurs języka C++ – wykład 2 ( )
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
Prezentacja o Ubuntu Jakub Kociemba 2TI.
ORGANIZACJA.
Ciąg arytmetyczny Opracowały : Iwona Głowacka i Małgorzata Jacek.
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Kurs języka C++ – wykład 6 ( )
Akademia C# lab. 9 Zdarzenia i delegaty.
Programowanie obiektowe Wykład 10
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe
Budowa, typologia, funkcjonalność
Programowanie obiektowe
Materiały pochodzą z Platformy Edukacyjnej Portalu
Kurs języka C++ – wykład 13 ( )
Inżynieria Oprogramowania Laboratorium
Bezpieczeństwo dostępu do danych w systemie Windows
Języki programowania.
Egzamin ucznia klasy ósmej
Programowanie obiektowe
Tensor naprężeń Cauchyego
Zgłoszenie do konkursu
Zgłoszenie do konkursu
Podstawy informatyki Zygfryd Głowacz.
Programowanie obiektowe Wykład 11
Strukturalne wzorce projektowe
Zgłoszenie w ramach kategorii Najlepszy Team Leader Contact Center
Zmienne i typy danych w C#
CZYNNIK LUDZKI JAKO POTENCJALNE ŹRÓDŁO ZAGROŻEŃ W SYSTEMIE OCHRONY INFORMACJI NIEJAWNYCH OPRACOWAŁ: ppłk mgr inż. Janusz PARCZEWSKI, tel
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Autor: Magdalena Linowiecka
dr Robert Kowalczyk, PWSZ Płock
Zapis prezentacji:

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

O mnie prowadzący wykład: Dariusz Wardowski pokój: A334 Programowanie obiektowe Wykład 1 O mnie prowadzący wykład: Dariusz Wardowski pokój: A334 dyżur: poniedziałek, godz. 16.15 – 17.45 e-mail: wardd@math.uni.lodz.pl www: www.math.uni.lodz.pl/˜wardd dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Zasady zaliczenia Laboratorium Programowanie obiektowe Wykład 1 Zasady zaliczenia Laboratorium 1. kolokwium (programowanie obiektowe w C++) sprawdzające efekty E2- E5. Termin: ostatnie zajęcia, termin I poprawy: sesja, termin II poprawy: sesja poprawkowa. 2. test sprawdzający efekt E1 (teoria z wykładu). Termin: j.w. 3. Aktywność studentów mile widziana i nagradzana (projekty dla chętnych). Wykład Brak egzaminu. Pamiętaj: Materiał omawiany na wykładzie jest podstawą do zaliczenia ćwiczeń. Patrz punkt nr 2. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe Wykład 1 Literatura C. S. Horstman, G. Cornell, Core Java 2 Podstawy, Helion 2003 C. S. Horstman, G. Cornell, Core Java 2 Techniki Zaawansowane, Helion 2003 B. Stroustrup, Język C++, WNT 2002 S. Prata, Szkoła Programowania Język C++, Robomatic 2002 B. S. Lippman, J. Lajoie, Podstawy języka C++, WNT 2003 B. Eckel, Thinking in Java, Helion 2003 http://wazniak.mimuw.edu.pl J. Grębosz, Symfonia C++ Tom I, II, III, Oficyna Kallimach 1999 www.programowanieobiektowe.pl M. Ben-Ari, Understanding programming languages, John Wiley & Sons 1996 B. Meyer, Programowanie zorientowane obiektowo, Helion 2005 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe jako jeden ze sposobów programowania Wykład 1 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Ł

Historia programowania obiektowego Programowanie obiektowe Wykład 1 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ą być tworzone i modyfikowane dynamicznie, tzn. w trakcie działania programu (w przeciwieństwie 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Ł

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

Założenia paradygmatu obiektowego Programowanie obiektowe Wykład 1 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ścić rozwiązanie problemu i zwiększyć jego ogólność. 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 zmieniać 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 oczekiwań 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 wiedzieć, 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Ł

Programowanie obiektowe Wykład 1 Klasa i obiekt Klasa jest najważniejszym z pojęć 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 zrobić dzięki temu obiektowi i jakie metody (funkcje) można dla niego wywoływać? Stan obiektu – jak obiekt reaguje na działanie tych metod? Tożsamość obiektu – w jaki sposób można odróżnić ten obiekt od innych, posiadając to samo zachowanie i stan? dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe vs. programowanie proceduralne Wykład 1 Programowanie obiektowe vs. programowanie proceduralne Programowanie zorientowane obiektowo Zidentyfikowanie zadania Podzielenie każdego zadania na kilka mniejszych elementarnych Implementacja zadań 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) Obiekt metoda Dane globalne funkcja dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Przykład klasy w języku C++ Programowanie obiektowe Wykład 1 Przykład klasy w języku C++ Deklaracja 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, double); void pokaz(); }; Implementacja funkcji składowych klasy //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"; Pracownik imie nazwisko stanowisko zasadnicza premia pensja obliczPensje() aktualizuj pokaz dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Przykład klasy w języku Java Programowanie obiektowe Wykład 1 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Ł

Typy użytkownika, czyli zastosowanie klas Programowanie obiektowe Wykład 1 Typy użytkownika, czyli zastosowanie klas Poniższy program napisany w języku C++, używa obiektów klasy Pracownik. //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; } Użycie klasy Pracownik. Język Java. //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Ł

Programowanie obiektowe Wykład 1 Ogólnie o klasach //C++ class NazwaKlasy { private: dane składowe klasy public: funkcje składowe (prototypy) klasy }; Zawartość 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Ł

Programowanie obiektowe Wykład 1 Konstruktory 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 mieć 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Ł

Konstruktory Jawne użycie konstruktora: Niejawne użycie konstruktora: Programowanie obiektowe Wykład 1 Konstruktory 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 zdefiniować samemu (o ile jest potrzebny). dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe Wykład 1 Konstruktor domyślny 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 zdefiniować samemu (o ile jest potrzebny). Zobacz przykład poniżej. class Para { private: double x; double y; public: Para(int _x, int _y) x = _x; y = _y; } }; int main() Para z1(1,2); //poprawnie Para z2; // źle return 0; dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe Wykład 1 Destruktory (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Ł

Kiedy wywoływany jest destruktor? Programowanie obiektowe Wykład 1 Kiedy wywoływany jest destruktor? Decyzję o wywołaniu destruktora podejmuje kompilator. Kod nie powinien jawnie wywoływać destruktora. Jeżeli obiekt tworzony jest w pamięci statycznej, wówczas jego destruktor wywoływany jest przed zakończeniem 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Ł

 Dziękuję za uwagę Programowanie obiektowe Wykład 1 dr Dariusz Wardowski, Katedra Analizy Nieliniowej