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

Podobne dokumenty
Wykład 8: klasy cz. 4

Podstawy Programowania Obiektowego

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

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

Wykład z Technologii Informacyjnych. Piotr Mika

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Wykład 5: Klasy cz. 3

Programowanie obiektowe

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

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

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

Programowanie obiektowe

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

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

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Technologie i usługi internetowe cz. 2

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

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

Definiowanie własnych klas

Wykład 9: Polimorfizm i klasy wirtualne

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

Programowanie w języku C++ Podstawowe paradygmaty programowania

Programowanie komputerowe. Zajęcia 7

Programowanie obiektowe - 1.

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

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

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

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

Metodyki i techniki programowania

Programowanie obiektowe

KARTA KURSU. Programowanie obiektowe

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

Metodyki i techniki programowania

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

Diagramy klas. dr Jarosław Skaruz

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

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

Szablony klas, zastosowanie szablonów w programach

TEMAT : KLASY DZIEDZICZENIE

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

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne)

Rok akademicki: 2016/2017 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

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

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wykład 0 Informacje Podstawowe

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

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

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

Rok akademicki: 2012/2013 Kod: EAR s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Języki programowania imperatywnego

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

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

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Podstawy Programowania C++

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie II C16

PRZEWODNIK PO PRZEDMIOCIE

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

Podstawy Programowania

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

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

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

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

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Programowanie, część I

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

Programowanie obiektowe i zdarzeniowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Materiały do zajęć VII

Wykład 1: Wskaźniki i zmienne dynamiczne

JAVA W SUPER EXPRESOWEJ PIGUŁCE

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie I C6

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

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

Definicje. Algorytm to:

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

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

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

Podstawy programowania obiektowego

Podstawy Programowania

KARTA PRZEDMIOTU. Egzamin / zaliczenie. Egzamin / zaliczenie. ocenę*

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

Języki i paradygmaty programowania

Lab 9 Podstawy Programowania

Wprowadzenie do programowania

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

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

Transkrypt:

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

Cele przedmiotu Zapoznanie z podstawowymi pojęciami oraz technikami programowania obiektowego na przykładzie języka C++, opanowanie projektowania, implementacji i analizy programów w paradygmacie obiektowym. Celem laboratorium jest opanowanie programowania obiektowego w języku C++. 2

Treści przedmiotu (1/2) 1. Powtórzenie materiału: algorytmy, podstawowe typy danych w języku C/C++, deklaracje zmiennych i stałych, wyrażenia i instrukcje, funkcje, schematy blokowe. 2. Zmienne wskaźnikowe oraz pobranie adresu zmiennych i funkcji, przekazywanie parametrów do funkcji przez wartość i referencję, wskaźniki do funkcji, pliki. 3. Analiza dziedziny problemu, projektowanie obiektowe oraz programowanie obiektowe. Podejście strukturalne a podejście obiektowe do problemu. 4. Pojęcia klasy i obiektu. Składowe i metody. Schematy klas w UML. Zmienne statyczne. Składowe statyczne. 5. Tworzenie obiektów (konstrukcja, usuwanie, czas życia) w C++. Konstruktory i destruktory. Konstruktor kopiujący. 3

Treści przedmiotu (2/2) 6. Hermetyzacja składowych: kontrola dostępu. Przeciążanie metod i operatorów. 7. Dziedziczenie: dekompozycja problemu na hierarchie klas. 8. Polimorfizm. Rzutowanie w górę. Kompozycja. Schematy dziedziczenia i kompozycji w UML. 9. Dziedziczenie a kompozycja. Przesłanianie i widoczność składowych w dziedziczeniu. 10. Klasy abstrakcyjne. Metody wirtualne. Rozpoznawanie podtypów w trakcie wykonania. 11. Wielodziedziczenie. 12. Obsługa sytuacji specjalnych: wyjątki. 4

