Propozycja Dynamicznych Ról i Programowania Przez Kontrakt dla języka Java

Podobne dokumenty
SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17

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

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

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

Programowanie obiektowe - 1.

Translacja wprowadzenie

Programowanie obiektowe

Szablony funkcji i klas (templates)

Wprowadzenie. Teoria automatów i języków formalnych. Literatura (1)

Metody Kompilacji Wykład 1 Wstęp

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

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

Programowanie Komponentowe WebAPI

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

Zagadnienia programowania obiektowego

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji.

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

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

Java EE produkcja oprogramowania

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Polimorfizm. dr Jarosław Skaruz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Logika Temporalna i Automaty Czasowe

Typy, klasy typów, składnie w funkcji

Załącznik 2. Symbol efektu obszarowego. Kierunkowe efekty uczenia się (wiedza, umiejętności, kompetencje) dla całego programu kształcenia

Języki programowania zasady ich tworzenia

Szablony funkcji i szablony klas

Programowanie obiektowe

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

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

WZORCE LOGIKI APLIKACJI Reużywalne składniki wymagań

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Modelowanie i Programowanie Obiektowe

Wykład 9: Polimorfizm i klasy wirtualne

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

Matematyczne Podstawy Informatyki

Technologie i usługi internetowe cz. 2

Specyfikacje formalne

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

Wykład 1 Inżynieria Oprogramowania

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Załącznik 2. Symbol efektu obszarowego. Kierunkowe efekty uczenia się (wiedza, umiejętności, kompetencje) dla całego programu kształcenia

Formalna weryfikacja oprogramowania w lotnictwie

Dokumentacja do API Javy.

Klasy abstrakcyjne, interfejsy i polimorfizm

1. WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI

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

METODY REPREZENTACJI INFORMACJI

Karta opisu przedmiotu Zaawansowane techniki analizy systemowej oparte o modelowanie warsztaty

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

Programowanie obiektowe

Podstawy Programowania Obiektowego

Technologie cyfrowe semestr letni 2018/2019

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

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

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

Programowanie obiektowe 1 - opis przedmiotu

Analiza i projektowanie obiektowe 2017/2018. Wykład 3: Model wiedzy dziedzinowej

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

problem w określonym kontekście siły istotę jego rozwiązania

Matematyczne podstawy informatyki Mathematical Foundations of Computational Sciences. Matematyka Poziom kwalifikacji: II stopnia

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Teoria obliczeń czyli czego komputery zrobić nie mogą

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Programowanie obiektowe

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Historia modeli programowania

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

Programowanie komputerów

TEST KOŃCOWY DLA KLASY III GIMNAZJUM- POGRAMOWANIE. Szkoła Podstawowa Nr 5. im. Księcia Mazowieckiego Siemowita IV w Gostyninie.

Programowanie współbieżne i rozproszone

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

E5 potrafi zaprojektować i zaimplementować prosty model

Specyfikacje w praktyce na przykładzie JML-a. Sesja I

Podstawy i języki programowania

Programowanie obiektowe

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

2/4. informatyka" studia I stopnia. Nazwa kierunku studiów i kod. Informatyka WM-I-N-1 programu wg USOS. Tytuł zawodowy uzyskiwany przez

Java jako język programowania

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Metody dostępu do danych

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

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

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

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Opis efektów kształcenia dla modułu zajęć

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Programowanie obiektowe

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Podstawy Informatyki. Algorytmy i ich poprawność

Matematyczne Podstawy Informatyki

MODELOWANIE OBIEKTOWE

REFERAT PRACY DYPLOMOWEJ

Wstęp do programowania

Zapisywanie algorytmów w języku programowania

KONSTRUKCJA KOMPILATORÓW

Transkrypt:

Wstęp Propozycja Dynamicznych Ról i Programowania Przez Kontrakt dla języka Java Politechnika Warszawska wydział Matematyki i Nauk Informacyjnych 10 maja 2009

