Објекти прве класе

У програмским језицима, објекат прве класе (такође тип, објекат, ентитет или вредност) представља ентитет који подржава све операције које су углавном доступне другим ентитетима. Ове операције обично омогућавају прослеђивање аргумената, враћање из функције, модификовање и додељивање некој променљивој.[1]

Историја уреди

Сам појам објекта прве и друге класе увео је научник Christopher Strachey 1960-их година.[2][3] Он заправо није строго дефинисао те термине али их је представио преко реалних бројева и процедура у ALGOL-у:

Објекти прве и друге класе. У ALGOL-у, реалан број може се јавити у неком изразу или бити додељен некој променљивој. Такође, неки од њих се могу јавити као параметри при позиву процедуре. Процедура се пак може јавити једино у другом позиву процедуре или као оператор(најчешће) или као један од параметара. Не постоје додатни изрази који укључују процедуре или чији резултати јесу процедуре. Према схватањима процедура у ALGOL-у, објекти друге класе се увек јављају самостално и никада не могу бити представљене преко променљиве или израза(осим у случају формалних параметара)..[4]

Научник Robin Popplestone дао је следећу дефиницију: Сви чланови имају одређена основна права.

  1. Сви чланови могу бити параметри функција
  2. Сви чланови могу бити враћени као резултат функција
  3. Сви чланови могу бити теме задатих исказа
  4. Сви чланови могу бити уврштени у једнакости[5]

Примери уреди

Најједноставнији скаларни типови података, као сто су целобројне вредности и бројеви са покретним зарезом, су скоро увек објекти прве класе.У многим старијим програмским језицима, низови и ниске нису објекти прве класе(они не могу узети за објекте или проследити као параметар потпрограму).

На пример, ни Фортран IV ни C не подржавају прослеђивање низова, и када се они проследе као параметри, прослеђује се у ствари само адреса првог елемента низа док се њихова величина губи. Програмски језик C подржава прослеђивање низова преко показивача, међутим ти показивачи такође указују на први елемент низа и са собом не носе информацију о величини низа.У већини програмских језика типови података нису објекти прве класе, мада се у неким објектно-оријентисаним језицима класе јављају као првокласни објекти и представљају инстанце метакласа.

Неколико језика подржава сontinuation и Goto лабеле као објекте уопштено.

Kонцепт Опис Језик
функције прве класе затворења и анонимне функције Scheme, ML, Haskell, F#, Kotlin, Scala, Swift,

PHP, Raku, JavaScript, Delphi

контрола тока прве класе сontinuation наредба Scheme, ML, F#
типови прве класе зависни типови Coq, Idris
типови података

прве класе

Generic Haskell. C++11
полиморфизми

прве класе

непредвидљиви полиморфизми
поруке динамичке поруке (позиви метода) Smalltalk [6], Objective-C[6]
kласе

прве класе

метакласа Smalltalk, Objective-C, Ruby, Python, Delphi
докази(first-class proofs) proof object[7] Coq, Agda

Функције уреди

Многи програмски језици подржавају прослеђивање и враћање вредности функција, које се могу применити на аргументе. Међутим питање је да ли је то довољно за позивање вредности функције прве класе.

Неки аутори кажу да је могуће креирати нове функције током извршавања програма које се могу звати ''првокласним ''. Резултат тога је да функције у језику C нису објекти прве класе. Међутим, они се могу назвати објектима друге класе зато што се њима и даље може манипулисати путем горенаведених начина (помоћу функцијских показивача).

У Smalltalk језику, функције(методе) су објекти прве класе, баш као Smalltalk класе. Пошто су оператори (+, -, итд.) методе они су уједно и објекти прве класе.

Рефлексија уреди

Неки програмски језици, као што су Јаva и PHP, имају подсистем рефлексије који омогућава приступ унутрашњим структурама имплементације иако њима није могуће манипулисати као и са обичним објектима.

Види још уреди

Референце уреди

  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, Приступљено 2020-06-25 
  6. ^ а б Shroff, Paritosh; Skalka, Christian; Smith, Scott F., The Nuggetizer: Abstracting Away Higher-Orderness for Program Verification, Springer Berlin Heidelberg, стр. 2—18, ISBN 978-3-540-76636-0, Приступљено 2020-06-25 
  7. ^ Bove, Ana; Dybjer, Peter (2009), Dependent Types at Work, Springer Berlin Heidelberg, стр. 57—99, ISBN 978-3-642-03152-6, Приступљено 2020-06-25