Для початку розглянемо основні відмінності між сильною і слабкою типізацією. Перш за все, слабка (нестрогая) типізація передбачає неявне обчислення / перетворення типів і / або adhocполіморфізм.Такім чином, тип змінної обчислюється на момент виконання присвоєння їй деякого значення.
Спеціальний (або лат. Adhoc) поліморфізм допускає спеціальну реалізацію для даних кожного типу. Наприклад, використовувана в нашому прикладі функцією сортування функція порівняння повинна бути визначена по-різному для чисел, кортежів, списків, т. Е. Вона є спеціально полиморфной.
При сильній (суворої) типізації всі типи відомі заздалегідь, і перетворення проходить по заздалегідь встановленим строгим правилам. Суворим, зрозуміло, по відношенню до правил прийнятим при слабкій типізації.
Сильну (сувору) типізацію, представляє мову C #. Якщо раніше в C ++ ми могли написати:
MyObj * m_pObj = GenerateMyObj ();
То вже в C # таке перетворення типів не пройде, тут будь добрий робити все явно:
У цьому різновиді типізації для присвоєння змінної деякого значення ми повинні спочатку оголосити цю змінну і задати їй тип. Тобто основна відмінність від слабкої типізації в тому, що на момент компіляції всі типи повинні бути відомі. Так само, не може бути мови не про якийсь adhoc поліморфізм. Наприклад, в разі функціонального поліморфізму операція додавання, певна для цілочисельних типів, при використанні з рядками просто викличе помилку компіляції.
У суворої типізації є одна незаперечна перевага, такий код надійніше. Однак і вслабой є свої плюси, мова з такою системою типів більш гнучкий. У компільованих мовах (С, С ++) сувора типізація виявляється зручніше.
Тип даних - характеристика набору даних, яка визначає:
- діапазон можливих значень даних з набору;
- допустимі операції, які можна виконувати над цими значеннями;
- спосіб зберігання цих значень в пам'яті.
- прості типи даних: цілі, дійсні числа і ін .;
- складові типи даних: масиви, файли та ін.