Język wysokiego poziomu: Różnice pomiędzy wersjami

Z Encyklopedia Zarządzania
(LinkTitles.)
m (cleanup bibliografii i rotten links)
 
(Nie pokazano 15 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
{{infobox4
'''Język wysokiego poziomu''' - jest to względny typ języka programowania, którego kod i składnia są bardzo przystępne dla człowieka, lecz kompletnie nie zrozumiałe dla jednostki centralnej komputera. Przez co [[program]], podlega dłuższemu i bardziej skomplikowanemu [[proces]]owi kompilacji. Jego względność polega na tym, że gdy zestawić asemblera i [[C (język programowania)|język C]] można stwierdzić, że ten drugi jest językiem wysokiego poziomu, ale gdy porównać go z obiektowym językiem programowania [[Java]] można powiedzieć, iż jest on językiem niskiego poziomu. Ogólnie, im wyższy poziom abstrakcji struktur danych, tym poziom języka jest wyższy<ref>Wrycza S., ''Analiza i [[projektowanie systemów informatycznych]] zarządzania. Metodyki, techniki, narzędzia.'', Wydawnictwo Naukowe PWN, Warszawa 1999</ref>
|list1=
<ul>
<li>[[Programowanie obiektowe]]</li>
<li>[[Program komputerowy]]</li>
<li>[[Baza NoSQL]]</li>
<li>[[SQL]]</li>
<li>[[Java]]</li>
<li>[[Data science]]</li>
<li>[[Perl (język programowania)]]</li>
<li>[[Cobol]]</li>
<li>[[Test driven development]]</li>
</ul>
}}


==TL;DR==
Język wysokiego poziomu jest łatwiejszy do nauki i bardziej zrozumiały dla programistów niż języki niskiego poziomu. Popularne języki wysokopoziomowe to Java, C, C++, PHP. Mają one wiele cech ułatwiających programowanie, takich jak obiekty, funkcje i pętle. Kompilacja jest niezbędna do uruchomienia programu napisanego w języku wysokopoziomowym. Różnice między językami wysokiego i niskiego poziomu obejmują abstrakcję, bezpośrednie działanie na sprzęcie, szybkość działania programu i złożoność procesu kompilacji. Przykładem programu w języku wysokopoziomowym jest wypisanie ciągu znaków na ekranie w języku Java.


'''Język wysokiego poziomu''' - jest to względny typ języka programowania, którego kod i składnia są bardzo przystępne dla człowieka, lecz kompletnie nie zrozumiałe dla jednostki centralnej komputera. Przez co [[program]], podlega dłuższemu i bardziej skomplikowanemu [[proces]]owi kompilacji. Jego względność polega na tym, że gdy zestawić asemblera i [[C (język programowania)|język C]] można stwierdzić, że ten drugi jest językiem wysokiego poziomu, ale gdy porównać go z obiektowym językiem programowania [[Java]] można powiedzieć, iż jest on językiem niskiego poziomu. Ogólnie, im wyższy poziom abstrakcji struktur danych, tym poziom języka jest wyższy.<ref>Wrycza S., ''Analiza i [[projektowanie systemów informatycznych]] zarządzania. Metodyki, techniki, narzędzia.'', Wydawnictwo Naukowe PWN, Warszawa 1999</ref>
==Historia==
==Historia==
Gdy w latach sześćdziesiątych zaczęto konstruować duże jak na tamtejsze czasy [[systemy informatyczne]] (w sensie ilości kodu), popełniano przy tym bardzo dużo błędów, ponieważ [[programowanie]] asemblerowe jako kod o małym stopniu abstrakcji pisano zwykle intuicyjnie i bez możliwości sprawdzenia poprawności oprogramowania. Sytuacja była na tyle poważna, że zaczęto nawet mówić o "kryzysie w wytwarzaniu oprogramowania". Dlatego w 1968 odbyła się pierwsza [[konferencja]] zwołana przez NATO<ref>Wróblewski P., ''Algorytmy, struktury danych i techniki programowania'', Wydawnictwo Helion, Gliwice 2010</ref>, gdzie dyskutowano o roli informatyki jako nauki i o dziedzinie jaką jest [[inżynieria oprogramowania]]. Wtedy też, usystematyzowano różne pojęcia, [[modele]] oraz metodyki i podzielono informatykę na dziedziny.
Gdy w latach sześćdziesiątych zaczęto konstruować duże jak na tamtejsze czasy [[systemy informatyczne]] (w sensie ilości kodu), popełniano przy tym bardzo dużo błędów, ponieważ [[programowanie]] asemblerowe jako kod o małym stopniu abstrakcji pisano zwykle intuicyjnie i bez możliwości sprawdzenia poprawności oprogramowania. Sytuacja była na tyle poważna, że zaczęto nawet mówić o "kryzysie w wytwarzaniu oprogramowania". Dlatego w 1968 odbyła się pierwsza [[konferencja]] zwołana przez NATO<ref>Wróblewski P., ''Algorytmy, struktury danych i techniki programowania'', Wydawnictwo Helion, Gliwice 2010</ref>, gdzie dyskutowano o roli informatyki jako nauki i o dziedzinie jaką jest [[inżynieria oprogramowania]]. Wtedy też, usystematyzowano różne pojęcia, [[modele]] oraz metodyki i podzielono informatykę na dziedziny.
<google>t</google>
 
===Plankalkül===
===Plankalkül===
Konrad Zuse w latach od 1942 do 1945 projektował pierwszy na świecie język wysokiego poziomu. Wprowadził on kilka istotnych cech, takich jak:  
Konrad Zuse w latach od 1942 do 1945 projektował pierwszy na świecie język wysokiego poziomu. Wprowadził on kilka istotnych cech, takich jak:
* programy są funkcjami, które mogą być używane wiele razy, bez konieczności wielokrotnego powtarzania fragmentu kodu.  
* programy są funkcjami, które mogą być używane wiele razy, bez konieczności wielokrotnego powtarzania fragmentu kodu.
* arytmetykę zmiennoprzecinkową, która pozwalała na używanie ułamków oraz operowanie znacznie większymi liczbami, niż przed wprowadzeniem tej właściwości.
* arytmetykę zmiennoprzecinkową, która pozwalała na używanie ułamków oraz operowanie znacznie większymi liczbami, niż przed wprowadzeniem tej właściwości.
* pętle, tablice <ref>Raúl Rojas, Cüneyt Göktekin, Gerald Friedland, Mike Krüger,  
* pętle, tablice <ref>Raúl Rojas, Cüneyt Göktekin, Gerald Friedland, Mike Krüger,
''Plankalkül: The First High-Level Programming Language and its Implementation'', Freie Universität, Berlin 2000</ref>
''Plankalkül: The First High-Level Programming Language and its Implementation'', Freie Universität, Berlin 2000</ref>
Aby ten język mógł zacząć być wykorzystywany, potrzebny był kompilator, który niestety powstał dopiero po śmierci twórcy Plankalküla. Pomimo tego Plankalkül miał ogromny wpływ na [[rozwój]] języków programowania.
Aby ten język mógł zacząć być wykorzystywany, potrzebny był kompilator, który niestety powstał dopiero po śmierci twórcy Plankalküla. Pomimo tego Plankalkül miał ogromny wpływ na [[rozwój]] języków programowania.
<google>n</google>
===Języki używane współcześnie===
===Języki używane współcześnie===
W dzisiejszych czasach języki wysokopoziomowe cieszą się niezwykłą popularnością, w szczególności Java, C, C++, PHP. Stworzono również wygodne środowiska programistyczne, które ułatwiają pracę inżynierów oprogramowania, podpowiadają i dają wskazówki w trakcie pisania kodu, tak aby programista mógł w pełni skupić się na rozwiązaniu zadania.
W dzisiejszych czasach języki wysokopoziomowe cieszą się niezwykłą popularnością, w szczególności Java, C, C++, PHP. Stworzono również wygodne środowiska programistyczne, które ułatwiają pracę inżynierów oprogramowania, podpowiadają i dają wskazówki w trakcie pisania kodu, tak aby programista mógł w pełni skupić się na rozwiązaniu zadania.


==Cechy==
==Cechy==
Zdecydowanie łatwiej jest nauczyć się podstaw programowania na przykład w Javie lub C++, niż w dowolnym języku niskopoziomowym, ponieważ programista nie działa bezpośrednio na rejestrach procesora i na komórkach pamięci, więc nie musi on znać architektury komputera. Ponadto składnia większości języków wysokiego poziomu jest zrozumiała.  
Zdecydowanie łatwiej jest nauczyć się podstaw programowania na przykład w Javie lub C++, niż w dowolnym języku niskopoziomowym, ponieważ programista nie działa bezpośrednio na rejestrach procesora i na komórkach pamięci, więc nie musi on znać architektury komputera. Ponadto składnia większości języków wysokiego poziomu jest zrozumiała.
Można korzystać w nich między innymi z: obiektów, funkcji, pętli. Ważnym aspektem jest również to, że często kod języka wysokopoziomowego jest przenośny. Oznacza to, że jeden program może być poprawnie uruchomiony na wielu komputerach o różnych parametrach.
Można korzystać w nich między innymi z: obiektów, funkcji, pętli. Ważnym aspektem jest również to, że często kod języka wysokopoziomowego jest przenośny. Oznacza to, że jeden program może być poprawnie uruchomiony na wielu komputerach o różnych parametrach<ref>Kernighan i Plaugher, The Elements of Programming Style, McGraw-Hill 1978 </ref>
<ref>Kernighan i Plaugher, The Elements of Programming Style, McGraw-Hill 1978 </ref>
 
===Abstrakcja===
===Abstrakcja===
Wysoki poziom omawianych języków odnosi się do poziomu abstrakcji używanej przy programowaniu, która ułatwia pracę programistów i pozwala skupić się na wykorzystaniu algorytmów i efektywnym rozwiązaniu problemu, bez [[potrzeby]] kierowania swojej uwagi na detale techniczne i rozszyfrowywania skomplikowanego kodu maszynowego.
Wysoki poziom omawianych języków odnosi się do poziomu abstrakcji używanej przy programowaniu, która ułatwia pracę programistów i pozwala skupić się na wykorzystaniu algorytmów i efektywnym rozwiązaniu problemu, bez [[potrzeby]] kierowania swojej uwagi na detale techniczne i rozszyfrowywania skomplikowanego kodu maszynowego.
===Kompilacja===
===Kompilacja===
Każdy język wysokiego poziomu potrzebuje kompilatora. Jego zadaniem jest przetłumaczenie kodu źródłowego napisanego przez programistę na język maszynowy, który może być wykonany przez komputer. Kompilacja jest niezbędna, aby uruchomić napisany program.
Każdy język wysokiego poziomu potrzebuje kompilatora. Jego zadaniem jest przetłumaczenie kodu źródłowego napisanego przez programistę na język maszynowy, który może być wykonany przez komputer. Kompilacja jest niezbędna, aby uruchomić napisany program.
==Różnice między niskim a wysokim poziomem języka==
==Różnice między niskim a wysokim poziomem języka==
Głównymi różnicami jakie występują między językami wysokiego, a niskiego poziomu są:
Głównymi różnicami jakie występują między językami wysokiego, a niskiego poziomu są:
* wysoka abstrakcja - im wyższy poziom abstrakcji struktur danych, tym poziom języka jest wyższy.
* wysoka abstrakcja - im wyższy poziom abstrakcji struktur danych, tym poziom języka jest wyższy.
* bezpośrednie działania na sprzęcie komputera - im bardziej w programowaniu skupia się na użyciu sprzętu ([[praca]] na rejestrach, przerwaniach), tym poziom języka jest niższy.  
* bezpośrednie działania na sprzęcie komputera - im bardziej w programowaniu skupia się na użyciu sprzętu ([[praca]] na rejestrach, przerwaniach), tym poziom języka jest niższy.
* szybkość działania programu - zazwyczaj im program jest szybszy (w sensie wykonywania), tym większe [[prawdopodobieństwo]], że został napisany w języku niższego poziomu,
* szybkość działania programu - zazwyczaj im program jest szybszy (w sensie wykonywania), tym większe [[prawdopodobieństwo]], że został napisany w języku niższego poziomu,
* [[złożoność]] procesu kompilacji - jeżeli [[proces]] kompilacji trwa dłużej oznacza to, że program został napisany w języku wyższego poziomu.  
* [[złożoność]] procesu kompilacji - jeżeli [[proces]] kompilacji trwa dłużej oznacza to, że program został napisany w języku wyższego poziomu.
* podobieństwo do kodu maszynowego - im kod jest bardziej zbliżony do kodu maszynowego komputera tym poziom języka jest niższy.
* podobieństwo do kodu maszynowego - im kod jest bardziej zbliżony do kodu maszynowego komputera tym poziom języka jest niższy.
 
Niektóre z wyżej wymienionych własności wynikają jedne z drugich, niemniej jednak warto je wymienić, aby lepiej zobrazować różnice w językach wysokiego i niskiego poziomu.
Niektóre z wyżej wymienionych własności wynikają jedne z drugich, niemniej jednak warto je wymienić, aby lepiej zobrazować różnice w językach wysokiego i niskiego poziomu.


==Przykład==
==Przykład==
Poniżej przedstawiony przykładowy program w języku Java pokazuje, jak w prosty sposób wypisać ciąg znaków na ekranie (w tym przypadku jest to klasyczne "Hello, World").
Poniżej przedstawiony przykładowy program w języku Java pokazuje, jak w prosty sposób wypisać ciąg znaków na ekranie (w tym przypadku jest to klasyczne "Hello, World").
 
  public class HelloWorld {
  public class HelloWorld {
  public static void main (String[] args) {
  public static void main (String[] args) {
Linia 56: Linia 48:
  }
  }
  }
  }
 
{{infobox5|list1={{i5link|a=[[Programowanie obiektowe]]}} &mdash; {{i5link|a=[[Program komputerowy]]}} &mdash; {{i5link|a=[[Baza NoSQL]]}} &mdash; {{i5link|a=[[SQL]]}} &mdash; {{i5link|a=[[Java]]}} &mdash; {{i5link|a=[[Data science]]}} &mdash; {{i5link|a=[[Perl (język programowania)]]}} &mdash; {{i5link|a=[[Cobol]]}} &mdash; {{i5link|a=[[Test driven development]]}} }}
 
==Przypisy==
==Przypisy==
<references />
<references />
==Bibliografia==
==Bibliografia==
* Duch W. (1997) [http://wwwold.fizyka.umk.pl/~duch/books-fsk/FSPK/fspk04.pdf Języki programowania] ''Fascynujący świat programów komputerowych''
<noautolinks>
* Kernighan, Plaugher (1978) ''The Elements of Programming Style'', McGraw-Hill
* Duch W. (1997), ''[https://wwwold.fizyka.umk.pl/~duch/books-fsk/FSPK/fspk04.pdf Języki programowania]'', Fascynujący świat programów komputerowych
* Kumar K., Dahiya S. (2017) [https://pdfs.semanticscholar.org/ccaf/2bc7ea6d80e51080891e1a97b3ceb5159154.pdf Programming Languages: A Survey], ''International Journal on Recent and Innovation Trends in Computing and Communication'' Volume: 5 Issue: 5
* Kernighan B., Plaugher P. (1978), ''The Elements of Programming Style'', McGraw-Hill
* Prata, S. (2013), ''Język C++. Szkoła programowania.'', Wydawnictwo Helion, Gliwice
* Kumar K., Dahiya S. (2017), ''Programming Languages: A Survey'', International Journal on Recent and Innovation Trends in Computing and Communication, Volume: 5 Issue: 5
* The Saylor Foundation, (2013) [https://www.saylor.org/site/wp-content/uploads/2013/02/CS101-2.1.2-AdvantagesDisadvantagesOfOOP-FINAL.pdf Advantages and Disadvantages of Object-Oriented Programming], ''Introduction to computer science''
* Prata S. (2006), ''Język C++. Szkoła programowania'', Helion, Gliwice
* Wróblewski P. (2010) ''Algorytmy, struktury danych i techniki programowania'', Wydawnictwo Helion, Gliwice  
* Saylor Foundation (2013), ''[https://www.saylor.org/site/wp-content/uploads/2013/02/CS101-2.1.2-AdvantagesDisadvantagesOfOOP-FINAL.pdf Advantages and Disadvantages of Object-Oriented Programming]'', Introduction to computer science
* Wrycza S. (1999) ''Analiza i [[projektowanie]] systemów informatycznych zarządzania. Metodyki, techniki, narzędzia.'', Wydawnictwo Naukowe PWN, Warszawa
* Wróblewski P. (2010), ''Algorytmy, struktury danych i techniki programowania'', Helion, Gliwice
 
* Wrycza S. (1999), ''Analiza i projektowanie systemów informatycznych zarządzania. Metodyki, techniki, narzędzia.'', Wydawnictwo Naukowe PWN, Warszawa
</noautolinks>
[[Kategoria:Języki programowania]]
[[Kategoria:Języki programowania]]
{{a|Michał Milewski, Arkadiusz Bugajski}}
{{a|Michał Milewski, Arkadiusz Bugajski}}
{{#metamaster:description|Język wysokiego poziomu - przystępny dla człowieka, ale niezrozumiały dla komputera. Wymaga dłuższej i bardziej skomplikowanej kompilacji. Jego poziom zależy od abstrakcji struktur danych.}}

Aktualna wersja na dzień 00:38, 18 sty 2024

Język wysokiego poziomu - jest to względny typ języka programowania, którego kod i składnia są bardzo przystępne dla człowieka, lecz kompletnie nie zrozumiałe dla jednostki centralnej komputera. Przez co program, podlega dłuższemu i bardziej skomplikowanemu procesowi kompilacji. Jego względność polega na tym, że gdy zestawić asemblera i język C można stwierdzić, że ten drugi jest językiem wysokiego poziomu, ale gdy porównać go z obiektowym językiem programowania Java można powiedzieć, iż jest on językiem niskiego poziomu. Ogólnie, im wyższy poziom abstrakcji struktur danych, tym poziom języka jest wyższy[1]

TL;DR

Język wysokiego poziomu jest łatwiejszy do nauki i bardziej zrozumiały dla programistów niż języki niskiego poziomu. Popularne języki wysokopoziomowe to Java, C, C++, PHP. Mają one wiele cech ułatwiających programowanie, takich jak obiekty, funkcje i pętle. Kompilacja jest niezbędna do uruchomienia programu napisanego w języku wysokopoziomowym. Różnice między językami wysokiego i niskiego poziomu obejmują abstrakcję, bezpośrednie działanie na sprzęcie, szybkość działania programu i złożoność procesu kompilacji. Przykładem programu w języku wysokopoziomowym jest wypisanie ciągu znaków na ekranie w języku Java.

Historia

Gdy w latach sześćdziesiątych zaczęto konstruować duże jak na tamtejsze czasy systemy informatyczne (w sensie ilości kodu), popełniano przy tym bardzo dużo błędów, ponieważ programowanie asemblerowe jako kod o małym stopniu abstrakcji pisano zwykle intuicyjnie i bez możliwości sprawdzenia poprawności oprogramowania. Sytuacja była na tyle poważna, że zaczęto nawet mówić o "kryzysie w wytwarzaniu oprogramowania". Dlatego w 1968 odbyła się pierwsza konferencja zwołana przez NATO[2], gdzie dyskutowano o roli informatyki jako nauki i o dziedzinie jaką jest inżynieria oprogramowania. Wtedy też, usystematyzowano różne pojęcia, modele oraz metodyki i podzielono informatykę na dziedziny.

Plankalkül

Konrad Zuse w latach od 1942 do 1945 projektował pierwszy na świecie język wysokiego poziomu. Wprowadził on kilka istotnych cech, takich jak:

  • programy są funkcjami, które mogą być używane wiele razy, bez konieczności wielokrotnego powtarzania fragmentu kodu.
  • arytmetykę zmiennoprzecinkową, która pozwalała na używanie ułamków oraz operowanie znacznie większymi liczbami, niż przed wprowadzeniem tej właściwości.
  • pętle, tablice [3]

Aby ten język mógł zacząć być wykorzystywany, potrzebny był kompilator, który niestety powstał dopiero po śmierci twórcy Plankalküla. Pomimo tego Plankalkül miał ogromny wpływ na rozwój języków programowania.

Języki używane współcześnie

W dzisiejszych czasach języki wysokopoziomowe cieszą się niezwykłą popularnością, w szczególności Java, C, C++, PHP. Stworzono również wygodne środowiska programistyczne, które ułatwiają pracę inżynierów oprogramowania, podpowiadają i dają wskazówki w trakcie pisania kodu, tak aby programista mógł w pełni skupić się na rozwiązaniu zadania.

Cechy

Zdecydowanie łatwiej jest nauczyć się podstaw programowania na przykład w Javie lub C++, niż w dowolnym języku niskopoziomowym, ponieważ programista nie działa bezpośrednio na rejestrach procesora i na komórkach pamięci, więc nie musi on znać architektury komputera. Ponadto składnia większości języków wysokiego poziomu jest zrozumiała. Można korzystać w nich między innymi z: obiektów, funkcji, pętli. Ważnym aspektem jest również to, że często kod języka wysokopoziomowego jest przenośny. Oznacza to, że jeden program może być poprawnie uruchomiony na wielu komputerach o różnych parametrach[4]

Abstrakcja

Wysoki poziom omawianych języków odnosi się do poziomu abstrakcji używanej przy programowaniu, która ułatwia pracę programistów i pozwala skupić się na wykorzystaniu algorytmów i efektywnym rozwiązaniu problemu, bez potrzeby kierowania swojej uwagi na detale techniczne i rozszyfrowywania skomplikowanego kodu maszynowego.

Kompilacja

Każdy język wysokiego poziomu potrzebuje kompilatora. Jego zadaniem jest przetłumaczenie kodu źródłowego napisanego przez programistę na język maszynowy, który może być wykonany przez komputer. Kompilacja jest niezbędna, aby uruchomić napisany program.

Różnice między niskim a wysokim poziomem języka

Głównymi różnicami jakie występują między językami wysokiego, a niskiego poziomu są:

  • wysoka abstrakcja - im wyższy poziom abstrakcji struktur danych, tym poziom języka jest wyższy.
  • bezpośrednie działania na sprzęcie komputera - im bardziej w programowaniu skupia się na użyciu sprzętu (praca na rejestrach, przerwaniach), tym poziom języka jest niższy.
  • szybkość działania programu - zazwyczaj im program jest szybszy (w sensie wykonywania), tym większe prawdopodobieństwo, że został napisany w języku niższego poziomu,
  • złożoność procesu kompilacji - jeżeli proces kompilacji trwa dłużej oznacza to, że program został napisany w języku wyższego poziomu.
  • podobieństwo do kodu maszynowego - im kod jest bardziej zbliżony do kodu maszynowego komputera tym poziom języka jest niższy.

Niektóre z wyżej wymienionych własności wynikają jedne z drugich, niemniej jednak warto je wymienić, aby lepiej zobrazować różnice w językach wysokiego i niskiego poziomu.

Przykład

Poniżej przedstawiony przykładowy program w języku Java pokazuje, jak w prosty sposób wypisać ciąg znaków na ekranie (w tym przypadku jest to klasyczne "Hello, World").

public class HelloWorld {
public static void main (String[] args) {
System.out.println ("Hello, World"),
}
}


Język wysokiego poziomuartykuły polecane
Programowanie obiektoweProgram komputerowyBaza NoSQLSQLJavaData sciencePerl (język programowania)CobolTest driven development

Przypisy

  1. Wrycza S., Analiza i projektowanie systemów informatycznych zarządzania. Metodyki, techniki, narzędzia., Wydawnictwo Naukowe PWN, Warszawa 1999
  2. Wróblewski P., Algorytmy, struktury danych i techniki programowania, Wydawnictwo Helion, Gliwice 2010
  3. Raúl Rojas, Cüneyt Göktekin, Gerald Friedland, Mike Krüger, Plankalkül: The First High-Level Programming Language and its Implementation, Freie Universität, Berlin 2000
  4. Kernighan i Plaugher, The Elements of Programming Style, McGraw-Hill 1978

Bibliografia

  • Duch W. (1997), Języki programowania, Fascynujący świat programów komputerowych
  • Kernighan B., Plaugher P. (1978), The Elements of Programming Style, McGraw-Hill
  • Kumar K., Dahiya S. (2017), Programming Languages: A Survey, International Journal on Recent and Innovation Trends in Computing and Communication, Volume: 5 Issue: 5
  • Prata S. (2006), Język C++. Szkoła programowania, Helion, Gliwice
  • Saylor Foundation (2013), Advantages and Disadvantages of Object-Oriented Programming, Introduction to computer science
  • Wróblewski P. (2010), Algorytmy, struktury danych i techniki programowania, Helion, Gliwice
  • Wrycza S. (1999), Analiza i projektowanie systemów informatycznych zarządzania. Metodyki, techniki, narzędzia., Wydawnictwo Naukowe PWN, Warszawa

Autor: Michał Milewski, Arkadiusz Bugajski