пятница, 3 августа 2012 г.

Компиляция/Интерпретация

Компиляция


Компиляция - трансляция программы, написанной на языке высокого уровня, в эквивалентную программу на языке низкого уровня, близком к машинному коду.

Компилятор только преобразует исходный код в машинный. Исполняет программу (уже преобразованную компилятором) центральный процессор (т.е. ОС).

Компилируемый язык программирования - язык программирования, исходный код которого преобразуется компилятором в машинный код и исполняется операционной системой.
EX - Ada, Basic, C, Fortran (прим., разделение условно, практически для любого языка может быть создан и компилятор, и интерпретатор)
Недостатки:
  • зависимость от ОС
  • при внесении изменений требуется перекомпиляция кода

Достоинства:
  • быстрота
  • компактность
  • чаще всего используются для часто используемых программ

Интерпретация


Интерпретация- пооператорный анализ, обработка и исполнение программы или запроса.

Интерпретируемый язык программирования - язык программирования, в котором исходный код программы не преобразовывается в машинный код для непосредственного выполнения центральным процессором, а исполняется с помощью специальной программы-интерпретатора.
EX - Phyton, Perl, Matlab, Mathcad
 Недостатки:
  • необходима программа - интерпретатор
  • медленнее компилируемых программ

Достоинства:
  • компактность
  • НЕзависимость от ОС (переносимость)
  • при внесении изменений НЕ требуется перекомпиляция кода
  • чаще всего используются для сложных одноразовых программ (пр, некоторые вычисления)

Компиляция - интерпретация

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной.
Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.

Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов.

 Недостатки:
  • необходима программа - интерпретатор
  • медленнее компилируемых программ
  • большие требования к ресурсам
  • требование корректности исходного кода (при внесении изменений требуется перекомпиляция кода)

Достоинства:
  • компактность
  • НЕзависимость от ОС (переносимость)
  • быстродействие

Основные термины/понятия

ООП - парадигма программирования, основными концепциями которой являются понятия "класс" и "объект". Класс - своего рода модель объекта, описывающая его устройство.

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

  • Абстракция (позволяет работать с объектами, не вдаваясь в детали их реализации) 
  • Инкапсуляция (сокрытие данных и деталей реализации класса или объекта) 
  • Наследование (позволяет описывать новые классы на основе уже существующих) 
  • Полиморфизм (позволяет объектам с одинаковой спецификацией иметь различную реализацию) 

Основные типы взаимоотношений между объектами/классами:

  • агрегация  ("has-a" relationship) - вложение, когда объекты могут существовать независимо друг от друга
EX: профессора vs факультеты - при разрушении факультетов профессора остаются 
  • композиция  ("has-a" relationship) - более строгое вложение, когда включаемый объект может существовать только как часть контейнера
EX: факультеты vs университет - факультеты не могут существовать вне университета (при разрушении университета разрушаются и факультеты)
  • наследование  ("is-a" relationship)
EX: животные vs собака

Виртуальный метод - метод, который может быть переопределен в классах - наследниках (в JAVA все методы по сути являются виртуальными, если они не объявлены с модификаторами private и/или final)