Inafasiriwa moja kwa moja kutoka kwa Wikipedia ya Kiingereza na Tafsiri ya Google

Programu inayolengwa na kitu

Programu inayolengwa na kitu ( OOP ) ni dhana ya programu inayotokana na dhana ya " vitu ", ambayo inaweza kuwa na data , kwa namna ya mashamba , ambayo hujulikana kama sifa; na kificho, kwa namna ya taratibu, ambazo hujulikana kama njia . Kipengele cha vitu ni kwamba taratibu za kitu zinaweza kufikia na mara nyingi kurekebisha maeneo ya data ya kitu ambacho wanahusishwa (vitu vina wazo la " hii " au "binafsi"). Katika OOP, mipango ya kompyuta imeundwa kwa kuwafanya nje ya vitu vinavyoingiliana. [1] [2] Kuna tofauti kubwa ya lugha za OOP, lakini wale maarufu zaidi ni darasa-msingi , maana kwamba vitu ni matukio ya madarasa , ambayo pia huamua aina yao.

Lugha nyingi za programu za kutumiwa sana (kama vile C ++, Object Pascal, Java, Python nk) ni lugha nyingi za programu za utaratibu ambao huunga mkono programu zinazoelekezwa na kitu kwa kiwango kikubwa au cha chini, kwa kawaida kikichanganywa na programu muhimu , za kiutaratibu . Lugha muhimu inayolengwa na kitu ni pamoja na Java , C ++ , C # , Python , PHP , Ruby , Perl , Object Pascal , Lengo-C , Dart , Swift , Scala , Common Lisp , na Smalltalk .

Yaliyomo

Vipengele

Programu inayolengwa na vitu hutumia vitu, lakini sio mbinu zote na miundo inayohusishwa hutumiwa moja kwa moja katika lugha ambazo zinadai kuunga mkono OOP. Vipengele vilivyoorodheshwa hapa chini ni, hata hivyo, kawaida kati ya lugha zinazozingatiwa sana darasa-na vitu vinavyotokana na kitu (au mwelekeo wa aina nyingi na msaada wa OOP), na tofauti zilizojulikana zilizotajwa. [3] [4] [5] [6]

Alishiriki na zisizo OOP mtangulizi lugha

Lugha za programu zinazoelekezwa kwa kawaida hushirikisha vipengele vya kiwango cha chini na lugha za juu za utaratibu wa utaratibu (ambazo zilizoundwa kwanza). Vifaa vya msingi ambavyo vinaweza kutumika kutengeneza mpango ni pamoja na:

  • Vigezo vinavyoweza kuhifadhi habari zilizopangwa katika idadi ndogo ya aina za data zilizojengwa kama integers na wahusika wa alphanumeric. Hii inaweza kujumuisha miundo ya data kama masharti , orodha , na meza za hashi ambazo zimejengwa ndani au hutokea kutokana na kuchanganya vigezo kwa kutumia pointi za kumbukumbu
  • Taratibu - pia inajulikana kama kazi, mbinu, routines, au subroutines - ambayo inachukua pembejeo, kuzalisha pato, na kuendesha data. Lugha za kisasa zinajumuisha mipangilio ya mipango iliyojengwa kama matanzi na viwango vya hali .

Msaada wa programu za msimu hutoa uwezo wa kuingiza taratibu katika faili na modules kwa makusudi ya shirika. Moduli zinawekwa kwa nambari hiyo msimbo katika moduli moja haitakuwa imechanganywa kwa ajali na utaratibu sawa au jina la kutofautiana katika faili nyingine au moduli.

Vitu na madarasa

Lugha ambazo zinasaidia programu inayotokana na kitu ambacho hutumiwa kwa kawaida hutumia urithi kwa ajili ya kutumia tena kanuni na upanuzi kwa namna ya madarasa au prototypes . Wale wanaotumia madarasa husaidia dhana mbili kuu:

  • Darasa - ufafanuzi wa muundo wa data na taratibu zilizopo kwa aina fulani au darasa la kitu; inaweza pia kuwa na data na taratibu (inayojulikana kama mbinu za darasa) wenyewe, yaani madarasa yana vyenye data na kazi za wanachama
  • Vitu - matukio ya madarasa

Vitu wakati mwingine vinahusiana na mambo yaliyopatikana katika ulimwengu wa kweli. Kwa mfano, mpango wa graphics unaweza kuwa na vitu kama vile "mduara", "mraba", "menyu". Mfumo wa ununuzi wa mtandaoni unaweza kuwa na vitu kama "gari la ununuzi", "mteja", na "bidhaa". [7] Wakati mwingine vitu vinawakilisha vitu visivyoonekana zaidi, kama kitu kinachowakilisha faili iliyo wazi, au kitu kinachotoa huduma ya vipimo vya kutafsiri kutoka kwa jadi ya Marekani hadi kwenye metri.

Kila kitu kinasemwa kuwa mfano wa darasa fulani (kwa mfano, kitu ambacho kina jina lake "Mary" inaweza kuwa mfano wa Mfanyakazi wa darasa). Taratibu za programu zinazoelekezwa na vitu hujulikana kama mbinu ; Vigezo pia hujulikana kama mashamba , wanachama, sifa, au mali. Hii inasababisha masharti yafuatayo:

  • Vigezo vya darasa - ni wa darasa kwa ujumla ; kuna nakala moja tu ya kila mmoja
  • Vigezo vya Mfano au sifa - data ambayo ni ya vitu binafsi; kila kitu kina nakala yake ya kila mmoja
  • Vigezo vya wanachama - inahusu kila darasa na vigezo vya mfano vinavyoelezwa na darasa fulani
  • Mbinu za darasa - ni wa darasa kwa ujumla na wanapata tu vigezo vya darasa na pembejeo kutoka kwenye simu ya utaratibu
  • Njia za utaratibu - ni vitu vya mtu binafsi , na hupata vigezo vya mfano kwa kitu fulani ambacho wanaitwa, vidokezo, na vigezo vya darasa

Vipengele vimefikia kiasi fulani kama vigezo vinavyo na muundo wa ndani wa ndani, na kwa lugha nyingi hufafanua kwa ufanisi, kutumikia kama kumbukumbu halisi kwa mfano mmoja wa kitu kilicho kwenye kumbukumbu ndani ya chungu au stack. Wao hutoa safu ya kufuta ambayo inaweza kutumika kutenganisha ndani kutoka kwa nje ya kificho. Msimbo wa nje unaweza kutumia kitu kwa kupiga njia ya mfano maalum na seti fulani ya vigezo vya uingizaji, soma variable ya mfano, au uandike kwa variable ya mfano. Vitu ni kuundwa kwa kupiga aina maalum ya mbinu katika darasa inajulikana kama kuujenga . Programu inaweza kuunda matukio mengi ya darasa sawa kama inavyotumika, ambayo inafanya kazi kwa kujitegemea. Hii ni njia rahisi ya taratibu hizo zitumike kwenye seti tofauti za data.

