Именски простор (информатика)Именски простор је апстрактни контејнер или окружење израђено да садржи логично груписање јединствених идентификатора или симбола (тј. имена). Идентификатор дефинисан у именском простору је асоциран са тим именским простором. Исти идентификатор може бити независно дефинисан у више именских простора. То јест значење асоцирано са идентификатором дефинисано у једном именском простору може и не мора имати исто значење као исти идентификатор дефинисан у неком другом именском простору. Језици који подржавају именске просторе одређују правила која утврђују којем именском простору идентификатор (тј. не његова дефиниција) припада. На пример, Пера ради за фирму Х и његов Р број је 123. Мика ради за фирму У и његовог Р број је такође 123. Пера и Мика могу имати исти Р број зато што они раде за различите фирме. Различите фиирме би у овом случају симболизовале различите именске просторе. Дошло би до озбиљне забуне ако би две особе радиле за исту фирму, а и даље имале исти Р број. На пример, чек са платом издат запосленом број Р123 не би идентификовао који човек треба да прими чек. У великим компјутерским програмима или документима није неуобичајено да постоји стотине или хиљаде идентификатора. Именски простори (или слична техника, нпр. емулирани именски простори), обезбеђују механизам за скривање локалних идентификатора. Они обезбеђују средства за груписање логички повезаних идентификатора у одговарајуће именске просторе, тим путем чине систем модуларним. Компјутерски уређаји за складиштење података и многи модерни програмски језици обезбеђују подршку за именске просторе. Уређаји за чување података користе директоријуме (или фолдере) као именске просторе. Ово омогућава да две датотеке са истим именом буду сачуване на уређају све док се налазе у различитим директоријумима. У неким програмским језицима (нпр. C++, Пајтон) идентификатори који именују именске просторе и сами су асоцирани са именским простором који их обухвата. Дакле, у овим језицима именски простори се могу угнездити, формирајући стабло именских простора. У корену овог стабла је неименован глобални именски простор. Употреба у уобичајеним језицимаC++У C++ језику, именски простор је дефинисан са блоком именског простора. namespace abc {
int bar;
)
У оквиру овог блока, идентификатори се могу користити управо онако како су декларисани. Изван овог блока, спецификатор именског простора мора имати префикс. На пример, ван using namespace abc;
делу кода, чини префикс Код који није експлицитно декларисан унутар именског простора сматра се да је у глобалном именском простору. Разрешавање именског простора у C++ је хијерархијско. То значи да се у оквиру хипотетичког именског простора Именски простори у C++ најчешће се користе како би се избегле колизије именовања. Иако су именски простори у широкој употреби у скорашњем C++ коду, већина старијег кода не користи ову погодност. На пример, цела C++ стандардна библиотека дефинисана је у оквиру ЈаваУ Јава програмском језику идеја именског простор је отелотворена у Јава пакетима. Сав код припада пакету, мада тај пакет не мора бити изричито именован. Коду из других пакета приступа се стављањем имена пакета пре одговарајућег идентификатора, на пример За разлику од C++ именски простори у Јави нису хијерархијски што се тиче синтаксе језика. Међутим, пакети су именовани на хијерархијски начин. На пример, сви пакети који почињу са У Јави (као и у Ади, C, и другим језицима), именски простори / пакети изражавају семантичке категорије кода. На пример, у C#, Функција и обим класа може се посматрати као имплицитни именски простори који су нераскидиво повезани са видљивошћу, доступношћу и животним веком објекта. XML именски просторУ XML спецификацији именског простора омогућава да имена елемената и атрибута у XML документу буду јединствена, што је слично улози именских простора у програмским језицима. Користећи XML именске просторе, XML документи могу да садрже имена елемента или атрибута из више од једног XML речника. Емулирање именских простораУ програмским језицима које не пружају језичку подршку за именске просторе, именски простори могу бити донекле емулирани употребом конвенције именовања идентификатора. На пример, C библиотеке попут Libpng често користе фиксни префикс за све функције и променљиве које су део њиховог изложеног интерфејса. Libpng излаже идентификаторе попут: png_create_write_struct png_get_signature png_read_row png_set_invalid Ово донекле осигурава јединственост идентификаторa и да се стога могу користити у већим програмима, без бојазни од колизија именовања идентификатора. Нажалост, ова техника има неколико недостатака:
Види још
|
Portal di Ensiklopedia Dunia