Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию / 01 Понятие программы.pptx
Скачиваний:
59
Добавлен:
06.06.2015
Размер:
137.86 Кб
Скачать

Этапы создания программ

 

Каскад

Инкремент

Эволюция

Создание программы

Один

Итерации

Итерации

 

проход

 

 

Размер программы

Ограниченн

Любой

Любой

 

ый

 

 

Изменение технологии

Невозможно

Затруднено

Возможно

Требования к

Не

Расширяютс

Пересматрива

программе

меняются

я

ются

(спецификация)

 

 

 

Учёт новых пожеланий

Нет

Частично

Полностью

заказчика

 

 

 

Качество программы

Высокое

Ограниченн

Ограниченное

 

 

ое

 

Требования к

Низкие

Высокие

Высокие

квалификации

 

 

 

разработчиков

 

 

 

Примеры технологий

Плановая

Extreme Programming (XP)

Написание исходного кода

Выбор языка программирования

Следование стандарту языка

Следование системе правил

Именование типов, переменных, констант, функций, файлов

Деление кода на функции, файлы, компоненты

Форматирование и комментирование кода

Минимальное дублирование кода

Похожим действия -- похожая запись

 

(«устойчивые обороты»)

 

 

if (1==x) x=0; else x=1;

 

 

x=1-x;

 

Рефакторинг кода (code refactoring)

 

int T[2] = {1, 0}; x =

Ревью кода (code review)

T[x];

x = x?0:1;

 

 

x = !x;

 

 

if (1==x) x=0;

 

 

else if (0==x) x=1;

 

 

else assert(x==0||x==1);

Компиляция исходного кода

Файлы с исходным кодом называются единицами компиляции

Результатом компиляции является файл с объектным кодом

Если изменения в файле Ф1 могут нарушить логику работы кода в файле Ф2, то Ф2 зависит от Ф1

Системы компиляции умеют автоматически учитывать некоторые зависимости между файлами

GNU make, MS nmake, scons, …

За учёт всех зависимостей отвечает программист

Компиляция исходного кода

worker.h

Для чего

void do_some_work();

worker.c

нужна строка

#include "worker.h"

#include

void do_some_work() { /* … */

}"worker.h" в

main.c

файле

#include "worker.h"

{

worker.c?

int main()

 

do_some_work();

 

 

return 0;

 

}

 

Изменения в worker.c требуют изменений в worker.h и перекомпиляции worker.c и main.c

Сборка (линковка)

Различают три вида сборки

Сборка статической библиотеки

Сборка динамической библиотеки

Сборка исполняемого файла

Сборка статической библиотеки

Вход: объектные файлы

Выход: архив, содержащий эти файлы

Статическая библиотека – средство группирования логически связанных объектных файлов

Сборка динамической библиотеки

Вход: объектные файлы, статические библиотеки, ранее созданные динамические библиотеки

Выход: файл со служебной информацией для ОС и машинными инструкциями, годными для исполнения процессором

Динамическая библиотека – средство построения программ в процессе их работы

Сборка исполняемого файла

Вход: объектные файлы, статические библиотеки, динамические библиотеки

Выход: файл со служебной информацией для ОС, машинными инструкциями, годными для исполнения процессором, и «точкой входа»

Компиляция, сборка,

загрузка в память для

Свой

Чужой исходный

 

К – компилятор

исполнения код

 

 

исходный

(заголовочные файлы

 

Л – линкер,

код

библиотек и т.п.)

 

редактор связей

 

 

 

К

 

 

З – загрузчик ОС

Объектный

 

 

код

Динамическа

 

 

 

 

я библиотека

 

Л

 

З

 

Исполняемый

 

Статическа

файл

Исполняемы

я

 

 

й код

библиотека

 

 

 

Сборка (линковка)

c:\Users\espetrov>cl –c worker.c c:\Users\espetrov>dumpbin /all /disasm worker.obj