Programu inayolengwa na kitu ambacho hutumia madarasa wakati mwingine huitwa programu ya makao ya darasa , wakati programu za msingi za mfano hazitumii madarasa. Matokeo yake, istilahi tofauti sana lakini inayofanana hutumiwa kufafanua dhana ya kitu na mfano .

Katika madarasa ya lugha na vitu vinaweza kuundwa kwa kutumia dhana nyingine kama sifa na mixins .

Toleo la makao-msingi au -msingi

Katika lugha za msingi za darasa madarasa yanaelezewa kabla na vitu vimewekwa kulingana na madarasa. Ikiwa vitu viwili vya apple na machungwa vinatambuliwa kutoka kwa Matunda ya darasa, ni matunda ya asili na ni hakika kwamba unaweza kushughulikia kwa njia ile ile; kwa mfano mtengenezaji anaweza kutarajia uwepo wa sifa sawa kama vile rangi au maudhui ya sukari au yameiva .

Katika lugha za msingi mfano vitu ni vitu vya msingi. Hakuna madarasa hata kuwepo. Vipya vipya vinaweza kuanzishwa kulingana na vitu tayari. Unaweza kuita vitu viwili tofauti vya apple na machungwa matunda, lakini hii hutokea tu "kwa ajali" na sio asili. Wazo la darasa la matunda lipo zaidi au chini tu katika akili ya programu na hawana msaada katika msimbo wa mpango. Mpango bado anaweza kushughulikia kwa njia ile ile lakini hii inaweza kuvunjika kwa urahisi; kwa mfano moja ya sifa za sukari zinaweza kutokea bila kutarajia.

Utoaji wa nguvu / ujumbe unaoendelea

Ni wajibu wa kitu, sio kanuni yoyote ya nje, kuchagua msimbo wa utaratibu wa kutekeleza kwa kujibu simu, kwa kawaida kwa kutafuta njia wakati wa kukimbia kwenye meza inayohusishwa na kitu. Kipengele hiki kinajulikana kama kutuma kwa nguvu , na hufafanua kitu kutoka kwa aina ya data ya abstract (au moduli), ambayo ina utekelezaji uliowekwa (static) wa shughuli kwa matukio yote. Ikiwa kuna mbinu nyingi ambazo zinaweza kutumiwa kwa jina fulani, inajulikana kama kupeleka mara nyingi .

Njia ya utaratibu pia inajulikana kama ujumbe unaotumia . Inafikiriwa kama ujumbe (jina la njia na vigezo vya pembejeo) kupitishwa kwa kitu cha kupeleka.

encapsulation

Encapsulation ni dhana ya programu inayoongozwa na kitu ambacho kinamfunga pamoja data na kazi ambazo hutumia data, na huhifadhi wote salama na kuingilia kati na matumizi mabaya. Ufikiaji wa data umesababisha dhana muhimu ya OOP ya kujificha data .

Ikiwa darasa haliruhusu msimbo wa wito kufikia data ya ndani ya kitu na kuruhusu upatikanaji kupitia mbinu peke yake, hii ni fomu yenye nguvu ya kujificha au kujificha habari inayojulikana kama encapsulation . Lugha zingine (Java, kwa mfano) kuruhusu madarasa kutekeleza vikwazo vya upatikanaji wazi, kwa mfano inaashiria data ya ndani na nenosiri la private na mbinu za kutaja zinazopangwa kutumiwa na kanuni nje ya darasa na neno muhimu la public . Mbinu zinaweza pia kuundwa kwa umma, binafsi, au viwango vya kati kama vile protected (ambayo inaruhusu upatikanaji wa darasa sawa na madarasa yake, lakini si vitu vya darasa tofauti). Kwa lugha zingine (kama Python) hii inatimizwa tu kwa mkataba (kwa mfano, mbinu za private zinaweza kuwa na majina yanayotangulia na kusisitiza ). Encapsulation inazuia msimbo wa nje bila kuwa na wasiwasi na kazi za ndani za kitu. Hii inawezesha msimbo wa refactoring , kwa mfano kuruhusu mwandishi wa darasa kubadilisha jinsi vitu vya darasa hilo vinavyowakilisha data zao ndani bila kubadilisha namba yoyote ya nje (kwa muda mrefu kama njia ya "umma" inafanya kazi inafanya kazi sawa). Pia inawahimiza wasimamizi kuweka kanuni zote zinazohusika na seti fulani ya data katika darasani hiyo, ambayo huiandaa kwa ufafanuzi rahisi na programu nyingine. Encapsulation ni mbinu inayohimiza kupungua .

Muundo, urithi, na ujumbe

Vipengele vinaweza kuwa na vitu vingine katika vigezo vyao; hii inajulikana kama utungaji wa vitu . Kwa mfano, kitu katika darasa la Wafanyakazi kinaweza kuwa (inaonyesha) kitu katika darasa la Anwani, pamoja na vigezo vya mfano wake kama "kwanza_name" na "nafasi". Utungaji wa vitu hutumiwa kuwakilisha "uhusiano" wa mahusiano: kila mfanyakazi ana anwani, hivyo kila kitu cha Waajiri kina nafasi ya kuhifadhi kitu cha anwani.

Lugha zinazounga mkono madarasa karibu daima husaidia urithi . Hii inaruhusu madarasa kupangwa katika utawala unaowakilisha uhusiano wa "aina ya". Kwa mfano, Mfanyakazi wa darasa anaweza kurithi kutoka kwa Mtu wa darasa. Data na mbinu zote zinazopatikana kwa darasa la wazazi pia huonekana katika darasa la watoto na majina sawa. Kwa mfano, Mtu wa darasa anaweza kufafanua vigezo "kwanza_name" na "last_name" kwa njia ya "make_full_name ()". Hizi pia zitapatikana katika Wafanyakazi wa darasa, ambayo inaweza kuongeza vigezo "nafasi" na "mshahara". Mbinu hii inaruhusu matumizi rahisi ya taratibu sawa na ufafanuzi wa data, pamoja na uwezekano wa kioo halisi ya mahusiano ya ulimwengu kwa njia ya kuvutia. Badala ya kutumia meza za darasani na vipindi vya programu, mtengenezaji hutumia vitu ambazo mtumiaji anaweza kuwa na ufahamu zaidi kwa: vitu kutoka kwenye uwanja wa maombi yao. [8]

Makundi ya chini yanaweza kupanua njia zilizoelezwa na superclasses. Urithi wa aina nyingi unaruhusiwa katika lugha zingine, ingawa hii inaweza kufanya ufumbuzi unazidi kuingilia. Lugha zingine zina msaada maalum kwa mchanganyiko , ingawa katika lugha yoyote yenye urithi nyingi, mixin ni darasa tu ambalo haliwakili uhusiano wa aina. Mixins ni kawaida kutumika kuongeza njia sawa kwa madarasa mbalimbali. Kwa mfano, darasa la UnicodeConversionMixin inaweza kutoa njia unicode_to_ascii () ikiwa imejumuishwa katika darasa FileReader na darasa la WebPageScraper, ambalo halishiriki mzazi wa kawaida.

