Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Programowanie uogólnione - Wikipedia, wolna encyklopedia

Programowanie uogólnione

Z Wikipedii

Programowanie uogólnione (ang. Generic Programming) pozwala na pisanie kodu programu bez wcześniejszej znajomości typów danych, na których kod ten będzie pracował. Obecnie wiele języków programowania ma możliwość wykorzystywania uogólnień, np. C++, Java, Haskell.

Spis treści

[edytuj] Programowanie uogólnione w C++

Przykładowa deklaracja uogólnionego kodu w języku C++ wygląda następująco:

template<typename T> 
class List
{
   ...
};

gdzie T oznacza nieskonkretyzowany typ danych. W C++ takie uogólnienia nazywają się wzorcami (lub szablonami, ang. templates). W powyższej definicji klasy zamiast konkretnego typu danych użyto symbolu T. Powyższy wzorzec można wykorzystać następująco:

List<int> lista1;
List<MojaKlasa> lista_mojej_klasy;
List<std::string> lista2;

Podczas kompilacji następuje tak zwana konkretyzacja (ang. instantiation), podczas której kompilator na podstawie typów danych przekazanych wzorcowi generuje kod właściwy do obsługi danego typu.

Jedną z najbardziej znanych i najbardziej udanych aplikacji programowania uogólnionego jest standardowa biblioteka szablonów (STL). Od 1998 roku stanowi ona fragment biblioteki standardowej języka C++ i zawiera definicje licznych algorytmów (np. sort) i pojemników (np. vector i list), które charakteryzują się wysoką sprawnością i łatwością użycia.

W języku C++ szablony stanowią też wygodny zamiennik dla makr preprocesora — nie tylko poprawiają czytelność kodu, ale także ułatwiają wyszukiwanie w nim błędów.

[edytuj] Zalety szablonów w C++

Wykorzystanie szablonów w programach pozwala skupić się bardziej na algorytmach niż na danych jakie są przetwarzane. Użycie szablonów pozwala zredukować ilość nadmiarowego kodu ponieważ jedną funkcjonalność można zaprogramować dla wielu typów danych. Następnie kompilator w konkretnym przypadku precyzuje typ i odpowiednio dostosowuje np. wywołania funkcji.

[edytuj] Krytyka szablonów w C++

Działanie szablonów w języku C++ przypomina bardzo zaawansowane makra preprocesora. Powoduje to, że kompilator ma zasadnicze trudności z wygenerowaniem prawidłowych, czytelnych komunikatów diagnostycznych w przypadku błędnego użycia poprawnego szablonu. Większość z nich dotyczy bowiem (poprawnego!) kodu bibliotecznego, co wprowadza programistę w konsternację. Jedyne użyteczne informacje diagnostyczne dotyczą miejsc konkretyzacji szablonu.

Powyższy problem spowodowany jest tym, że błędy z reguły dotyczą sposobu użycia szablonu, natomiast diagnostyka włączana jest dopiero po jego konkretyzacji, a więc zasadniczo w innym miejscu niż szablon ten jest faktycznie używany. Stąd wrażenie, że błędy znajdują się w bibliotekach, a nie w programie, który ich błędnie używa.

Pewną receptą na powyższy problem są tzw. koncepty. Obecnie są one popularnym rozszerzeniem wielu kompilatorów i prawdopodobnie pojawią się w nowym standardzie języka C++ (tzw. C++0x).

[edytuj] Zobacz też


Zalążek artykułu To jest tylko zalążek artykułu dotyczącego języków programowania. Jeśli możesz, rozbuduj go.

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com