ket是什么| 13朵玫瑰代表什么意思| 养心吃什么食物好| 松树的叶子像什么| 胶原蛋白是什么| 外痔是什么样子的| 面色无华什么意思| 纳差是什么意思| 寿诞是什么意思| 细菌性阴道病用什么药| 腋下有异味是什么原因| 草字头加西念什么| 多汗症挂什么科| 为什么会长疱疹| 小儿厌食吃什么药最好| 家里狗死了预示着什么| 什么玉最好有灵性养人| 用一什么就什么造句| 蜂蜜和柠檬一起喝有什么作用| 吃软饭是什么意思| 7月29号是什么星座| 上眼皮浮肿是什么原因| 每天早上喝一杯蜂蜜水有什么好处| 平均血红蛋白量偏高是什么意思| 乳腺增生不能吃什么食物| 9月15号是什么日子| 子宫肌瘤是什么原因导致的| 安宫丸什么时候吃效果是最佳的| 跌宕起伏什么意思| 什么水果补钙| 曦是什么意思| 金银花有什么效果| 乳腺增生什么症状| 费率是什么| 清静是什么意思| 撕脱性骨折什么意思| 1.7号是什么星座| 为什么13周不让建卡了| 为什么血是红色的| 股骨头坏死是什么原因引起的| 睡觉经常流口水是什么原因| 为什么吃辣的就拉肚子| 香云纱是什么面料| 李世民字什么| 子宫破裂有什么征兆| 阴毛长虱子用什么药| 为什么老是头晕| 撒贝宁是什么民族| 胃疼做什么检查| 龙凤呈祥的意思是什么| 男的纹般若有什么寓意| mn是什么单位| 梦见怀孕了是什么意思| 劳烦是什么意思| 梦见女儿哭意味着什么| 辩证是什么意思| 9月出生的是什么星座| 花红是什么意思| 书犹药也下一句是什么| 甲鱼和乌龟有什么区别| 泌尿系统感染挂什么科| 吃brunch是什么意思啊| 气管疼什么原因引起的| 女孩子学什么专业比较好| 脚为什么会肿| 鬼谷子姓什么| 什么是子宫憩室| 女性分泌物发黄是什么原因| 耳朵真菌感染用什么药最好| 心源性哮喘首选什么药| 避孕套有什么作用| 什么是有机食品| 口坐读什么| 吃什么拉肚子| 树挪死人挪活是什么意思| 壁厚是什么意思| 午时是什么时间| yesido是什么意思| 吃什么菜对眼睛好| 土耳其烤肉是用什么肉| 城隍爷是什么神| 二级以上医院是什么意思| 献血前吃什么东西最好| 老实忠厚是什么生肖| 籍贯填写什么| pas是什么意思| 周末大小休是什么意思| 146是什么意思| 娃娃鱼用什么呼吸| 痛风吃什么好| 梦见古墓是什么意思| aimee是什么意思| 血压偏高喝什么茶| 胆囊结石有什么影响| 取环需要做什么检查| 酸菜鱼一般加什么配菜| 小孩手足口病吃什么药| 一叶知秋是什么生肖| 头晕脑胀是什么原因| 梦见手机摔碎了是什么意思| 油价什么时候上涨| 什么时候最容易受孕| 乳痈是什么意思| 喝姜粉有什么好处| 插肩袖是什么意思| 孤单的我还是没有改变是什么歌| 姜对头发有什么作用| 嗓子干痒吃什么药| 材料化学属于什么类| 8月底是什么星座| 喉咙痛不能吃什么| 酸萝卜别吃什么意思| 希爱力是什么药| 下午头晕是什么原因引起的| 膝盖疼痛挂什么科| 梦见蒸馒头是什么意思| 怄气是什么意思| 如花是什么意思| 膀胱壁毛糙是什么意思| 胎动是什么感觉| 孕妇吃什么水果| 怀孕排卵试纸显示什么| 什么不周| 心境什么意思| 钼靶是什么意思| pr间期延长是什么意思| 喝酒对身体有什么好处和坏处| 电饭锅内胆什么材质好| 梦见洗衣服是什么意思| 尿酸高会出现什么症状| 欧字五行属什么| 莲子是什么| 什么可以补气血| 刚柔并济是什么意思| 纹眉失败擦什么淡化| 梦见好多老鼠是什么意思| 爱啃指甲是什么原因| mv是什么意思| ai是什么元素| 肾结石都有什么症状| 598分能上什么大学| 男士脸黑穿什么颜色好| 生化妊娠是什么原因导致的| 戒指戴无名指是什么意思| 端水是什么意思| 为什么会长牙结石| 两癌筛查主要查什么| 主动脉迂曲是什么意思| 大便是红色的是什么原因| 耕田是什么意思| 叶酸片是治什么的| 邪教是什么| 痔核是什么| 无功无过是什么意思| 梦见买袜子是什么意思| 梦见儿子拉屎是什么意思| 呆萌是什么意思| 口里有甜味是什么原因| 医疗保险是什么| 11度穿什么衣服| 官方的意思是什么| 伪君子是什么意思| 梦到好多蛇是什么意思| 泌尿系统由什么组成| 什么是软组织损伤| 甲钴胺片主治什么病| 眼力见是什么意思| 斗志昂扬是什么意思| 大健康是什么| 非溶血是什么意思| 仙草是什么| 捞仔是什么意思| 狐臭看什么科| 什么的雪人| 按摩手推是什么意思| everytime什么意思| 98年虎是什么命| 玉米淀粉可以用什么代替| 11月26是什么星座| 尿酸高会引发什么疾病| 7月一日是什么节日| 农村适合养殖什么| 回声不均匀是什么意思| 头孢和什么药不能一起吃| 月经期间洗澡会有什么影响吗| 日光性皮炎用什么药| 小酌怡情什么意思| 客厅挂钟放在什么位置好| 脚气什么样| 什么作用| 见色起意是什么意思| 一什么星星| 吃开心果有什么好处和坏处| 下限是什么意思| 什么是周期| 空集是什么意思| 原子序数等于什么| 左侧卵巢囊性回声是什么意思| x是什么品牌| 头发长不长是什么原因怎么办| 阴道炎不能吃什么| sod是什么意思| 脸黑的人适合穿什么颜色的衣服| 懂事是什么意思| 蛮什么意思| 尿酸是什么| 脚心出汗是什么原因女| 大便溏薄是什么意思| 尿蛋白十1是什么意思| 重字五行属什么| 巨蟹男和什么星座最配| 做b超需要挂什么科| 蕾字五行属什么| 什么情况下需要做心脏支架| 男性经常手淫有什么危害| 血压计什么牌子好| 西洋参不能和什么一起吃| 四肢发麻是什么原因| 为什么怀孕了还会来月经| 正连级相当于地方什么级别| 户口迁移需要什么手续| 人工流产和无痛人流有什么区别| 手长水泡是什么原因| 肝郁血虚吃什么中成药| 血糖高早饭吃什么最好| 骆驼趾是什么意思| 胎动什么时候出现| 蛇肉吃了有什么好处| 什么叫做缘分| 喝竹叶水有什么好处| 反式脂肪酸是什么| 头疼头晕是什么原因| NT是检查什么的| 现在流行什么样的衣柜| 什么是高原反应| 元胡是什么| 尿赤是什么意思| 记忆力减退是什么原因造成的| 妇科检查清洁度3度什么意思| 美尼尔综合征是什么原因引起的| 胃火旺怎么调理吃什么药最好| 肌酐高是什么原因引起的| 泰安有什么大学| 苏打水什么牌子的好| 低压48有什么危险| 尿酸高会引发什么疾病| 小孩干咳吃什么药| 脘腹胀满是什么意思| 黄体酮吃多了有什么副作用| 吃饭快的人是什么性格| 腹泻不能吃什么食物| 一什么不什么的成语| 梦中梦是什么原因| 秋葵吃了有什么好处| courvoisier是什么酒| 我低头向山沟是什么歌| 南京市徽为什么是貔貅| 战战兢兢的意思是什么| 子宫是什么样子图片| 端午节在什么时候| 是代表什么意思| 786是什么意思| 2022年属什么生肖| 送伞代表什么意思| 百度Пре?и на садржа?