Masomo yasiyo ya kawaida hayawezi kuingizwa katika vitu; wanapo tu kwa madhumuni ya urithi ndani ya madarasa mengine "ya saruji" ambayo yanaweza kuanzishwa. Katika Java, neno muhimu la final linaweza kutumika kuzuia darasa lisitoshe.

Mafundisho ya utungaji juu ya watetezi wa urithi kutekeleza ina-mahusiano kutumia utungaji badala ya urithi. Kwa mfano, badala ya kurithi kutoka kwa Mtu wa darasa, Mfanyakazi wa darasa angeweza kutoa kitu cha Wafanyakazi kitu cha ndani cha Mtu, ambayo ina nafasi ya kujificha kutoka kwa msimbo wa nje hata kama Mtu wa darasa ana sifa nyingi za umma au mbinu. Lugha zingine, kama Kwenda usiunga mkono urithi hata.

"Kanuni ya kufunguliwa / imefungwa " inasisitiza kuwa madarasa na kazi "zinapaswa kufunguliwa kwa ugani, lakini zimefungwa kwa ajili ya urekebishaji".

Uwakilishi ni kipengele kingine cha lugha ambacho kinaweza kutumika kama njia mbadala ya urithi.

polymorphism

Kutoa aina, aina ya polymorphism , ni wakati kupigia kanuni inaweza kuwa na ugomvi kama kitu ni cha darasa la wazazi au mmoja wa wazao wake. Kwa mfano, kazi inaweza kuitwa "make_full_name ()" juu ya kitu, ambacho kinafanya kazi kama kitu ni cha Mtu wa darasa au Mfanyakazi wa darasa. Hii ni aina nyingine ya uondoaji ambayo inafanya kificho nje ya uongozi wa darasani na inawezesha kujitenga kwa nguvu ya wasiwasi .

Open kujirudia

Katika lugha zinazounga mkono urejesho wazi , mbinu za vitu zinaweza kupiga njia zingine kwenye kitu kimoja (ikiwa ni pamoja na wao wenyewe), kwa kawaida kutumia variable maalum au nenosiri linalitaja this au self . Tofauti hii imefungwa ; inaruhusu njia iliyofafanuliwa katika darasa moja ili kuomba njia nyingine ambayo hufafanuliwa baadaye, katika baadhi ya kikundi hicho.

Historia

Terminology inayotaka "vitu" na "kuelekezwa" kwa maana ya kisasa ya programu zinazoelekezwa kwa kitu ambacho zimeonekana kwa mara ya kwanza kwenye MIT mwishoni mwa miaka ya 1950 na mapema miaka ya 1960. Katika mazingira ya kikundi cha akili bandia , mapema mwaka wa 1960, "kitu" kinaweza kutaja vitu visivyojulikana (atomi za LISP ) na mali (sifa); [9] [10] Alan Kay baadaye alielezea ufahamu wa kina wa ndani ya LISP kama ushawishi mkubwa juu ya mawazo yake mwaka wa 1966. [11] Mfano mwingine wa awali wa MIT ulikuwa Sketchpad iliyoundwa na Ivan Sutherland mwaka 1960-61; katika gazeti la ripoti ya kiufundi ya 1963 iliyotokana na maandishi yake juu ya Sketchpad, Sutherland ilifafanua mawazo ya "kitu" na "mfano" (pamoja na dhana ya darasa iliyofunikwa na "bwana" au "ufafanuzi"), ingawa ni maalum kwa uingiliano wa kielelezo. [12] Pia, toleo la MIT ALGOL , AED-0, lilianzisha uhusiano wa moja kwa moja kati ya miundo ya data ("plexes", kwa lugha hiyo) na taratibu, kupima kile ambacho baadaye kiliitwa "ujumbe", "mbinu", na "kazi za wanachama ". [13] [14]

Dhana rasmi ya programu ya vitu ilianzishwa katikati ya miaka ya 1960 na Simula 67, marekebisho makubwa ya Simula I, lugha ya programu iliyoundwa kwa ajili ya simulation ya tukio la ajabu , iliyoundwa na Ole-Johan Dahl na Kristen Nygaard wa Kituo cha Computing Kinorwe huko Oslo . [15] [ si katika funguo iliyotolewa ] [ citation inahitajika ] [16] [ si katika citation kutolewa ] [ citation inahitajika ] [17] [18] [19]

Simula 67 iliathiriwa na SIMSCRIPT na CAR "Tony" Hoare iliyopendekezwa "madarasa ya rekodi". [13] [20] Simula alianzisha wazo la madarasa na matukio au vitu (pamoja na madawati, taratibu za kawaida, coroutines, na simulation simulation tukio) kama sehemu ya wazi ya mpango wa mpango. Lugha pia ilitumia ukusanyaji wa takataka ya moja kwa moja ambayo ilibadilishwa mapema kwa lugha ya programu ya kazi ya Lisp . Simula ilitumiwa kwa mfano, kama mifano ya kujifunza na kuboresha harakati za meli na maudhui yao kupitia bandari za mizigo. Mawazo ya Simula 67 yaliathiri lugha nyingi baadaye, ikiwa ni pamoja na Smalltalk, derivatives ya LISP ( CLOS ), Object Pascal , na C ++ .

Lugha ya Smalltalk , ambayo ilianzishwa katika Xerox PARC (na Alan Kay na wengine) katika miaka ya 1970, ilianzisha mpango wa muda unaoelekezwa na kitu ambacho kinawakilisha matumizi yanayoenea ya vitu na ujumbe kama msingi wa kuhesabu. Waumbaji wa Smalltalk waliathiriwa na mawazo yaliyoletwa katika Simula 67, lakini Smalltalk iliundwa kuwa mfumo wa kikamilifu ambao madarasa yanaweza kuundwa na kubadilishwa kwa nguvu zaidi kuliko statically kama katika Simula 67. [21] Smalltalk na OOP ililetwa kwa watazamaji pana kwa sura ya Agosti 1981 ya Byte Magazine .

Katika miaka ya 1970, kazi ya Kay Smalltalk ilikuwa imesababisha jumuiya ya Lisp kuingiza mbinu za msingi ambazo zililetwa kwa watengenezaji kupitia mashine ya Lisp . Majaribio na upanuzi mbalimbali kwa Lisp (kama vile LOOPS na Flavors kuanzisha urithi na mixins nyingi ) hatimaye imesababisha System ya kawaida ya Lisp Object , ambayo inaunganisha programu za kazi na programu zinazoelekezwa na vitu na inaruhusu ugani kupitia protocol ya kitu cha Meta . Katika miaka ya 1980, kulikuwa na majaribio machache ya kubuni usanifu wa usindikaji ambao ulijumuisha msaada wa vifaa kwa vitu katika kumbukumbu lakini haya hayakufanikiwa. Mifano ni pamoja na Intel iAPX 432 na Linn Smart Rekursiv .

