Лекция: Основной принцип структурного программирования

www.history.org.ua. — Інститут історії України НАНУ.

www.nbuv.gov.ua. — Національна бібліотека ім… В. Вернадського.

diasporiana.org.ua/istoriya/page/2/ — сайт публікацій істориків з української діаспори.

litopys.org.ua. — електронний збірник першоджерел та історичної літератури з історії України.

exlibris.org.ua. — українська електронна бібліотека історичної, публіцистичної та художньої літератури (представлені твори провідних українських істориків).

www.memory.gov.ua. — Український інститут національної пам'яті.

www.lnu.edu.ua/istoryky. — Інститут історичних досліджень.

www.nbuv.gov.ua. — Національна бібліотека України імені В.І.Вернадського.

www.ukrhistory.narod.ru. — Українська історична бібліотека.

www.archives.gov.ua. — Державний комітет архівів України.

www.iri—ran.ru. — Інститут російської історії РАН.

pidruchniki.ws/istoriya. — підручники з історії України.

history.franko.lviv.ua/dovidnyk. — довідники з історії України.

unknownwar.info/—_8/. — наукові публікації та мемуари, присвячені революційним подіям в Україні у 1917—1921 рр.

 

С примерами на Object PASCAL

(72 часа)

Вадим Валериевич Монахов, доцент кафедры вычислительной физики СпбГУ

Введение

 

Основной принцип структурного программирования

Структурное программирование — это метод программирования, опирающийся на структурную организацию программы.

Основной принципструктурного программирования — обеспечить максимальное соответствие структуры текста программы логике решаемой проблемы.

 

Способы реализации основного принципа структурного программирования:

1) Структурируемости и читаемости текста программы –отступы, обозначения, группировка частей текста.

2) Отлаживаемость программы – пригодность конструкций языка к отладке. В значительной степени связана с особенностямитипизации данных. Наличие жесткого контроля типов с диагностикой ошибок при трансляции программы. Другая важная часть – наличие интегрированной среды разработки.

3) Инкапсуляция данных — наличие структурных типов данных (массивы, записи, строки, множества, файловые типы, потоки и т.п.) с возможностью оперирования переменной структурного типа как единым целым.

4) Инкапсуляция программного кода -блоки разных уровней, модули, пакеты и т.п. с особыми правилами прозрачности и интерфейсами между ними.

5) Инкапсуляция программного кода и данных во время выполнения программы, со специальными ограничениями доступа, правилами прозрачности, интерфейсами, диагностикой ошибок во время выполнения программы. Примеры: обработка исключительных ситуаций во время выполнения, обработки событий, подпроцессы.

 

 

Примеры неструктурных языков:

Ассемблер — не удовлетворяет:

1. «Читаемость» — из-за плохой читаемости программы, отсутствия структурируемости текста;

2. «Отлаживаемость» — полное отсутствие;

3. «Структурные типы» — полное отсутствие;

4. «Инкапсуляция кода» — полное отсутствие;

5. «Инкапсуляция времени выполнения» — полное отсутствие.

FORTRAN — не удовлетворяет:

1. «Читаемость» — из-за необходимости часто использовать оператор goto, неразвитости блочной организации текста программы, позиционной зависимости кода;

2. «Отлаживаемость» — из-за отсутствия пользовательских типов и, что более критично — слабого контроля типов. С этим связано существование недиагностируемых ошибок типа DO7I=1.10, когда в операторе цикла вместо "," поставили ".", в результате чего «Voyager» пролетел мимо Венеры;

3. «Структурные типы» — отсутствие структурных типов данных (кроме массивов);

4. «Инкапсуляция кода» — почти отсутствует, так как нет модулей, вложенности блоков программного кода (подпрограммы не могут быть вложены друг в друга) и крайне плохо организованных интерфейсов между блоками кода (операторы block data и т.д.);

5. «Инкапсуляция времени выполнения» — полное отсутствие.

В FORTRAN-77 появились возможности, преодолевающие ряд перечисленных недостатков. FORTRAN-99 пошел еще дальше, однако многие недостатки сохранялись, а новые возможности сделали его достаточно сложным и непоследовательным.

 

 

Примеры структурных языков:

С:

1. «Читаемость» — удовлетворительно (не очень хорошая читаемость из-за наличия макросов машинной ориентации языка с выражениями типа y+=x );

2. «Отлаживаемость» —удовлетворительно не очень хороший синтаксис языка, поэтому много ошибок не отслеживается при компиляции (например, "," вместо ";" в функции «for», а также ошибки, возникающие из-за правил автоматического приведения типов). Наличие указателей с соответствующими правилами присваивания часто приводит к фатальным ошибкам.

3. «Структурные типы» —хорошо;

4. «Инкапсуляция кода» —хорошо. Не очень удачно организована модульность;

5. «Инкапсуляция во время выполнения» — полное отсутствие.

C++:

То же, что C, 2) несколько усовершенствован (однако переусложнен). Имеется объектная модель, расширяющая 1), 2), 3), 4). Правда, имеется дефект в ограничении правила видимости объектов (правила видимости могут быть несанкционированно изменены).

5)«Инкапсуляция времени выполнения» — наличие обработки исключительных ситуаций (exceptions).

PASCAL:

1. «Читаемость» — хорошо;

2. «Отлаживаемость» — хорошо. Проблемы: правила автоматического приведения типов, работа с указателями, явное приведение типов, вариантная запись;

3. «Структурные типы» — хрошо;

4. «Инкапсуляция кода” —удовлетворительно: отсутствуют модули (в стандарте языка) и пакеты; Turbo Pascal лучше удовлетворяет „4)“, хоть и имеет не очень продуманные интерфейсы и правила видимости между модулями;

5. „Инкапсуляция времени выполнения“ — полное отсутствие.

Object Pascal (начиная с Delphi 2.0) (без явного применения объектов):

Имеется объектная модель, расширяющая 1), 2), 3), 4). Кроме того, начиная с Delphi 3.0 появились пакеты.

5)»Инкапсуляция времени выполнения" —

а) наличие обработки исключительных ситуаций (exceptions);

b) работа с подпроцессами (threads).

Java:

1. «Читаемость» — удовлетворительно. Недостатки: переусложненность ряда простых в принципе действий из-за чрезмерного увлечения объектным подходом (например, при действиях с файлами и строками); «рецидивы», ведущие происхождение от С (операнды типа y+=x, функции for,?: и т.п. Зато макросы отсутствуют!). Наличие большого числа маленьких подпрограмм (классов) без возможности их объединения в единое целое.

2. «Отлаживаемость» —отлично, за исключением правил автоматического приведения типов (указатели ликвидированы!);

3. «Структурные типы» —хорошо;

4. «Инкапсуляция кода» —хорошо. Сложность: отсутствие вложенных программ. В некоторой степени решено, начиная с Java 1.1 – вложенные классы;

5. «Инкапсуляция во время выполнения» — хорошо. Имеются:

a. обработка исключительных ситуаций;

b. работа с подпроцессами (threads).

JavaScript/Jscript

1)”Читаемость” – удовлетворительно ( С-образен);

2)”Отлаживаемость” – неудовлетворительно (свободная типизация и при этом слабая типизация), крайне плохая диагностика ошибок;

3)”Структурные типы” – хорошо (благодаря объектной модели);

4)”Инкапсуляция кода” – удовлетворительно (нет модулей, пакетов; вложенные функции появились только в JavaScript 1.2);

5)”Инкапсуляция времени выполнения” – удовлетворительно для JS в IE4 и последующих (есть обработка исключений), неудолетворительно – для других бразеров.

 

еще рефераты
Еще работы по информатике