برنامه‌نویسی پژواکی کیست؟ توضیح بده.
در علوم رایانه، پژواک توانایی یک پردازه برای آزمون، ، و اصلاح «ساختار» و «رفتار» داخلی خودش می‌باشد.کاربردها.استفادهٔ مؤثر از پژواک، تقریباً همیشه نیاز به یک برنامه دارد: یک چهارچوب طراحی، توصیف کد دهی، کتابخانه شیی، یا تناظر یک پایگاه داده یا ارتباطات موجودیت.پیاده‌سازی.یک زبان پشتیبانی کننده از پژواک، ویژگی‌هایی را تدارک می‌بیند که در «زمان اجرا» استفاده می‌شوند، اگر این ویژگی‌ها وجود نداشته باشد، پیاده‌سازی پژواک در زبان‌های سطح پایین بسیار سخت است.بعضی از این ویژگی‌ها، در ادامه ذکر می‌شوند، توانایی برای:مثال‌ها.قطعه کدهایی که در ادامه می‌آیند یک نمونه foo از کلاس Foo را می‌سازند، و متد PrintHello آن را فراخوانی می‌کنند. برای هر زبان برنامه‌نویسی، ترتیب صدا زدن نرمال و مبتنی بر پژواک نشان داده شده‌است.سی شارپ.در ادامه یک مثال به زبان سی شارپ آمده‌است:// Without reflectionFoo foo = new Foo();foo.PrintHello();// With reflectionObject foo = Activator.CreateInstance("complete.classpath.and.Foo");MethodInfo method = foo.GetType().GetMethod("PrintHello");method.Invoke(foo, null);دلفی.این مثال دلفی فرض کرده‌است که یک کلاس TFoo در یک واحد که Unit1 نام دارد، اعلام شده‌است: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;زبان ای‌سی.در ادامه یک مثال در زبان eC آمده‌است:// Without reflectionFoo foo { };foo.hello();// With reflectionClass fooClass = eSystem_FindClass(__thisModule, "Foo");Instance foo = eInstance_New(fooClass);Method m = eClass_FindMethod(fooClass, "hello", fooClass.module);((void (*)())(void *)m.function)(foo);ECMAScript.در ادامه یک مثال یه زبان ECMAScript آمده‌است، و بنابراین به JavaScript و ActionScript اعمال می‌شود:// Without reflectionnew Foo().hello()// With reflection// assuming that Foo resides in thisnew this['Foo']()['hello']()// or without assumptionnew (eval('Foo'))()['hello']()// or simplyeval('new Foo().hello()')// Using ECMAScript 2015's new Reflect class:Reflect.construct(Foo, [])['hello']()Go.در ادامه یک مثال به زبان Go آمده‌است:import "reflect"// Without reflectionf.Hello()// With reflectionfT := reflect.TypeOf(Foo{})fV := reflect.New(fT)m := fV.MethodByName("Hello")if m.IsValid() { m.Call(nil)جاوا.در ادامه یک مثال به زبان جاوا آمده‌است:import java.lang.reflect.Method;// Without reflectionFoo foo = new Foo();foo.hello();// With reflectiontry { // Alternatively: Object foo = Foo.class.newInstance(); Object foo = Class.forName("complete.classpath.and.Foo").newInstance(); Method m = foo.getClass().getDeclaredMethod("hello", new Class&lt;?&gt;[0]); m.invoke(foo);} catch (Exception e) { // Catching ClassNotFoundException, NoSuchMethodException // InstantiationException, IllegalAccessExceptionObjective-C.در ادامه یک مثال در Objective-C آمده‌است، و معنی ضمنی می‌دهد که یا چهارچوب OpenStep یا Foundation Kit استفاده شده‌است:// Foo class.@interface Foo : NSObject- (void)hello;@end// Sending "hello" to a Foo instance without reflection.Foo *obj = [[Foo alloc] init];[obj hello];// Sending "hello" to a Foo instance with reflection.id obj = [[NSClassFromString(@"Foo") alloc] init];[obj performSelector: @selector(hello)];Perl.در ادامه یک مثال در زبان پرل آمده‌است:my $foo = Foo-&gt;new;$foo-&gt;hello;Foo-&gt;new-&gt;hello;my $class = "Foo"my $constructor = "new";my $method = "hello";my $f = $class-&gt;$constructor;$f-&gt;$method;$class-&gt;$constructor-&gt;$method;eval "new Foo-&gt;hello;";PHP.در ادامه یک مثال به زبان PHP آمده‌است:// Without reflection$foo = new Foo();$foo-&gt;hello();// With reflection, using Reflections API$reflector = new ReflectionClass('Foo');$foo = $reflector-&gt;newInstance();$hello = $reflector-&gt;getMethod('hello');$hello-&gt;invoke($foo);پایتون.در ادامه یک مثال در زبان پایتون آمده‌است:obj = Foo()obj.hello()obj = globals()['Foo']()getattr(obj, 'hello')()eval('Foo().hello()')R.در ادامه یک مثال به زبان R آمده‌است:obj &lt;- foo()hello(obj)the.class &lt;- "foo"the.method &lt;- "hello"obj &lt;- do.call(the.class, list())do.call(the.method, alist(obj))Ruby.در ادامه یک مثال به زبان روبی آمده‌است:obj = Foo.newobj.helloclass_name = "Foo"method_name = :helloobj = Object.const_get(class_name).newobj.send method_nameeval "Foo.new.hello"Xojo.در ادامه یک مثال با استفاده از Xojo آمده‌است:' Without reflectionDim fooInstance As New FoofooInstance.PrintHello' With reflectionDim classInfo As Introspection.Typeinfo = GetTypeInfo(Foo)Dim constructors() As Introspection.ConstructorInfo = classInfo.GetConstructorsDim fooInstance As Foo = constructors(0).InvokeDim methods() As Introspection.MethodInfo = classInfo.GetMethodsFor Each m As Introspection.MethodInfo In methods If m.Name = "PrintHello" Then m.Invoke(fooInstance) End IfNextمنابع.[[رده:ساختارهای برنامه‌نویسی]][[رده:مقایسه‌های زبان‌های برنامه‌نویسی]]