Mnamo 1985, Bertrand Meyer alitoa muundo wa kwanza wa lugha ya Eiffel . Inalenga juu ya ubora wa programu, Eiffel ni miongoni mwa lugha zisizo na mwelekeo, lakini inatofautiana kwa maana kwamba lugha yenyewe sio tu lugha ya programu, lakini mthibitishaji unaunga mkono maisha yote ya programu. Meyer alielezea njia ya maendeleo ya programu ya Eiffel, kwa kuzingatia namba ndogo ya mawazo muhimu kutoka kwa uhandisi wa programu na sayansi ya kompyuta, katika Ujenzi wa Programu ya Oriented . Muhimu kwa lengo la ubora wa Eiffel ni utaratibu wa kuaminika wa Meyer, Utekelezaji wa mkataba , ambao ni sehemu muhimu ya njia na lugha.

Programu inayotokana na lengo linaloundwa kama mbinu kubwa ya programu katika mapema na katikati ya miaka 1990 wakati lugha za programu za kusaidia mbinu zilipatikana sana. Hizi zilijumuisha Visual FoxPro 3.0, [22] [23] [24] C ++ , [25] na Delphi [ citation inahitajika ] . Uongozi wake uliongezeka zaidi na kuongezeka kwa umaarufu wa interfaces ya mtumiaji wa graphic , ambayo hutegemea sana mbinu za programu zinazoelekezwa. Mfano wa maktaba ya GUI yenye nguvu ya karibu na lugha ya OOP yanaweza kupatikana katika mifumo ya Kocoa kwenye Mac OS X , iliyoandikwa katika Lengo-C , kiendelezo cha ujumbe wa nguvu kwa C kulingana na Smalltalk. Vyombo vya vifaa vya OOP pia viliongeza ukubwa wa programu zinazoendeshwa na tukio (ingawa dhana hii haikuwepo kwa OOP).

Katika ETH Zürich , Niklaus Wirth na wafanyakazi wenzake pia walikuwa wakitafiti mada kama vile data ya kufuata na programu za kawaida (ingawa hii ilikuwa ya kawaida kwa miaka ya 1960 au mapema). Modula-2 (1978) ilijumuisha wote wawili, na kubuni yao iliyofanikiwa, Oberon , ilijumuisha mbinu tofauti ya kupinga mwelekeo, madarasa, na vile.

Vipengele vinavyotokana na vitu vimeongezwa kwa lugha nyingi zilizopo zilizopo, ikiwa ni pamoja na Ada , BASIC , Fortran , Pascal , na COBOL . Kuongezea vipengele hivi kwa lugha ambazo hazikuundwa kwa mara nyingi husababishwa na matatizo na utangamano na kudumisha kanuni.

Hivi karibuni, lugha kadhaa zimejitokeza ambazo ni muhimu sana, lakini pia zinapatana na mbinu za utaratibu. Lugha mbili hizo ni Python na Ruby . Labda lugha muhimu zaidi za hivi karibuni za kibiashara zinajumuishwa na Java , zilizotengenezwa na Sun Microsystems , pamoja na C # na Visual Basic.NET (VB.NET), ambazo zote zinaundwa kwa ajili ya Microsoft .NET jukwaa. Kila moja ya mifumo miwili inaonyesha, kwa njia yake mwenyewe, manufaa ya kutumia OOP kwa kuunda mbali na utekelezaji. VB.NET na C # msaada wa urithi wa lugha ya msalaba, kuruhusu madarasa yaliyotajwa katika lugha moja hadi madarasa ya madarasa yaliyoelezwa katika lugha nyingine.

Lugha za OOP

Simula (1967) inakubaliwa kwa ujumla kama lugha ya kwanza na sifa za msingi za lugha inayolengwa na kitu. Iliundwa kwa ajili ya kufanya mipangilio ya simulation , ambayo kile kilichoitwa vitu ni uwakilishi wa habari muhimu zaidi. Smalltalk (1972 hadi 1980) ni mfano mwingine wa awali, na moja ambayo nadharia nyingi za OOP zilianzishwa. Kuhusu kiwango cha mwelekeo wa vitu, tofauti zifuatazo zinaweza kufanywa:

  • Lugha inayoitwa "safi" Lugha za OO, kwa sababu kila kitu kilicho ndani yake kinafanyiwa mfululizo kama kitu, kutoka kwa vipaji kama vile wahusika na punctuation, njia zote hadi madarasa yote, prototypes, blocks, modules, nk. Iliundwa kwa kuzingatia, hata kutekeleza, mbinu za OO. Mifano: Python , Ruby , Scala , Smalltalk , Eiffel , Emerald , [26] JADE , Self .
  • Lugha iliyoundwa hasa kwa ajili ya programu za OO, lakini kwa baadhi ya mambo ya kiutaratibu. Mifano: Java , C ++ , C # , Delphi / Object Pascal , VB.NET .
  • Lugha ambazo ni kihistoria utaratibu lugha , lakini imeongezwa kwa baadhi ya vipengele OO. Mifano: PHP , Perl , Visual Basic (inayotokana na BASIC), MATLAB , COBOL 2002 , Fortran 2003 , ABAP , Ada 95 , Pascal .
  • Lugha zilizo na sifa nyingi za vitu (madarasa, mbinu, urithi), lakini kwa fomu ya awali ya asili. Mifano: Oberon (Oberon-1 au Oberon-2).
  • Lugha zilizo na msaada wa aina ya abstract ambayo inaweza kutumika kufanana na programu ya OO, lakini bila sifa zote za mwelekeo wa kitu. Hii inajumuisha lugha zenye msingi na za mfano . Mifano: JavaScript , Lua , Modula-2 , CLU .
  • Lugha za Chameleon zinazounga mkono dhana nyingi, ikiwa ni pamoja na OO. Tcl imesimama nje kati ya haya kwa TclOO, mfumo wa kitu mseto ambao husaidia programu zote mbili za msingi na OO darasa.

OOP katika lugha za nguvu

Katika miaka ya hivi karibuni, mipangilio ya vitu ambavyo haijapendekezwa na kitu imekuwa maarufu sana katika lugha za programu za nguvu . Python , PowerShell , Ruby na Groovy ni lugha zilizojengwa juu ya kanuni za OOP, wakati Perl na PHP wameongeza vipengele vinavyotokana na vitu kutoka Perl 5 na PHP 4, na ColdFusion tangu toleo la 6.

Mfumo wa Kitu cha Nyaraka cha hati za HTML , XHTML , na XML kwenye mtandao ina vifungo kwa lugha maarufu ya JavaScript / ECMAScript . JavaScript huenda ni lugha inayojulikana sana ya programu ya programu , ambayo hutumia cloning kutoka kwa prototypes badala ya kurithi kutoka kwa darasa (tofauti na programu ya makao ya darasa ). Lugha nyingine ya script ambayo inachukua njia hii ni Lua .

OOP katika mtandao itifaki

