Добрый день Я готовлюсь к экзамену и у меня возникли вопросы 1)Структура языков програмирования(способы определения языка) 2)Отладка программы(инструменты,компиляция) 3)конструкторы и деструкторы
Приветствую Вас, roman! 2) На практике часто встречаются ситуации, когда в создаваемой нами программа появляется какая-то ошибка и нет возможности, просто узнать причину этой ошибки. Например программа не делает того, что мы хотим, или сообщает нам о том, что по такому-то адресу в памяти произошла ошибка (ну типа Access Viaolation и т.д.). В этом случае программу нужно отлаживать - т.е. искать и исправлять ошибку. Для отладки программы используются отладчики - специальные инструменты, которые представляют исполняемый код в виде набора команд ассемблера. Трассируя (выполняя) каждую ассемблерную инструкцию программист смотрит что происходит в программе изнутри - ведь когда программа представлена в виде ассемблерных программ - это есть ее вид изнутри. Так получается что когда программа представлена в ассемблерном виде, то найти ошибку гораздо проще. Потому что мы
можем явно увидеть какая инструкция приводит к ошибке и попытаться ее исправить. На самом деле очень сложно обхъяснить процесс и преимущества отладки человеку, который ни разу ее не делал, это нужно показывать только на примере. Но в общем случае я об этом рассказал. Как я уже сказал для отладки используются отладчики =) Простейшие отладчики уже обычно встроены в среды программирования, например в Pascal, Delphi и т.д. Они конечно убогие, но для начала подойдут и они. Например вы можете попробовать написать какую-нибудь простейшую программу на Delphi, поставить точку прерывания на какой-нибудь строке программы и запустить программу. Когда программа прервется на точке прерывания, жмем правой кнопкой в окне кода и выбираем в меню Debug -> View CPU. Мы увидим ассемблерный листинг нашей программы и таким образом можем ее отлаживать при возникновении ошибки. На деле же часто бывает что встроенного
отладчика не хватает, потому что очень уж он убогий и простой, поэтому используются альтернативные мощные отладчики такие как: SoftIce, IDA Pro, OllyDBG, TRW (это все для Windows) или SoftIce for DOS, AFD, CodeView (это все для DOS + многим все-таки нравится встроенный Turbo Debugger) Ну вот вроде и все. 3) При работе с классами и объектами классов необходима инициализация (выделение памяти, задания начальных значений). Для решения проблемы инициализации и деинициализации существуют функция-конструктор и функция-деструктор. Конструктор обычно используется для задания начального значения переменных объекта, выделения памяти и т.д. Деструктор обычно используется для освобождеия памяти занимаемой объектом. функция конструктор объявляется в классе с помощью ключевого слова constructor, например constructor Create(x, y : integer); функция деструктор объявляется в классе
с помощью ключевого слова destructor, например destructor Destroy(); В С++ конструктор объекта вызывается при объявлении объекта. В Delphi же, такого не происходит, и инициализацию (вызов конструктора) приходится производить самому. Например у нас есть такой класс MyClass: type MyClass = class i,j,k : integer; end; Допустим что при работе с объектом класса MyClass нам всегда нужно задавать начальные значения i,j,k. Мы можем написать так: var MyObject : MyClass; begin MyObject := MyClass.Create; // Вызов родительского конструктора класса TObject для выделения памяти объекту MyObject.i := 5; MyObject.j := 10; MyObject.k := 15; А можем добавить в класс конструктор: type MyClass = class i,j,k : integer; constructor MyClass.Create(_i, _j, _k : integer); end; constructor MyClass.Create(_i, _j, _k : integer); begin i := _i;
j := _j; k := _k; end; И проинициализировать наш объект так: var MyObject : MyClass; begin MyObject := MyClass.Create(5,10,15); Думаю смысл конструкторов понятен, хотя мой пример слабо отражает необходимость конструкторов. Но тем не менее они необходимы всегда, как минимум для выделения памяти объекту. Ответ отправлен: 11.06.2004, 16:28 Отправитель: CrackLab Отвечает rmf
Приветствую Вас, roman! Ну ты и смешал! Сам-то понял, что спросил? 1. Структура языков программирования - это как понимать, поо каким критериям? И при чем здесь способы определения языка? Что под этим понимается? Описание синтаксиса? Языки бывают следующих типов: - последовательные (типа ранних версий Бейсика) - блочно-ориентированные (программа разбивается на независимые блоки), среди них можно выделить: * процедурно-ориентированные (Паскаль, Си) * модульно-ориентированные (Ада) - объектно-ориентированные (Си++) - функциональные (Лисп) - логические (Пролог)
Для описания синтаксиса языка обычно используются структурные диаграммы.
2. Отладка программы - а при чем тут компиляция? Инструменты - либо встроенный в среду отладчик, либо универсальные, типа AFD Pro, Turbo Debugger, IDA Pro и т.п. Для отладки в исходном
коде необходимо, чтобы компилятор добавил в исполняемый модуль отладочную информацию.
3. Конструкторы и деструкторы - это специальные методы объекта, которые выполняют действия по созданию и удалению объекта соответственно.
Ответ отправлен: 11.06.2004, 16:18 Отправитель: Ayl Отвечает sir henry
Здравствуйте, roman! 1. Язык определяется его синтаксисом. Т.е. есть определенные лексемы, с помощью которых и происходит решение заданной задачи в этом языке. 2. В Виндоусе - написание, компиляция и отладка, в 95% случаев, идет в Интегрированой Среде (оболочке), типа как в Паскале, СС++, Дельфи и т.п.. Скриптовый язык отлаживается без компиляции (РНР например) в той среде, где он должен работать (на сервере Апачи, например). Т.е. инструментом отладки и компилирования является оболочка языка. В юникс-подобных системах(Free, Linux, Solaris, etс) отладка раньше велась с помощью отдельного инструмента - типа gdb. Т.е. сначала написание исходника в текстовом редакторе, потом компиляция или сразу сборка, если программа небольшая, потом отладка. Однако в последнее время и там чувствуется влияние Виндоус - появились Kylix, KDE development и т.п. интегрированиые оболочки,
где все идет в рамках запущеной оболочки. 3. Конструктор - это создатель объекта в памяти, который вдобавок еще и проводит необходимые сопутствующие действия. Например инициализацию полей, свойств объекта. Деструктор - это его противоположность :). Ответ отправлен: 11.06.2004, 05:19 Отправитель: sir henry
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.