Wstęp Przedmiot prezentacji Przedmiot prezentacji Krótka charakterystyka pracy Zakres Pracy Motywacja Prezentacja w luźny sposób przedstawia kontekst i problematykę pracy magisterskiej pt. Propozycja Dynamicznych Ról i Programowania Przez Kontrakt dla języka Java. Praca powstała na wydziale Matematyki i Nauk Informacyjnych Politechniki Warszawskiej, pod kierunkiem dr inż. Krzysztofa Kaczmarskiego. Udana obrona miała miejsce 24 lutego 2009. Praca zdobyła II nagrodę w XXVI edycji Ogólnopolskiego Konkursu PTI na najlepsze prace magisterskie z informatyki. Treść pracy można znaleźć w Internecie.

Wstęp Krótka charakterystyka pracy Przedmiot prezentacji Krótka charakterystyka pracy Zakres Pracy Motywacja Celem niniejszej pracy jest propozycja oraz implementacja pewnych dwóch koncepcji z zakresu języków programowania. Pierwsza z koncepcji związana jest z Programowaniem Przez Kontrakt, druga z Dynamicznymi Rolami. Obie z koncepcji zostały osadzone w istniejącym języku programowania, tj. w Javie. Charakter pracy jest eksperymentalny. Podejście autora do omawianych w pracy zagadnień ewoluowało w czasie.

Zakres Pracy Wstęp Przedmiot prezentacji Krótka charakterystyka pracy Zakres Pracy Motywacja Z perspektywy wytworzonych artefaktów, pracę można podzielić na następujące części: Część teoretyczno-opisowa, tj.: rozważania ogólne propozycje konkretnych rozwiązań Część praktyczną, tj.: dostarczenie implementacji dla danej propozycji przygotowanie środowiska programistycznego W wypadku pierwszej z koncepcji, implementacja dostarczona jest w postaci translatora, w wypadku drugiej jako biblioteka.

Motywacja Wstęp Przedmiot prezentacji Krótka charakterystyka pracy Zakres Pracy Motywacja Główną motywacją dla poruszenia niniejszych zagadnień były dla autora własne doświadczenia praktyczne. Propozycje autora nie zwiększają możliwość obliczeniowych Javy, pozwalają natomiast na uzyskanie większej zwięzłości, czytelności i, przede wszystkim, umożliwiają dalszy rozdział funkcjonalności (Separation of Concerns). Cechą wspólną obu propozycji jest, w pewnym sensie, formalizacja cyklu życia obiektów. Mimo, że propozycje owe zostały przedstawione na tle Javy, dotyczą one w ogólności języków obiektowych.

Wstęp Część I

Wstęp - termin używany na określenie bardzo szerokiego zagadnienia. nigdy nie jest wystarczająca. Braki w jakości często wychodzą na jaw, gdy oprogramowanie funkcjonuje już w środowisku produkcyjnym (patche, poprawki, service packi). Jednym z najistotniejszych aspektów Jakość Oprogramowania jest zgodność wykonania programu z pewnymi oczekiwaniami, np. z wymaganiami funkcjonalnymi.

Prosty przykład Wstęp Hello World wersja popularna. Sprawdzona i działająca. hello1.c #i n c l u d e <s t d i o. h> i n t main ( i n t argc, char argv [ ] ) { p r i n t f ( H e l l o World ) ; return 0 ; }

Prosty przykład c.d. Wstęp Hello World wersja mniej typowa, oparta na problemie Collatza. hello2.c #i n c l u d e <s t d i o. h> i n t main ( i n t argc, char argv [ ] ) { unsigned v e r y l o n g i n t seed ; s c a n f ( %d, &seed ) ; while ( seed!= 1) seed = seed & 1? 3 seed + 1 : seed / 2 ; p r i n t f ( H e l l o World ) ; return 0 ; }

Dwa problemy Wstęp Problem 1: Problem 2: Czy program hello2.c faktycznie będzie zawsze wypisywał powitanie? Analiza statyczne tego programu nie może być, przynajmniej na dzień dzisiejszy, przeprowadzona w sposób automatyczny, wymaga natomiast zastosowania zaawansowanego aparatu matematycznego i wiąże się z rozwiązaniem tzw. Problemu Collatza. Skąd w ogóle wiadomo jakie jest zadanie programu hello2.c?