龙蛇混杂是什么生肖

С Википеди?е, слободне енциклопеди?е
百度 台大心理系教授光国说,当初大家努力让国民党退出校园,没想到民进党却大喇喇地把政治黑手伸进校园。

У информатици, рефлекси?а ?е способност неког рачунарског програма за испитива?е (види тип интроспекци?е) и измену сво?е структуре и понаша?а (конкретно вредности, мета-податке, особине и функци?е) у ранта?му.[1]

Истори?ска позадина

[уреди | уреди извор]

На?рани?и рачунари су програмирани на матер?ем асемблер ?езику, ко?и су били по себи одражавани као ова оригинална архитектура ко?а може да се програмира дефиниса?ем инструкци?а као и кориш?е?ем података само-модифику?у?ег кода. Као програмира?е се преселило у ?езике високог нивоа, као што ?е C, ово одражава способност несталу (ван малвера) до програмских ?езика са одразом угра?еним у ?ихове типове система по?ава.

Бра?ан Кантвел Смитова 1982 докторска дисертаци?а[2][3] увела ?е по?ам рачунарске рефлекси?е у програмским ?езицима, као и по?ам мета-кружни преводилац као компонента 3-Lisp.

Рефлекси?а може да се користи за посматра?е и допунава?е извршава?е програма на ранта?му. Рефлекси?а ори?ентисана програм компонента може пратити изврше?е ку?ишта кода и може се модификовати према же?еном ци?у у вези са тим ку?иштем. Ово се обично постиже динамичком доделом програмског кода у ранта?му.

