Кіріспе

Басқа бағдарламалық құралдарды құрылымдауға көмектесетін кітапхана түрі. Компьютерлік бағдарламалауда бағдарламалық құрал – бұл абстракция, онда жалпы функционалдылықты ұсынатын бағдарламалық құралдар, қолданушы жазған қосымша код арқылы таңдамалы түрде өзгертілуі мүмкін, осылайша қолданбаға арналған бағдарламалық құралды қамтамасыз етеді. Ол бағдарламалық құралдарды құру және енгізудің стандартты жолын ұсынады және бағдарламалық құралдарды, өнімдерді және шешімдерді әзірлеуді жеңілдету үшін үлкен бағдарламалық платформаның бөлігі ретінде белгілі бір функционалдықты ұсынатын әмбебап, қайта пайдалануға болатын бағдарламалық орта болып табылады. Бағдарламалық құралдарға жобаны немесе жүйені әзірлеуге мүмкіндік беретін қолдау бағдарламалары, компиляторлар, код кітапханалары, құралдар жиынтығы және қолданбалық бағдарламалау интерфейстері (API) кіруі мүмкін. Фреймворктерді қалыпты кітапханалардан ерекшелендіретін негізгі ерекшеліктері бар:

басқарудың инверсиясы: Фреймворкте, кітапханалардан немесе стандартты қолданушы бағдарламаларынан айырмашылығы, бағдарламаның басқару ағыны шақырушымен емес, фреймворкпен анықталады. Бұл әдетте Үлгі әдісі арқылы жүзеге асырылады. әдепкі мінез-құлық: Бұл фреймворкпен ұсынылатын абстрактілік кластағы Үлгі әдісінің инвариант әдістері арқылы қамтамасыз етілуі мүмкін. кеңейтілімділік: Пайдаланушы фреймворкті кеңейте алады – әдетте таңдамалы түрде қайта жазып немесе бағдарламашылар арнайы функционалдылықты ұсыну үшін мамандандырылған қолданушы кодын қоса алады. Бұл әдетте суперкластағы шаблон әдісін жобалайтын субкластағы ілмек әдісі арқылы жүзеге асырылады. өзгертуге жатпайтын негізгі код: Негізгі код, әдетте, өзгертілмейді, бірақ қолданушы енгізген кеңейтімдерді қабылдайды. Яғни, пайдаланушылар фреймворкті кеңейте алады, бірақ оның кодын өзгерте алмайды.

Негізгі себептері

