Tip de date - un

Înapoi în anii 1960 R. Hindley (Roger Hindley) a investigat tastarea în logica combinatorie. Aria sa de interes a fost de scriere în limbile, pe baza teoriei lambda calcul. Mai târziu, la sfârșitul anilor 1960. Același om de știință au studiat sistemul de tip polimorf. Mai târziu, în anii 1970. Robin Milner a sugerat că punerea în aplicare practică a sistemului tipizarea polimorfă extins pentru limbajul de programare funcțional ML.

definiție

Tip (Clasa) - set relativ stabil și independent de elemente care pot fi alocate în toate setul considerat (domeniu). [1]

tip Polimorfism - prezentarea unui set de tipuri ca un singur tip.

Matematic, tipul poate fi definit în două moduri:

  1. Setul de toate valorile care aparțin de tip.
  2. Funcția predicatului care definește un obiect aparținând acestui tip de

Necesitatea de a utiliza tipurile de date

Tipurile de date diferă de la nivelurile inferioare ale sistemului. De exemplu, chiar și în diferite tipuri de Assembler x86 „întreg“ și „număr real.“ Acest lucru se datorează faptului că numerele sunt atribuite diferite tipuri considerate cantitatea de memorie utilizată de diferitele registre ale microprocesorului, cât și pentru tranzacțiile cu acestea, există diferite instrucțiuni de asamblare și o varietate de miez de microprocesor.

Conceptul de tip de date a apărut în limbaje de programare de nivel înalt ca o reflectare naturală a faptului că datele prelucrate de program poate avea un set diferit de valori posibile stocate în memoria calculatorului în diverse moduri, ocupă diferite cantități de memorie și procesate de către o instrucțiune procesor diferit.

aplicație practică

De obicei, tipurile de limbaje de programare nu este întotdeauna corespunde strict matematice tipuri similare. De exemplu, de tip „întreg“ de cele mai multe limbaje de programare să nu fie un tip de matematică „întreg“, ca și în matematică de tipul specificat nu este limitată, fie de sus sau de jos, precum și limitările limbajele de programare. Ca o regulă, limbi și sisteme, există o mulțime de tipuri întregi, care diferă intervalul admisibil de valori (determinat de volumul ocupat de memorie). Este demn de remarcat faptul că, în cele mai multe implementări de limbi și sisteme se extinde dincolo de limitele de tip întreg (overflow) nu are ca rezultat într-o situație excepțională.

limbaje de programare moderne (inclusiv Assembler) sprijină ambele moduri de a specifica tipul (a se vedea. Definiția). De exemplu, în C ++ tip enum este un exemplu de tipul lucrării printr-un set de valori. Definiția de clasă (dacă luăm în considerare clasa ca un tip de date) este de fapt definiția tipului de predicat, cu posibilitatea de verificare a predicatului ca timpul compilării (tipul de verificare) și de execuție (polimorfismul este foarte strâns legată de tipurile polimorfe). Pentru tipurile de bază, cum sunt definite de predicate limba creatorilor inițial.

Limbile fără tip

Teoretic, nu poate exista nici o limbă în care nu există tipuri (inclusiv polimorfă). Acest lucru rezultă din faptul că toate limbile sunt bazate pe mașină sau lambda calcul Turing. Și, de fapt, în celălalt caz, este necesar să se opereze cel puțin un tip de date - stocate pe banda (masina Turing) sau transmise și a revenit din funcție (calculul lambda). Mai jos sunt listate metoda de limbaje de programare pentru definiții de tipuri de date:

1) Limbile cu tipul de date polimorfă. Unele limbi nu se leagă variabile. constantă. parametrii formali și valori ale funcțiilor de returnare cu anumite tipuri, care susțin un singur tip de date polimorfă. În formă pură, un astfel de limbaj nu este găsit, dar exemple similare - MS Visual Basic - varianta tip, prolog. - Lisp liste. În aceste limbi, variabila poate lua valoarea de orice tip, parametrii funcției se pot transfera valori de orice tip, și a reveni funcția poate fi, de asemenea, orice tip de valoare. Tipuri de comparare de variabile și parametri aplicabile acestora operațiuni efectuate direct la efectuarea acestor operații. De exemplu, expresia a + b. Acesta poate fi interpretat ca numere de adiție, în cazul în care a și b sunt valori numerice ca concatenare de coarde, în cazul în care a și b au valori string și ca invalid operațiune (eronată), în cazul în care tipurile și b valori sunt incompatibile. Această procedură se numește „tastare dinamică“ (corespunde polimorfismului conceptului în OOP. De tip polimorfic în tipul de teorie). Limbile care acceptă doar tastarea dinamic este uneori numit „typeless“. Acest nume nu trebuie înțeles ca un semn al lipsei conceptului de tipuri de limbaj - tipuri de date sunt încă acolo.

2) Limbile cu tipurile implicite. S-ar părea, de bază este un exemplu fără nici un tip de limbaj. Cu toate acestea, este strict limba tipizirovany: tipuri string (simbol $ adăugate), matrice (adăugați []), și tipuri numerice (nimic adăugat) în ea sunt diferite.