Ujumbe unaoendesha kati ya kompyuta ili kuomba huduma katika mazingira ya mteja-server inaweza kuundwa kama linearizations ya vitu ambavyo hufafanuliwa na vitu vya darasa vinavyojulikana kwa mteja na seva. Kwa mfano, kitu kilichowekwa linearized kinajumuisha uwanja wa urefu, hatua ya nambari ya kutambua darasa, na thamani ya data. Mfano ulio ngumu zaidi itakuwa amri yenye urefu na nambari ya msimbo wa amri na maadili yenye vitu vinavyolingana na uwakilishi wa vigezo vya amri. Kila amri hiyo lazima iongozwe na seva kwa kitu ambacho darasa (au superclass) linatambua amri na linaweza kutoa huduma iliyoombwa. Wateja na seva ni bora kutengenezwa kama miundo tata inayolengwa na kitu. Usanifu wa Usimamizi wa Takwimu Ugawanyiko (DDM) ulichukua mbinu hii na vitu vya darasa kutumiwa kuelezea vitu katika viwango vinne vya uongozi rasmi:

  • Mashamba ya kufafanua maadili ya data yanayotengeneza ujumbe, kama vile urefu wake, kanuni na data ya maadili.
  • Vitu na makusanyo ya vitu sawa na kile ambacho kinaweza kupatikana katika mpango wa Smalltalk kwa ujumbe na vigezo.
  • Wasimamizi sawa na vitu vya AS / 400 , kama saraka kwa mafaili na faili zinazojumuisha metadata na rekodi. Wasimamizi wanafikiria kutoa kumbukumbu na usindikaji rasilimali kwa vitu vilivyomo.
  • Mteja au seva iliyo na mameneja wote muhimu kutekeleza mazingira kamili ya usindikaji, kusaidia mambo kama vile huduma za saraka, udhibiti na usalama wa concurrency.

Toleo la awali la DDM limefafanuliwa huduma za faili zilizosambazwa. Ilipanuliwa baadaye kuwa msingi wa Usanifu wa Majina ya Kusambaza Dhamana (DRDA).

Mipangilio ya kubuni

Changamoto za kubuni inayotokana na kitu ambazo zinatajwa na mbinu kadhaa. Kawaida zaidi inajulikana kama muundo wa kubuni uliofanywa na Gamma et al. . Zaidi kwa kiasi kikubwa, neno " muundo wa kubuni " linaweza kutumiwa kutaja suluhisho lolote la kawaida, linaloweza kurudia kwa tatizo la kawaida katika programu ya kubuni. Baadhi ya matatizo haya yanayotokea mara kwa mara yana madhara na ufumbuzi hasa kwa maendeleo ya msingi.

Urithi na kitabia subtyping

Intuitive kudhani kwamba urithi hujenga uhusiano wa semantic " ni ", na kwa hivyo kufuta kwamba vitu vilivyoanzishwa kutoka kwa madawati vinaweza kutumiwa kwa salama badala ya wale waliotambulishwa kutoka kwenye superclass. Intuition hii kwa bahati mbaya uongo katika lugha zaidi OOP, hasa kwa kuwa kuruhusu wale wote mutable vitu. Aina ya polymorphism kama kutekelezwa na mchezaji wa aina katika lugha za OOP (pamoja na vitu vinavyoweza kutumiwa) hawezi kuthibitisha subtyping tabia katika mazingira yoyote. Subtyping tabia haiwezekani kwa ujumla, hivyo haiwezi kutekelezwa na mpango (compiler). Vipengele vya hifadhi au vitu lazima viwekewe kwa uangalifu, kwa kuzingatia matumizi yasiyo sahihi ambayo hayawezi kuonekana syntactically. Suala hili linajulikana kama kanuni ya substitution ya Liskov .

Gang ya mifumo minne ya kubuni

Sampuli za Kubuni: Elements ya Programu Yenye Kuwezeshwa-Yaliyotokana na Kitabu ni kitabu cha ushawishi kilichochapishwa mwaka 1995 na Erich Gamma , Richard Helm , Ralph Johnson , na John Vlissides , mara nyingi hujulikana kama "Gang of Four". Pamoja na kuchunguza uwezo na mipango ya programu inayolengwa na kitu, inaeleza matatizo 23 ya kawaida ya programu na mifumo ya kutatua. Kuanzia mwezi wa Aprili 2007, kitabu kilikuwa cha uchapishaji wake wa 36.

Kitabu kinaelezea chati zifuatazo:

  • Mfumo wa Uumbaji (5): Mfano wa mbinu ya kiwanda , mfano wa kiwanda wa kiwanda , muundo wa Singleton , muundo wa wajenzi , muundo wa mfano
  • Mfumo wa kiundo (7): Mfano wa adapta , muundo wa Bridge , muundo wa utungaji , muundo wa mapambo , muundo wa faini , mfano wa Flyweight , muundo wa wakala
  • Mwelekeo wa tabia (11): Mfano wa mfululizo wa wajibu , mfano wa amri , mfano wa tafsiri , muundo wa Iterator , mfano wa Mwandishi , mfano wa Memento , mfano wa Mwangalizi , muundo wa Hali , muundo wa mkakati , mfano wa mfano wa Kigezo, mfano wa Wageni

Object-mwelekeo na hifadhidata

Programu zote zinazoelekezwa na kitu na mifumo ya usimamizi wa database (RDBMSs) ni ya kawaida sana katika programu leo . Kwa kuwa databases za kihusiano hazihifadhi vitu moja kwa moja (ingawa baadhi ya RDBMS zina vipengele vinavyotokana na kitu ambacho kinazingatia jambo hili), kuna haja ya jumla ya kuunganisha ulimwengu wote. Tatizo la kuzalisha upatikanaji wa programu na mipangilio ya data na data za uhusiano zinajulikana kama kutokubaliana kwa mshikamano wa mshikamano . Kuna njia kadhaa za kukabiliana na tatizo hili, lakini hakuna suluhisho la jumla bila uharibifu. [27] Moja ya mbinu za kawaida ni mapambo-kuhusiana na mapenzi , kama yanapatikana katika lugha za IDE kama vile Visual FoxPro na maktaba kama vile Java Data Objects na Ruby kwenye Rails 'ActiveRecord.

Pia kuna orodha ya vitu ambazo zinaweza kutumika kuchukua nafasi ya RDBMS, lakini haya hayajawahi kuwa mafanikio ya kiufundi na ya kibiashara kama RDBMSs.

Mfano wa hali halisi na mahusiano

OOP inaweza kutumika kuhusisha vitu halisi vya dunia na michakato na wenzao wa digital. Hata hivyo, si kila mtu anayekubaliana kuwa OOP inawezesha ramani halisi ya ulimwengu (angalia sehemu ya Criticism ) au kwamba ramani halisi ya dunia ni lengo lenye kufaa; Bertrand Meyer anasema katika Ujenzi wa Programu-Oriented Object [28] kwamba mpango sio mfano wa ulimwengu bali mfano wa sehemu fulani ya ulimwengu; "Ukweli ni binamu mara mbili kuondolewa". Wakati huo huo, mapungufu makubwa ya OOP yamebainishwa. [29] Kwa mfano, shida ya mduara-ellipse ni vigumu kushughulikia kutumia dhana ya OOP ya urithi .

