Ανάκλαση (υπολογιστές): Διαφορά μεταξύ των αναθεωρήσεων
Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
Διάσωση 1 πηγών και υποβολή 0 για αρχειοθέτηση.) #IABot (v2.0 |
Xqbot (συζήτηση | συνεισφορές) μ Bot: Replace deprecated <source> tag and "enclose" parameter. |
||
Γραμμή 1:
Στην [[πληροφορική]], ο όρος '''ανάκλαση''' ([[Αγγλική γλώσσα|αγγλ.]] '''reflection''') αναφέρεται στη δυνατότητα ενός [[Πρόγραμμα υπολογιστή|προγράμματος υπολογιστή]] να παρατηρεί και να μεταβάλλει τη δομή και τη συμπεριφορά του κατά την εκτέλεση.<ref>{{Cite web |url=http://www2.parc.com/csl/groups/sda/projects/reflection96/docs/malenfant/malenfant.pdf |title=A Tutorial on Behavioral Reflection and its Implementation by Jacques Malenfant et al. |accessdate=2014-05-17 |archiveurl=https://web.archive.org/web/20160222051331/http://www2.parc.com/csl/groups/sda/projects/reflection96/docs/malenfant/malenfant.pdf |archivedate=2016-02-22 |url-status=dead }}</ref><ref>{{cite book|last=Flanagan|first=David|title=The Ruby programming language|year=2008|publisher=O'Reilly|location=Beijing|isbn=978-0-596-51617-8|pages=266|url=http://books.google.gr/books?id=jcUbTcr5XWwC&pg=PA266#v=onepage&q&f=false|edition=1st ed.|coauthors=Matsumoto, Yukihiro}}</ref>
Σε στατικές γλώσσες όπως η C/C++ όταν γράφουμε το πρόγραμμα πρώτα το μεταγλωττίζουμε σε γλώσσα μηχανής και στην συνέχεια το τρέχουμε. Καθώς το πρόγραμμα εκτελείται δεν είναι δυνατό να τροποποιηθεί το πρόγραμμα και κάθε αλλαγή θα πρέπει να γίνει στο πηγαίο κώδικα ο οποίος στην συνέχεια θα πρέπει να μεταγλωττιστεί σε γλώσσα μηχανής και να εκτελεστεί.
| last = Fox | first = Armando | title = All Programming is Metaprogramming | url = https://www.youtube.com/watch?v=e9RgRYe9ioQ | time = 00:00 | publisher = University of Berkley | hostsite = youtube | year =2013 | month = 09| work = Software as a Service διάλεξη στο μάθημα CS169 | language = Αγγλικά | accessdate = 19 Μαΐου 2014}}</ref>
Η ανάκλαση εφαρμόζεται συνήθως σε γλώσσες υψηλού επιπέδου που τρέχουν σε κάποια εικονική μηχανή όπως η [[Smalltalk]] και άλλες [[Γλώσσα προγραμματισμού σεναρίων|γλώσσες σεναρίων]] όπως η [[Ruby]] <ref name="reflexion_ruby"/>, και λιγότερο σε στατικές γλώσσες όπως η [[Java]], η [[C (γλώσσα προγραμματισμού)|C]], η [[ML]] ή η [[Haskell]].
== Παράδειγμα ==
Έστω ότι έχουμε μια κλάση στην [[Ruby]] με όνομα ''Foo'' με μία μέθοδο μέσα, την ''hello''' η οποία τυπώνει στην οθόνη το αλφαριθμητικό ''Hello!'':
<
class Foo
def hello
Γραμμή 16:
end
end
</syntaxhighlight>
Στο παρακάτω παράδειγμα παρουσιάζεται ο κλασικός τρόπος δημιουργίας στιγμιότυπου (''instance'') της κλάσης ''Foo'' καλώντας τον κατασκευαστή (''constructor'') της κλάσης χωρίς την χρήση ανάκλασης. Στην συνέχεια καλούμε την μέθοδο ''hello''. Στο δεύτερο μέρος καλούμε την ίδια μέθοδο χρησιμοποιώντας ανάκλαση. Χρησιμοποιώντας τον Kernel Module <ref>{{cite web|title=Kernel|url=http://www.ruby-doc.org/core-2.1.2/Kernel.html|publisher=Ruby Documentation|accessdate=19 Μαΐου 2014}}</ref> δημιουργούμε το στιγμιότυπο Foo και στην συνέχεια μέσω της μεθόδου send <ref>{{cite web|title=Object|url=http://ruby-doc.org/core-2.1.1/Object.html|publisher=Ruby Documentation|accessdate=19 Μαΐου 2014}}</ref> ζητάμε την κλήση της μεθόδου ''hello''. Επίσης καλούμε την ίδια μέθοδο χρησιμοποιώντας την ''eval'' <ref>{{cite web|title=Kernel - eval|url=http://www.ruby-doc.org/core-2.1.2/Kernel.html#method-i-eval|publisher=Ruby Documentation|accessdate=19 Μαΐου 2014}}</ref>
<
# χωρίς ανάκλαση
obj = Foo.new
Γραμμή 33:
# χρησιμοποιώντας την eval
eval "Foo.new.hello"
</syntaxhighlight>
== Δείτε επίσης ==
* [[Μεταπρογραμματισμός (metaprogramming)]]
== Παραπομπές ==
<references />
== Βιβλιογραφία ==
* {{cite book|last=Brian Cantwell|first=Smith|title=Procedural reflection in programming languages (PhD Thesis)|year=1982|publisher=Massachusetts Institute of Technology|url=http://dspace.mit.edu/handle/1721.1/15961}}
[[Κατηγορία:Προγραμματισμός]]
|