Klasė (programavimas)
Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Klasė objektiniame programavime aprašo tos klasės objektų duomenis ir metodus, taigi klasė aprašo tam tikro tipo objektų duomenų struktūrą ir manipuliavimo jais taisykles (elgesį). Pavyzdžiui, jei aprašome klasę „Žmogus“, galėsime kurti šios klasės objektus kiekvienam konkrečiam asmeniui, šie objektai turės bendrą duomenų struktūrą, tačiau skirtingas reikšmes (skirsis ūgis, svoris, lytis, vardas).
[taisyti] Klasės interfeisas
Kiekviena klasė gali realizuoti vieną ar daugiau interfeisų (sąsajų), kuriuose aprašomos metodų signatūros. Klasė gali būti naudojama tiesiogiai ar per vieną iš realizuojamų interfeisų. Interfeisai leidžia realizuoti tam tikrą funkcionalumą abstrakčiai, tada funkcionalumas vienodai veiks su bet kuria klase, realizuojančia interfeisą.
[taisyti] Klasės struktūra
Klasė aprašo objekte saugomus duomenis, kurių visuma nusako objekto būseną. Objekto būsena enkapsuliuojama ir gali būti pakeista ar perskaityta tik per klasėje aprašytus metodus.
Klasė taip pat nusako ir duomenų vientisumo taisykles, kurios turi būti tenkinamos po kiekvieno metodo kvietimo. Tai yra esminis skirtumas nuo duomenų struktūrų, kur galima bet kuri įmanoma būsena, tuo tarpu klasės objektas gali pereiti tik į tam tikras būsenas. Nesilaikant enkapsuliacijos, būsenos vientisumas gali būti pažeistas.
Klasėse taip pat apibrėžiamos specialios kūrimo ir naikinimo funkcijos - konstruktorius ir destruktorius. Konstruktorius gali būti naudojamas pradinio objekto sukūrimui (be parametrų) arba objekto sukūrimui pagal pradinius duomenis (su parametrais). Destruktoriuje gali būti atlaisvinami išoriniai resursai, nuorodos į kitus objektus. Į destruktorių panašus metodas būna ir tada, kai nebereikalingus objektus naikina ne programos kodas, o šiukšlių surinktuvas. Tuomet jis vadinamas užbaigikliu (angl. finalizer).
Klasėje taip pat gali būti apibrėžti klasės (statiniai) metodai, kurie gali būti vykdomi neturint objekto. Tokie metoda dažnai naudojami objektų kūrimui, radimui, naikinimui.
[taisyti] Poklasiai ir viršklasiai
Dažnai klasės vienaip ar kitaip susijusios. Dažniausias sąryšis - paveldimumas, kur poklasiai (ar vaikinės klasės) paveldi duomenų struktūras ir metodus iš viršklasių (tėvinių klasių). Paveldėtos klasės paprastai keičia tėvinės klasės funkcionalumą - prideda naujų metodų ar duomenų, perrašo ar uždraudžia kai kuriuos metodus.
Paveldėjimo ryšys dažnai pakeičiamas junginiu „yra“ (pvz., „Pingvinas yra Paukštis“).
Metodas, apibrėžtas bendresnėje klasėje, gali būti iš naujo deklaruojamas ir apibrėžiamas iš jos kildinamoje labiau konkrečioje klasėje. Mūsu pavyzdyje, metodas Perėti gali būti deklaruotas klasėje Paukštis ir atskirai aprašytas ereliui ir pingvinui, nes šie du paukščiai perėjimo metu elgiasi ne taip pat.
Kiekvienas objektas turi programuotojui nematomą laukelį, tiesiogiai ar netiesiogiai nurodantį būtent šis objekto klasę. Todėl su konkrečiu objektu galima elgtis ir kaip su bendresnei klasei priklausančiu abstrakčiu objektu. Tarkim, galima parašyti funkciją lizdas(Paukštis), kurios parametras gali būti tiek Erelis, tiek ir Pingvinas. Jei toje funkcijoje bus kviečiamas metodas Perėti, kvietimas nukeliaus į būtent to paukščio rūšiai specifinį metodą. Funkcija lizdas bendru atveju nežino, kokį konkrečiai kodą ji iškviečia.
Klasė Paukštis gali turėti savo supaprastintą metodo Perėti versiją, kuri iš bėdos tinka bet kokiam paukščiui. Kitais atvejai metodas Perėti gali būti šioje klasėje tik deklaruotas (abstraktus), neturintis jokio šį veiksmą atliekančio kodo. Abstrakčių metodų turinti klasė vadinama abstrakčia klase. Bet kurio realiai egzistuojančio objekto tikroji klasė negali būti abstrakti, tačiau gali būti kildinama iš abstrakčios klasės. Vien abstrakčius metodus turinti klasė pagal apibrėžimą artima interfeisui, tačiau programavimo kalbose jie aprašomi skirtingais raktažodžiais.
Kai kurios programavimo kalbos leidžia paveldimumą iš kelių klasių, tačiau dauguma leidžia paveldimumą tik iš vienos tėvinės klasės. Dažnai pasitaikantis kompromisas yra leisti paveldimumą iš vienos interfeisu nesančios klasės bei tuo pat metu iš neriboto skaičiaus interfeisų.
Kitos klasės kontekste apibrėžta klasė vadinama vidine (angl. inner class, member class). Vidinės klasės kodas pasiekia visas gaubiančiosios klasės duomenų struktūras (taip pat ir privačias).
Klasės pačios yra objektai. Jas sukuria klasių kroviklis.
Šiame straipsnyje naudojami diskutuotini terminai. Daugiau apie kompiuterinius terminus skaitykite žodynėlyje. |