Хәзерге вакытта объектларга юнәлтелгән программалаштыру белән бәйле ниндидер бер шашыну бар, ләкин мин белгән иң акыллы программачыларның кайберләре моңа иң аз сокланучылар рәтендә.
Минем шәхси карашымча, объектларга юнәлтелгән программалаштыру — кайбер очракларда файдалы алым, ләкин ул сез язган һәр программага үтеп керергә тиешле нәрсә түгел. Сездә яңа төрләрне билгеләү мөмкинлеге булырга тиеш, ләкин сез һәр программаны яңа төрләрнең билгеләмәсе итеп кенә белдерергә мәҗбүр булмаска тиешсез.
Минемчә, кешеләрнең объектларга юнәлтелгән программалаштыруны яратуының биш сәбәбе бар, һәм аларның өче ярым — яраксыз сәбәпләр:
Әгәр лексик ябылулары (closures) яки макрослары булмаган статик типлаштырылган телегез булса, объектларга юнәлтелгән программалаштыру сокландыргыч булып күренә. Ниндидер дәрәҗәдә ул бу чикләүләрне урап узу юлын тәкъдим итә. (Гринспенның унынчы кагыйдәсен карагыз.)
Объектларга юнәлтелгән программалаштыру зур компанияләрдә популяр, чөнки ул аларның программа тәэминаты язу рәвешенә туры килә. Зур компанияләрдә программаларны, гадәттә, уртача осталыктагы программачыларның зур (һәм еш алмашынып торучы) командалары яза. Объектларга юнәлтелгән программалаштыру бу программачыларга ниндидер тәртип урнаштыра һәм аларның берсе дә артык зур зыян китерә алмасын өчен комачаулый. Моның бәясе — килеп чыккан кодның протоколлар белән тулышып шешенүе һәм кабатланулар белән тулы булуы. Зур компанияләр өчен бу артык югары бәя түгел, чөнки аларның программа тәэминаты болай да, мөгаен, шешенгән һәм кабатланулар белән тулы булачак.
Объектларга юнәлтелгән программалаштыру тыштан караганда зур эш кебек күренгән бик күп нәрсә тудыра. Перфорацияле кәгазьләр (fanfold) заманында бер биткә биш-ун юл гына код куеп, аның алдыннан егерме юл җентекләп форматланган аңлатмалар (comments) яза торган программачылар тибы бар иде. Объектларга юнәлтелгән программалаштыру андый кешеләр өчен нәкъ наркотик кебек: ул бу барлык корылмаларны турыдан-туры чыганак кодыгызга урнаштырырга мөмкинлек бирә. Lisp хакеры символны исемлеккә өстәп кенә чишә алган нәрсәне алар класслар һәм методларның тулы бер файлына әйләндерә. Шуңа күрә, үзегезне яки башка берәүне күп эш башкаруыгызга ышандырырга теләсәгез, бу — бик яхшы корал.
Әгәр тел үзе объектларга юнәлтелгән программа булса, аны кулланучылар киңәйтә ала. Бәлки, шулайдыр. Яки объектларга юнәлтелгән программалаштыруның аерым төшенчәләрен сайлап алу мөмкинлеге белән (a la carte) тәкъдим итеп, тагын да яхшырак нәтиҗәгә ирешергә буладыр. Мәсәлән, артык йөкләү (overloading) асылда класслар белән генә бәйләнмәгән. Күрербез.
Объектларга юнәлтелгән абстракцияләр симуляцияләр һәм CAD системалары кебек билгеле бер төркем программаларның тармакларына бик яхшы яраша.
Шәхсән үземә беркайчан да объектларга юнәлтелгән абстракцияләр кирәк булмады. Common Lisp гаять көчле объектлар системасына ия, һәм мин аны бер тапкыр да кулланмадым. Көчсезрәк телләрдә объектларга юнәлтелгән алымнарны таләп итә торган күп кенә нәрсәләрне башкардым (мәсәлән, ябылулар белән тулы хэш-таблицалар ясау), ләкин миңа CLOS кулланырга беркайчан да туры килмәде.
Бәлки, мин бары тик ахмакмындыр, яки кушымталарның ниндидер чикләнгән өлеше белән генә эшләгәнмендер. Программалаштыру буенча шәхси тәҗрибәгә нигезләнеп тел проектлауда куркыныч бар. Ләкин яхшы фикер дип исәпләнгән өчен генә беркайчан да кирәге чыкмаган нәрсәләрне тутыру тагын да куркынычрак кебек тоела.