Reference (programování): Porovnání verzí

Smazaný obsah Přidaný obsah
Bez shrnutí editace
Formulace, styl
Řádek 1:
V'''Reference''' je v [[programováníInformatika|informatice]] pojem '''reference'''používaný v [[programování]], který znamenáoznačuje odkaz na [[proměnnáProměnná|proměnnou]] nebo instanci [[objektověObjektově orientované programování|objektu]]. Reference je na rozdíl od [[ukazatelUkazatel (informatika)|ukazatele]] abstraktnější a navenek neobsahuje žádnou informaci o uložení objektu v [[operačníOperační paměť|operační paměti]].
 
ReferencevReference informatice, umožňujíumožňuje v programu nepřímý přístup ke konkrétním [[Data|datům]], jako jsou proměnné nebo záznamy [[Pevný disk|v paměti počítače]] nebo na jiném paměťovém zařízení (například [[pevný disk]]). Reference se odkazují k datům a přístup k těmto datům je pak nazýván dereference. Reference jsou odlišné od dat samotných. Typická, reference odkazuje jen na [[Fyzická adresa|fyzickou adresu]], která dává pouze informaci, kde jsou data v paměti, nebo na paměťovém zařízení uložena (a nic o jejím obsahu). Z tohoto důvodu se reference často označuje jako ukazatel (pointer) nebo adresa. Nicméně v reference může být rovněž uveden offset (rozdíl) mezi datovými adresami a nějaké pevné stanovené (většinou základní) adresy nebo indexu v [[Pole (datová struktura)|poli]].
 
Pojem reference nesmí být zaměňován s jinými hodnotami ([[Primární klíč|Primárnímiprimárními klíči]], nebo [[Identifikátor|Identifikátory]]), které sice jednoznačně identifikují datovou položku, ale poskytují k ní přístup pouze vev netriviální vyhledávací operaci v některé zez [[Tabulka (databáze)|tabulek]] strukturyv datdatabázi.
 
Reference jsou široce používány v [[programování]], zejména k efektivnímu přenosu velkého množství dat, nebo pro proměnlivá data jako jsou [[Parametr funkce|argumenty procedur]], nebo [[Sdílená paměť|sdílená data]]. Reference mohou zejména odkazovat na proměnné nebo záznam, který obsahuje odkazy na další data. Tato myšlenka je základem nepřímého adresování a mnoha propojených datových struktur, jako jsou například [[Lineární seznam|lineárními seznamy]].
 
=== Výhody ===
Reference zvyšují flexibilitu, kde mohou být data uloženy, jak jsou alokovanýalokovány a jak jsou předávány mezi jednotlivými částmi kódu. Dokud reference odkazují na tyto data, u umožňují k nim zároveň také přístup, a data samotná se tak nemusí nikam přesouvat. Reference také umožňují snadnější sdílení mezi rozdílnými částmi kódu.
 
Mechanismus reference (pokud se slyší v implementaci), je ve většině základních moderních programovacích jazyků společná, a dokonce i některé jazyky, které nepodporují přímé použití referencí tak pro ně mají nějaké vnitřní nebo implicitní použití. Například, referenční volání konvence může být prováděno buď explicitně, nebo implicitně použitím referencí.
 
=== Příklady ===
Ukazatelé jsou vzhledem k přímému vztahu se základním hardwarem efektivním a jedním z nejmocnějších typů odkazů vůbec. Nicméně, díky tomuto přímému vztahu, ukazatelé vyžadují od programátora podrobné pochopení architektury dané paměti, protože ukazatele ukládají adresy místa uložení namísto přímé hodnoty. Tím může nevhodné používání ukazatelů snadno vést k nepředvídatelnému chování samotného programu. [[Smart pointer|Inteligentníinteligentní ukazatele]] (Smart pointer) jsou zase neprůhledné datové struktury, které sice fungují jako ukazatele, ale lze k nim přistupovat pouze pomocí jednotlivých metod.
 
File handles, nebo handles jsou typy odkazu používané k abstraktnímu obsahu souboru. To obvykle představuje jednak samotný soubor (při žádosti zamknutí souboru), tak i specifické postavení v rámci obsahu souboru (při čtení souboru).
 
Při [[Distribuovaný výpočet|Distribuovaném výpočtu]] (rozdělení na více menších, nenáročných úloh) může odkaz obsahovat více než adresu nebo identifikátor, ale může také zahrnovat specifikace síťových protokolů používané k vyhledávání a přístupu k odkazovaným objektům. Způsob, jakým je informace zakódována. Například Web [[Services Description Language|WSDL]] (popis vzdálené webové služby), může být považována jako forma reference, protože obsahuje kompletní specifikace, jak najít a jak sem připojit na konkrétní [[Webová služba|webové služby]]. Reference na pohybující se distribuované objekty ([[Peer-to-peer|peer-to-peer]]) je jiný příklad: je to kompletní specifikace, jak vytvořit malý proxy, software, který bude následně zapojen do peer-to-peer interakce, jejímž prostřednictvím lokální počítač může získat přístup k datům, která jsou replikována nebo existuje jen jako message stream.
 
Příklad volaní pomocí reference v [[E (programming language)|E]]:
def modify(var p, &q) {
p := 27 # předána hodnota - změněn pouze lokální parametr změněn
q := 27 # předáván odkazem - proměnná používá ve volání je upravena
}
 
<source lang=e>
? var a := 1
def modify(var p, &q) {
# value: 1
p := 27 # předána hodnota - změněn pouze lokální parametr změněn
? var b := 2
q := 27 # předáván odkazem - proměnná používá ve volání je upravena
# value: 2
}
? modify(a,&b)
 
? a
#? var a value:= 1
# value: 1
? b
? var ab := 12
# value: 27
# value: 2
? modify(a,&b)
? a
# value: 1
? b
# value: 27
</source>
 
Příklad, který simuluje volaní referencireferencí v [[C (programovací jazyk)|jazyce C]]:
 
Příklad, který simuluje volaní referenci v [[C (programovací jazyk)|C]]:
<source lang="c">
void Modify(int p, int * q, int * o)
{
p = 27; // předány hodnotou - změněn pouze lokální parametr
*q = 27; // ,hodnotou nebo referencí, kontrola místa určeni
*o = 27; // ,hodnotou nebo referencí, kontrola místa určeni
}
int main()