Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
40
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

Глава 3

Технология создания программ

Мы изучили достаточное количество средств языка C++ (большей частью относящихся к подмножеству языка С), и пришло время обсудить, какими же принципами надо руководствоваться, чтобы получить в результате написания программы не карточный домик, готовый рухнуть от любого неосторожного движения, а красивую и надежную конструкцию.

В этой главе три раздела. В первом приведены рекомендации, которые будут полезны при создании даже самых простых программ. Они касаются в основном записи алгоритмов на языке C++ и документирования программ. Технология проектирования и тестирования более крупных программ рассмотрена во втором разделе (с. 109). Третий раздел посвящен рассмотрению динамических структур данных, которые широко используются для создания эффективных процедур обработки данных.

Кодирование и документирование программы

С приобретением опыта программист вырабатывает собственные правила и стиль. При этом полезно учиться не только на собственных неудачах, и разумное следование приведенным ниже рекомендациям поможет избежать многих распространенных ошибок. Конечно, на все случаи жизни советы дать невозможно, ведь не зря программирование, особенно на заре его развития, считалось искусством.

Главная цель, к которой нужно стремиться, — получить легко читаемую программу возможно более простой структуры. Широко известен верный в большинстве случаев девиз — «Better simpler than clever» (лучше по-простому, чем по-умному). В конечном счете все технологии программирования направлены на достижение именно этой цели, поскольку только так можно добиться надежно-

Глава 3. Технология создания программ

103

сти и простоты модификации программы1. Смысл девиза заключается в том, что если какое-либо действие можно запрограммировать разными способами, то предпочтение должно отдаваться не наиболее компактному и даже не наиболее эффективному, а такому, который легче для понимания. Особенно это важно в том случае, когда пишут программу одни, а сопровождают другие, что является широко распространенной практикой.

Если вы еще не прониклись приведенным выше тезисом, попробуйте разобраться в приведенной ниже программе. Несмотря на то, что на первый взгляд2 она кажется полнейшей абракадаброй, это программа на С, и она работает:

#include <stdio.h>

main (int t. int _. char *a){return!0<t?t<3?main(-79,-13,a+main(-87.1-_.

main(-86.0.a+l)+a)): l,t<_ ? main(t+l._,a):3.main(-94.-27+t.amt==2\

?_<13?main(2._+l,"2s %6 Xd\n"):9:16:t<0?t<-72?

main(_^/@n4j7*s{}w+/v^

{n+,/+#n+./# :#q#n+,/+k#;*+,/,r :'d*'3.}{w+K w'K:,+}e#';dq#'l q#'+d'K#!\

/+k#;q#,r}eKK#}w'r}eKK{nl]7#;#q#n,){)#}w'){){nl]7+#n,;d}rw' i:# ){nl]!\

/n{n#'; r{#w'r nc{nl]7#{l. + ,K {rw' 1K{;[{nl]7w#q#n,wk nw' iwk{KK{nl]!/\

w{ri##w#' i; :{nl]7*{q#'ld;r,}{nlwb!/*de},c ; ;{nl'-{}™]7+.}##'*}\

#nc,'.#nw]7+kd'+e}+;#'rdq#w! nrV ') }+}{rl#'{n' ')# }'+}#(!!/")

:t<-50?_==*a?putchar(31[a]):

main(-65._,a+l):

main((*a==7')+t._.a+l):

0<t?main(2,2."XsM)

:*a==7' ||main(0.main(-61.*a.

"!ek;dc i @bK'(q)-[w]**n+r3#l.{}:\nuwloca-0;m .vpbks.fxntdCeghi ry"

).a+l);

} Для тех, кто поленился набрать приведенный выше текст на клавиатуре, скомпилировать его и запустить программу на выполнение, приведу фрагмент ее вывода:

On the first day of Christmas my true love gave to me a partridge in a pear tree.

On the second day of Christmas my true love gave to me

two turtle doves

and a partridge in a pear tree.

On the third day of Christmas my true love gave to me three french hens, two turtle doves and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me

Может показаться странным, зачем с самого начала думать о модификации программы. Но ведь для любого сколько-нибудь удачного коммерческого продукта выход новых версий — единственный способ не потерять актуальность среди пользователей.

2 А также на второй, третий и пятнадцатый.

104