Hata hivyo, Niklaus Wirth (ambaye aliongeza adage sasa inayojulikana kama sheria ya Wirth : "Programu inakua kwa kasi zaidi kuliko vifaa vinavyozidi kuwa kasi") alisema juu ya OOP katika karatasi yake, "Mawazo Mema kupitia Kioo cha Kuangalia", "Maumbo haya yanaonyesha muundo wa mifumo 'katika ulimwengu wa kweli', na hivyo inafaa kwa mfano wa mifumo tata na tabia tata " [30] (tofauti ya kanuni ya KISS ).

Steve Yegge na wengine walibainisha kuwa lugha za asili hazipo njia ya OOP ya vitu muhimu zaidi (vitu / majina ) kabla ya vitendo (mbinu / vitenzi ). [31] Tatizo hili linaweza kusababisha OOP kuteseka kwa ufumbuzi zaidi kuliko uendeshaji. [32]

OOP na udhibiti wa mtiririko

OOP iliendelezwa ili kuongeza reusability na kudumisha ya kanuni ya chanzo. [33] Uwakilishi wa uwazi wa mtiririko wa kudhibiti haukuwa na kipaumbele na ulitakiwa kushughulikiwa na compiler. Kwa kuongezeka kwa vifaa vya sambamba na coding nyingi , kuendeleza mtiririko wa uwazi huwa muhimu zaidi, jambo lisiloweza kufikia na OOP. [34] [35] [36] [37]

Ujibu - vs muundo unaoendeshwa na data

Design inayoendeshwa na dhima inafafanua madarasa kulingana na mkataba, yaani, darasa linapaswa kuelezwa karibu na wajibu na taarifa ambayo inashiriki. Hii inalinganishwa na Wirfs-Brock na Wilkerson na kubuni inayotokana na data , ambapo madarasa huelezwa karibu na miundo-data ambayo lazima ifanyike. Waandishi wanashikilia kwamba kubuni inayotokana na wajibu ni bora.

Miongozo ya SOLID na GRASP

SOLID ni mnemonic inayotokana na manyoya ya Michael ambayo inasimama na kutetea mazoea ya programu tano:

  • Kanuni ya wajibu wa pekee
  • Kanuni ya wazi / imefungwa
  • Liskov badala ya kanuni
  • Kanuni ya ugawanyiko wa interface
  • Kanuni ya inversion ya kutegemea

Kufahamu (General Wajibu Assignment Programu Patterns) ni seti nyingine ya miongozo kutetea na Craig Larman .

Ushauri

Mtazamo wa OOP umeshutumiwa kwa sababu kadhaa, ikiwa ni pamoja na sio kufikia malengo yake yaliyoelezwa ya reusability na modularity, [38] [39] na kwa kuzingatia zaidi kipengele kimoja cha programu na kubuni (data / vitu) kwa gharama nyingine muhimu vipengele (hesabu / algorithms). [40] [41]

Luca Cardelli amesema kuwa msimbo wa OOP "hauwezi kuwa na ufanisi zaidi" kuliko kanuni ya kiutaratibu, ambayo OOP inaweza kuchukua muda mrefu ili kuunganisha, na kwamba lugha za OOP zina "mali duni sana kwa ugani na upanuzi wa darasa", na huwa ni ngumu sana . [38] Mwisho wa mwisho unasemwa na Joe Armstrong , mwanzilishi mkuu wa Erlang , ambaye amechukuliwa akisema: [39]

Tatizo na lugha zinazoelekezwa na kitu ambacho hupata mazingira haya yote yaliyo wazi ambayo hubeba karibu nao. Unataka ndizi lakini kile ulichokuwa ni gorilla iliyobeba ndizi na jungle nzima.

Utafiti wa Potok et al. haukuonyesha tofauti kubwa katika uzalishaji kati ya OOP na mbinu za kiutaratibu. [42]

Christopher J. Tarehe imesema kuwa kulinganisha muhimu kwa OOP kwa teknolojia nyingine, uhusiano wa pekee, ni vigumu kwa sababu ya ukosefu wa ufafanuzi uliokubaliana na wa ukamilifu wa OOP; [43] hata hivyo, Tarehe na Darwen wamependekeza msingi wa kinadharia juu ya OOP ambayo inatumia OOP kama aina ya mfumo wa aina customizable kusaidia RDBMS . [44]

Katika makala Lawrence Krubner alidai kuwa ikilinganishwa na lugha nyingine (lugha za LISP, lugha za kazi, nk) lugha za OOP hazina uwezo wa pekee, na husababisha mzigo mzito wa utata usiozidi. [45]

Alexander Stepanov inalinganisha mwelekeo wa kitu kinyume cha sheria kwa programu ya generic : [40]

Ninaona OOP kitaalam. Inatafuta kuharibu ulimwengu kwa suala la interfaces ambazo hutofautiana kwa aina moja. Ili kukabiliana na matatizo halisi unahitaji algebra nyingi - familia za interfaces ambazo huwa na aina nyingi. Ninaona OOP ya falsafa isiyo na maana. Inadai kwamba kila kitu ni kitu. Hata ikiwa ni kweli haifai sana - kusema kwamba kila kitu ni kitu kinachosema chochote.

Paul Graham amesema kuwa umaarufu wa OOP ndani ya makampuni makubwa ni kutokana na "makundi makubwa (na mara kwa mara ya kubadilisha) ya wasanidi wa mediocre". Kwa mujibu wa Graham, nidhamu iliyowekwa na OOP inazuia mpangilio mmoja kutoka "kufanya uharibifu mkubwa". [46]

Steve Yegge alibainisha kuwa, kinyume na programu za kazi : [47]

Programu inayotokana na vitu vinavyoweka Maandishi kwanza kabisa. Kwa nini unakwenda kwa urefu kama vile kuweka sehemu moja ya hotuba kwenye kitambaa? Kwa nini aina moja ya dhana inapaswa kutekeleza juu ya mwingine? Sio kama OOP imefanya ghafla kufanya vitenzi chini ya maana kwa njia tunayofikiria. Ni mtazamo wa ajabu sana.

Hickey Rich , Muumbaji wa Clojure , alielezea mifumo ya vitu kama mifano ya kupendeza zaidi ya ulimwengu halisi. Alisisitiza kutokuwa na uwezo wa OOP kupiga wakati vizuri, ambayo inazidi kuwa shida kama mifumo ya programu inakuwa sawa zaidi. [41]

Eric S. Raymond , mtangazaji wa Programu ya Unix na mtetezi wa programu ya wazi , amekuwa muhimu kwa madai ambayo yanawasilisha mipango ya kitu kama "Suluhisho Moja Kweli", na imeandikwa kuwa lugha za programu zinazoelekea vitu huwa na kuhamasisha mipango mikubwa iliyopigwa kuharibu uwazi. [48] Raymond inalinganisha hii mbaya kwa njia iliyochukuliwa na lugha ya Unix na C ya programu . [48]

