Кіріспе
Бағдарламалау парадигмасы
Компьютерлік бағдарламалауда деректерге бағытталған бағдарламалау – бұл бағдарламаның нұсқаулары қадамдар тізбегін анықтаудың орнына сәйкес келуі тиіс деректерді және қажетті өңдеуді сипаттайтын бағдарламалау парадигмасы. Деректерге бағытталған тілдердің стандартты мысалдары – мәтінді өңдеу тілдері sed және AWK. Бұл типтегі дизайн кейде объектіге бағытталған бағдарламалауда бағдарламалық құралды жобалау кезінде сыныптарды анықтау үшін қолданылады.
Қолданбалар
Деректерге негізделген бағдарламалау әдетте құрылымдалған деректер ағынына қолданылады, олар сүзгілеуге, түрлендіруге, жинақтауға (мысалы, статистика есептеуге) немесе басқа бағдарламаларды шақыруға арналған. Типик ағындарға журналдық файлдар, айырғышпен бөлінген мәндер немесе электрондық пошта хабарламалары жатады, әсіресе электрондық поштаны сүзгілеу үшін. Мысалы, AWK бағдарламасы кіріс ретінде журналдық жазбалар ағынын қабылдай алады және, мысалы, барлығын консольге жіберуге, "WARNING" файлына "WARNING" сөзімен басталатын жазбаларды жазуға және кез келген жол "ERROR" сөзімен басталатын жағдайда жүйе әкімшісіне электрондық пошта жіберуге болады. Сондай-ақ, ол күн сайын қанша ескерту тіркелгенін жаза алады. Балама ретінде, әр жолды немесе жиынтықталған жолдарды өңдеу арқылы, мысалы, соманы немесе максималды мәнді есептеу арқылы айырғышпен бөлінген мәндер ағынын өңдеуге болады. Электрондық поштада procmail сияқты тіл кейбір электрондық пошталарға сәйкес келетін шарттарды және орындалатын әрекеттерді (жеткізу, кері қайтару, жою, алға жіберу және т.б.) анықтай алады. Кейбір деректерге негізделген тілдер Тьюринг толық, мысалы, AWK және тіпті sed, ал басқалары қасақана шектеулі, әсіресе сүзгілеу үшін. Соңғысының бір мысалы – pcap, ол тек сүзгілеуден тұрады, ал жалғыз әрекеті – «жазу». Одан аз шектеулі, sieve сүзгілер мен әрекеттерге ие, бірақ негізгі стандартында айнымалылар немесе циклдар жоқ, тек күйсіз сүзгілеу операторларына рұқсат береді: әрбір кіріс элементі тәуелсіз өңделеді. Айнымалылар күйді қамтамасыз етеді, бұл бірнеше кіріс элементіне байланысты операцияларды, мысалы, жинақтауды (кірістерді қосу) немесе жылдамдықты шектеуді (әрбір жіберушіден сағатына ең көп 5 электрондық поштаға рұқсат ету немесе қайталанатын журнал хабарламаларын шектеу) жүргізуге мүмкіндік береді. Деректерге негізделген тілдерде әдетте дефолттық әрекет болады: егер ешбір шарт сәйкес келмесе, жолға бағытталған тілдер жолды басып шығарады (sed сияқты) немесе хабарлама жібереді (sieve сияқты). Кейбір қолданбаларда, мысалы, сүзгілеуде, сәйкестік тек қана жасалуы мүмкін (яғни, тек бірінші сәйкес келетін оператор), ал басқа жағдайларда барлық сәйкес келетін операторлар қолданылады. Қай жағдайда болса да, ешбір үлгіге сәйкес келмеу «дефолттық мінез-құлық» болуы мүмкін немесе қате ретінде қарастырылуы мүмкін, оны соңындағы «catch all» операторы ұстауы мүмкін.
Пайдалары мен мәселелері
Пайдалары мен мәселелері іске асыру арасында әртүрлі болуы мүмкін, бірақ бұл парадигманың бірнеше үлкен әлеуетті пайдасы мен кемшіліктері бар. Функционалдыққа жұмыс істейтін айнымалылардың абстрактілі дерек типін білу жеткілікті. Функциялар мен интерфейстерді бірдей дерек өрісі бар барлық объектілерде қолдануға болады, мысалы, объектінің "позициясы". Деректерді қалауынша объектілерге немесе "бірліктерге" топтастыруға болады, бұл аз немесе ешқандай салдар бермейді. Деректерге бағытталған жобалау дерек пен функционалдықтың байланысын болдырмаса да, кейбір жағдайларда деректерге бағытталған бағдарламалау нашар объектіге бағытталған жобалауға әкелуі мүмкін, әсіресе абстрактілірек деректермен жұмыс іскенде. Себебі, таза деректерге бағытталған объект немесе бірлік оның ұсынылу тәсілімен анықталады. Объектінің құрылымын өзгертуге тырысу оған сүйенетін функцияларды дереу бұзуы мүмкін. Мысалы, жүргізу бағытын екі қиылысатын көшенің сериясы ретінде көрсетуге болады, онда жүргізуші оңға немесе солға бұрылуы керек. Егер қиылыс (АҚШ-та) пошта индексі (5 таңбалы сан) және екі көше аты (мәтіндік тізбектер) арқылы деректе көрсетілсе, көшелер бірнеше рет қиылысатын қалада қателер пайда болуы мүмкін. Бұл мысал тым қарапайым болғанымен, бағдарламалық жасақтауда деректерді қайта құру өте кең таралған мәселе болып табылады, ол қателерді жою, тиімділікті арттыру немесе жаңа мүмкіндіктерді қолдау үшін жасалады.