Бағдарламалауда маңызды принцип – қызығушылықтарды бөлу. Бұл кодты бөлек модульдерге бөлу арқылы бағдарламаны жақсартады, түсініктілік пен өзгерістерді жеңілдетеді.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Компьютерлік бағдарламалаудың жобалау принципі
Design principle for computer programming
Компьютерлік ғылымда, мәселелерді бөлу – компьютерлік бағдарламаны ерекше бөлімдерге бөлудің жобалау принципі. Әр бөлім компьютерлік бағдарламаның кодына әсер ететін жеке мәселеге, ақпарат жиынтығына қатысты. Мәселе «қосымша үшін аппараттық ерекшеліктер» сияқты жалпылама немесе «қай класс инстанцияланады» сияқты нақты болуы мүмкін. SoC-ті жақсы іске асыратын бағдарлама модульдік бағдарлама деп аталады. Модульділік, демек мәселелерді бөлу, жақсы анықталған интерфейсі бар код бөлігіне ақпаратты ендіру арқылы жүзеге асырылады. Капсулалау – ақпаратты жасырудың бір тәсілі. Ақпараттық жүйелердегі қабаттық жобалау мәселелерді бөлудің тағы бір көрінісі болып табылады (мысалы, ұсынылым қабаты, бизнес-логика қабаты, деректерге қол жеткізу қабаты, сақтау қабаты). Мәселелерді бөлу бағдарламаның жобалануы, орналастырылуы немесе қолданылуының кейбір аспектілері үшін еркіндік деңгейін арттырады. Олардың ішінде кодты жеңілдету және күтіп ұстау еркіндігінің ұлғаюы бар. Мәселелер жақсы бөлінген кезде модульдерді жаңартуға, қайта пайдалануға және тәуелсіз дамытуға көбірек мүмкіндіктер туады. Модульдердің іске асыру ерекшеліктерін интерфейс артында жасыру, басқа бөлімдердің ерекшеліктерін білмей және оларға сәйкес өзгерістер енгізбей, кодтың бір бөлімін жақсартуға немесе өзгертуге мүмкіндік береді. Модульдер интерфейстің әртүрлі нұсқаларын ұсынуы мүмкін, бұл күрделі жүйені функционалдылықты жоғалтпай, бөлік-бөлікпен жаңарту еркіндігін арттырады. Мәселелерді бөлу – абстракцияның бір түрі. Көптеген абстракциялар сияқты, мәселелерді бөлу қосымша код интерфейстерін қосуды білдіреді, әдетте орындалатын код көбейеді. Қосымша код кейбір жағдайларда есептеу шығындарын арттыруы мүмкін, бірақ басқа жағдайларда оңтайландырылған кодты қайта пайдалануға әкелуі мүмкін. Сондықтан, жақсы бөлінген мәселелердің көптеген артықшылықтарына қарамастан, оған байланысты орындалу кешігуі болуы мүмкін.
In computer science, separation of concerns is a design principle for separating a computer program into distinct sections. Each section addresses a separate concern, a set of information that affects the code of a computer program. A concern can be as general as "the details of the hardware for an application", or as specific as "the name of which class to instantiate". A program that embodies SoC well is called a modular program. Modularity, and hence separation of concerns, is achieved by encapsulating information inside a section of code that has a well defined interface. Encapsulation is a means of information hiding. Layered designs in information systems are another embodiment of separation of concerns (e. g., presentation layer, business logic layer, data access layer, persistence layer). Separation of concerns results in more degrees of freedom for some aspect of the program's design, deployment, or usage. Common among these is increased freedom for simplification and maintenance of code. When concerns are well separated, there are more opportunities for module upgrade, reuse, and independent development. Hiding the implementation details of modules behind an interface enables improving or modifying a single concern's section of code without having to know the details of other sections and without having to make corresponding changes to those other sections. Modules can also expose different versions of an interface, which increases the freedom to upgrade a complex system in piecemeal fashion without interim loss of functionality. Separation of concerns is a form of abstraction. As with most abstractions, separating concerns means adding additional code interfaces, generally creating more code to be executed. The extra code can result in higher computation costs in some cases, but in other cases also can lead to reuse of more optimized code. So despite the many benefits of well separated concerns, there may be an associated execution penalty.
Іске асыру
Модульдік немесе объектіге бағытталған бағдарламалаудың бағдарламалау тілімен қамтамасыз етілген механизмдері – бұл әзірлеушілерге SoC-ті (қайғысыздық принципін) қамтамасыз етуге мүмкіндік беретін механизмдер. Мысалы, C#, C++, Delphi және Java сияқты объектіге бағытталған бағдарламалау тілдері мәселелерді объектілерге бөлуге болады, ал MVC немесе MVP сияқты архитектуралық дизайн үлгілері презентацияны және деректерді өңдеуді (модельді) мазмұннан бөлуге болады. Қызметке бағытталған дизайн мәселелерді қызметтерге бөлуге мүмкіндік береді. C және Паскаль сияқты процедуралық бағдарламалау тілдері мәселелерді процедураларға немесе функцияларға бөлуге болады. Аспектіге бағытталған бағдарламалау тілдері мәселелерді аспектілер мен объектілерге бөлуге болады. Қайғысыздық принципі қала құрылысы, сәулет және ақпараттық дизайн сияқты көптеген басқа салаларда да маңызды жобалау қағидасы болып табылады. Мақсат – күрделі өзара тәуелді жүйелерді тиімді түсіну, жобалау және басқару, соның арқасында функцияларды қайта пайдалануға, басқа функциялардан тәуелсіз оңтайландыруға және басқа функциялардың сәтсіздігінен қорғауға болады. Көп таралған мысалдарға кеңістікті бөлмелерге бөлу жатады, сондықтан бір бөлмедегі іс-әрекет басқа бөлмедегі адамдарға әсер етпейді, және пешті бір схемада, ал шамдарды екіншісінде орнату, соның салдарынан пештің артық жүктемесі шамдарды сөндірмейді. Бөлмелер мысалы капсуляцияны көрсетеді, онда бір бөлмедегі ақпарат, мысалы оның қаншалықты тәртіпсіз екені, басқа бөлмелерге тек интерфейс – есік арқылы ғана қолжетімді. Схемалар мысалы бір модульдегі, яғни электр энергиясын тұтынушылары бар схемадағы, іс-әрекеттің басқа модульдегі іс-әрекетке әсер етпейтінін көрсетеді, сондықтан әр модульде басқа модульде не болып жатқанына қатысы жоқ.
The mechanisms for modular or object oriented programming that are provided by a programming language are mechanisms that allow developers to provide SoC. For example, object oriented programming languages such as C#, C++, Delphi, and Java can separate concerns into objects, and architectural design patterns like MVC or MVP can separate presentation and the data processing (model) from content. Service oriented design can separate concerns into services. Procedural programming languages such as C and Pascal can separate concerns into procedures or functions. Aspect oriented programming languages can separate concerns into aspects and objects. Separation of concerns is an important design principle in many other areas as well, such as urban planning, architecture and information design. The goal is to more effectively understand, design, and manage complex interdependent systems, so that functions can be reused, optimized independently of other functions, and insulated from the potential failure of other functions. Common examples include separating a space into rooms, so that activity in one room does not affect people in other rooms, and keeping the stove on one circuit and the lights on another, so that overload by the stove does not turn the lights off. The example with rooms shows encapsulation, where information inside one room, such as how messy it is, is not available to the other rooms, except through the interface, which is the door. The example with circuits demonstrates that activity inside one module, which is a circuit with consumers of electricity attached, does not affect activity in a different module, so each module is not concerned with what happens in the other.
Интернет протоколы стегі
Интернет дизайнында мәселелерді бөлу өте маңызды. Интернет протоколдары жиынтығында мәселелерді анықталған қабаттарға бөлуге көп күш салынды. Бұл протокол жасаушыларға бір қабаттағы мәселелерге назар аударуға және басқа қабаттарды ескермеуге мүмкіндік береді. Мысалы, SMTP протоколы сенімді тасымалдау қызметі (әдетте TCP) арқылы электрондық хат сессиясын өткізудің барлық толыққанды мәліметтерін қамтиды, бірақ осы тасымалдау қызметінің сенімділікті қалай қамтамасыз ететіні туралы ешқандай мәліметке ие емес. Сол сияқты, TCP дерек пакеттерін маршруттау туралы алаңдамайды, бұл мәселе Интернет қабатында шешіледі.
Separation of concerns is crucial to the design of the Internet. In the Internet Protocol Suite, great efforts have been made to separate concerns into well defined layers. This allows protocol designers to focus on the concerns in one layer, and ignore the other layers. The Application Layer protocol SMTP, for example, is concerned about all the details of conducting an email session over a reliable transport service (usually TCP), but not in the least concerned about how the transport service makes that service reliable. Similarly, TCP is not concerned about the routing of data packets, which is handled at the Internet Layer.
HTML, CSS, JavaScript
Гипермәтіндік таңбалау тілі (HTML), каскадтық стильдер тілі (CSS) және JavaScript (JS) – веб-беттер мен веб-сайттарды жасауда қолданылатын үйлесімді тілдер. HTML негізінен веб-бет мазмұнын құрылымдау үшін пайдаланылады, CSS мазмұнның көрініс стилін анықтайды, ал JS мазмұнның пайдаланушымен өзара әрекеттесуін және оның мінез-құлқын белгілейді. Тарихи тұрғыдан алғанда, жағдай басқаша болды: CSS пайда болғанға дейін HTML мазмұнның семантикасын да, стилін де анықтау жұмысын атқарды.
HyperText Markup Language (HTML), Cascading Style Sheets (CSS), and JavaScript (JS) are complementary languages used in the development of web pages and websites. HTML is mainly used for organization of webpage content, CSS is used for definition of content presentation style, and JS defines how the content interacts and behaves with the user. Historically, this was not the case: prior to the introduction of CSS, HTML performed both duties of defining semantics and style.
Пәнге бағдарланған бағдарламалау
Пәнге бағытталған бағдарламалау жеке мәселелерді жеке бағдарламалық құрылымдар ретінде шешуге мүмкіндік береді, олардың әрқайсысы бірдей маңызға ие. Әр мәселе ортақ объектілерді ұйымдастыратын өз сынып құрылымын ұсынады және олар өзара қиылысқанда, біріккен нәтижеге күй мен әдістерді үлестіреді. Сәйкестік ережелері әртүрлі мәселелердегі сыныптар мен әдістердің өзара әрекеттесетін жерлерде қалай байланысқандарын сипаттайды, бұл бір әдістің бірнеше мәселеден біріккен мінез-құлқының туындауына мүмкіндік береді. Мәселелерді көп өлшемді бөлу, мәселелерді талдау және құрастыруды көп өлшемді "матрица" ретінде манипуляциялауға мүмкіндік береді, онда әр мәселе әртүрлі таңдау нүктелері саналатын өлшемді ұсынады, ал матрицаның жасушалары тиісті бағдарламалық өнімдермен толтырылады.
Subject oriented programming allows separate concerns to be addressed as separate software constructs, each on an equal footing with the others. Each concern provides its own class structure into which the objects in common are organized, and contributes state and methods to the composite result where they cut across one another. Correspondence rules describe how the classes and methods in the various concerns are related to each other at points where they interact, allowing composite behavior for a method to be derived from several concerns. Multi dimensional separation of concerns allows the analysis and composition of concerns to be manipulated as a multi dimensional "matrix" in which each concern provides a dimension in which different points of choice are enumerated, with the cells of the matrix occupied by the appropriate software artifacts.
Аспектке бағдарланған бағдарламалау
Аспектке бағытталған бағдарламалау, өзара байланысты мәселелерді негізгі мәселелер ретінде қарастыруға мүмкіндік береді. Мысалы, көптеген бағдарламаларға қандай да бір деңгейде қауіпсіздік және журналдау қажет. Қауіпсіздік пен журналдау көбінесе екінші дәрежелі мәселелер болып табылады, ал басты назар бизнес-мақсаттарға жетуге қаратылады. Дегенмен, бағдарламаны жобалау кезінде оның қауіпсіздігі бастапқыда жобаға енгізілуі керек, екінші дәрежелі мәселе ретінде қарастырылмауы тиіс. Кейіннен қауіпсіздікті қосу көбінесе жеткіліксіз қауіпсіздік моделіне алып келеді, бұл болашақ шабуылдар үшін көптеген кемшіліктерді қалдырады. Бұл мәселені аспектке бағытталған бағдарламалау арқылы шешуге болады. Мысалы, белгілі бір API-ға шақырулар әрқашан журналдалатынын немесе бағдарламаның процедуралық коды қателіктерді өңдей ме, жоқ әлде оларды жоғары деңгейге жібере ме, оған қарамастан, қателік туған кезде қателер әрқашан журналдалатынын қамтамасыз ететін аспект жазылуы мүмкін.
Aspect oriented programming allows cross cutting concerns to be addressed as primary concerns. For example, most programs require some form of security and logging. Security and logging are often secondary concerns, whereas the primary concern is often on accomplishing business goals. However, when designing a program, its security must be built into the design from the beginning instead of being treated as a secondary concern. Applying security afterwards often results in an insufficient security model that leaves too many gaps for future attacks. This may be solved with aspect oriented programming. For example, an aspect may be written to enforce that calls to a certain API are always logged, or that errors are always logged when an exception is thrown, regardless of whether the program's procedural code handles the exception or propagates it.
Жасанды интеллекттегі талдау деңгейлері
Когнитивтік ғылым мен жасанды интеллектте Дэвид Маррдың талдау деңгейлері жиі қолданылады. Зерттеушінің назарында кез келген сәтте (1) интеллекттің белгілі бір аспектісін есептеу қажеттігі, (2) қолданылатын алгоритмі, немесе (3) сол алгоритмнің аппараттық құралдарда қалай іске асырылатыны болуы мүмкін. Мұндай мәселелерді бөліп қарау, бағдарламалық және аппараттық инженериядағы интерфейс/іске асыру арасындағы айырмашылыққа ұқсас.
In cognitive science and artificial intelligence, it is common to refer to David Marr's levels of analysis. At any given time, a researcher may be focusing on (1) what some aspect of intelligence needs to compute, (2) what algorithm it employs, or (3) how that algorithm is implemented in hardware. This separation of concerns is similar to the interface/implementation distinction in software and hardware engineering.
Нормалдастырылған жүйелер
Нормальданған жүйелерде мәселелерді бөлу – басшылыққа алынатын төрт қағиданың бірі. Осы қағиданы ұстану – уақыт өте келе күтіліп тұратын бағдарламалық жасақтамаға енгізілетін комбинаторлық әсерлерді азайтуға көмектесетін құралдардың бірі. Нормальданған жүйелерде мәселелерді бөлу құралдармен белсенді қолдауға ие.
In normalized systems separation of concerns is one of the four guiding principles. Adhering to this principle is one of the tools that helps reduce the combinatorial effects that, over time, get introduced in software that is being maintained. In normalized systems separation of concerns is actively supported by the tools.
SoC жартылай сыныптар арқылы
Мәселелерді бөлу ішінара кластар арқылы іске асырылып, күшейтілуі мүмкін.
Separation of concerns can be implemented and enforced via partial classes.