Simple view
Full metadata view
Authors
Statistics
Metaprogramowanie w językach programowania wysokiego poziomu
Metaprogramming in high level programming languages
metaprogramowanie DSL abstrakcja paradygmaty C#
metaprogramming DSL abstraction paradigm C#
Kiedy poruszany jest temat istniejących paradygmatów programowania, zwykle wymieniane są tylko cztery najbardziej podstawowe: programowanie imperatywne, deklaratywne, obiektowe oraz funkcyjne . Są one jednocześnie najbardziej popularne, gdyż już same języki programowania zwykle narzucają jeden z nich, na przykład Erlang wymusza programowanie funkcyjne, a Java programowanie obiektowe. Oprócz wymienionych wcześniej czterech podstawowych paradygmatów istnieje cała gama innych metodologii tworzenia programów komputerowych. Mniej popularnymi paradygmatami są na przykład: programowanie proceduralne, programowanie sterowane zdarzeniami, programowanie współbieżne, czy programowanie aspektowe. Dodatkowo, wiele technologii i języków programowania pozwala na łączenie kilku metodologii i paradygmatów, a części jednego programu są stworzone w oparciu o zupełnie inne podejście do programowania. Wszystko po to, by umożliwić programistom jak najprostsze zaprojektowanie, zaimplementowanie i przetestowanie tworzonego programu komputerowego. Niestety, nie ma poprawnego, bądź najlepszego wyboru metodologii, gdyż natura każdego projektu jest inna i może tylko dawać wskazówki odnośnie najbardziej trafnego paradygmatu. Poza tym, każde podejście sprawdza się lepiej w pewnych przypadkach, a gorzej w innych. Przykładowo, programowanie deklaratywne, które narzuca SQL jest lepszym podejściem do problemu zarządzania bazami danych niż programowanie strukturalne, gdyż wymagałoby to tworzenia zagnieżdżonych pętli i instrukcji warunkowych. Wszystko to składa się na pewną trudność wyboru paradygmatów w odniesieniu do poszczególnych części programów bądź systemów informatycznych. Podejmując tak kluczowe wybory programiści i projektanci muszą się opierać tylko na własnym doświadczeniu i wiedzy. W mojej pracy magisterskiej chciałbym zaprezentować mniej popularne podejście do tworzenia rozwiązań programistycznych o nazwie „metaprogramowanie”. Podstawowym elementem tego paradygmatu jest generowanie kodu wykonywalnego, by usprawnić, uprościć lub wprowadzić na wyższy stopień abstrakcji pewne części programu.Metaprogramowanie nie jest techniką nową, gdyż dynamiczne generowanie kodu jest znane od momentu powstania pierwszych kompilatorów. Obecnie często same kompilatory tworzy się metodą metaprogramowania, generując ich kod na podstawie abstrakcyjnej definicji języka, który mają rozpoznawać i same generować kod maszynowy na ich podstawie. Istnieje jednak znacznie więcej możliwych scenariuszy poza samą kompilacją, w których możliwe jest zastosowanie paradygmatu metaprogramowania. Różne mogą być też sposoby realizacji tej techniki. Pierwsza część mojej pracy będzie miała na celu zgłębienie tematu metaprogramowania, zaczynając od podstawowych definicji, poprzez opis możliwych realizacji, po ogólne scenariusze. Druga część zawiera opis i analizę kilku programów (bądź ich części), na przykładzie których zaprezentowane zostanie użycie metaprogramowania w praktyce. Dodatkowo, przykłady rozwiązań programistycznych opartych o generowanie kodu zostaną porównane z klasycznym podejściem w takich przypadkach, jak rozpoznawanie wzorców, języki dziedzinowe (ang. domain-specific language, DSL) czy utrwalanie logiki. Porównanie podejść do problemów odbędzie się na płaszczyznach wydajności kodu, czytelności czy łatwości testowania. Wyciągnięte na tej podstawie wnioski pozwolą określić w jakich przypadkach stosowanie metaprogramowania może dać realne korzyści w projektach programistycznych.
In my master thesis i would like to present less popular programming paradigm - metaprograming. First part of my thesis is about theoretical aspect of this paradigm. Second part shows some practical problems when we can use metaprogrammina, as well as some classical approaches. After each example the solutions are compared in terms of performance, maintainability of code and simplicity.
dc.abstract.en | In my master thesis i would like to present less popular programming paradigm - metaprograming. First part of my thesis is about theoretical aspect of this paradigm. Second part shows some practical problems when we can use metaprogrammina, as well as some classical approaches. After each example the solutions are compared in terms of performance, maintainability of code and simplicity. | pl |
dc.abstract.pl | Kiedy poruszany jest temat istniejących paradygmatów programowania, zwykle wymieniane są tylko cztery najbardziej podstawowe: programowanie imperatywne, deklaratywne, obiektowe oraz funkcyjne . Są one jednocześnie najbardziej popularne, gdyż już same języki programowania zwykle narzucają jeden z nich, na przykład Erlang wymusza programowanie funkcyjne, a Java programowanie obiektowe. Oprócz wymienionych wcześniej czterech podstawowych paradygmatów istnieje cała gama innych metodologii tworzenia programów komputerowych. Mniej popularnymi paradygmatami są na przykład: programowanie proceduralne, programowanie sterowane zdarzeniami, programowanie współbieżne, czy programowanie aspektowe. Dodatkowo, wiele technologii i języków programowania pozwala na łączenie kilku metodologii i paradygmatów, a części jednego programu są stworzone w oparciu o zupełnie inne podejście do programowania. Wszystko po to, by umożliwić programistom jak najprostsze zaprojektowanie, zaimplementowanie i przetestowanie tworzonego programu komputerowego. Niestety, nie ma poprawnego, bądź najlepszego wyboru metodologii, gdyż natura każdego projektu jest inna i może tylko dawać wskazówki odnośnie najbardziej trafnego paradygmatu. Poza tym, każde podejście sprawdza się lepiej w pewnych przypadkach, a gorzej w innych. Przykładowo, programowanie deklaratywne, które narzuca SQL jest lepszym podejściem do problemu zarządzania bazami danych niż programowanie strukturalne, gdyż wymagałoby to tworzenia zagnieżdżonych pętli i instrukcji warunkowych. Wszystko to składa się na pewną trudność wyboru paradygmatów w odniesieniu do poszczególnych części programów bądź systemów informatycznych. Podejmując tak kluczowe wybory programiści i projektanci muszą się opierać tylko na własnym doświadczeniu i wiedzy. W mojej pracy magisterskiej chciałbym zaprezentować mniej popularne podejście do tworzenia rozwiązań programistycznych o nazwie „metaprogramowanie”. Podstawowym elementem tego paradygmatu jest generowanie kodu wykonywalnego, by usprawnić, uprościć lub wprowadzić na wyższy stopień abstrakcji pewne części programu.Metaprogramowanie nie jest techniką nową, gdyż dynamiczne generowanie kodu jest znane od momentu powstania pierwszych kompilatorów. Obecnie często same kompilatory tworzy się metodą metaprogramowania, generując ich kod na podstawie abstrakcyjnej definicji języka, który mają rozpoznawać i same generować kod maszynowy na ich podstawie. Istnieje jednak znacznie więcej możliwych scenariuszy poza samą kompilacją, w których możliwe jest zastosowanie paradygmatu metaprogramowania. Różne mogą być też sposoby realizacji tej techniki. Pierwsza część mojej pracy będzie miała na celu zgłębienie tematu metaprogramowania, zaczynając od podstawowych definicji, poprzez opis możliwych realizacji, po ogólne scenariusze. Druga część zawiera opis i analizę kilku programów (bądź ich części), na przykładzie których zaprezentowane zostanie użycie metaprogramowania w praktyce. Dodatkowo, przykłady rozwiązań programistycznych opartych o generowanie kodu zostaną porównane z klasycznym podejściem w takich przypadkach, jak rozpoznawanie wzorców, języki dziedzinowe (ang. domain-specific language, DSL) czy utrwalanie logiki. Porównanie podejść do problemów odbędzie się na płaszczyznach wydajności kodu, czytelności czy łatwości testowania. Wyciągnięte na tej podstawie wnioski pozwolą określić w jakich przypadkach stosowanie metaprogramowania może dać realne korzyści w projektach programistycznych. | pl |
dc.affiliation | Wydział Matematyki i Informatyki | pl |
dc.contributor.advisor | Wilczak, Daniel - 132637 | pl |
dc.contributor.author | Wnukowski, Michał | pl |
dc.contributor.departmentbycode | UJK/WMI2 | pl |
dc.contributor.reviewer | Kulig, Anna | pl |
dc.contributor.reviewer | Wilczak, Daniel - 132637 | pl |
dc.date.accessioned | 2020-07-24T15:30:01Z | |
dc.date.available | 2020-07-24T15:30:01Z | |
dc.date.submitted | 2013-09-19 | pl |
dc.fieldofstudy | inżynieria oprogramowania | pl |
dc.identifier.apd | diploma-74167-78895 | pl |
dc.identifier.project | APD / O | pl |
dc.identifier.uri | https://ruj.uj.edu.pl/xmlui/handle/item/187009 | |
dc.language | pol | pl |
dc.subject.en | metaprogramming DSL abstraction paradigm C# | pl |
dc.subject.pl | metaprogramowanie DSL abstrakcja paradygmaty C# | pl |
dc.title | Metaprogramowanie w językach programowania wysokiego poziomu | pl |
dc.title.alternative | Metaprogramming in high level programming languages | pl |
dc.type | master | pl |
dspace.entity.type | Publication |