Кіріспе

Компьютерлік бағдарламалаудың жобалау принципі

Компьютерлік ғылымда, мәселелерді бөлу – компьютерлік бағдарламаны ерекше бөлімдерге бөлудің жобалау принципі. Әр бөлім компьютерлік бағдарламаның кодына әсер ететін жеке мәселеге, ақпарат жиынтығына қатысты. Мәселе «қосымша үшін аппараттық ерекшеліктер» сияқты жалпылама немесе «қай класс инстанцияланады» сияқты нақты болуы мүмкін. SoC-ті жақсы іске асыратын бағдарлама модульдік бағдарлама деп аталады. Модульділік, демек мәселелерді бөлу, жақсы анықталған интерфейсі бар код бөлігіне ақпаратты ендіру арқылы жүзеге асырылады. Капсулалау – ақпаратты жасырудың бір тәсілі. Ақпараттық жүйелердегі қабаттық жобалау мәселелерді бөлудің тағы бір көрінісі болып табылады (мысалы, ұсынылым қабаты, бизнес-логика қабаты, деректерге қол жеткізу қабаты, сақтау қабаты). Мәселелерді бөлу бағдарламаның жобалануы, орналастырылуы немесе қолданылуының кейбір аспектілері үшін еркіндік деңгейін арттырады. Олардың ішінде кодты жеңілдету және күтіп ұстау еркіндігінің ұлғаюы бар. Мәселелер жақсы бөлінген кезде модульдерді жаңартуға, қайта пайдалануға және тәуелсіз дамытуға көбірек мүмкіндіктер туады. Модульдердің іске асыру ерекшеліктерін интерфейс артында жасыру, басқа бөлімдердің ерекшеліктерін білмей және оларға сәйкес өзгерістер енгізбей, кодтың бір бөлімін жақсартуға немесе өзгертуге мүмкіндік береді. Модульдер интерфейстің әртүрлі нұсқаларын ұсынуы мүмкін, бұл күрделі жүйені функционалдылықты жоғалтпай, бөлік-бөлікпен жаңарту еркіндігін арттырады. Мәселелерді бөлу – абстракцияның бір түрі. Көптеген абстракциялар сияқты, мәселелерді бөлу қосымша код интерфейстерін қосуды білдіреді, әдетте орындалатын код көбейеді. Қосымша код кейбір жағдайларда есептеу шығындарын арттыруы мүмкін, бірақ басқа жағдайларда оңтайландырылған кодты қайта пайдалануға әкелуі мүмкін. Сондықтан, жақсы бөлінген мәселелердің көптеген артықшылықтарына қарамастан, оған байланысты орындалу кешігуі болуы мүмкін.

Іске асыру

Модульдік немесе объектіге бағытталған бағдарламалаудың бағдарламалау тілімен қамтамасыз етілген механизмдері – бұл әзірлеушілерге SoC-ті (қайғысыздық принципін) қамтамасыз етуге мүмкіндік беретін механизмдер. Мысалы, C#, C++, Delphi және Java сияқты объектіге бағытталған бағдарламалау тілдері мәселелерді объектілерге бөлуге болады, ал MVC немесе MVP сияқты архитектуралық дизайн үлгілері презентацияны және деректерді өңдеуді (модельді) мазмұннан бөлуге болады. Қызметке бағытталған дизайн мәселелерді қызметтерге бөлуге мүмкіндік береді. C және Паскаль сияқты процедуралық бағдарламалау тілдері мәселелерді процедураларға немесе функцияларға бөлуге болады. Аспектіге бағытталған бағдарламалау тілдері мәселелерді аспектілер мен объектілерге бөлуге болады. Қайғысыздық принципі қала құрылысы, сәулет және ақпараттық дизайн сияқты көптеген басқа салаларда да маңызды жобалау қағидасы болып табылады. Мақсат – күрделі өзара тәуелді жүйелерді тиімді түсіну, жобалау және басқару, соның арқасында функцияларды қайта пайдалануға, басқа функциялардан тәуелсіз оңтайландыруға және басқа функциялардың сәтсіздігінен қорғауға болады. Көп таралған мысалдарға кеңістікті бөлмелерге бөлу жатады, сондықтан бір бөлмедегі іс-әрекет басқа бөлмедегі адамдарға әсер етпейді, және пешті бір схемада, ал шамдарды екіншісінде орнату, соның салдарынан пештің артық жүктемесі шамдарды сөндірмейді. Бөлмелер мысалы капсуляцияны көрсетеді, онда бір бөлмедегі ақпарат, мысалы оның қаншалықты тәртіпсіз екені, басқа бөлмелерге тек интерфейс – есік арқылы ғана қолжетімді. Схемалар мысалы бір модульдегі, яғни электр энергиясын тұтынушылары бар схемадағы, іс-әрекеттің басқа модульдегі іс-әрекетке әсер етпейтінін көрсетеді, сондықтан әр модульде басқа модульде не болып жатқанына қатысы жоқ.

Интернет протоколы стегі

