Кіріспе

Экспрессияны бір дерек типінен екіншісіне ауыстыру авиациялық лицензиялау процесі Компьютерлік ғылымда типті түрлендіру, типті құю, типті мәжбүрлеу – бір дерек типінен екіншісіне экспрессияны өзгертудің әртүрлі тәсілдері. Мысал ретінде бүтін санды қозғалмалы нүктелік мәнге немесе оның мәтіндік түрінде жол түрінде бейнеленуі және керісінше түрлендіру. Тип түрлендірулері типтер иерархиясының немесе деректерді бейнелеудің белгілі бір ерекшеліктерін пайдалана алады. Типті түрлендірудің екі маңызды аспектісі – бұл жасырын (автоматты) немесе ашық түрде бола ма, және негізгі деректердің бейнеленуі бір бейнеленуден екіншісіне ауыстырылады ма, немесе берілген бейнелену тек басқа дерек типінің бейнеленуі ретінде қайта түсіндіріледі. Жалпы, бастапқы және күрделі дерек типтерін де түрлендіруге болады. Әрбір бағдарламалау тілінің типтерді түрлендірудің өз ережелері бар. Қатты типтегі тілдер әдетте жасырын түрлендіруді азайтады және бейнелеулерді қайта түсіндіруді ынталандырмайды, ал әлсіз типтегі тілдер дерек типтері арасында көптеген жасырын түрлендірулерді орындайды. Әлсіз типтеу тілі жиі компиляторды дерек элементін әртүрлі бейнелеуге ие деп өздігінен түсіндіруге мәжбүр етеді. Бұл анық емес бағдарламалау қатесі немесе негізгі аппаратпен тікелей жұмыс істеудің техникалық әдісі болуы мүмкін. Көптеген тілдерде мәжбүрлеу сөзі компиляция кезінде немесе орындалу кезінде жасырын түрлендіруді білдіру үшін қолданылады. Мысалы, бүтін сандар мен қозғалмалы нүктелі сандарды араластыратын өрнекте (5 + 0.1) компилятор бүтін санды бейнелеуді автоматты түрде қозғалмалы нүктелі бейнелеуге айналдырады, сондықтан бөлшектер жоғалмайды. Ашық тип түрлендірулері қосымша код жазу арқылы (мысалы, тип идентификаторын қосу немесе жүйеге енгізілген шақыру) немесе компиляторға тип сәйкессіздігімен тоқтаған кезде пайдалану үшін түрлендіру процедураларын кодтау арқылы көрсетіледі. ALGOL-ға ұқсас көптеген тілдерде, мысалы, Паскаль, Модула 2, Ада және Дельфиде түрлендіру мен құю айқын түрлі ұғымдар болып табылады. Бұл тілдерде түрлендіру дегеніміз бір дерек типін сақтау форматынан екіншісіне мәнді жасырын немесе ашық өзгертуді білдіреді, мысалы, 16 биттік бүтін санды 32 биттік бүтін санға. Қайта өңдеу нәтижесінде сақтау қажеттілігі өзгеруі мүмкін, оның ішінде дәлдіктің жоғалуы немесе қысқаруы мүмкін. Ал құю деген сөз бір типтен екінші типке мәнді білдіретін бит үлгісінің түсіндіруін нақты өзгертуді білдіреді. Мысалы, 32 жалғасқан битті 32 логикалық массив, 4 байттық жол, қолтаңбасыз 32 биттік бүтін сан немесе IEEE бір дәлдікті қозғалмалы нүктелік мән ретінде қарастыруға болады. Сақталған биттер ешқашан өзгермейтіндіктен, бағдарламашы мәнді дұрыс түсіндіру үшін төменгі деңгейдегі мәліметтерді, мысалы, бейнелеу форматын, байт реті мен сәйкестендіру қажеттіліктерін білуі керек. C тілдер отбасы мен ALGOL 68 тілдерінде "cast" сөзі әдетте ашық типті түрлендіруге (жасырын түрлендіруге қарсы) қатысты, бұл бит үлгісінің қайта түсіндіруі ме, әлде нақты деректерді бейнелеу түрлендіруі ме деген түсініксіздікке әкеледі. Бұған қарағанда, меңзердің қандай дерек типін (немесе класты) орналастыратыны және компилятордың меңзерді объект (класс) мұрагерлік сияқты жағдайларда қалай реттей алатыны туралы көптеген тәсілдер мен ережелер маңызды.

Аида

Ада жалпы кітапханалық функцияны ұсынады – Қадағалаусыз түрлендіру.

Белгіленбеген одақтарды қолдана отырып, жасырын құю

Көптеген бағдарламалау тілдері бірнеше түрдің мәнін сақтауға мүмкіндік беретін одақ түрлерін қолдайды. Кейбір тілдерде, мысалы C және PL/I, сондай-ақ түпнұсқа Pascal-да, белгісіз одақтар ұсынылады. Оларды бір түрдің биттік үлгісін басқа түрдің мәні ретінде түсіндіру үшін пайдалануға болады.

Қауіпсіздік мәселелері

Хакерлікте типтік құю – айнымалының бастапқыда анықталған дерек типін уақытша өзгерту үшін дерек типін түрлендіруді қате пайдалану. Бұл хакерлерге мүмкіндік береді, себебі дерек типін түрлендіру кезінде айнымалы басқа дерек типіне түрлендірілгеннен кейін, компилятор сол операция үшін бұл өзгертілген айнымалыны жаңа дерек типі ретінде қарастырады.