лекция 16 (Языки программирования (лекции) (2008)), страница 2
Описание файла
Файл "лекция 16" внутри архива находится в папке "Языки программирования (лекции) (2008)". Документ из архива "Языки программирования (лекции) (2008)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "лекция 16"
Текст 2 страницы из документа "лекция 16"
Механизм раздельной трансляции хорошо ложится на модульную структуру.
Модуль, как физическая единица и как логическая единица, хорошо коллерируют между собой.
А что в языках с классовой структурой? Они пошли другим путём.
В языках медленно но верно исчезают различия между ТБ и ПБ.
В Дельфи, C# и Java оттранслированный код - отнюдь не старый объектный код...
Java:
файл с расширением .class, в котором:
- объектный код на языке VJM;
- вся информация об именах (публичные и защищенные)
Обмануть компилятор Java очень тяжело обмануть, в отличие от компилятора C++ можно получить доступ к приватным членам, посредством описания структуры класса, эквивалентного данному по распределению памяти, у которого все имена- публичные, и преобразовав указатель на один класс в указатель на другой, у которого все приватное.
В Java неконтролируемое преобразование запрещено--> взлом на уровне языка запрещен.
В современных яп для обеспечения безопасности вся содержательная информация об именах храниться в неоттранслированном коде. Существуют специальные программы, которые могут восстановить по соответствующему коду восстановить исходный текст, за исключением имен локальных переменных.(disassembly), комментариев, кроме тех, которые вставляются в объектный код:
/// - В C#
//* - В Java
В современных яп сливаются программная и трансляционная часть.
В C# и Java единица управления контекстом - это пространство имён (namespace) и пакет (package).
Java (используемые имена):
import package_name.class_name;
import package_name.*;- все классы
если нет конфликта имен, то соответствующие имена становятся видимыми непосредственно.
Можно не подключать пакеты, а использовать классы напрямую:
package_name.class_name
То есть, обязательного требования импортирования нет.
import- для ускорения процесса трансляции. В этот момент компилятор находит соответствующий пакет, в нем- соответствующий класс. Загружает таблицу имен . В классе содержится и объектный код, и таблица имен, т.к. нет разницы между ТБ и ПБ. Не используя импортирование каждый раз, когда встречается обращение проделывается та же операция, следовательно при частом обращении импортирование экономит время.
Аналогично и в C#:
using namespace_name;-все классы
using System;- все имена из модуля System видим непосредственно.
System.Console-напрямую.
Способ зависит от частоты использования.
7