Objekti prve klase

U programskim jezicima, objekat prve klase (takođe tip, objekat, entitet ili vrednost) predstavlja entitet koji podržava sve operacije koje su uglavnom dostupne drugim entitetima. Ove operacije obično omogućavaju prosleđivanje argumenata, vraćanje iz funkcije, modifikovanje i dodeljivanje nekoj promenljivoj.[1]

Istorija

uredi

Sam pojam objekta prve i druge klase uveo je naučnik Christopher Strachey 1960-ih godina.[2][3] On zapravo nije strogo definisao te termine ali ih je predstavio preko realnih brojeva i procedura u ALGOL-u:

Objekti prve i druge klase. U ALGOL-u, realan broj može se javiti u nekom izrazu ili biti dodeljen nekoj promenljivoj. Takođe, neki od njih se mogu javiti kao parametri pri pozivu procedure. Procedura se pak može javiti jedino u drugom pozivu procedure ili kao operator(najčešće) ili kao jedan od parametara. Ne postoje dodatni izrazi koji uključuju procedure ili čiji rezultati jesu procedure. Prema shvatanjima procedura u ALGOL-u, objekti druge klase se uvek javljaju samostalno i nikada ne mogu biti predstavljene preko promenljive ili izraza(osim u slučaju formalnih parametara)..[4]

Naučnik Robin Popplestone dao je sledeću definiciju: Svi članovi imaju određena osnovna prava.

  1. Svi članovi mogu biti parametri funkcija
  2. Svi članovi mogu biti vraćeni kao rezultat funkcija
  3. Svi članovi mogu biti teme zadatih iskaza
  4. Svi članovi mogu biti uvršteni u jednakosti[5]

Primeri

uredi

Najjednostavniji skalarni tipovi podataka, kao sto su celobrojne vrednosti i brojevi sa pokretnim zarezom, su skoro uvek objekti prve klase.U mnogim starijim programskim jezicima, nizovi i niske nisu objekti prve klase(oni ne mogu uzeti za objekte ili proslediti kao parametar potprogramu).

Na primer, ni Fortran IV ni C ne podržavaju prosleđivanje nizova, i kada se oni proslede kao parametri, prosleđuje se u stvari samo adresa prvog elementa niza dok se njihova veličina gubi. Programski jezik C podržava prosleđivanje nizova preko pokazivača, međutim ti pokazivači takođe ukazuju na prvi element niza i sa sobom ne nose informaciju o veličini niza.U većini programskih jezika tipovi podataka nisu objekti prve klase, mada se u nekim objektno-orijentisanim jezicima klase javljaju kao prvoklasni objekti i predstavljaju instance metaklasa.

Nekoliko jezika podržava sontinuation i Goto labele kao objekte uopšteno.

Koncept Opis Jezik
funkcije prve klase zatvorenja i anonimne funkcije Scheme, ML, Haskell, F#, Kotlin, Scala, Swift,

PHP, Raku, JavaScript, Delphi

kontrola toka prve klase sontinuation naredba Scheme, ML, F#
tipovi prve klase zavisni tipovi Coq, Idris
tipovi podataka

prve klase

Generic Haskell. C++11
polimorfizmi

prve klase

nepredvidljivi polimorfizmi
poruke dinamičke poruke (pozivi metoda) Smalltalk [6], Objective-C[6]
klase

prve klase

metaklasa Smalltalk, Objective-C, Ruby, Python, Delphi
dokazi(first-class proofs) proof object[7] Coq, Agda

Funkcije

uredi

Mnogi programski jezici podržavaju prosleđivanje i vraćanje vrednosti funkcija, koje se mogu primeniti na argumente. Međutim pitanje je da li je to dovoljno za pozivanje vrednosti funkcije prve klase.

Neki autori kažu da je moguće kreirati nove funkcije tokom izvršavanja programa koje se mogu zvati ''првокласним ''. Rezultat toga je da funkcije u jeziku C nisu objekti prve klase. Međutim, oni se mogu nazvati objektima druge klase zato što se njima i dalje može manipulisati putem gorenavedenih načina (pomoću funkcijskih pokazivača).

U Smalltalk jeziku, funkcije(metode) su objekti prve klase, baš kao Smalltalk klase. Pošto su operatori (+, -, itd.) metode oni su ujedno i objekti prve klase.

Refleksija

uredi

Neki programski jezici, kao što su Java i PHP, imaju podsistem refleksije koji omogućava pristup unutrašnjim strukturama implementacije iako njima nije moguće manipulisati kao i sa običnim objektima.

Vidi još

uredi

Reference

uredi
  1. ^ Bloor, Chris (1995). „Patrick O'Neil, Database Principles, Programming, and Performance”. Natural Language Engineering. 1 (1): 109—110. ISSN 1351-3249. doi:10.1017/s1351324900000073. 
  2. ^ Burstall, Rod (2000). „Understanding Programming Languages”. Higher-Order and Symbolic Computation. 13 (1/2): 51—55. ISSN 1388-3690. doi:10.1023/a:1010052305354. 
  3. ^ Fry, Christopher; Abelson, Harold; Sussman, Gerald; Sussman, Julie (1985). „Structure and Interpretation of Computer Programs”. Computer Music Journal. 9 (3): 81. ISSN 0148-9267. doi:10.2307/3679579. 
  4. ^ Strachey, Christopher (2000). „Fundamental Concepts in Programming Languages”. Higher-Order and Symbolic Computation. 13 (1/2): 11—49. ISSN 1388-3690. doi:10.1023/a:1010000313106. 
  5. ^ Michie, Prof. Donald, (11 Nov. 1923–7 July 2007), Professor of Machine Intelligence, Edinburgh University, 1967–84, Professor Emeritus, since 1984, Oxford University Press, 2007-12-01, Pristupljeno 2020-06-25 
  6. ^ a b Shroff, Paritosh; Skalka, Christian; Smith, Scott F., The Nuggetizer: Abstracting Away Higher-Orderness for Program Verification, Springer Berlin Heidelberg, str. 2—18, ISBN 978-3-540-76636-0, Pristupljeno 2020-06-25 
  7. ^ Bove, Ana; Dybjer, Peter (2009), Dependent Types at Work, Springer Berlin Heidelberg, str. 57—99, ISBN 978-3-642-03152-6, Pristupljeno 2020-06-25