Literatura OBOWIĄZKOWA: 1. Grębosz J., Symfonia C++ standard. Programowanie w języku C++ orientowane obiektowo, Edition 2000, 2. Stroustrup B., Język C++, WNT 1998. UZUPEŁNIAJĄCA: 1. Lippman S.B., Istota języka C++. Zwięzły opis, WNT, 2004. 2. Vanderoorde D., Język C++ ćwiczenia i rozwiązania, WNT 2001. 3. Stasiewicz A., Ćwiczenia praktyczne C++, WNT, 2006. 5

Warunki zaliczenia Prerekwizytem jest pozytywne zaliczenie laboratorium Zaliczenie wykładu na podstawie egzaminu pisemnego, z następującą skalą ocen:. 3,0 - uzyskanie 50% maksymalnej liczby punktów, 3,5 - uzyskanie 60% maksymalnej liczby punktów, 4,0 - uzyskanie 70% maksymalnej liczby punktów, 4,5 - uzyskanie 80% maksymalnej liczby punktów, 5,0 - uzyskanie 90% maksymalnej liczby punktów. 6

ALGORYTMY I PARADYGMATY 7

Pojęcie algorytmu Algorytm - skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego rodzaju zadania. 8

Sposoby zapisu algorytmu 1. Najprostszy sposób: zapis słowny 2. Lista kroków 3. Zapis graficzny Schematy blokowe grafy (uproszczone schematy blokowe) 9

Sposoby zapisu algorytmu 1. Najprostszy sposób zapisu to zapis słowny pozwala określić kierunek działań 2. Bardziej konkretny zapis to lista kroków Zapisujemy kolejne kroki, które należy wykonać. Budowa listy kroków: sformułowanie zagadnienia (zadanie algorytmu) określenie zbioru danych potrzebnych do rozwiązania zagadnienia (określenie czy zbiór danych jest właściwy) określenie przewidywanego wyniku (wyników): co chcemy otrzymać i jakie mogą być warianty rozwiązania zapis kolejnych ponumerowanych kroków, które należy wykonać, aby przejść od punktu początkowego do końcowego 10

1. Bardzo wygodny zapis to zapis graficzny 1. Schematy blokowe blok operacji (prostokąt) blok rozgałęzienia (romb) blok we/wy (równoległobok) bloki startu i stopu 2. grafy (uproszczone schematy blokowe) 11

Podział algorytmów ze względu na strukturę: 1 Algorytm liniowy ciąg kroków, które są bezwarunkowo wykonane jeden po drugim. nie zawiera żadnych warunków ani rozgałęzień: zaczyna się od podania zestawu danych, następnie wykonywane są kolejne kroki wykonawcze, aż dochodzimy do wyniku 2 Algorytm z rozgałęzieniem zawiera rozgałęzienia będące efektem sprawdzania warunków. Wyrażenia warunkowe umożliwiają wykonanie zadania dla wielu wariantów danych i rozważanie różnych przypadków. 3 Algorytm z powtórzeniami pewne fragmenty kodu się powtarzają a) liczba powtórzeń jest z góry określona (przed rozpoczęciem cyklu) - np. związany z działaniami na wektorach, macierzach b) liczba powtórzeń jest nieznana (zależy od spełnienia pewnego warunku) - najczęściej związany z obliczeniami typu iteracyjnego 12

Pojęcie paradygmatu Paradygmat: [1] (w informatyce) zbiór mechanizmów, jakich programista używa, pisząc program; i jak ten program jest następnie wykonywany przez komputer. [2] (ogólnie) przyjęty sposób widzenia rzeczywistości w danej dziedzinie. 13

Programowanie imperatywne Obliczenia rozumiemy tu jako sekwencję poleceń zmieniających krok po kroku stan maszyny, aż do uzyskania oczekiwanego wyniku. Stan maszyny należy z kolei rozumieć jako zawartość całej pamięci oraz rejestrów i znaczników procesora. Jest to ściśle związane z budową sprzętu komputerowego o architekturze von Neumanna. 14

