<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hr">
	<id>https://croatianschoolsydney.com/index.php?action=history&amp;feed=atom&amp;title=Generi%C4%8Dko_programiranje</id>
	<title>Generičko programiranje - Povijest promjena</title>
	<link rel="self" type="application/atom+xml" href="https://croatianschoolsydney.com/index.php?action=history&amp;feed=atom&amp;title=Generi%C4%8Dko_programiranje"/>
	<link rel="alternate" type="text/html" href="https://croatianschoolsydney.com/index.php?title=Generi%C4%8Dko_programiranje&amp;action=history"/>
	<updated>2026-05-23T13:01:43Z</updated>
	<subtitle>Povijest promjena ove stranice na wikiju</subtitle>
	<generator>MediaWiki 1.36.2</generator>
	<entry>
		<id>https://croatianschoolsydney.com/index.php?title=Generi%C4%8Dko_programiranje&amp;diff=356164&amp;oldid=prev</id>
		<title>WikiSysop: Bot: Automatski unos stranica</title>
		<link rel="alternate" type="text/html" href="https://croatianschoolsydney.com/index.php?title=Generi%C4%8Dko_programiranje&amp;diff=356164&amp;oldid=prev"/>
		<updated>2021-11-29T11:29:49Z</updated>

		<summary type="html">&lt;p&gt;Bot: Automatski unos stranica&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nova stranica&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!--'''Generičko programiranje'''--&amp;gt;{{nedostaju izvori}}&lt;br /&gt;
