kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

Podobne dokumenty
Wykład 4: Klasy i Metody

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

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

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

Materiały do zajęć VII

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

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

Wstęp do programowania

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Wstęp do programowania

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

Wstęp do Programowania 2

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

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

14. Elementy systemu wykonawczego

Podstawy Programowania Obiektowego

Technologie obiektowe

Projektowanie klas c.d. Projektowanie klas przykład

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

Tablice, funkcje - wprowadzenie

Szablony funkcji i szablony klas

Ćwiczenie nr 6. Programowanie mieszane

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

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

Wstęp do programowania

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


Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

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

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

Metody Metody, parametry, zwracanie wartości

Szablony klas, zastosowanie szablonów w programach

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

Rozdział 4 KLASY, OBIEKTY, METODY

Definiowanie własnych klas

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

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

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

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

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

Język ludzki kod maszynowy

Efekty uboczne błędów

Do czego służą klasy?

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

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

Przypomnienie o klasach i obiektach

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie i struktury danych

Dziedziczenie. Tomasz Borzyszkowski

Wykład 5: Więcej o Klasach i Metodach

Podstawy programowania obiektowego

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

PARADYGMATY PROGRAMOWANIA Wykład 2

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Java EE produkcja oprogramowania

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

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

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

Programowanie w Internecie. Java

TEMAT : KLASY DZIEDZICZENIE

Enkapsulacja, dziedziczenie, polimorfizm

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Funkcja (podprogram) void

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

Listy powiązane zorientowane obiektowo

Wprowadzenie do programowania w języku C

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++ Klasy w C++

Przydział pamięci. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Abstrakcyjny typ danych

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

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

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

Wykład 8: klasy cz. 4

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Podstawy programowania obiektowego

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Instrukcja laboratoryjna cz.3

Czym są właściwości. Poprawne projektowanie klas

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

Szablony funkcji i klas (templates)

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.

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Programowanie obiektowe - 1.

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