У об?ектно ори?ентисаним програмским ?езицима као што су ?ава, рефлекси?а омогу?ава преглед класа, интерфе?са, по?а и метода у току рада не зна?у?и имена интерфе?са, по?а, метода компилаци?е. Она тако?е омогу?ава примерну нових об?еката и позива?е метода.

Рефлекси?а се тако?е може користити за адаптира?е датог програма у различитим ситуаци?ама динамике. На пример, размислите апликаци?у ко?а користи две различите класе X и Y наизменично да обав?а?у сличне операци?е. Без рефлекси?е ори?ентисаног програмира?а, апликаци?а може бити тешко кодирана да позове метод имена класеX и класе Y. Ме?утим, користе?и рефлекси?а ори?ентисану парадигму програмира?а, апликаци?а може бити диза?нирана и написана да искористи рефлекси?у у ци?у изазива?а метода у класама X и Y без хард-кодира?а имена метода. Рефлекси?а-ори?ентисано програмира?е скоро увек захтева додатно зна?е, оквир, релационо мапира?е, а об?екат релевантност како би се искористио више генеричко изврше?е кода.

Рефлекси?а се често користи као део тестира?а софтвера, као што ?е за ствара?е Ранта?ма/примена пробних об?еката.

Рефлекси?а ?е тако?е к?учна стратеги?а за метапрограмира?а.

У неким об?ектно-ори?ентисаним програмским ?езицима, као што су C# и ?ава, рефлекси?а може да се употреби да обори члан приступачног правила. На пример, рефлекси?а омогу?ава да промените вредност по?а са ознаком "приватно" у независну класу библиотеке.

Имплементаци?а

[уреди | уреди извор]

?език за подршку рефлекси?е обезбе?у?е велики бро? функци?а ко?е су доступне на ранта?му ко?е би иначе било тешко пости?и у ?езику нижег нивоа. Неке од ових функци?а су могу?е до:

  • Откри?те и модифику?е изворни код конструкци?а (као што ?е код блокова, класа, метода, протокола, итд) као об?екти прве класе на ранта?му.
  • Претвара?е стринга ко?и одговара симболичком имену класе или функци?е у односу на или упу?ива?е на те класе или функци?е.
  • Процените стринг као да ?е из?ава изворног кода у ранта?му.
  • Креира?те нови тумач за ?език ба?тока да да нови смисао или ци? за програмира?е конструкта.