Rob Pike , mpangaji aliyehusika katika uumbaji wa UTF-8 na Go , ameita programu zinazoelekezwa na vitu "idadi za Kirumi za kompyuta" [49] na amesema kuwa lugha za OOP mara nyingi hubadilisha mwelekeo kutoka kwa miundo ya data na taratibu za aina . [50] Zaidi ya hayo, anasema mfano wa profesa wa Java ambaye "suluhisho" la suluhisho la tatizo lilikuwa ni kuunda madarasa mapya sita, badala ya kutumia meza ya kupangilia tu . [51]

Semantics rasmi

Vitu ni vyombo vya wakati wa kukimbia katika mfumo unaoelekezwa na kitu. Wanaweza kuwakilisha mtu, mahali, akaunti ya benki, meza ya data, au kitu chochote ambacho mpango huo unashughulikia.

Kumekuwa na majaribio kadhaa katika kutengeneza dhana zilizotumiwa katika programu inayolengwa na kitu. Dhana zifuatazo na ujenzi hutumiwa kama tafsiri ya dhana za OOP:

  • aina ya data ya algebraic [52]
  • aina za data za abstract (ambazo zina aina ya existential ) kuruhusu ufafanuzi wa modules lakini hizi haziunga mkono utoaji wa nguvu
  • aina za kawaida
  • hali iliyoingizwa
  • urithi
  • rekodi ni msingi wa kuelewa vitu kama kazi halisi inaweza kuhifadhiwa katika maeneo (kama katika lugha za kazi za programu), lakini mahitaji halisi ya calculi kuwa ngumu zaidi kuingiza sifa muhimu za OOP. Upanuzi kadhaa wa Mfumo F <: unaohusika na vitu vinavyoweza kutumiwa vimejifunza; [53] hizi zinaruhusu polymorphism ndogo ndogo na polymorphism parametric (generic)

Jaribio la kupata ufafanuzi wa makubaliano au nadharia nyuma ya vitu hazikuthibitishwa sana (hata hivyo, angalia Abadi & Cardelli, Nadharia ya Vitu [53] kwa ufafanuzi rasmi wa dhana nyingi za OOP na hujenga), na mara nyingi hutofautiana sana. Kwa mfano, ufafanuzi fulani unazingatia shughuli za akili, na baadhi ya muundo wa programu. Moja ya ufafanuzi rahisi ni kwamba OOP ni tendo la kutumia "ramani" data au miundo ambayo yanaweza kuwa na kazi na kuelezea kwenye ramani zingine, zote zinazo na sukari ya syntactic na scoping juu. Urithi unaweza kufanywa kwa kupiga ramani kwenye ramani (wakati mwingine huitwa "prototyping").

Angalia pia

  • Kulinganisha lugha za programu (programu inayolengwa na kitu)
  • Kulinganisha dhana za programu
  • Uhandisi wa programu ya msingi
  • Umeundwa na mkataba
  • Ushirika wa kitu
  • Nambari ya dhamana
  • Lugha ya mfano wa kitu
  • Uchunguzi unaojitokeza na kubuni
  • Kushindwa kwa impedance ya uhusiano (na The Manifesto ya Tatu )
  • Ramani ya uhusiano na uhusiano

Systems

  • CADES
  • Kazi ya kawaida ya Broker Architecture (CORBA)
  • Mfano wa Kitu cha Mchanganyiko
  • Usanifu wa Usimamizi wa Data Ugawanyiko
  • Jeroo

Mfano wa lugha

  • IDEF4
  • Lugha ya maelezo ya interface
  • Lepus3
  • UML

