Програмирање вођено подацима

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу

У програмирању, програмирање вођено подацима је парадигма програмирања у којој се програм изјаве описује као податак који је упарен и потребна је обрада пре дефинисања низа корака које треба предузети.[1] Стандардни примери покретних података језика су језички текст прераде сед и АВК,[1] где су подаци низ линија у улазном потоку - они су тиме такође познати као ресорни-оријентисани језик - и образац подударања се, пре свега, врши преко регуларних израза или бројева линија.

Повезане парадигме[уреди]

Програмирање вођено подацима је слично програмирању вођено догађајима, у којој су оба структурирана као узор подударања и резултат прераде, и обично спроводе главне петље, и обично се примењују на различитим доменима. Услов / акција модела је такође сличан аспекту оријентисаног програмирања, где када се достигне придружена тачка (услов), поинтцут (акција) се погуби. Слична парадигма се користи у неким паус оквирима као што су ДТраце, где се наводе сонде (мерни поена) и пратеће радње које се врше када је услов задовољен.

Прилагођавање апстрактном типу података методе пројектовања за објектно оријентисане програме дају резултате у дизајну покретних података.[2] Овај тип дизајна се понекад користи у објектно оријентисаном програмирању за дефинисање класа у концепцији делова софтвера.

Апликације[уреди]

Програмирање покретних података се обично примењује на токове структурираних података, за филтрирање, претварајући, сакупљајући (као што су рачунарске статистику), или позивајући друге програме. Типични потоци укључују датотеке евиденције, граничник раздвојених вредности или е-маил поруке, а посебно за филтрирање е-поште. На пример, АВК програм може узети као улаз ток лог изјава, и на пример послати све у конзолу, пише за оне које почињу са УПОЗОРЕЊЕ на "УПОЗОРЕЊЕ" фајл, и шаље мејл администратору у случају да свака линија почиње са "ГРЕШКА". То такође може снимити колико упозорења је пријављено дневно. Алтернативно, може да обради токове граничник раздвојених вредности, обради сваку линију или укупно линијеа, као што су суме или мак. У е-маилу, језик као процмаил може одредити услове да одговара на неке маилове, и које радње да предузме (испоручити, боунце, одбаците напред, итд).

Неки покретни подаци језика су Тјурингова потпуност, као што су АВК, па чак и сед, док су други намерно веома ограничени, посебно за филтрирање. Екстреман пример овог другог је пцап, који се састоји само од филтрирања, са јединим акцијом "хватање". Мање изузетно, сито има филтере и радње, али у бази стандарда нема променљиве или петље, само дозвољавајући стања за филтрирање изјаве: сваки улазни елемент се обрађује независно. Променљиве дозвољавају стању, које дозвољавају операције које зависе од више од једног улазног елемента, као што су агрегације (Сумирајући улаза) или гушење (дозвољавају највише 5 маилова по сату од сваког пошиљаоца или ограничавање понављају поруке дневника).

Језици покретних података често имају подразумевану радњу: ако нема услов мечева, линијско-оријентисани језици могу одштампати линије (као у СЕД), или доставити поруку (као у сито). У неким апликацијама, као што су филтрирање, одговарање се може обавити искључиво (тако само прва одговарајућа изјава), док у другим случајевима примењују све подударне изјаве. У сваком случају, неуспех да одговари било образац може бити "уобичајено понашање" или се може посматрати као грешка, да буде ухваћена од стране цатцх-алл изјаве на крају.

Предности и питања[уреди]

Док предности и питања могу да варирају између имплементације, постоји неколико великих потенцијалних предности и проблема са ове парадигме. Функционалност једноставно захтева да се зна апстрактна врста података варијабли које се раде. Функције и интерфејси могу се користити на свим објектима са истим пољима података, на пример објекат "позиција". Подаци се могу груписати у објекте или "ентитете" према жељи уз мало или нимало последица.

Иако дизајн покретних података не спречава спреге података и функционалност, у неким случајевима, програмирање покретних података се тврдо доводи до лошег објектно оријентисаног дизајна, посебно када се ради о више апстрактниh подаtаka. То је зато што су чисти покретни податаци објекти или субјекти дефинисани на начин на који су представљени. Сваки покушај да се промени структура објекта би одмах прекинула функције које се ослањају на њега.

Као пример, могла би представљати вожња као низ раскрсница (две улице се секу), где возач мора окренути лево или десно. Ако је раскрсница (у САД) заступљена у подацима од стране поштанског броја (5 двоцифрени број) и два имена улица (Стрингс текста), бубе се могу појавити када прођу кроз град у којем се улице укрштају више пута. Овај пример може бити поједностављен, реструктурирање података је прилично чест проблем у софтверском инжењерству, било да се елиминишу грешке, повећа ефикасност или подрже нове функције. У овим случајевима дизајн покретних одговорности може да буде промовисан као бољи приступ, где се функционалност и подаци спајају, тако да функцијом не морају да се баве саме репрезентације података.[2]

Покретни подаци програмских језика[уреди]

  • АВК
  • Оз
  • Перл - програмирање покретних података као у АВК и сед је једна парадигма коју подржава Перл
  • сед
Филтрирање маил језика

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

  1. 1,0 1,1 Stutz, Michael (19. 09. 2006). „Get started with GAWK: AWK language fundamentals”. developerWorks. IBM. Приступљено 23. 10. 2010. »[AWK is] often called a data-driven language -- the program statements describe the input data to match and process rather than a sequence of program steps« 
  2. 2,0 2,1 Wirfs-Brock, R.; Wilkerson, B. (1989). „Object-oriented design: a responsibility-driven approach”. Conference Proceedings on Object-Oriented Programming Systems, Languages and Applications. New York: ACM: 71—75. doi:10.1145/74877.74885.