Klasa dziedzicząca posiada wszystkie cechy klasy bazowej (plus swoje własne) dodawanie nowego kodu bez edycji (i ewentualnego wprowadzania

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

Wstęp. do języka C na procesor (kompilator RC51)

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

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

Interfejsy i klasy wewnętrzne

Transkrypt:

Korutyny Wykład13,str1 tak działa podprogram: PROGRAM GŁÓWNY wywołanie PODPROGRAM tak działają korutyny: KORUTYNA A resume B resume B KORUTYNA B resume A Korutyny Wykład13,str2 Korutyny mają zwykle więcej niż jeden punkt wejścia, otwartych jest naraz kilka korutyn, działa tylko jedna, ale działanie pozostałych jest tylko zawieszone, nie zakończone, korutyna może oddać sterowanie innej korutynie i przejść w stan zawieszenia obliczenia, kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych, sposób współdziałania korutyn to pseudowspółbieżność lub podział czasu

Wykład13,str3 Czynności przy wywołaniu prostego podprogramu: zapisać aktualny stan obliczenia: adres zmiennych lokalnych, wartości rejestrów procesora, stan procesora, itp; wyliczyć parametry i przekazać je podprogramowi; przekazać podprogramowi adres powrotu; oddać sterowanie podprogramowi Czynności przy powrocie z prostego podprogramu: przepisać parametry lokalne do aktualnych(w przypadku wołania przez wynik lub wartość-wynik); jeśli podprogram jest funkcją, to jej wynik przekazać w miejsce dostępne dla programu wywołującego; odtworzyć z zapisów adres zmiennych lokalnych, wartości rejestrów procesora, jego stan, itp; przekazać sterowanie pod zapisany w podprogramie adres powrotu Wykład13,str4 Które z tych czynności ma wykonać program wywołujący, a które podprogram? zapisanie stanu obliczenia wyliczenie parametrów program podgłówny program którykolwiek + przekazanie adresu powrotu + przekazanie sterowania + par formalne do aktualnych + oddanie wyniku funkcyjnego + odtworzenie stanu obliczenia którykolwiek zwrot sterowania +

Wykład13,str5 zmienne lokalne parametry adres powrotu Blok aktywacyjny podprogramu zawiera wartości nienależące do jego kodu Blok aktywacyjny prostego podprogramu(bez rekursji i innych komplikacji) jest tylko jeden i może być alokowany statycznie(w trakcie kompilacji) Organizacja pamięci może być np taka: zmienne lokalne MAIN zmienne lokalne A parametry A adres powrotu A zmienne lokalne B parametry B adres powrotu B kod MAIN koda kodb Wykład13,str6 Parametry i zmienne lokalne dynamiczne na stosie potrzebne np do rekursji; kompilator musi generować kod dla niejawnej alokacji i dealokacji; podprogram potrzebuje wielu bloków aktywacyjnych jednego dla każdego wywołania; zmienne lokalne A parametry A link dynamiczny A adres powrotu A w bloku aktywacyjnym musi znajdować się link dynamiczny informacja, gdzie znajduje się poprzedni blok aktywacyjny Zmienne i parametry skalarne na ogół są wpisane do bloku aktywacyjnego; bardziej skomplikowane dane są czasem reprezentowane w bloku aktywacyjnym przez wskaźniki

Wykład13,str7 Parametry i zmienne lokalne dynamiczne na stosie Dla przykładowej funkcji z C: void sub(double total, int part) { int list[5]; double sum; tak wygląda blok aktywacyjny: lokalna sum lokalna list[4] lokalna list[3] lokalna list[2] lokalna list[1] lokalna list[0] parametr part parametr total link dynamiczny adres powrotu Wykład13,str8 Parametry i zmienne lokalne dynamiczne na stosie potrzebne np do rekursji; kompilator musi generować kod dla niejawnej alokacji i dealokacji; podprogram potrzebuje wielu bloków aktywacyjnych jednego dla każdego wywołania; zmienne lokalne A parametry A link dynamiczny A adres powrotu A w bloku aktywacyjnym musi znajdować się link dynamiczny informacja, gdzie znajduje się poprzedni blok aktywacyjny Zmienne i parametry skalarne na ogół są wpisane do bloku aktywacyjnego; bardziej skomplikowane dane są czasem reprezentowane w bloku aktywacyjnym przez wskaźniki

Wykład13,str9 Parametry i zmienne lokalne dynamiczne na stosie Dla przykładowej funkcji z C: void sub(double total, int part) { int list[5]; double sum; tak wygląda blok aktywacyjny: lokalna sum lokalna list[4] lokalna list[3] lokalna list[2] lokalna list[1] lokalna list[0] parametr part parametr total link dynamiczny adres powrotu Przy każdym wywołaniu podprogramu tworzy się blok aktywacyjny Jego format jest ustalany statycznie, ale on sam powstaje i znika dynamicznie Podprogramy mogą wywoływać się wzajemnie; przy tym program ostatnio wywołany skończy jako pierwszy Dlatego bloki aktywacyjne umieszcza się na stosie Wykład13,str10 Stos: call stack execution stack control stack run-time stack machine stack the stack stos wywołań EP(environment pointer) adres aktualnie czynnego bloku aktywacyjnego

Wykład13,str11 Wywołując podprogram A, program główny musi: 1 utworzyć egzemplarz bloku aktywacyjnego A; 2 zapamiętać stan obliczenia; 3 wyliczyć i przekazać parametry do A; 4 przekazać do A adres powrotu; 5 przekazać do A sterowanie Po wywołaniu podprogramu A musi: 1 zapamiętać stary EP jako link dynamiczny bloku aktywacyjnego i wpisać do EP adres bloku aktywacyjnego; 2 alokować lokalne zmienne Zaraz przed zakończeniem działania podprogram A musi: 1 przepisać wartości param wyjściowych do odp param aktualnych; 2 do EP wpisać link dynamiczny; 3 przekazać sterowanie do programu wywołującego Wykład13,str12 EP: lok zm: y void fun1(double r) { parametry: x ints; linkdyn: adr powr: fun2 lokzm: s parametry: r linkdyn: adrpowr: fun1 lokzm: p parametry: linkdyn: adrpowr: main STOS fun2(s); voidfun2(intx) { inty; intmain() { double p; fun1(p);

Wykład13,str13 EP: lokzm: y parametry: x linkdyn: adr powr: fun2 lokzm: s parametry: r linkdyn: adrpowr: fun1 lokzm: p parametry: linkdyn: adrpowr: main STOS Łańcuch dynamiczny EP oraz wszystkie linki dynamiczne określa zagnieżdżenie aktualnego wywołania funkcji, oraz drogę powrotu do programu głownego Odwołania do zmiennych i parametrów przez lokalne adresy + EP Rekursja tak samo Funkcje dodatkowe pole w bloku aktywacyjnym na wartość zwracaną Wykład13,str14 Ptak konkretny: dziób skrzydła nóżki ogon

Wykład13,str15 Ptak abstrakcyjny: dziób skrzydła nóżki ogon Realizacje ptaki konkretne: Wykład13,str16 Abstrakcja: celowe pomijanie cech drugorzędnych i koncentrowanie się na zasadniczych Abstrakcja upraszcza i zniekształca rzeczywistość Abstrakcyjny typ danych: zestaw wymagań, które ma spełniać typ danych Programista może deklarować zmienne takiego typu, stosować operacje wchodzące w jego skład, nie zajmując się własnościami żadnego konkretnego typu Programy, napisane dla abstrakcyjnego typu danych, będą działać na każdej jego konkretnej realizacji Abstrakcja pomaga opanować złożoność zagadnień przez abstrahowanie od ich cech drugorzędnych Najpopularniejszym stylem programowania z użyciem abstrakcji danych jest programowanie obiektowe

Wykład13,str17 Przykład: stosy M top stack X push empty pop empty: stack push:x stack stack top:stack X pop:stack stack top(push(x, s)) = x pop(push(x, s)) = s Niezależnie od sposobu implementacji stosów, po wykonaniu push(5);push(2);y=top;pop;x=top;pop;push(x-y); naszczyciestosujestliczba3,aresztastosujesttakajaknapoczątku: y =top(push(2,push(5,s)))=2 x = top(pop(push(2, push(5, s)))) = top(push(5, s)) = 5 top(push(x y,pop(pop(push(2,push(5,s))))))=x y =3 pop(push(x y, pop(pop(push(2, push(5, s)))))) = pop(pop(push(2, push(5, s)))) = pop(push(5, s)) = s Wykład13,str18 Przykład: implementacje stosu przez tablice M classstack { private X[] stos; private int ilosc; public Stack() { // konstruktor odpowiada operacji empty stos = new X(duzo); ilosc=0; publicvoidpush(xx) { stos[ilosc]=x; ilosc++; publicxtop() { if(ilosc==0) throw new RuntimeException("stos pusty"); else return stos[ilosc-1]; publicvoidpop() { if(ilosc==0) throw new RuntimeException("stos pusty"); else ilosc--;

Wykład13,str19 Przykład: implementacje stosu przez typ rekursywny Mclass Wezel { private X hd; private Wezel tl; publicwezel(xh,wezelt) {hd=h;tl=t; publicxhead() {returnhd; publicwezeltail() {returntl; class Stack { private Wezel ll; publicstack() {ll=null; publicvoidpush(xx) {ll=newwezel(x,ll); publicxtop() { if(ll==null) throw new RuntimeException("stos pusty"); else return llhead(); publicvoidpop() { if(ll==null) throw new RuntimeException("stos pusty"); else ll=lltail(); Abstrakcyjne typy i hermetyzacja Wykład13,str20 Abstrakcyjny typ danych(specyfikacja zbiorów i własności operacji na nich) składa się z części jawnej(java: public) oraz ukrytej(java: private) Wszystkie implementacje mają taką samą część jawną; jednak funkcje (metody) jawne zwykle są zrealizowane różnie Dla użytkownika nie jest istotne, jak zrealizowano części prywatne Użytkownik nie ma dostępu do części prywatnych, nie może ich śledzić ani zmieniać Części prywatne są hermetycznie zamknięte(encapsulated) to sprzyja modularyzacji Abstrakcyjny typ danych może być parametryzowany np typ X w poprzednich przykładach mógłby być parametrem klasy Stos

Wykład13,str21 Modularyzacja z hermetyzacją ukrywaniem szczegółow WC: pliku nagłówkowym(rozszerzenieh) można wyspecyfikować jawne typy, dane i prototypy definicji funkcji modułu Elementy niejawne modułu zgrupować na niezależnie kompilowanym pliku implementacyjnym(rozszerzeniec) Klientowi dostarczyć plik nagłówkowy oraz skompilowaną wersję pliku implementacyjnego Klient włącza do swojego programu plik nagłówkowy (dyrektywą #include), co zezwala na skompilowanie programu, używającego jawnych elementów modułu, a następnie zlinkowanie przekładu z implementacją modułu To jest dość słaby sposób hermetyzacji modułu