Понедельник, 20.05.2024, 03:14
Приветствую Вас Гость | RSS

Основные принципы ООП

Меню сайта
Block title
Block content
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа

Виды типизации

Сильная и слабая типизация

   Конкретный язык программирования может иметь сильный или слабый механизм типизации, и, даже, не иметь вообще никакого, оставаясь объектно-ориентированной.

   В Eiffel соблюдения правил использования типов контролируется неуклонно: операция не может быть применена к объекту, если она не зарегистрирована в его классе или суперклассе. В сильно типизирующих языках нарушения согласования типов может быть обнаружено во время трансляции программы. С другой стороны, в Smalltalk типов нет: во время выполнения любое сообщение можно послать любому объекту, и если класс объекта не понимает сообщения, то генерируется сообщение об ошибке. Нарушение согласования типов может не оказаться во время трансляции, тогда оно, обычно, проявляется как ошибка выполнения. С++ тяготеет к сильной типизации, но в этом языке правила типизации можно игнорировать или придушить полностью. Значение примитивных типов, таких, как «целый» или «действительный» неразрознен и их можно свободно смешивать в вычислениях. Аdа и Object Pascal является очень сильно типизирующими языками. В Ada можно объявить самостоятельным типом интервал значений или подмножество с ограниченной точностью.

   Сильная типизация вынуждает нас придерживаться правил использования абстракций, потому она тем полезно, чем больше проект. Однако у нее есть и теневой бок. А именно даже небольшие изменения в интерфейсе класса требуют перекомпиляции всех его підкласів. Кроме того, не имея параметризующие или контейнерные классы, трудно представить себе, как можно было бы создать наборы разнородных объектов.

  Теслер отметил следующие важные преимущества строго типизирующих языков:
 •   Отсутствие контроля типов может приводить к загадочным сбоям в программах во время их выполнения;
 •   В большинстве систем процесс редактирования - компиляция - отладка утомляет, и раннее выявление ошибок очень необходимо;
 •   Объявление типов улучшает документирование программ;
 •   Много компиляторов генерируют более эффективный объектный код, если им явно известны типы.

  Языки, в которых типизация отсутствует, имеют большую гибкость, но даже в таких языках, по мнению Борнинга и Ингалса: "Программисты обычно знают, какие объекты ожидаются как аргументы, и которые будут возвращаться". На практике, особенно при программировании "в большом", надежность языков со строгой типизацией с избытком компенсирует некоторую потерю в гибкости, по сравнению с не типизирующими языками.

   Статическая и динамическая типизация

   Сильная и статическая типизация - разные вещи. Суровая типизация следит за соответствием типов, а статическая типизация (иначе называемая статическим или ранним связыванием) определяет время, когда имена связываются с типами. Статическая связь значит, что типы всех переменных и выражений известны во время компиляции; динамическое связывание (называемое также поздним связыванием) значит, что типы неизвестные к моменту выполнения программы. Эти сроки отвечают событиям, которые возникают на этапе компиляции и на этапе выполнения программы соответственно.

   В сроках объектно-ориентированного программирования раннее связывание значит, что объект и вызов функции связываются между собой на этапе компиляции. Это значит, что вся необходима информация для того, чтобы определить, какая именно функция будет вызвана, известная на этапе компиляции программы. Принципиальным преимуществом раннего связывания является его эффективность - оно быстрее и, конечно, требует меньше памяти, чем позднее связывание. Его недостатком служит невысокая гибкость.

Позднее связывание значит, что объект связывается с вызовом функции лишь во время выполнения программы, а не раньше. Его преимуществом является высокая гибкость. Оно может использоваться для поддержки общего интерфейса, позволяя при этом разным объектам иметь свою собственную реализацию этого интерфейса. Более того, оно помогает создавать библиотеки классов, которые допускают повторное использование и расширение.

   Какое именно связывание должна использовать программа, зависит от назначения программы. Фактически достаточно сложные программы используют оба вида связывания. Позднее связывание является одним из самих мощных механизмов объектно-ориентированных языков. Платой за такое увеличение мощности программы служит некоторое уменьшение ее скорости выполнения. Поэтому использование позднего связывания оправдано лишь тогда, когда оно улучшает структурированность и управляемость программы. Нужно иметь в виду, что проигрыш в производительности небольшой, потому когда ситуация требует позднего связывания, можно использовать его вне всякого сомнения.

   Концепции типизации и связывания е независимыми, потому в языке программирования могут быть такие: типизация - сильная, связывание - статическое (Ada), типизация - сильная, связывание - динамическое (С++, Object Pascal), или и типов нет, и связывание динамическое (Smalltalk). Мовас1-05 занимает промежуточное положение между С++ и Smalltalk: определения типов, сделанные программистом, могут быть или принятые во внимание, или остаться поза ею.
Динамическое связывание определяет наличие такого мощного механизма в ООП как полиморфизм. Противоположность полиморфизма называется мономорфизмом; он характерен для языков с сильной типизацией и статическим связыванием (Аdа). Полиморфизм возникает там, где взаимодействуют наследование и динамическое связывание. Это одно из наиболее привлекательных свойств объектно-ориентированных языков (после поддержки абстракции), что выгодно отличает их от традиционных языков с абстрактными типами данных.


All rights reserved. © 2024
Конструктор сайтов - uCoz