Architektura von Neumanna Podział komputera na trzy podstawowe części: procesor (ALU oraz CU) pamięć komputera (Memory) urządzenia wejścia/wyjścia (IN/OUT) 15

W najczystszym ujęciu program imperatywny to algorytm liniowy, często jednak rozszerza się programowanie imperatywne o struktury (rozgałęzienia i pętle) oraz procedury, co odpowiada założeniom: programowania strukturalnego oraz programowania proceduralnego. Te trzy paradygmaty są do siebie bardzo zbliżone i bywają używane zamiennie. 16

Programowanie strukturalne Programowanie strukturalne - paradygmat programowania zalecający hierarchiczne dzielenie kodu na bloki, z jednym punktem wejścia i jednym lub wieloma punktami wyjścia. Strukturalność zakłócają instrukcje typu: jump, goto, break, continue, które jednak niekiedy poprawiają czytelność kodu lub optymalizują wydajność programu. 17

Podstawowe struktury w programowaniu strukturalnym powtórzenia czyli pętle: while, do-while, for rozgałęzienia/wybór: if, if-else, case, switch 18

Programowanie proceduralne Programowanie proceduralne - paradygmat programowania zalecający dzielenie kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje. Procedury nie powinny korzystać ze zmiennych globalnych (w miarę możliwości), lecz jawnie pobierać wszystkie potrzebne dane (lub wskaźniki na potrzebne dane) jako parametry wywołania. Procedury w języku C/C++ nazywamy funkcjami. 19

Programowanie Obiektowe Programowanie Obiektowe (PO) jest metodą projektowania i implementowania systemów informatycznych polegającą na modelowaniu obiektów rzeczywistych przy użyciu obiektów programowych. Program obiektowy - to zbiór porozumiewających się ze sobą obiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje. 20

Koncepcja programowania obiektowego wydaje się inna od programowania strukturalnego czy proceduralnego, w praktyce jednak mają one ze sobą wiele wspólnego: Programowanie obiektowe korzysta z mechanizmów pr. strukturalnego, dodając jednocześnie obiektowe mechanizmy składowania i przetwarzania danych. 21

Celem programowania obiektowego jest uproszczenie procesu programowania (implementacji komputerowej rozwiązania jakiegoś problemu) przez wiązanie danych i procedur w hierarchiczne struktury oraz wprowadzenie dodatkowych mechanizmów (np. konstruktory, hermetyzacja, dziedziczenie, itp.). Ma to ułatwić: programowanie; konserwację programów; wielokrotne użycie programów lub ich fragmentów. 22

PODSTAWOWE POJĘCIA PROGRAMOWANIA OBIEKTOWEGO 23

Pojęcia klasy i obiektu Klasa - częściowa lub całkowita definicja pewnego zbioru obiektów o podobnych cechach. Obiekt - pojedynczy przedmiot należący do pewnego zbioru obiektów (klasy) (tzw. instancja klasy). Przykład: definiujemy klasę Krzesło, która posiada następujące cechy: ilość nóg, wysokość. Tworzymy obiekt o nazwie k2 klasy Krzesło, i nadajemy mu następujące wartości cech: ilość nóg=3, wysokość=55. 24

W języku C++, opis klasy jest dokonywany za pomocą pól (zmienne klasowe) i metod (funkcje klasowe). 25

Definicja klasy w C++ Definicja klasy zawiera dwie części: nagłówek składający się ze słowa kluczowego class, po którym następuje nazwa klasy oraz z ciała klasy ograniczonego parą nawiasów klamrowych i zwykle zakończonego średnikiem. class Punkt { }; Jest to definicja pustej klasy Punkt. 26