Dwa problemy c.d. Wstęp Dyskusja 1: Dyskusja 2: Być może Problem Collatza jest rozstrzygalny (czego nie udowodniono). Jeśli tak, prędzej czy później, zostanie on rozwiązany i tym samym będzie wiadomo czy program hello2.c działa prawidłowo. W przeciwnym wypadku... Nie wiadomo. Wymagania funkcjonalne programu nie zostały nigdzie zapisane. Jedyne co można powiedzieć, to że zadaniem programu jest imperatywne wykonanie instrukcji zapisanych w kodzie źródłowym.

Dwa problemy c.d. Wstęp Rozwiązanie 1: Analiza statyczna niestety nie zawsze jest możliwa. Pewnym obejściem tego problemu jest po prostu przeprowadzanie odpowiedniej ilości różnego rodzaju testów. Rozwiązanie 2: Zapisywanie wymagań funkcjonalnych szczególnie w wypadku języków imperatywnych, gdzie kod programu stwierdza jak ale już nie co. Najlepiej w sposób formalny, tak aby możliwa była ich automatyczna weryfikacja podczas testów.

Wprowadzenie Wstęp Formalna specyfikacja wymagań dostępna jest w różnych w stopniu, w różnych klasach języków. Np. wypadku języków opisu sprzętu (Hardware Description Languages) istnieją towarzyszące im języki weryfikacji sprzętu (Hardware Verification Languages), często o znacznie bogatszej od swoich odpowiedników składni (Verilog i SystemVerilog). Na ogół języki te mogą występować razem w obrębie tych samych jednostek kompilacji. Języki HVL mają silne podstawy matematyczne (logiki temporalne). W wypadku języków programowania, specyfikacja wymagań występuje na ogół w formie elementów Programowania Przez Kontrakt, a często w ogóle nie jest przez dany język wspierana.

Wprowadzenie Wstęp termin ukuty przez Bertranda Meyera w trakcie prac nad językiem Eiffel. Przykład specyfikacji kontraktu w języku D double d i v i d e ( d i v i d e n t a, d i v i s o r b ) i n { a s s e r t b!= 0 ; } body { return d i v i d e n t / d i v i s o r ; } ; Typowe elementy kontraktów: warunki wstępne niezmienniki błędy warunki końcowe efekty uboczne asercje

Wstęp W Javie występują już pewne elementy kontraktów, jak np. asercje. Niestety język ten nie oferuje, i nie będzie w przewidywalnej przyszłości oferował, pełnej funkcjonalności PPK. Autor postanowił temu zaradzić i wzbogacić ten lubiany przez niego język o brakującą funkcjonalność PPK, dodając przy tym pewien unikalny element automaty skończone:

Wstęp Spostrzeżenie: niektóre klasy w językach programowania mogą realizować schemat działania automatu skończonego. Za przykład może tu posłużyć stworzona swego czasu przez autora klasa monitorująca połączenia centralki telefonicznej: Fakt ten można wykorzystać przy kontroli kontraktów.

Wstęp Propozycja PPK dla Javy - przykład definicji automatu. p u b l i c c l a s s AutomatonDemo { automaton { i n i t i a l S0 : S1 ; accepting S1 ; } p u b l i c void callmeonce ( ) { t r a n s i e n t : S1 ; } p u b l i c boolean w a s A l r e a d y C a l l e d ( ) { return t r a n s i e n t? S1 ; } }

Wstęp Zaproponowane przez autora mechanizmy PPK zostały osadzone w składni Javy za pomocą dodatkowych reguł gramatycznych. Gramatyka została zmodyfikowana w taki sposób aby powstały język był nadklasą Javy, przy zachowaniu tej samej semantyki odziedziczonych konstrukcji. propozycji dostarczona jest w postaci translatora produkującego na wyjściu programy napisane w Javie. Translator został wygenerowany przy pomocy narzędzia ANTLR. Translator potrafi dodatkowo wykrywać błędy semantyczne, występujące w składni kontraktów.

Wstęp Przykład schematu translacji Fragment kodu przed translacją: example.javab protected i n t method ( ) out ( return return >= 0){ return 1 2 ; } I po translacji (na kolejnym slajdzie):

Wstęp example.java protected i n t method ( ) { a s s e r t ( ( Example. t h i s. automaton Example == Example. AutomatonEnumeration Example. S3 ) )? true : true ; i n t o u t r e t u r n = 0 ; t r y { return o u t r e t u r n = 1 2 ; } f i n a l l y { f i n a l i n t o u t r e t u r n 2 = o u t r e t u r n ; a s s e r t o u t r e t u r n 2 o u t r e t u r n 2 >= 0 ; a s s e r t ( ( Example. t h i s. automaton Example == Example. AutomatonEnumeration Example. S3 ) )? true : true ; } }