3) Limbile cu tipul definit de utilizator. De asemenea, limbi bine cunoscute în care tipurile de date sunt determinate în mod automat și nu sunt setate de către utilizator. Fiecare funcție parametru variabil atribuită unui anumit tip de date. În acest caz, orice posibilitate de exprimare a punerii sale în aplicare și tipul valorilor obținute pot fi determinate fără efectuarea programului. O astfel de abordare este numită „tastat static“. În aceleași reguli de manipulare variabile, expresii și parametrii de diferite tipuri pot fi foarte stricte (C ++), și foarte liberal (C). De exemplu, în limbajul clasic C aproape toate tipurile de date sunt compatibile - acestea pot fi folosite împreună în orice expresii, atribuie o valoare unei variabile de un tip de o altă variabilă, cu aproape nici o restricție. În astfel de operațiuni, compilatorul generează un cod care permite conversia de tip, și corectitudinea logică a unei astfel de transformări rămâne pe conștiința programatorului. Aceste limbi sunt numite „limbaj slab tastat.“ Opunându-le - „un limbaj puternic tipizat,“ cum ar fi Ada. În ele, fiecare operațiune necesită operand tipuri definite strict. Nu există conversii automate de tip nu sunt acceptate - acestea pot fi îndeplinite numai prin utilizarea în mod explicit funcțiile și operațiile corespunzătoare. dactilografiere puternic face o programare mai dificilă, dar rezultatele într-un program care conține un hard-la-mult mai puțin erori.

să sprijine mai multe modele de definiții de tip, în practică, limbaje de programare simultan.

tipuri de bază

Fiecare limbaj de programare suporta unul sau mai multe tipuri de built-in de date (tipuri de bază) (a se vedea. Clasificarea tipurilor de date), în plus, a dezvoltat limbaje de programare furnizează programator pentru a descrie propriile tipuri de date prin combinarea sau extinderea celor existente.

Beneficiile din utilizarea de tipuri de date

  • Fiabilitate. Tipuri de date pentru a proteja împotriva a trei tipuri de erori:
  1. Atribuirea incorectă. Să variabilă este declarată ca fiind un tip numeric. Apoi, încercați să-i dea un caracter sau o altă valoare în cazul dactilografiere statice va conduce la o eroare de compilare și nu va porni un astfel de program. În cazul codului dinamic program de dactilografiere înainte de a efectua acțiuni potențial periculoase compară tipurile de date și valorile variabile și, de asemenea, o eroare. Toate acestea evită funcționarea defectuoasă și „căderea“ a programului.
  2. Funcționarea incorectă. Evită încercările de a folosi expresii de tipul «Hello world» + 1. Deoarece așa cum sa menționat deja, toate variabilele din memorie sunt stocate ca seturi de biți, în absența unui astfel de tip de operațiune era realizabilă (și poate da rezultatul unei astfel de «ello worldǼ»). Utilizarea tipurilor de (a se vedea. „Tipul de control“), astfel de erori sunt tăiate din nou în timpul compilării.
  3. Incorect parametru care trece. În cazul în care funcția de „sine“, se așteaptă ca acesta va fi dat un argument numeric, apoi se transferă ca un parametru «Bună ziua lume» șir poate avea consecințe imprevizibile. Prin controlul tipuri de erori, cum ar fi tăiate la momentul compilarii.
  • Standardizare. Datorită acordurilor de tipuri care sunt acceptate de majoritatea sistemelor de programare, o situație în care programatorii pot schimba rapid instrumentele lor și programele nu necesită schimbări mari în sursa de transfer într-un mediu diferit. Din păcate, standardizarea unei tipuri de date universal, există încă multe să se dezvolte.

Clasificarea tipurilor de date [2], [3]

Tipurile de date sunt după cum urmează:

Sistemul Tastarea și introducerea textului

Procesul de verificare și de stabilire a tipurilor de restricții - tipuri de control. Aceasta poate fi realizată la momentul compilării (încercare statică) sau în timpul rulării (inspecția dinamică).

  • Static tastare - verificarea de tip se efectuează la momentul compilarii.
  • dactilografiere dinamic - tastarea se face în timpul rulării.

tipuri de control pot fi, de asemenea, strict și slab.

  • dactilografiere Strong - Tipuri de compatibilitate sunt controlate automat de traducător:
    • dactilografiere nominativ (în engleză sistem de tip nominativ.) - compatibilitate ar trebui să fie indicate în mod explicit (moștenită de) determinarea tipului.
    • dactilografiere structurală (în engleză sistem de tip structural.) - Compatibilitatea este determinată de structura de tip (tipuri de elemente, care este construit tip integral).
  • Slab dactilografiere - compatibilitate tip nu controlat de traducător. În limbile cu o abordare slab tastat frecvent utilizat numit „tastarea rață“ - atunci când a determinat și implementat de un tip de interfață de acces la date comune somestimost.

notițe

articole similare