Marejeleo

  1. ^ Kindler, E.; Krivy, I. (2011). "Object-Oriented Simulation of systems with sophisticated control". International Journal of General Systems: 313–343.
  2. ^ Lewis, John; Loftus, William (2008). Java Software Solutions Foundations of Programming Design 6th ed . Pearson Education Inc. ISBN 0-321-53205-8 . , section 1.6 "Object-Oriented Programming"
  3. ^ Deborah J. Armstrong. The Quarks of Object-Oriented Development . A survey of nearly 40 years of computing literature which identified a number of fundamental concepts found in the large majority of definitions of OOP, in descending order of popularity: Inheritance, Object, Class, Encapsulation, Method, Message Passing, Polymorphism, and Abstraction.
  4. ^ John C. Mitchell , Concepts in programming languages , Cambridge University Press, 2003, ISBN 0-521-78098-5 , p.278. Lists: Dynamic dispatch, abstraction, subtype polymorphism, and inheritance.
  5. ^ Michael Lee Scott, Programming language pragmatics , Edition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1 , p. 470. Lists encapsulation, inheritance, and dynamic dispatch.
  6. ^ Pierce, Benjamin (2002). Types and Programming Languages . MIT Press. ISBN 0-262-16209-1 . , section 18.1 "What is Object-Oriented Programming?" Lists: Dynamic dispatch, encapsulation or multi-methods (multiple dispatch), subtype polymorphism, inheritance or delegation, open recursion ("this"/"self")
  7. ^ Booch, Grady (1986). Software Engineering with Ada . Addison Wesley. p. 220. ISBN 978-0805306088 . Perhaps the greatest strength of an object-oriented approach to development is that it offers a mechanism that captures a model of the real world.
  8. ^ Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). Object Oriented Software Engineering . Addison-Wesley ACM Press. pp. 43–69. ISBN 0-201-54435-0 .
  9. ^ McCarthy, J.; Brayton, R. ; Edwards, D. ; Fox, P. ; Hodes, L. ; Luckham, D. ; Maling, K. ; Park, D. ; Russell, S. (March 1960). "LISP I Programmers Manual" (PDF) . Boston , Massachusetts : Artificial Intelligence Group, M.I.T. Computation Center and Research Laboratory : 88f. Archived from the original (PDF) on 17 July 2010. In the local M.I.T. patois, association lists [of atomic symbols] are also referred to as "property lists", and atomic symbols are sometimes called "objects".
  10. ^ McCarthy, John ; Abrahams, Paul W.; Edwards, Daniel J. ; Hart, swapnil d.; Levin, Michael I. (1962). LISP 1.5 Programmer's Manual (PDF) . MIT Press . p. 105. ISBN 0-262-13011-4 . Object — a synonym for atomic symbol
  11. ^ "Dr. Alan Kay on the Meaning of "Object-Oriented Programming " " . 2003 . Retrieved 11 February 2010 .
  12. ^ Sutherland, I. E. (30 January 1963). "Sketchpad: A Man-Machine Graphical Communication System" (PDF) . Technical Report No. 296, Lincoln Laboratory, Massachusetts Institute of Technology via Defense Technical Information Center (stinet.dtic.mil) . Retrieved 3 November 2007 .
  13. ^ a b The Development of the Simula Languages, Kristen Nygaard , Ole-Johan Dahl , p.254 Uni-kl.ac.at
  14. ^ Ross, Doug. "The first software engineering language" . LCS/AI Lab Timeline: . MIT Computer Science and Artificial Intelligence Laboratory . Retrieved 13 May 2010 .
  15. ^ Dahl, Ole Johan (2004). "The Birth of Object Orientation: the Simula Languages" (PDF) . doi : 10.1007/978-3-540-39993-3_3 . Retrieved 9 June 2016 .
  16. ^ Holmevik, Jan Rune (1994). "Compiling Simula: A historical study of technological genesis" (PDF) . IEEE Annals of the History of Computing . 16 (4): 25–37. doi : 10.1109/85.329756 . Retrieved 12 May 2010 .
  17. ^ Wilson, Leslie B.; Robert G. Clark (2001). Comparative Programming Languages (3 ed.). Addison-Wesley. p. 35. ISBN 978-0-201-71012-0 . Simula was based on Algol 60 with one very important addition – the class concept. It is possible to declare a class, generate objects of that class, name these objects and form a hierarchical structure of class declarations.
  18. ^ Wilson, Leslie B.; Robert G. Clark (2001). Comparative Programming Languages (3 ed.). Addison-Wesley. p. 35. ISBN 978-0-201-71012-0 . The impact of Simula on the design of programming languages is large as it is the original object-oriented language. The class concept has been taken over and used in many later languages, such as C++, Ada, Smalltalk, Eiffel and Java.
  19. ^ Bal, Henri E.; Dick Grune (1994). Programming Language Essentials . Addison-Wesley. p. 134. ISBN 0-201-63179-2 . Simula was the first language to use a class concept.
  20. ^ Hoare, C. A. (Nov 1965). "Record Handling". ALGOL Bulletin (21): 39–69. doi : 10.1145/1061032.1061041 .
  21. ^ Kay, Alan. "The Early History of Smalltalk" . Archived from the original on 10 July 2008 . Retrieved 13 September 2007 .
  22. ^ 1995 (June) Visual FoxPro 3.0, FoxPro evolves from a procedural language to an object-oriented language. Visual FoxPro 3.0 introduces a database container, seamless client/server capabilities, support for ActiveX technologies, and OLE Automation and null support. Summary of Fox releases
  23. ^ FoxPro History web site: Foxprohistory.org
  24. ^ 1995 Reviewers Guide to Visual FoxPro 3.0: DFpug.de
  25. ^ https://books.google.co.uk/books?id=MHmqfSBTXsAC&pg=PA16&lpg=PA16
  26. ^ "The Emerald Programming Language" . 2011-02-26.
  27. ^ Neward, Ted (26 June 2006). "The Vietnam of Computer Science" . Interoperability Happens . Retrieved 2 June 2010 .
  28. ^ Meyer, Second Edition, p. 230
  29. ^ M.Trofimov, OOOP – The Third "O" Solution: Open OOP. First Class, OMG , 1993, Vol. 3, issue 3, p.14.
  30. ^ Wirth, Nicklaus (2006). "Good Ideas, Through the Looking Glass" (PDF) . Computer . 39 (1): 28–39 . Retrieved 2016-10-02 .
  31. ^ Yegge, Steve (30 March 2006). "Execution in the Kingdom of Nouns" . steve-yegge.blogspot.com . Retrieved 3 July 2010 .
  32. ^ Boronczyk, Timothy (11 June 2009). "What's Wrong with OOP" . zaemis.blogspot.com . Retrieved 3 July 2010 .
  33. ^ Ambler, Scott (1 January 1998). "A Realistic Look at Object-Oriented Reuse" . www.drdobbs.com . Retrieved 4 July 2010 .
  34. ^ Shelly, Asaf (22 August 2008). "Flaws of Object Oriented Modeling" . Intel Software Network . Retrieved 4 July 2010 .
  35. ^ James, Justin (1 October 2007). "Multithreading is a verb not a noun" . techrepublic.com . Retrieved 4 July 2010 .
  36. ^ Shelly, Asaf (22 August 2008). "HOW TO: Multicore Programming (Multiprocessing) Visual C++ Class Design Guidelines, Member Functions" . support.microsoft.com . Retrieved 4 July 2010 .
  37. ^ Robert Harper (17 April 2011). "Some thoughts on teaching FP" . Existential Type Blog . Retrieved 5 December 2011 .
  38. ^ a b Cardelli, Luca (1996). "Bad Engineering Properties of Object-Oriented Languages" . ACM Comput. Surv . ACM. 28 (4es): 150. doi : 10.1145/242224.242415 . ISSN 0360-0300 . Retrieved 21 April 2010 .
  39. ^ a b Armstrong, Joe. In Coders at Work: Reflections on the Craft of Programming. Peter Seibel, ed. Codersatwork.com , Accessed 13 November 2009.
  40. ^ a b Stepanov, Alexander . "STLport: An Interview with A. Stepanov" . Retrieved 21 April 2010 .
  41. ^ a b Rich Hickey, JVM Languages Summit 2009 keynote, Are We There Yet? November 2009.
  42. ^ Potok, Thomas; Mladen Vouk; Andy Rindos (1999). "Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment" (PDF) . Software – Practice and Experience . 29 (10): 833–847. doi : 10.1002/(SICI)1097-024X(199908)29:10<833::AID-SPE258>3.0.CO;2-P . Retrieved 21 April 2010 .
  43. ^ C. J. Date, Introduction to Database Systems, 6th-ed., Page 650
  44. ^ C. J. Date, Hugh Darwen. Foundation for Future Database Systems: The Third Manifesto (2nd Edition)
  45. ^ Krubner, Lawrence. "Object Oriented Programming is an expensive disaster which must end" . smashcompany.com . Retrieved 14 October 2014 .
  46. ^ Graham, Paul . "Why ARC isn't especially Object-Oriented" . PaulGraham.com . Retrieved 13 November 2009 .
  47. ^ Stevey's Blog Rants
  48. ^ a b Eric S. Raymond (2003). "The Art of Unix Programming: Unix and Object-Oriented Languages" . Retrieved 2014-08-06 .
  49. ^ Pike, Rob (2004-03-02). "[9fans] Re: Threads: Sewing badges of honor onto a Kernel" . comp.os.plan9 (Mailing list) . Retrieved 2016-11-17 .
  50. ^ Pike, Rob (2012-06-25). "Less is exponentially more" . Retrieved 2016-10-01 .
  51. ^ Pike, Rob (2012-11-14). "A few years ago I saw this page" . Retrieved 2016-10-01 .
  52. ^ Poll, Erik. "Subtyping and Inheritance for Categorical Datatypes" (PDF) . Retrieved 5 June 2011 .
  53. ^ a b Abadi, Martin ; Cardelli, Luca (1996). A Theory of Objects . Springer-Verlag New York, Inc. ISBN 0-387-94775-2 . Retrieved 21 April 2010 .

Kusoma zaidi

Viungo vya nje