Wstęp Wprowadzenie Część II (W tej chwili powinna mijać 40 minuta prezentacji...)

Wstęp Dynamiczna funkcjonalność Wprowadzenie Przykład 1 cykl rozwojowy motyla. Przejście ze stadium gąsienicy do stadium imago nosi wymowną nazwę zupełnego przeobrażenia ; Mimo że dany motyl potrafi w trakcie swojego życia zmienić zupełnie postać, cały czas pozostaje tym samym, w sensie identyfikacji, osobnikiem.

Wstęp Dynamiczna funkcjonalność c.d. Wprowadzenie Przykład 2 system świadczący usługi. Niech dany będzie pewien system. W systemie tym istnieją byty abstrakcyjnych usługobiorców, na rzecz których świadczone są usługi. Konkretna usługa wymaga konkretnego typu usługobiorcy. Abstrakcyjny usługobiorca może być klientem różnych usług, tj. mogą być z nim związane różne instancje konkretnego usługobiorcy.

Wstęp Dynamiczna funkcjonalność c.d. Wprowadzenie Problem jak zamodelować komponent usługobiorcy? jako pojedynczą klasę? jako szereg klas związanych ze sobą pewnym wzorcem (Composite, Decorator)? w ogóle nie wyodrębniać komponentu? Wady poszczególnych rozwiązań...

Wstęp - definicja Wprowadzenie Dynamiczne role są pewną koncepcją z pogranicza kontroli typów w językach programowania. Pojęcie to oznacza swego rodzaju mechanizm, który pozwala na dynamiczne przypisywanie danemu obiektowi wielu różnego rodzaju typów (i związanych z nimi wartości) jednocześnie. Obiekt ów nosi miano aktora, a jego reprezentacje, w postaci wartości o określonych typach, nazywane są rolami Można powiedzieć, że głównym celem użycia dynamicznych ról jest modelowanie bytów o dynamicznie zmieniającym się interfejsie:

Wstęp Wprowadzenie Funkcję ról pewnego aktora pełnią obiekty zwyczajnych klas języka Java, tzw. POJO. Funkcja aktora jest pełniona przez specjalną klasę Actor. Współdziałanie ról w obrębie danego aktora polega na synchronizacji odpowiednich pól. Actor amphibian = A c t o r F a c t o r y. c r e a t e A c t o r ( ) ; Ship s h i p = amphibian. p l a y R o l e ( Ship. c l a s s ) ; s h i p. f l e e t ( 10 ) ; Car c a r = amphibian. p l a y R o l e ( Car. c l a s s ) ; c a r. move ( 15 ) ; a s s e r t s h i p. g e t P o s i t i o n ( ) == 5;

Wstęp Wprowadzenie Zaproponowany przez autora mechanizm Dynamicznych Ról został dostarczony w formie biblioteki. Składnia języka nie została zmieniona, jednakże jego semantyka w pewnym sensie tak. Biblioteka, w celu uzyskania żądanego działania, podczas ładowania klas ról tworzy odpowiadające im klasy agentów (proxy). Pod maską używana jest biblioteka Javassist, dzięki której nie było potrzeby bezpośredniej manipulacji bytecodem.

Wstęp Wybrana bibliografia Wybrana bibliografia Koniec A.V. Aho, R. Sethi, and J.D. Ullman. Kompilatory: reguły, metody i narzędzia. Wydawnictwa Naukowo-Techniczne, Warszawa, 2002. J.E. Hopcroft, R. Motwani, and J.D. Ullman Introduction to Automata Theory, Languages, and Computation. Addison Wesley, 2006. J. Gosling, B. Joy, G. Steele, and G. Bracha. Java (TM) Language Specification. Addison Wesley Professional, 2005. T. Parr. The Definitive ANTLR Reference: Building Domain-specific Languages. Pragmatic Bookshelf, 2007.

Pytania Wstęp Wybrana bibliografia Koniec Pytania?

Podziękowania Wstęp Wybrana bibliografia Koniec Dziękuję za uwagę