Proxy (objektas)

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Peršokti į: navigaciją, paiešką

Proxy (objektiniame programavime) – programos vykdymo metu (dinamiškai) sukurtas objektas, išpildantis reikiamą interfeisą ar interfeisus, tačiau nepriklausantis jokiai programavimo metu aprašytai objektų klasei.

Sąsajoje (interfeise) aprašomi objektui pritaikomi metodai. Dinamiškai sukurtam proxy objektui galima kviesti visus tuos pačius metodus, tačiau šie kvietimai tiesiog nukreipiami su objektu susijusiam kvietimų vykdytojui (angl. invocation handler). Šio vykdytojo bazinė klasė turi sutartą metodą, kuriam parametrais perduodamas kviečiamo proxy objekto metodo vardas bei (panaudojant kokią nors tam tinkamą duomenų struktūrą) to metodo parametrai. Šiame metode patalpinamas programuotojui reikalingas specifinis kodas.

Proxy objektų taikymo sritys[taisyti | redaguoti kodą]

  • Nuotoliniai proxy leidžia pasiekti nuotolinius objektus nenaudojant konkrečiam interfeisui specifinių stuburų.
  • Virtualūs proxy sukuria daug atminties reikalaujantį tikrąjį objektą tik jo prireikus (kviečiant to objekto metodus). Šis objektas (gaubiamasis objektas) saugomas kaip proxy objekto vidinis kintamasis, jam nukreipiant visus išorinius metodų kvietimus.
  • Kopijavimo proxy sukuriamas vietoj tikros objekto kopijos (klono) ir atideda tikrosios kopijos sukūrimą iki bus iškviestas vidines objekto nuostatas keičiantis kodas. Jie tinka jei proxy klasė užima daug mažiau atminties nei tikroji objekto kopija.
  • Ugniasienės proxy tikrina ir prireikus blokuoja kviečiamus metodus prieš perduodamas juos gaubiamajam objektui. Jis saugo objektą nuo potencialiai piktybiško metodus kviečiančio kodo. Ugniasienės proxy gali saugoti ir kviečiantį kodą nuo „pikto“ objekto, tikrindamas grąžinamus rezultatus.
  • Kešavimo proxy įsimena anksčiau kviestų metodų rezultatus ir grąžina juos kviečiant tuos metodus (su tais pačiais parametrais) pakartotinai. Jie tinka jei daug greičiau yra rasti įsimintą reikšmę nei apskaičiuoti ją iš naujo.
  • Sinchronizavimo proxy saugo gaubiamą objektą nuo lenktynių aplinkos.
  • Statistikos proxy renka objekto metodų kvietimo statistiką.

Pavyzdys[taisyti | redaguoti kodą]

Už pagrindinės atminties ribų esančiam nuotoliniam objektui pasiekti bei jo metodams iškviesti gali būti automatiškai sukuriamas jį atitinkantis vietinis proxy objektas, išpildantis tuos pačius interfeisus. Proxy objekto kvietimų vykdytojas žino kviečiamo objekto vardą bei jo parametrus. Jei sukūrimo metu buvo nurodytas ir nuotolinio objekto adresas, turimos informacijos pakanka nuotoliniam metodui iškviesti. Kvietimų vykdytojas yra specifinis naudojamam komunikacijos protokolui (CORBA, RMI), tačiau jis nėra specifinis konkrečiam objektui ar interfeisui ir gali būti sisteminės bibliotekos dalis. Taip proxy klasės palaipsniui pakeičia RMI ir CORBA paplitusį automatiškai generuojamą kodą.