Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Компьютерлік бағдарламалауда жоғары деңгейдегі нысан түрлерін құру әдісі
Method in computer programming of forming higher level object types
Компьютерлік ғылымда нысан құрастыру және нысан жинақтау – нысандарды немесе дерек түрлерін күрделірек нысандарға біріктірудің өте байланысты тәсілдері. Әдетте, құрастыру мен жинақтау арасындағы айырмашылыққа көңіл бөлмейді. Құрастырудың кең таралған түрлері – нысанға бағытталған бағдарламалауда қолданылатын нысандар, тегтелген біріктірулер, жиынтар, тізбектер және әртүрлі график құрылымдары. Нысан құрастыру дерек құрылымдарымен байланысты, бірақ олардан өзгеше. Нысан құрамы – ақпаратты бейнелеу үшін қолданылатын іске асыру немесе физикалық дерек құрылымы емес, ақпараттың логикалық немесе түсіндірмелік құрылымы. Мысалы, тізбек жиыннан өзгеше, себебі (басқа факторлармен қатар) құрастырылған элементтердің реті біріншісі үшін маңызды, ал екіншісі үшін емес. Массивтер, тізбекті тізімдер, хэш-кестелер және тағы басқа дерек құрылымдары олардың кез келгенін іске асыру үшін қолданылуы мүмкін. Көбінесе шатастыратын, кейбір бірдей терминдер дерек құрылымдары мен құрастырулар үшін қолданылады. Мысалы, "екілік ағаш" екі нәрсені де білдіре алады: дерек құрылымы ретінде ол элементтердің сызықтық тізбегіне қол жеткізу құралы болып табылады, ал ағаштағы элементтердің нақты орны маңызды емес (ағаш ішкі жағынан өз мағынасын өзгертпей, қалай қаласа солай реттелген болуы мүмкін). Дегенмен, нысан құрамында орны маңызды, оларды өзгерту мағынаны өзгертеді (мысалы, кладограммаларда).
In computer science, object composition and object aggregation are closely related ways to combine objects or data types into more complex ones. In conversation the distinction between composition and aggregation is often ignored. Common kinds of compositions are objects used in object oriented programming, tagged unions, sets, sequences, and various graph structures. Object compositions relate to, but are not the same as, data structures. Object composition refers to the logical or conceptual structure of the information, not the implementation or physical data structure used to represent it. For example, a sequence differs from a set because (among other things) the order of the composed items matters for the former but not the latter. Data structures such as arrays, linked lists, hash tables, and many others can be used to implement either of them. Perhaps confusingly, some of the same terms are used for both data structures and composites. For example, "binary tree" can refer to either: as a data structure it is a means of accessing a linear sequence of items, and the actual positions of items in the tree are irrelevant (the tree can be internally rearranged however one likes, without changing its meaning). However, as an object composition, the positions are relevant, and changing them would change the meaning (as for example in cladograms).
Бағдарламалау техникасы
Нысанға бағытталған бағдарламалау деректер мен мінез-құлқын капсулалау үшін нысандарға негізделген. Ол функционалдықты күрделірек құрылымдарға біріктіру және құрастыру үшін екі негізгі техниканы қолданады: субтипизация және нысан композициясы. Нысан композициясы – бұл нысандарды күрделі нысандардың ішінде біріктіру, сонымен бірге әр нысанның жақсы анықталған интерфейсі арқылы инкапсуляциясын қамтамасыз ету, олардың ішкі құрылымын жасыру. Осы тұрғыдан алғанда, нысан композициясы дерек құрылымдарынан өзгеше, себебі дерек құрылымдары инкапсуляцияны міндетті түрде сақтамайды. Нысан композициясы бірнеше байланысты нысандар тобын, мысалы, жиынтық немесе нысандар тізбегін де білдіре алады. Делегация композицияны күшейтуге мүмкіндік береді, күрделі нысанға жасалған сұрауларды немесе шақыруларды оның ішкі компоненттерінің біріне бағыттап. Сыныпқа негізделген және типтелген бағдарламалау тілдерінде типтер құрама және құрама емес типтерге бөлінеді, ал композиция типтер арасындағы қатынас ретінде қарастырылады: құрама типтегі нысан (мысалы, автомобиль) басқа типтегі нысандарға (мысалы, дөңгелек) "ие". Құрама нысан бір типтегі бірнеше қосалқы нысандарды қамтыса, оларға нақты рөлдер тағайындалуы мүмкін, көбінесе атаулар немесе нөмірлер арқылы ажыратылады. Мысалы, нүкте нысаны әртүрлі ось бойындағы қашықтықты білдіретін 3 саннан тұруы мүмкін, мысалы, 'x', 'y' және 'z'. Бөлік-бүтін қатынастарын зерттеу – мереология. Композицияны субтипизациядан ажырату қажет, ол жалпы дерек типіне толықтырулар қосып, одан арнайырақ дерек типін жасау процесі. Мысалы, автомобильдер көлік түрінің бір түрі болуы мүмкін: автомобиль – көлік. Субтипизация әртүрлі нысандар арасындағы қатынасты сипаттамайды, керісінше, бір типтегі нысандар басқа типтегі нысандардың да қатарына жататынын көрсетеді. Мұндай қатынастарды зерттеу – онтология. JavaScript сияқты прототипке негізделген бағдарламалау тілдерінде нысандар прототип нысанынан мінез-құлқын нысан жасалған сәтте динамикалық түрде мұралай алады. Композицияны прототиптеуден ажырату керек: жаңадан жасалған нысан прототипінің композициясын мұралайды, бірақ ол өзі де дербес композицияланған болуы мүмкін. Күрделі нысандар сақтауда құрама нысандарды, сілтемелерді немесе басқа да әртүрлі тәсілдермен орналастыру арқылы бейнеленуі мүмкін. Күрделі нысанның элементтері атрибуттар, өрістер, мүшелер, қасиеттер немесе басқа да атаулармен белгіленуі мүмкін, ал нәтижедегі композиция құрама тип, сақтау жазбасы, құрылым, топтама немесе пайдаланушы анықтаған тип (UDT) ретінде танылуы мүмкін. Толық мәліметтер үшін төмендегі жинақтау бөлімін қараңыз.
Object oriented programming is based on objects to encapsulate data and behavior. It uses two main techniques for assembling and composing functionality into more complex ones, sub typing and object composition. Object composition is about combining objects within compound objects, and at the same time, ensuring the encapsulation of each object by using their well defined interface without visibility of their internals. In this regard, object composition differs from data structures, which do not enforce encapsulation. Object composition may also be about a group of multiple related objects, such as a set or a sequence of objects. Delegation may enrich composition by forwarding requests or calls made to the enclosing composite object to one of its internal components. In class based and typed programming languages, types can be divided into composite and non composite types, and composition can be regarded as a relationship between types: an object of a composite type (e. g. car) "has" objects of other types (e. g. wheel). When a composite object contains several sub objects of the same type, they may be assigned to particular roles, often distinguished by names or numbers. For example, a Point object might contain 3 numbers, each representing distance along a different axis, such as 'x', 'y', and 'z'. The study of part whole relationships in general, is mereology. Composition must be distinguished from subtyping, which is the process of adding detail to a general data type to create a more specific data type. For instance, cars may be a specific type of vehicle: car is a vehicle. Subtyping doesn't describe a relationship between different objects, but instead, says that objects of a type are simultaneously objects of another type. The study of such relationships is ontology. In prototype based programming languages such as JavaScript, objects can dynamically inherit the behaviors from a prototype object at the moment of their instantiation. Composition must be distinguished from prototyping: the newly instantiated object inherits the composition of its prototype, but it may itself be composed on its own. Composite objects may be represented in storage by co locating the composed objects, by co locating references, or in many other ways. The items within a composite object may be referred to as attributes, fields, members, properties, or other names, and the resulting composition as composite type, storage record, structure, tuple, or a user defined type (UDT). For details, see the aggregation section below.
UML модельдеу техникасы
UML модельдеуде объектілерді бағдарламалау тілімен іске асырылуына қарамастан, тұжырымдық тұрғыдан құрастыруға болады. UML-де объектілерді құрастырудың төрт тәсілі бар: қасиет, қауымдастық, агрегация және композиция.
In UML modeling, objects can be conceptually composed, independently of the implementation with a programming language. There are four ways of composing objects in UML: property, association, aggregation and composition:
Қасиет – сыныптың атрибутын көрсетеді. Қауымдастық – байланысты кластардың мысалдары арасындағы семантикалық қатынасты көрсетеді. Қауымдастықтың мүшелік ұшы байланысты кластың қасиетіне сәйкес келеді. Агрегация – агрегаттың (бүтін) және байланысты компоненттер тобының (бөліктердің) арасындағы бөлік/бүтін қатынасын модельдейтін қауымдастықтың бір түрі. Композиция, сондай-ақ композициялық агрегация деп те аталады, композиттың (бүтін) және эксклюзивті түрде меншікке алынған бөліктер тобы арасындағы бөлік/бүтін қатынасын модельдейді. Агрегат пен оның компоненттері арасындағы қатынас – әлсіз «иеленеді» қатынасы болып табылады: компоненттер бірнеше агрегаттардың құрамында болуы мүмкін, агрегат арқылы өтпей басқа объектілерден қолжетімді болуы мүмкін және агрегат объектісінен кейін де сақталуы мүмкін.
A property represents an attribute of the class. An association represents a semantic relationship between instances of the associated classes. The member end of an association corresponds to a property of the associated class. An aggregation is a kind of association that models a part/whole relationship between an aggregate (whole) and a group of related components (parts). A composition, also called a composite aggregation, is a kind of aggregation that models a part/whole relationship between a composite (whole) and a group of exclusively owned parts. The relationship between the aggregate and its components is a weak "has a" relationship: The components may be part of several aggregates, may be accessed through other objects without going through the aggregate, and may outlive the aggregate object.
Құрастыру
Бірнеше композицияланған дерек түрінің даналарын сақтауға қолданылатын құрылым контейнер деп аталады. Мұндай контейнерлердің мысалдары: массивтер, ассоциативтік массивтер, екілік ағаштар және тізбекті тізімдер. UML-де контейнерлік қатынас 0 * немесе 1 * көптікпен көрсетіледі, бұл құрама объектінің құрамында құрастырылған кластың белгісіз санынан тұратынын білдіреді.
Composition that is used to store several instances of the composited data type is referred to as containment. Examples of such containers are arrays, associative arrays, binary trees, and linked lists. In UML, containment is depicted with a multiplicity of 0 * or 1 *, indicating that the composite object is composed of an unknown number of instances of the composed class.
Рекурсивті композиция
Объектілер рекурсивті түрде құралуы мүмкін, және олардың түрі рекурсивті тип деп аталады. Мысалдарға әртүрлі ағаштар, DAG-тар және графтар жатады. Ағаштың әрбір түйіні бұтақ немесе жапырақ болуы мүмкін; яғни, әрбір түйін басқа ағаштың бір бөлігі болғанда өзі де ағаш болып табылады. UML-де рекурсивті композиция кластың өзімен-өзінің байланысы, агрегациясы немесе композициясы арқылы бейнеленеді.
Objects can be composed recursively, and their type is then called recursive type. Examples includes various kinds of trees, DAGs, and graphs. Each node in a tree may be a branch or leaf; in other words, each node is a tree at the same time when it belongs to another tree. In UML, recursive composition is depicted with an association, aggregation or composition of a class with itself.
Құрама үлгі
Композиттік дизайн үлгісі – композиттік типтерге негізделген объектіге бағытталған жобалау, күрделі бөлік-бүтін иерархияларын жүзеге асыру үшін рекурсивті құрастыру мен құрамына енгізуді үйлестіреді.
The composite design pattern is an object oriented design based on composite types, that combines recursive composition and containment to implement complex part whole hierarchies.