Бағдарламалық құралдарды жобалаушылар бағдарламалық жасақтаманы әзірлеуді жеңілдетуді мақсат етеді, дизайнерлер мен бағдарламашыларға жұмыс жүйесін қамтамасыз етудің стандартты, төменгі деңгейлі егжей-тегжейлерімен айналысудың орнына, бағдарламалық қамтамасыз ету талаптарын орындауға уақыттарын жұмсауға мүмкіндік беру арқылы жалпы әзірлеу уақытын қысқартуға көмектеседі. Мысалы, веб-фреймворк қолданатын команда банк веб-сайтын әзірлеу кезінде сұранысты өңдеу және күйді басқару механикасына емес, банк саласына тән кодты жазуға назар аударуы мүмкін. Фреймворктер көбінесе бағдарламалардың көлемін ұлғайтады, бұл құбылыс «кодтың ісінуі» деп аталады. Тәжірибелік қажеттіліктерге және клиенттердің сұранысына байланысты, бәсекелес және толықтыратын фреймворктер кейде бір өнімнің құрамына кіреді. Сонымен қатар, олардың API-лерінің күрделілігіне байланысты, жалпы әзірлеу уақытын қысқарту жоспары орындалмауы мүмкін, себебі фреймворкті пайдалануды үйренуге қосымша уақыт жұмсау қажет; бұл сын, әзірлеушілер алғаш рет арнайы немесе жаңа фреймворкпен кездескенде айқын болады. Егер мұндай фреймворк келесі тапсырмаларда қолданылмаса, оны үйренуге жұмсалған уақыт жобаға таныс, мақсатқа бағытталған кодтан гөрі қымбатқа түсуі мүмкін; көптеген бағдарламашылар жиі қолданылатын стандартты кодтың көшірмелерін сақтайды. Дегенмен, фреймворк үйренілгеннен кейін, болашақ жобаларды жылдамдау және оңай аяқтау мүмкін болады; фреймворк тұжырымы – бәріне бірдей келетін шешімдер жиынтығы, ал оған үйренгеннен кейін код өндірісі логикалық түрде артуы керек. Сонымен қатар, шығарылатын өніммен бірге келетін кодтың көлемі, оның тиімділігі мен ықшамдығы туралы ешқандай талаптар қойылмайды. Кез келген кітапханалық шешімді пайдалану қажетсіз және қолданылмаған қосымша активтерді қосады, егер бағдарламалық қамтамасыз ету компилятор объектісін байланыстырып, тығыз (кішкентай, толық бақыланатын және анықталған) орындалатын модульді құрмаса. Бұл мәселе жалғасуда, бірақ он жылдан астам тәжірибе көрсеткендей, ең тиімді фреймворктер – үшінші тараптардың жалпы мақсаттағы «бәріне бірдей келеді» фреймворктерін пайдаланудың орнына, кәсіпорынның ортақ кодын қайта құрудан пайда болғандары болып табылады. Мысалы, кеңсе пакеттері сияқты қолданбалар жинағындағы пайдаланушы интерфейсі ортақ көрініске, сезімге және деректермен бөлісу мүмкіндіктеріне ие болады, өйткені бұрынғыда бөлек болған қолданбалар бірігіп, тығыз және кішкентай жинаққа айналады; жаңа/дамыған жинақ интегралды пайдалы кітапханалар мен пайдаланушы интерфейстерін бөлісетін өнім болуы мүмкін. Бұл дау фреймворктер туралы маңызды мәселені көтереді. Көркемдік құрылымды құру, тек мәселені шешуге арналған құрылымды құрудан гөрі, көбінесе шеберлік болып табылады, ғылым емес. «Бағдарламалық көркемдік» – бұл анықтық, ықшамдық және аз шығынды білдіреді (қосымша немесе қажетсіз функционалдық, оның көп бөлігі пайдаланушымен анықталады). Кодты жасайтын фреймворктер үшін «көркемдік» – таза және түсінікті кодты жасауды білдіреді. Көптеген бағдарламалық құралдардың уақыт сынағынан өткенінің себебі – сән мәселесі: ең жақсы фреймворктер олар негізделген технология дамыған сайын әсемдікпен дамиды. Тіпті осындай жағдайда да, дамығаннан кейін, көптеген пакеттер соңғы бағдарламалық қамтамасыз етуді ісіндіріп, бұрынғы мүмкіндіктерін сақтайды, өйткені жаңа әдістермен қатар ескі әдістер де сақталған.

Сәулет

Прийдің айтуынша, бағдарламалық құралдар тоңазытылған және ыстық нүктелерден тұрады. Тоңазытылған нүктелер бағдарламалық жүйенің жалпы архитектурасын, яғни оның негізгі компоненттерін және олардың арасындағы байланыстарды анықтайды. Бұл нүктелер қолданба шеңберінің кез келген нұсқасында өзгермейді (тоңазытылады). Ыстық нүктелер – бұл бағдарламашылар өздерінің жобаларына қатысты ерекше функционалдықты қосу үшін өз кодын қосатын бөлімдер. Объектіге бағытталған ортада шеңбер абстрактілі және нақты кластардан тұрады. Мұндай шеңберді құру – қолданыстағы кластарды біріктіру және олардан туындату арқылы жүзеге асырылады. Қажетті функционалдықты Үлгі әдіс (Template Method) арқылы іске асыруға болады, онда тоңазытылған нүктелер инвариантты әдістер, ал ыстық нүктелер – вариантты немесе ілгек әдістер деп аталады. Жоғары кластағы инвариантты әдістер стандартты мінез-құлықты қамтамасыз етеді, ал әрбір төменгі кластағы ілгек әдістер – жеке мінез-құлықты. Бағдарламалық шеңберді пайдаланып нақты бағдарламалық жүйе жасағанда, әзірлеушілер жүйенің нақты қажеттіліктері мен талаптарына сәйкес ыстық нүктелерді пайдаланады. Бағдарламалық шеңберлер Голливуд принципіне сүйенеді: "Бізге қоңырау шалмаңыз, біз сізге қоңырау шаламыз". Бұл пайдаланушы анықтаған кластар (мысалы, жаңа төменгі кластар) алдын ала анықталған шеңбер кластарынан хабарламалар алады дегенді білдіреді. Әзірлеушілер әдетте оны жоғары кластың абстрактілі әдістерін іске асыру арқылы шешеді.