Microsoft (R) COFF/PE Dumper Version

SECTION HEADER #2

9.00.21022.08

Copyright (C) Microsoft Corporation. All rights

.debug$S name

reserved.

0 physical address

 

0 virtual address

Dump of file worker.obj

70 size of raw data

BB file pointer to raw data (000000BB to

File Type: COFF OBJECT

0000012A)

0 file pointer to relocation table

FILE HEADER VALUES

0 file pointer to line numbers

0 number of relocations

14C machine (x86)

0 number of line numbers

3 number of sections

42100040 flags

5048208D time date stamp Thu Sep 06

Initialized Data

11:03:25 2012

Discardable

130 file pointer to symbol table

1 byte align

9 number of symbols

Read Only

0 size of optional header

RAW DATA #2

0 characteristics

SECTION HEADER #1

00000000: 04 00 00 00 F1 00 00 00 61 00 00 00

23 00 01 11 ....ñ...a...#...

.drectve name

00000010: 00 00 00 00 63 3A 5C 55 73 65 72 73

0 physical address

5C 65 73 70 ....c:\Users\esp

0 virtual address

00000020: 65 74 72 6F 76 5C 77 6F 72 6B 65 72

2F size of raw data

2E 6F 62 6A etrov\worker.obj

8C file pointer to raw data (0000008C to

00000030: 00 3A 00 3C 11 00 22 00 00 07 00 0F

000000BA)

00 00 00 1E .:.<..".........

0 file pointer to relocation table

00000040: 52 08 00 0F 00 00 00 1E 52 08 00 4D

0 file pointer to line numbers

69 63 72 6F R.......R..Micro

0 number of relocations

00000050: 73 6F 66 74 20 28 52 29 20 4F 70 74

0 number of line numbers

69 6D 69 7A soft (R) Optimiz

100A00 flags

00000060: 69 6E 67 20 43 6F 6D 70 69 6C 65 72

Info

00 00 00 00 ing Compiler....

Remove

SECTION HEADER #3

1 byte align

RAW DATA #1

.text name

0 physical address

00000000: 20 20 20 2F 44 45 46 41 55 4C 54

0 virtual address

4C 49 42 3A 22 /DEFAULTLIB:"

5 size of raw data

00000010: 4C 49 42 43 4D 54 22 20 2F 44 45

12B file pointer to raw data (0000012B to

46 41 55 4C 54 LIBCMT" /DEFAULT

0000012F)

00000020: 4C 49 42 3A 22 4F 4C 44 4E 41 4D

0 file pointer to relocation table

45 53 22 20 LIB:"OLDNAMES"

0 file pointer to line numbers

Linker Directives

0 number of relocations

0 number of line numbers

-----------------

60500020 flags

/DEFAULTLIB:"LIBCMT"

 

/DEFAULTLIB:"OLDNAMES"

 

Code

16 byte align

Execute Read

_do_some_work:

 

00000000: 55

push ebp

00000001: 8B EC

mov

ebp,esp

 

00000003: 5D

pop ebp

00000004: C3

ret

RAW DATA #3

 

 

 

 

 

U.ì]Ã

00000000: 55 8B EC 5D C3

 

 

COFF SYMBOL TABLE

notype

Static

| @comp.id

000 0083521E ABS

001 00000001

ABS

notype

Static

| @feat.00

002 00000000

SECT1

notype

Static

| .drectve

Section length

2F, #relocs

0, #linenums

0,

checksum

0

 

 

Static

| .debug$S

004 00000000

SECT2 notype

Section length

70, #relocs

0, #linenums

0,

checksum

0

 

notype

Static

| .text

006 00000000

SECT3

Section length

5, #relocs

0, #linenums

0, checksum

672BE856

SECT3

notype () External

 

|

008 00000000

 

_do_some_work

String Table Size = 0x12 bytes

Summary

70 .debug$S

2F .drectve

5 .text