Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Кластың барлық объектілері үшін өзгермейтін қасиет – компьютерлік бағдарламалау ұғымы.
Unchanging property for all objects of a class
the computer programming concept
Компьютерлік бағдарламалауда, әсіресе объектіге бағытталған бағдарламалауда, кластың инварианты (немесе типтік инвариант) – кластың объектілерін шектеуге қолданылатын инвариант. Кластың әдістері осы инвариантты сақтауға тиіс. Кластың инварианты объектіде сақталатын күйді шектейді. Кластың инварианттары құрылым кезінде орнатылады және жария әдістерге шақырылғандар арасында тұрақты түрде сақталады. Функциялар ішіндегі код инварианттарды бұзуы мүмкін, бірақ жария функция аяқталғанға дейін инварианттар қалпына келтірілуі керек. Параллелизм кезінде әдістерде инвариантты сақтау үшін, әдетте күйді мутекстің көмегімен құлыптап, сындық бөлім құру қажет. Объектінің инварианты немесе өкілдік инварианты – объектінің күйіне қарамастан бұзылмаған инвариантты қасиеттер жиынтығынан тұратын компьютерлік бағдарламалау құрылымы. Бұл объектінің әрқашан алдын ала анықталған шарттарға сәйкес келетінін және әдістердің қате пікірлерге ұшырамастан объектіге сілтеме жасауға болатынын қамтамасыз етеді. Кластың инварианттарын анықтау бағдарламашылар мен тестілеушілерге бағдарламалық құралды сынау кезінде көбірек қателерді табуға көмектеседі.
In computer programming, specifically object oriented programming, a class invariant (or type invariant) is an invariant used for constraining objects of a class. Methods of the class should preserve the invariant. The class invariant constrains the state stored in the object. Class invariants are established during construction and constantly maintained between calls to public methods. Code within functions may break invariants as long as the invariants are restored before a public function ends. With concurrency, maintaining the invariant in methods typically requires a critical section to be established by locking the state using a mutex. An object invariant, or representation invariant, is a computer programming construct consisting of a set of invariant properties that remain uncompromised regardless of the state of the object. This ensures that the object will always meet predefined conditions, and that methods may, therefore, always reference the object without the risk of making inaccurate presumptions. Defining class invariants can help programmers and testers to catch more bugs during software testing.
Сынып инварианттары мен мұрагерлік
Объектіге бағытталған бағдарламалық жасақтамада кластық инварианттардың пайдалы әсері мұрагерлік арқасында күшейе түседі. Кластық инварианттар мұраға беріледі, яғни "кластың барлық ата-аналарының инварианттары сол кластың өзіне де қолданылады". Мұрагерлік ұрпақ кластарға ата-ана кластарының іске асыру деректерін өзгертуге мүмкіндік береді, сондықтан ұрпақ класы ата-ана класының тұрғысынан жарамсыз ететіндей етіп, инстанциялардың күйін өзгертуі мүмкін. Осындай жағдайға түсетін ұрпақ кластардың болуы – объектіге бағытталған бағдарламалық жасақтаманы жобалаушылардың композицияны мұрагерлікке басымдық беруінің бір себебі (яғни мұрагерлік инкапсуляцияны бұзады). Дегенмен, кластық инварианттар мұраға берілгендіктен, кез келген нақты кластың кластық инварианты сол класта тікелей кодталған инвариантты талаптармен қатар, ата-ана кластардан мұраланған барлық инвариантты шарттардан тұрады. Бұл дегеніміз, ұрпақ кластар ата-аналарының іске асыру деректеріне қол жеткізе алғанмен, кластық инвариант оларға осы деректерді орындалу кезінде жарамсыз инстанция тудыратын кез келген тәсілмен өңдеуге жол бермейді.
The useful effect of class invariants in object oriented software is enhanced in the presence of inheritance. Class invariants are inherited, that is, "the invariants of all the parents of a class apply to the class itself." Inheritance can allow descendant classes to alter implementation data of parent classes, so it would be possible for a descendant class to change the state of instances in a way that made them invalid from the viewpoint of the parent class. The concern for this type of misbehaving descendant is one reason object oriented software designers give for favoring composition over inheritance (i. e., inheritance breaks encapsulation). However, because class invariants are inherited, the class invariant for any particular class consists of any invariant assertions coded immediately on that class in conjunction with all the invariant clauses inherited from the class's parents. This means that even though descendant classes may have access to the implementation data of their parents, the class invariant can prevent them from manipulating those data in any way that produces an invalid instance at runtime.
Айғақтар
Python, PHP, JavaScript, C++ және Java сияқты көп қолданылатын бағдарламалау тілдері асерцияларды бастапқыда қолдайды, оларды кластың өзгермейтін шарттарын анықтау үшін пайдалануға болады. Кластардағы өзгермейтін шарттарды іске асырудың әдеттегі тәсілі – егер шарт орындалмаса, кластың конструкторы қателік тудыруы. Әдістер осы шарттарды сақтайтындықтан, олар шарттың дұрыстығына сеніп, оны арнайы тексерудің қажеті жоқ.
Common programming languages like Python, PHP, JavaScript, C++ and Java support assertions by default, which can be used to define class invariants. A common pattern to implement invariants in classes is for the constructor of the class to throw an exception if the invariant is not satisfied. Since methods preserve the invariants, they can assume the validity of the invariant and need not explicitly check for it.
Жергілікті қолдау
Сынып инварианты – келісім-шарт бойынша жобалаудың қажетті бөлігі. Сондықтан, Эйфель, Ада және D сияқты келісім-шарт бойынша жобалауды толыққанды қолдайтын бағдарламалау тілдері, сынып инварианттарын да толыққанды қолдайды.
The class invariant is an essential component of design by contract. So, programming languages that provide full native support for design by contract, such as Eiffel, Ada, and D, will also provide full support for class invariants.
Жергілікті емес қолдау
C++ үшін Loki кітапханасы сынып инварианттарын, статикалық дерек инварианттарын және қателіктерді басқару қауіпсіздігін тексеру үшін құралдар ұсынады. Java үшін кластық инварианттарды анықтаудың күштірек және сенімді тәсілін ұсынатын Java Modeling Language деп аталатын құрал бар.
For C++, the Loki Library provides a framework for checking class invariants, static data invariants, and exception safety. For Java, there is a more powerful tool called Java Modeling Language that provides a more robust way of defining class invariants.