Интернет дизайнында мәселелерді бөлу өте маңызды. Интернет протоколдары жиынтығында мәселелерді анықталған қабаттарға бөлуге көп күш салынды. Бұл протокол жасаушыларға бір қабаттағы мәселелерге назар аударуға және басқа қабаттарды ескермеуге мүмкіндік береді. Мысалы, SMTP протоколы сенімді тасымалдау қызметі (әдетте TCP) арқылы электрондық хат сессиясын өткізудің барлық толыққанды мәліметтерін қамтиды, бірақ осы тасымалдау қызметінің сенімділікті қалай қамтамасыз ететіні туралы ешқандай мәліметке ие емес. Сол сияқты, TCP дерек пакеттерін маршруттау туралы алаңдамайды, бұл мәселе Интернет қабатында шешіледі.

HTML, CSS, JavaScript

Гипермәтіндік таңбалау тілі (HTML), каскадтық стильдер тілі (CSS) және JavaScript (JS) – веб-беттер мен веб-сайттарды жасауда қолданылатын үйлесімді тілдер. HTML негізінен веб-бет мазмұнын құрылымдау үшін пайдаланылады, CSS мазмұнның көрініс стилін анықтайды, ал JS мазмұнның пайдаланушымен өзара әрекеттесуін және оның мінез-құлқын белгілейді. Тарихи тұрғыдан алғанда, жағдай басқаша болды: CSS пайда болғанға дейін HTML мазмұнның семантикасын да, стилін де анықтау жұмысын атқарды.

Пәнге бағдарланған бағдарламалау

Пәнге бағытталған бағдарламалау жеке мәселелерді жеке бағдарламалық құрылымдар ретінде шешуге мүмкіндік береді, олардың әрқайсысы бірдей маңызға ие. Әр мәселе ортақ объектілерді ұйымдастыратын өз сынып құрылымын ұсынады және олар өзара қиылысқанда, біріккен нәтижеге күй мен әдістерді үлестіреді. Сәйкестік ережелері әртүрлі мәселелердегі сыныптар мен әдістердің өзара әрекеттесетін жерлерде қалай байланысқандарын сипаттайды, бұл бір әдістің бірнеше мәселеден біріккен мінез-құлқының туындауына мүмкіндік береді. Мәселелерді көп өлшемді бөлу, мәселелерді талдау және құрастыруды көп өлшемді "матрица" ретінде манипуляциялауға мүмкіндік береді, онда әр мәселе әртүрлі таңдау нүктелері саналатын өлшемді ұсынады, ал матрицаның жасушалары тиісті бағдарламалық өнімдермен толтырылады.

Аспектке бағдарланған бағдарламалау

Аспектке бағытталған бағдарламалау, өзара байланысты мәселелерді негізгі мәселелер ретінде қарастыруға мүмкіндік береді. Мысалы, көптеген бағдарламаларға қандай да бір деңгейде қауіпсіздік және журналдау қажет. Қауіпсіздік пен журналдау көбінесе екінші дәрежелі мәселелер болып табылады, ал басты назар бизнес-мақсаттарға жетуге қаратылады. Дегенмен, бағдарламаны жобалау кезінде оның қауіпсіздігі бастапқыда жобаға енгізілуі керек, екінші дәрежелі мәселе ретінде қарастырылмауы тиіс. Кейіннен қауіпсіздікті қосу көбінесе жеткіліксіз қауіпсіздік моделіне алып келеді, бұл болашақ шабуылдар үшін көптеген кемшіліктерді қалдырады. Бұл мәселені аспектке бағытталған бағдарламалау арқылы шешуге болады. Мысалы, белгілі бір API-ға шақырулар әрқашан журналдалатынын немесе бағдарламаның процедуралық коды қателіктерді өңдей ме, жоқ әлде оларды жоғары деңгейге жібере ме, оған қарамастан, қателік туған кезде қателер әрқашан журналдалатынын қамтамасыз ететін аспект жазылуы мүмкін.

Жасанды интеллекттегі талдау деңгейлері

Когнитивтік ғылым мен жасанды интеллектте Дэвид Маррдың талдау деңгейлері жиі қолданылады. Зерттеушінің назарында кез келген сәтте (1) интеллекттің белгілі бір аспектісін есептеу қажеттігі, (2) қолданылатын алгоритмі, немесе (3) сол алгоритмнің аппараттық құралдарда қалай іске асырылатыны болуы мүмкін. Мұндай мәселелерді бөліп қарау, бағдарламалық және аппараттық инженериядағы интерфейс/іске асыру арасындағы айырмашылыққа ұқсас.

Нормалдастырылған жүйелер

Нормальданған жүйелерде мәселелерді бөлу – басшылыққа алынатын төрт қағиданың бірі. Осы қағиданы ұстану – уақыт өте келе күтіліп тұратын бағдарламалық жасақтамаға енгізілетін комбинаторлық әсерлерді азайтуға көмектесетін құралдардың бірі. Нормальданған жүйелерде мәселелерді бөлу құралдармен белсенді қолдауға ие.

SoC жартылай сыныптар арқылы

Мәселелерді бөлу ішінара кластар арқылы іске асырылып, күшейтілуі мүмкін.