Wewnątrz ciała klasy deklaruje się pola klasy (zwane też zmiennymi składowymi lub właściwościami). Polami klasy mogą być różnego rodzaju typy danych (np. int, float, double, char, string, tablice, struktury oraz obiekty różnych klas). class Punkt { public: int x; //pole typu int o nazwie x int y; //pole typu int o nazwie y }; Tak zdefiniowana klasa Punkt posiada dwa pola, które reprezentują współrzędne punktu na płaszczyźnie. 27

Definicja funkcji w klasie Aby zdefiniować funkcję klasową (tzw. metodę) należy ją dopisać do ciała klasy w postaci funkcji. class Punkt { public: int x; int y; void przesuń_w_prawo(){ x = x+1; } }; definicja funkcji w klasie 28

Deklaracja funkcji w klasie (definicja poza klasą) Jeżeli definicja funkcji jest obszerna można ją przenieść poza klasę. class Punkt { public: int x; int y; void przesuń_w_prawo(); }; // deklaracja funkcji w klasie void Punkt::void przesuń_w_prawo(){ x = x+1; } definicja funkcji poza klasą W ten sposób możemy sprawić, że ciało klasy będzie zawierało tylko deklaracje funkcji, a ich definicje będą znajdowały się w innym miejscu (lub nawet w innym pliku źródłowym). 29

Identyfikator dostępu Aby jednoznacznie określić, która funkcja należy do określonej klasy w C++ stosuje się identyfikator dostępu :: (czterokropek, złożony z dwóch dwukropków). Funkcja zdefiniowana poza klasą ma więc postać: void nazwa_klasy :: nazwa_funkcji(void) { //definicja funkcji } 30

Tworzenie obiektów To co było do tej pory napisane odnosiło się do klasy, czyli definicji (przepisu na stworzenie) obiektu. Sam proces tworzenia obiektu nazywamy instancjonowaniem. Tworzenie obiektów dokonuje się tak samo jak tworzenie zmiennych (statycznie lub dynamicznie). 31

ZMIENNE STATYCZNE I DYNAMICZNE W C++ 32

Zmienne statyczne i dynamiczne Zmienne statyczne Zmienne dynamiczne Tworzone przy pomocy: deklaracji zmiennych Funkcji malloc (C/C++) lub operatora new (C++) Nazwa: posiadają nazwę nie posiadają nazwy Dostęp: Pamięć zwalniana: za pomocą nazwy Automatycznie, przy wyjściu poza zakres widoczności zmiennej za pomocą powiązanego wskaźnika, który wskazuje na zmienną Ręcznie, przy pomocy funkcji free() (C/C++) lub operatora delete (C++) 33

Dostęp do pól i metod obiektów Do pól i metod obiektów statycznych odwołujemy się poprzez kropkę. Do pól i metod obiektów dynamicznych odwołujemy się poprzez strzałkę -> (myślnik i znak większości) Jest to analogiczne do odwoływania się do pól zmiennych strukturalnych (struct) statycznych i dynamicznych 34

Cykl życia zmiennych statycznych i dynamicznych Etap 0. Deklaracja wskaźnika Zmienne statyczne Zmienne dynamiczne zwykłe obiektowe zwykłe obiektowe - - int *wsk; Punkt *wsk2; 1.Tworzenie int i; Punkt p1; wsk = new int; wsk2 = new Punkt; 2. Używanie i=5; printf( %d, i); p1.x = 5; printf( %d, p1.x); *wsk = 5; printf( %d, *wsk); wsk2->x = 5; printf( %d, wsk2- >x); 3. Niszczenie zmiennych <automatycznie> <automatycznie> delete wsk; delete wsk2; 35

class Punkt { public: int x; int y; void przesuń_w_prawo() {x = x+2;} }; Przykłady cyklu życia main(void) { Punkt p1; //obiekt stworzony statycznie p1.x=10; //odwołanie do pola przez kropkę p1. przesuń_w_prawo(); // wywołanie metody przez kropkę } Punkt *wsk; //wsk tworzenie wskaźnika na obiekt klasy Punkt wsk = new Punkt; //stworzenie obiektu dynamicznego przy pomocy operatora new wsk->x=10; //odwołanie do pola przez -> wsk-> przesuń_w_prawo(); //wywołanie metody przez -> delete wsk; //usunięcie obiektu dynamicznego przy pomocy operatora delete 36