'''Generičko programiranje''' ([[Engleski jezik|eng]]. ''Generic programming'') je stil [[Računalno programiranje|računalnog programiranja]] u kojem su [[Algoritam|algoritmi]] pisani na način da predstavljaju &amp;quot;kostur&amp;quot; koji je implementiran tek kasnije, kada se odrede argumenti. Ovaj pristup, koji je [[ML (programski jezik)|ML]] osnovao 1973. godine, omogućuje pisanje zajedničkih [[Potprogram|funkcija]] ili klasa koje se razlikuju samo u vrsti argumenta na kojima djeluju kada se koriste, čime se smanjuje dupliciranje. &lt;br /&gt;
&lt;br /&gt;
Takvi softverski elementi poznati su kao ''generički podaci'' (eng. ''generics'') u programskim jezicima [[Python (programski jezik)|Python]], [[Ada (programski jezik)|Ada]], [[C sharp|C #]], Delphi, [[Eiffel (programski jezik)|Eiffel]], F #, [[Java (programski jezik)|Java]], Rust, Swift, TypeScript i Visual Basic .NET. &lt;br /&gt;
&lt;br /&gt;
== Jezična podrška generičkog programiranja ==&lt;br /&gt;
Generičko programiranje na neki način je postojalo barem od 1970-ih u jezicima kao što su [[ML (programski jezik)|ML]], CLU i [[Ada (programski jezik)|Ada]], a kasnije su ih usvojili mnogi objektni i [[Objektno orijentirano programiranje|objektno orijentirani]] jezici, uključujući BETA, [[C++|C ++]], D, [[Eiffel (programski jezik)|Eiffel]], [[Java (programski jezik)|Java]]. &lt;br /&gt;
&lt;br /&gt;
=== U objektno orijentiranim jezicima ===&lt;br /&gt;
Prilikom stvaranja klasa spremnika u statički pisanim jezicima, nije zgodno pisati posebne implementacije za svaku vrstu podataka, posebno ako je kôd za svaku vrstu podataka gotovo identičan. Ovakvo preopterećivanje parametara funkcije naziva se '''ad-hoc polimorfizam'''. Na primjer, u C ++, umjesto pisanja &amp;quot;zbroji&amp;quot; funkcije za svaki korišteni [[Tip podatka (računarstvo)|tip podatka]], pomoću generičkog programiranja na sljedeći način možemo izbjeći pisanje viša koda: &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int zbroji (int a, int b)&lt;br /&gt;
{&lt;br /&gt;
    return a + b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double zbroji (double a, double b)&lt;br /&gt;
{&lt;br /&gt;
    return a + b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Razlomak&amp;quot; predstavlja korisnički izrađenu klasu koja ima implementiran operator+&lt;br /&gt;
Razlomak zbroji (Razlomak a, Razlomak b)&lt;br /&gt;
{&lt;br /&gt;
    return a + b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*------------------- KORISTEĆI GENERIČKO PROGRAMIRANJE POSTAJE: -------------------*/&lt;br /&gt;
&lt;br /&gt;
template&amp;lt;typename Tip&amp;gt;&lt;br /&gt;
Tip zbroji (Tip a, Tip b)&lt;br /&gt;
{&lt;br /&gt;
    return a + b;&lt;br /&gt;
}&lt;br /&gt;
// Funkcija će raditi sve dok podatak tipa &amp;quot;Tip&amp;quot; ima implementiran operator +&lt;br /&gt;
// Dakle, to su svi primitivni tipovi te korisnički kreirani tipovi kojima su eksplicitno&lt;br /&gt;
// izrađene operator+ metode &lt;br /&gt;
&lt;br /&gt;
// Primjer poziva funkcije sa predloškom&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Zbroj: &amp;quot; &amp;lt;&amp;lt; zbroji(3, 4) &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;         // implicitni poziv; compiler zaključuje da je &amp;quot;Tip&amp;quot; = int&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Zbroj: &amp;quot; &amp;lt;&amp;lt; zbroji&amp;lt;double&amp;gt;(3.0, 4.0) &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;     // eksplicitni poziv; 3.0 i 4.0 su double&lt;br /&gt;
    &lt;br /&gt;
    class Igrac&lt;br /&gt;
    {&lt;br /&gt;
    public:&lt;br /&gt;
        int zdravlje;&lt;br /&gt;
        &lt;br /&gt;
        Igrac() : zdravlje(10) {}&lt;br /&gt;
        Igrac(int novoZdravlje) : zdravlje(novoZdravlje) {}&lt;br /&gt;
        &lt;br /&gt;
        Igrac operator+(Igrac drugiIgrac)&lt;br /&gt;
        {&lt;br /&gt;
            return zdravlje + drugiIgrac.zdravlje;&lt;br /&gt;
        }&lt;br /&gt;
    } a, b;&lt;br /&gt;
    Igrac c = zbroji(a, b);&lt;br /&gt;
    /*&lt;br /&gt;
        - Kreiraju se klase koje sadržavaju primitivni podatak tipa integer &amp;quot;zdravlje&amp;quot;, poziva se konstruktor &amp;quot;Igrac()&amp;quot;&lt;br /&gt;
          koji postavlja varijablu &amp;quot;zdravlje&amp;quot; na vrijednost 10&lt;br /&gt;
        - Compiler kreira funkciju &amp;quot;Igrac zbroji(Igrac a, Igrac b)&amp;quot; na temelju kreirane metode &amp;quot;operator+&amp;quot;&lt;br /&gt;
        - Operator+ zbraja dva igraca tako da zbroji njihove varijable &amp;quot;zdravlje&amp;quot; (10 + 10 = 20)&lt;br /&gt;
        - U funkciji &amp;quot;zbroji&amp;quot; kreira se novi &amp;quot;Igrac&amp;quot; pozivom konstruktora &amp;quot;Igrac(int novoZdravlje)&amp;quot;, gdje je argument &amp;quot;20&amp;quot;&lt;br /&gt;
    */&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Zdravlje igraca: &amp;quot; &amp;lt;&amp;lt; c.zdravlje &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Predlošci u C++ ====&lt;br /&gt;
[[C++]] koristi predloške za omogućavanje generičkih tehnika programiranja. Standardna knjižnica C ++ uključuje ''[[Standard Template Library (C++ programski jezik)|Standard Template Library]]'' ili STL koja pruža okvir predložaka za zajedničke strukture podataka i algoritme. Predlošci u C ++ mogu se koristiti i za metaprogramiranje predložaka, što je način prethodne procjene dijela koda u vrijeme kompajliranja, a ne u vremenu izvođenja. &lt;br /&gt;
&lt;br /&gt;
===== Tehnički pregled =====&lt;br /&gt;
Postoje dvije vrste predložaka: predlošci funkcijâ i predlošci klasâ. ''Predložak funkcije'' je obrazac za stvaranje uobičajenih funkcija na temelju parametara koji se pošalju kada se funkcija kreira. Na primjer, C++ biblioteka standardnih predložaka sadrži predložak funkcije &amp;lt;kbd&amp;gt;max(x, y)&amp;lt;/kbd&amp;gt; koji stvara funkcije koje vraćaju ili ''x'' ili ''y,'' ovisno o tome koji je veći. &amp;lt;code&amp;gt;max()&amp;lt;/code&amp;gt; može se definirati ovako: &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
T max(T x, T y) {&lt;br /&gt;
 return x &amp;lt; y ? y : x;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Izvori ==&lt;br /&gt;
{{Izvori}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorija:Programsko inženjerstvo]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
</feed>