Ове карактеристике могу се реализовати на различите начине. У МОО-у, рефлекси?а представ?а природан део свакодневног програмира?а идиома. Када се зову глаголи (методе), разне вари?абле као што ?е глагол (име глагола ко?и се зове) и ово (предмет на ко?и се назива глагол) су насе?ени да да?у контекст позива. Безбедност обично управ?а приступом саговорничким штос програмно: Како ?е код саговорника () списак начина на ко?и се тренутни глагол на кра?у зову, изво?е?е тестова саговорника ()[1] (команде позива?у оригиналног корисника) омогу?ава да се глагол заштити од неовлаш?еног кориш?е?а.

Састав ?езика се осла?а на сво? ранта?м систем да пружи информаци?е о изворном коду. Састав Objective-C изврше?а, на пример, бележи имена свих метода у блок изврше?у, обезбе?у?у?и сто да одговара оним са основним методама (или селекторе за ове методе) састава у програму. У састав ?езика ко?и подржава ранта?м ствара?е функци?а, као што ?е Common Lisp, ранта?м окруже?е мора да садржи компа?лер или преводиоца.

Рефлекси?а се може реализовати за ?езике ко?и нема?у угра?ене рефлекси?е об?еката помо?у програма трансформаци?е система да дефинишу аутоматске промене изворног кода.

Код следе?е код комади?и креира?у инстанцу foo класе Foo, и позива?у методу hello. За сваки програмски ?език, нормала и рефлекси?а на бази секвенце позива се приказу?е.

У наставку ?е пример у eC-у:

// без рефлекси?е
Foo foo { };
foo.hello();

// са рефлекси?ом
Class fooClass = eSystem_FindClass(__thisModule, "Foo");
Instance foo = eInstance_New(fooClass);
Method m = eClass_FindMethod(fooClass, "hello", fooClass.module);
((void (*)())(void *)m.function)(foo);

У наставку ?е пример у ECMAScript-у, и стога важи и за ?аваскрипт и ActionScript:

// без рефлекси?е
new Foo.hello()

// са рефлекси?ом

// под претпоставком да Foo борави у овде
new this['Foo']['hello']()

// или без претпоставке
new (eval('Foo'))['hello']()

// или ?едноставно
eval('new Foo.hello()')

У наставку ?е пример у ?ави:

// без рефлекси?е
Foo foo = new Foo();
foo.hello();

// са рефлекси?ом
Object foo = Class.forName("complete.classpath.and.Foo").newInstance();
// Алтернативно: Об?екат foo = Foo.class.newInstance();
Method m = foo.getClass().getDeclaredMethod("hello", new Class<?>[0]);
m.invoke(foo);

Следе?и пример у Objective-C-у имплицира OpenStep или се користи фондаци?а Кит оквир:

// Foo класа.
@interface Foo : NSObject
- (void)hello;
@end

// Сла?е "здраво" на пример Foo без рефлекси?е.
Foo *obj = [[Foo alloc] init];
[obj hello];

// Сла?е "здраво" на пример Фоо са рефлекси?ом.
id obj = [[NSClassFromString(@"Foo") alloc] init];
[obj performSelector: @selector(hello)];

Ова? Делфи пример претпостав?а да TFoo класа ?е декларисана у ?единици под називом ?единица 1:

uses RTTI, Unit1;

procedure WithoutReflection;
var
  Foo: TFoo;
begin
  Foo := TFoo.Create;
  try
    Foo.Hello;
  finally
    Foo.Free;
  end;
end;

procedure WithReflection;
var
  RttiContext: TRttiContext;
  RttiType: TRttiInstanceType;
  Foo: TObject;
begin
  RttiType := RttiContext.FindType('Unit1.TFoo') as TRttiInstanceType;
  Foo := RttiType.GetMethod('Create').Invoke(RttiType.MetaclassType, []).AsObject;
  try
    RttiType.GetMethod('Hello').Invoke(Foo, []);
  finally
    Foo.Free;
  end;
end;

Ово ?е знача?ан пример, ?ер Делфи ?е без мена?ера, потпуно природно састав?ен ?език, за разлику од ве?ине других ?езика ко?и подржава?у размиш?а?е. ?егова архитектура ?езика насле?у?е од снажног-откуцаног Паскала, али са знача?ним утица?ем од SmallTalk-а. Упоредите са осталим примерима овде, од ко?их су многи динамични или скрипте ?езици као што су Perl, Па?тон или PHP или ?езици са ранта?ма као ?ава или C#.

