Абстракті түрлер және олардың программалау тілдеріндегі қолданылуы
Abstract type
Абстракт түрлер: бағдарламалау тілдеріндегі маңызды ұғым. Конкретті түрлерден өзгешелігі, тікелей құрастырылмайды, тек қосалқы түрлер арқылы қолданылады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Бағдарламалау тілінің ерекшелігі
Feature of a programming language
Бағдарламалау тілдерінде абстрактіл тип (сонымен қатар экзистенциалдық типтер деп те аталады) – номинативтік типтер жүйесінде тікелей инстанцияланбайтын тип; керісінше, нақты типті тікелей инстанциялауға болады. Абстрактіл типті инстанциялау тек нақты субтип арқылы ғана мүмкін. Абстрактіл типтің іске асырылуы жоқ немесе толық емес болуы мүмкін. Кейбір тілдерде іске асырылмаған (толық емес емес) абстрактіл типтер протоколдар, интерфейстер, қолтаңбалар немесе сынып типтері деп аталады. Сыныпқа негізделген объектіге бағытталған бағдарламалауда абстрактіл типтер абстрактіл кластар (сонымен қатар абстрактіл базалық кластар деп те аталады) түрінде, ал нақты типтер нақты кластар түрінде іске асырылады. Жалпылама бағдарламалауда осыған ұқсас ұғым – концепт, ол синтаксис пен семантиканы ұқсас анықтайды, бірақ субтип қатынасын қажет етпейді: екі байланыссыз тип бір концептті қанағаттандыруы мүмкін. Көбінесе абстрактіл типтердің бір немесе бірнеше іске асырылуы жеке беріледі, мысалы, инстанциялана алатын нақты субтиптер түрінде. Объектіге бағытталған бағдарламалауда абстрактіл сыныпта оның кіші сыныптарымен ортақ абстрактіл әдістер немесе абстрактіл қасиеттер болуы мүмкін. Абстрактіл типтерді іске асыру үшін қолданылатын (немесе қолданылуы мүмкін) тіл ерекшеліктерінің басқа атауларына қасиеттер, араластырулар, дәмдер, рөлдер немесе типтер кластары жатады. Абстрактіл типтер сондай-ақ кез келген санда абстрактіл емес әдістер мен қасиеттерді қамтуы мүмкін, мысалы, шаблон әдісі үлгісін іске асыру кезінде, ол нақты кіші сыныптарда бейімделген логиканы қамтамасыз ету үшін өзгермейтін әдістер мен бекітілген іске асырулар мен ілмек әдістердің қоспасын қолданады.
In programming languages, an abstract type (also known as existential types) is a type in a nominative type system that cannot be instantiated directly; by contrast, a concrete type can be instantiated directly. Instantiation of an abstract type can occur only indirectly, via a concrete subtype. An abstract type may provide no implementation, or an incomplete implementation. In some languages, abstract types with no implementation (rather than an incomplete implementation) are known as protocols, interfaces, signatures, or class types. In class based object oriented programming, abstract types are implemented as abstract classes (also known as abstract base classes), and concrete types as concrete classes. In generic programming, the analogous notion is a concept, which similarly specifies syntax and semantics, but does not require a subtype relationship: two unrelated types may satisfy the same concept. Often, abstract types will have one or more implementations provided separately, for example, in the form of concrete subtypes that can be instantiated. In object oriented programming, an abstract class may include abstract methods or abstract properties that are shared by its subclasses. Other names for language features that are (or may be) used to implement abstract types include traits, mixins, flavors, roles, or type classes. Abstract types may also include any number of non abstract methods and properties, such as when implementing the Template Method Pattern which uses a mixture of invariant methods with fixed implementations and hook methods which can be overridden in concrete subclasses to provide custonised logic.
Қолданылуы
Абстрактілік типтер – статикалық типтелген бағдарламалау тілдеріндегі маңызды мүмкіндік. Көптеген динамикалық типтелген тілдерде оған баламалы мүмкіндік жоқ (әйтсе де, қаз типтеуін қолдану абстрактілік типтерді қажетсіз етеді), бірақ кейбір заманауи динамикалық типтелген тілдерде трайттар кездеседі. Кейбір авторлар сыныптар жапырақ сыныптар болуы керек (қосалқы типтері болмауы керек), немесе абстрактілі болуы керек деп санайды. Абстрактілік типтердің пайдасы – оларды протоколды анықтау және күшіне енгізу үшін қолдануға болады; протоколды іске асыратын барлық нысандар қолдауы тиіс операциялар жиынтығы. Абстрактілік типтер сондай-ақ Үлгі әдісі үлгісінің (Template Method Pattern) маңызды бөлігі болып табылады.
Abstract types are an important feature in statically typed OOP languages. Many dynamically typed languages have no equivalent feature (although the use of duck typing makes abstract types unnecessary); however traits are found in some modern dynamically typed languages. Some authors argue that classes should be leaf classes (have no subtypes), or else be abstract. Abstract types are useful in that they can be used to define and enforce a protocol; a set of operations that all objects implementing the protocol must support. Abstract types are also an essential part of the Template Method Pattern.