Kas yra anoniminė vidinė klasė?

Objektiniame kompiuterių programavime anoniminė vidinė klasė yra klasė, kuri deklaruojama metodo viduje, bet neįvardyta. Anoniminė vidinė klasė turi keletą apribojimų, dėl kurių ji skiriasi nuo įprastos klasės, įskaitant kintamųjų, kuriuos ji gali pasiekti, apimties apribojimą. Yra keletas labai specifinių situacijų, kai naudojant anoniminę vidinę klasę šaltinio kodas gali būti lengviau skaitomas, tačiau jis pirmiausia naudojamas siekiant užtikrinti inkapsuliavimą, kai atskirų klasių generavimas gali tai apsunkinti.

Inkapsuliavimas yra objektinio programavimo (OOP) koncepcija, kad objektas ir jo komponentai turi būti tam tikru būdu apsaugoti ir susieti su objektu. Anoniminės vidinės klasės ir apskritai vidinės klasės padeda įgyvendinti ypač sudėtingų objektų inkapsuliavimą. Užuot turėjus sukurti klasę, kuri remiasi atskira išorine klase, dirbtinai sujungiant jas ir galimai atskleisdama kai kuriuos komponentus, anoniminė vidinė klasė gali tvirtai susieti jas abi.

Kai kuriose programavimo kalbose anoniminė vidinė klasė gali padėti įveikti vieno paveldėjimo apribojimus. Jei objektas paveldi iš vienos klasės, bet turi pasiekti kitą, vidinę klasę galima sugeneruoti ir tada perduoti atitinkamiems tvarkytojams. Šis metodas yra įprastas skambučių ir įvykių klausytojams. Vienintelė alternatyva būtų sukurti visą antrą klasę, kurioje būtų nepaisoma tik vieno ar dviejų metodų.

Anoniminėms vidinėms klasėms taikomi tam tikri apribojimai, kad būtų išvengta inkapsuliacijos pertraukos ir būtų užtikrinta taikymo sritis. Pagrindinis apribojimas yra tas, kad anoniminė vidinė klasė negali pasiekti metodo, kuriame ji yra, kintamųjų, nebent tie kintamieji būtų paskelbti galutiniais. Taip yra todėl, kad vidinė klasė gali tęsti savo veiklą po klasės ir metodo, kuriame ji yra, gyvavimo. Apvyniojimo klasės kintamieji būtų sunaikinti, kai pasibaigs jos gyvavimo laikas, todėl vidinės klasės nuorodos iš karto taptų negaliojančios. Vienintelė išimtis yra galutinis kintamasis, nes jis egzistuos už egzemplioriaus ribų.

Vienas iš konkretesnių anoniminės vidinės klasės naudojimo būdų yra kodo apsauga. Daugelis OOP kalbų numato mechanizmą, vadinamą atspindžiu. Reflection leidžia programai išskaidyti kitą klasę ir pamatyti, kokie yra jos narių kintamieji ir metodai, bet ne patį kodą. Naudojant anoniminę vidinę klasę, vidinės klasės turinys yra apsaugotas nuo atspindžių, o didesnės klasės vidinė veikla gali būti veiksmingai paslėpta.