У наставку ?е пример у Perl-у:

# без рефлекси?е
my $foo = Foo->new;
$foo->hello;

# или
Foo->new->hello;

# са рефлекси?ом
my $class = "Foo"
my $constructor = "new";
my $method = "hello";

my $f = $class->$constructor;
$f->$method;

# или
$class->$constructor->$method;

# са eval-ом
eval "new Foo->hello;";

У наставку ?е пример у PHP-у:

// без рефлекси?е
$foo = new Foo();
$foo->hello();

// са рефлекси?ом
$reflector = new ReflectionClass('Foo');
$foo = $reflector->newInstance();
$hello = $reflector->getMethod('hello');
$hello->invoke($foo);

// кориш?е?е повратних позива
$foo = new Foo();
call_user_func(array($foo, 'hello'));

// кориш?е?ем промен?иве вари?абле синтаксе
$className = 'Foo';
$foo = new $className();
$method = 'hello';
$foo->$method();

У наставку ?е пример у Па?тону:

# без рефлекси?е
obj = Foo()
obj.hello()

# са рефлекси?ом
class_name = "Foo"
method = "hello"
obj = globals()[class_name]()
getattr(obj, method)()

# са eval-ом
eval("Foo().hello()")

У наставку ?е пример у R-у:

# Без рефлекси?е, под претпоставком да foo () вра?а С3-тип об?екат ко?и има методу "здраво"
obj <- foo()
hello(obj)

# са рефлекси?ом
the.class <- "foo"
the.method <- "hello"
obj <- do.call(the.class, list())
do.call(the.method, alist(obj))

У наставку ?е пример у Руби?у:

# без рефлекси?е
obj = Foo.new
obj.hello

# са рефлекси?ом
class_name = "Foo"
method = :hello
obj = Object.const_get(class_name).new
obj.send method

# са eval-ом
eval "Foo.new.hello"
  • Тип интроспекци?а
  • Само-модифику?у?и код
  • Само-дома?ински
  • Парадигме програмира?а
  • Листа рефлекту?у?их програмских ?езика и платформи
  • Огледало (програмира?е)

Референце

[уреди | уреди извор]

Литература

[уреди | уреди извор]

Спо?аш?е везе

[уреди | уреди извор]


积水是什么意思 咳嗽有白痰一直不好是什么原因 snr是什么意思 吃什么降肌酐 肚脐眼发炎是什么原因
银耳是什么 face是什么意思 浸润性癌是什么意思 查心梗应该做什么检查 肚脐眼下方是什么器官
什么样的轮子只转不走 微字五行属什么 神甫是什么意思 人见人爱是什么意思 为什么会有胎记
以前没有狐臭为什么突然就有了 血小板低有什么危害 气的什么 狮子是什么生肖 马六甲板材是什么木材
头发出汗多是什么原因hcv8jop6ns7r.cn 大电念什么cj623037.com 高知是什么意思hcv8jop6ns6r.cn 乙肝病毒携带者有什么症状hcv7jop4ns6r.cn 胎儿脐带绕颈是什么原因造成的yanzhenzixun.com
一什么黑暗hcv9jop1ns7r.cn 的确良是什么面料cj623037.com 鸡飞狗跳是指什么生肖aiwuzhiyu.com l表示什么单位hcv7jop6ns3r.cn 肝郁吃什么中成药wuhaiwuya.com
起风疹了用什么快速方法能解决hcv8jop0ns9r.cn 豆腐鱼是什么鱼hcv8jop2ns7r.cn 天上的月亮是什么生肖hcv8jop5ns2r.cn 诞辰是什么意思hcv8jop5ns4r.cn 为什么泡完脚后非常痒hcv7jop6ns4r.cn
痔疮长什么样hcv8jop0ns4r.cn 羊奶不能和什么一起吃hcv7jop6ns3r.cn 甲状腺回声不均匀什么意思hcv9jop2ns7r.cn 牛肉馅饺子配什么菜onlinewuye.com 刘秀和刘邦是什么关系hcv7jop9ns1r.cn
百度