Informaatikas võib objekt olla muutuja, andmestruktuur, alamprogramm või meetod.
See artikkel vajab toimetamist. (Veebruar 2023) |
See artikkel ootab keeletoimetamist. (Veebruar 2023) |
Nagu ka muude mälupiirkondade puhul, viidetakse objekti sisule identifikaatori abil.
Objektorienteeritud programmeerimise (OOP) paradigma puhul võib objekt koosneda muutujatest, funktsioonidest ja andmestruktuuridest. Klassipõhistes paradigma variatsioonides nimetatakse objektiks klassi instantsi.
Suhetepõhise andmebaasi halduse puhul on objektiks tabel, tulp või suhe andmete ja andmebaasi üksuse vahel (näiteks vanus ja isik).
Keelt nimetatakse objektipõhiseks juhul, kui selle objektid vastavad alljärgnevatele (kehtivuse ja sisalduvuse) nõuetele:
Keelt loetakse objektorienteerituks, kui see täidab objektipõhise keele nõudeid ning lisaks võimaldab järgmiseid võtteid:
Vahel nõutakse ka järgmist:
Objektorienteeritud programmeerimine on lähenemine, mis tagab modulaarse ja taaskasutatava programmikoodi. Välja on see arenenud headest disaini tavadest, mis on olnud kasutuses juba programmeerimise tekkeaastatel. Oma olemuselt on objektorienteeritus vaid varasemate võtete, näiteks struktureeritud programmeerimise ja abstraktsete andmetüüpide, loomulik edasiareng. Objekt on ei midagi enamat kui abstraktne andmetüüp ühenduses polümorfismi ja pärimisvõimega.
Andmete ja koodi eristamise asemel ühendab objektorienteeritud süsteem need "objekti" mõiste abil. Objekt koosneb olekust (en:state ehk andmed) ja käitumisest (en:behaviour ehk kood). Objekt võib olla inspireeritud päris maailmast. Nii näiteks e-pood vajab selliseid objekte nagu ostukorv, klient ja toode. Seejuures ostukorv võib sisaldada näiteks käitumist lisa ja telli, kliendi objektil aga võib olla võimalus muuta parooli. Disaini poolest on objektid hierarhilised. Nii võib e-pood vajada üldisemaid klasse nagu elektroonikatooted ja köögitooted. Kuid tõenäoliselt läheb vaja ka täpsustatud funktsionaalsustega ja omadustega klasse, näiteks elektroonikatooted võiksid jaguneda CD-mängijaks, DVD-mängijaks jne. Sellised klassid ja alamklassid vastavad matemaatilistele hulkadele ja alamhulkadele.
Objektide puhul on tähtsaks mõisteks tarkvaraline disaini muster. Selline muster pakub taaskasutatavat malli lahendamaks tihti kohtuvaid probleeme. Alljärgnevalt on välja toodud mõned põhilised objekti disaini mustrid.
Objektorienteeritud lähenemine ei kujuta endast vaid programmeerimismudelit. See on samuti kasutatav liidest kirjeldava keelena hajussüsteemide jaoks. Hajusarvutuse mudeli puhul kipuvad objektid olema rohmakamad (larger grained), pikemalt kasutatavad ja teenustele orienteeritumad kui programmeerimisobjektid.
Hajusobjektide pakendamiseks kasutatakse enamasti liidest defineerivat keelt (Interface Definition Language) ehk IDL-i. IDL varjab kliendi eest kõiki hajusserveri detaile. Sellised detailid on näiteks serveri kasutatav programmeerimiskeel ja operatsioonisüsteem. IDL on samuti tihti hajuskeskkonna osaks, mis pakub objektidele transaktsiooni ja püsivuse teenuseid, säilitades seejuures tänu tsentraliseeritusele nende protsesside ühtsust terve programmi vältel. Kaheks enamlevinud hajusobjektide standardiks on Object Management Group'i CORBA standart ja Microsofti DCOM.
Hajusarvutuse võimaldamiseks on lisaks hajusobjektidele välja pakutud ka muid tavaobjekti laiendusi:
Mõned neist laiendustest, nagu hajusobjektid ja protokollobjektid, on valdkonnaspetsiifilised mõisted kirjeldamaks tavaobjektide eritüüpe mõnes konkreetses kontekstis (näiteks meetodi kaugväljakutse või protokolli struktuur). Teised aga, näiteks replitseeritud objektid ja elavad objektid, on tunduvalt ebastandartsemad. Erinevalt tavaobjektidest, mis asetsevad vaid ühes kohas, rakendavad nad objekti mõiste replikate grupile. Lisaks võib nende seisund olla ebapidev ning kuuluvus dünaamiliselt muutuda.
Oma olemuselt on semantiline veeb hajusobjektide raamistikuks (framework). Kaheks põhitehnoloogiaks selle kontekstis on veebi ontoloogia keel (Web Ontology Language ehk OWL) ja ressursse kirjeldav raamistik (Resource Description Framework ehk RDF). OWL laiendab objekti mudelit toetudes hulgateooriale lisades seeläbi uusi modelleerimisvõimalusi, näiteks mitmekordne pärimine. RDF aga pakub võimalust defineerida põhilisi objekti nimesid, omadusi, atribuute ja suhteid, mis oleksid kättesaadavad interneti teel.
OWL-i objektid pole sarnased IDL-i teel kättesaadavate rohmakate hajusobjektidega. Interneti puhul poleks selline ühe liideste (interface) kimbu standartiseerimine sobivaks lähenemiseks. Ning seda eeskätt interneti pideva arengu ja muutumise tõttu. OWL-i objektid kipuvad sarnanema pigem nendega, mis on kasutusel rakenduste (applications) arendamisel näiteks keeltes Java ja C++.
Sellele vaatamata pole OWL-i ja tavalised objektorienteeritud programmeerimise objektid siiski täiesti ühesugused. Erinevalt traditsioonilistest objektidest, mis kompileerimise järgselt muutuvad staatilisteks struktuurideks, seejuures pärides tavaliselt vaid ühest allikast, on OWL-i objektid dünaamilised. Selline objekt võib muuta oma struktuuri programmi käigus ning muutuda lisa- või uute klasside instantsiteks.
Teine tähelepanuväärne erinevus on süsteemis puuduva informatsiooni kohtlemine. Tavaliste programmeerimisobjektide ja enamuse andmebaasi süsteemide puhul on kasutusel "suletud maailma eeldus": kui väide pole süsteemile tuttav, loetakse seda vääraks. Semantilise Veebi objektid kasutavad seevastu "avatud maailma eeldust": väidet loetakse vääraks vaid juhul, kui selleks on süsteemis vastav infokild, vastasel juhul loetakse seda teadmatuks, mis ei ole ei tõene ega väär.
Kõige enam sarnanevad OWL-i objektid tehisintellekti freim keeltega, näiteks KL-ONE ja Loom.
Järgnev tabel võrdleb objektorienteeritud keelte (näiteks Java ja C++) ning Semantilise Veebi objekte:
OOP objektid | Semantilise ceebi objektid |
---|---|
Klasse vaadeldakse kui instantsite tüüpe. | Klasse vaadeldakse kui üksikelementide kogumit. |
Instantsid ei saa muuta tüüpi programmi jooksul. | Klassi liikmed võivad muutuda programmi jooksul. |
Klasside hulk ja struktuur ei muutu pärast kompilatsiooni. | Klassid võivad olla loodud ja muudetud programmi töö ajal. |
Kompilaator täidab oma töö programmi konstrueerimise ajal (build-time). | Arutlejaid (reasoners) kasutatakse klassifitseerimaks ja kontrollimaks järjepidevust nii programmi konstrueerimise kui ka töö (run-time) ajal. |
Klassid hoiavad suure osa oma sisust imperatiivsetes funktsioonides ja meetodites. | Klassid edastavad oma sisu OWL deklaratsioonide abil. Imperatiivne kood puudub. |
Instantsite anonüümsuse tõttu on programmist väljastpoolt nende poole pöördumine tugevalt tõkestatud. | Kõigil RDF ja OWL ressurssidel on oma unikaalne URI, mille põhjal saab nendega suhelda. |
Suletud maailm: argumentide ebapiisavusel loetakse väide vääraks. | Avatud maailm: argumentide nappimisel loetakse väide ebamääraseks ehk ei tõeseks ega vääraks. |
class Koduloom: def __init__(self, nimi): self.nimi = nimi class Papagoi(Koduloom): def __init__(self, nimi): super().__init__(nimi) def liigu(self): print("Ma lendan!") minu_papagoi = Papagoi("Kesha") print("Mu nimi on " + minu_papagoi.nimi) minu_papagoi.liigu()
Mu nimi on Kesha Ma lendan!
class Koduloom { constructor(nimi) { this.nimi = nimi; } } class Koer extends Koduloom { constructor(nimi) { super(nimi); } tee_häält() { console.log("Ma haugun!"); } } minu_koer = new Koer("Sharik"); console.log("Mind hüütakse " + minu_koer.nimi); minu_koer.tee_häält();
Mind hüütakse Sharik Ma haugun!
#include #include class Koduloom { public: std::string nimi; Koduloom(std::string nimi_) { nimi = nimi_; } }; class Kass : public Koduloom { public: Kass(std::string nimi) : Koduloom(nimi) {} void hüppa() { std::cout << "Ma hüppan!" << std::endl; } }; int main() { Kass minu_kass("Matroskin"); std::cout << "Mu nimeks " << minu_kass.nimi << "!" << std::endl; minu_kass.hüppa(); return 0; }
Mu nimeks Matroskin! Ma hüppan!
This article uses material from the Wikipedia Eesti article Objekt (programmeerimine), which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). Sisu on kasutatav litsentsi CC BY-SA 4.0 tingimustel, kui pole öeldud teisiti. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki Eesti (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.