Инструментальные средство UNIX, работающие в среде DOS

[URL 30] The UWIN Development Tools

www.gtlinc.com/Products/Uwin/uwin.html

Компания Global Technologies, Inc., Old Bridge, NJ

Пакет UWIN предоставляет библиотеки динамической сборки (DLL) Windows, которые эмулируют огромную часть библиотечного интерфейса уровня Unix С. Используя данный интерфейс, компания Global Technologies, Inc. перенесла огромное число инструментальных средств из командной строчки Unix в систему Инструментальные средство UNIX, работающие в среде DOS Windows. См. также [URL 31].

[URL 31] The Cygnus Cygwin Tools

www.sourceware.cygnus.com/cygwin/

Компания Cygnus Solutions, Sunnyvale, CA

Пакет Cygnus также эмулирует интерфейс библиотеки Unix С и предоставляет большой набор инструментальных средств, работающих в режиме командной строчки Unix, при работе в операционной системе Windows.

[URL 32] Perl Power Tools

www.perl.com Инструментальные средство UNIX, работающие в среде DOS/language/ppt/

Данный проект посвящен повторной реализации традиционного набора команд Unix на языке Perl, что дает возможность их использования при работе со всеми платформами, поддерживающими Perl (их достаточно много).

Средствауправленияисходнымтекстомпрограмм

[URL 33] RCS – Revision Control System

www.cyclic.com

Система управления начальным текстом программ GNU для Unix и Windows NT.

[URL 34] CVS – Concurrent Инструментальные средство UNIX, работающие в среде DOS Version System

www.cyclic.com

Система управления начальным текстом программ для Unix и Windows NT, распространяемая безвозмездно. Расширяет способности Revision Control System, поддерживая модель «клиент-сервер» и параллельный доступ к файлам.

[URL 35] Aegis Transaction-Based Configuration Management

www.canb.auug.org.au/"mil!erp/aegis.html

Инструментальное средство регулирования версиями (направленное на процесс Инструментальные средство UNIX, работающие в среде DOS), которое применяет к ним имеющиеся эталоны проекта (к примеру, проверку прохождения тестов для возвращаемых программных кодов).

[URL 36] ClearCase

www.rational.com

Управление версиями программки, рабочей областью и полной сборкой программки, управление процессом.

[URL 37] MKS Source Integrity

www.mks.com

Управление версиями и конфигурацией. Некие версии включают средства, дозволяющие удаленным пользователям-разработчикам сразу работать над Инструментальные средство UNIX, работающие в среде DOS одними и теми же файлами.

[URL 38] PVCS Configuration Management

www.merant.com

Система управления начальным текстом программ, очень пользующаяся популярностью при работе в Windows.

[URL 39] Visual SourceSafe

www.microsoft.com

Система управления версиями, интегрируемая с инструментами зрительной разработки компании Microsoft.

[URL 40] Perforce

www.perforce.com

Менеджер конфигурирования программного обеспечения "клиент-сервер".

Остальные инструментальные средства

[URL 41] Winzip Инструментальные средство UNIX, работающие в среде DOS – Archive Utility for Windows

www.winzip.com

Компания Nico Mak Computing, Inc., Mansfield, CT

Утилита архивирования файлов, работающая в среде Windows. Поддерживает форматы zip и tar.

[URL 42] The Z Shell

www.sunsite.auc.dk/zsh

Оболочка, созданная для интерактивной работы и содержащая мощнейший язык сценариев. В оболочку zsh было включено много нужных Инструментальные средство UNIX, работающие в среде DOS средств из оболочек bash, ksh и tcsh и добавлен ряд уникальных частей.

[URL 43] A Free SMB Client for Unix Systems

www.samba.anu.edu.au/pub/samba/

Дает возможность совместного использования файлов и других ресурсов из операционных систем Unix и Windows. Samba содержит в себе:

• Сервер SMB, предоставляющий средства для работы Инструментальные средство UNIX, работающие в среде DOS с файлами и для печати (идентичные со средствами, предоставляемыми Windows NT и LAN Manager) клиентам SMB, в роли которых могут выступать Windows 95, Warp Server, smbfs и др.

• Сервер имен Netbios, обеспечивающий, не считая всего остального, поддержку функций браузера. По желанию юзера Samba может быть основным браузером в локальной сети Инструментальные средство UNIX, работающие в среде DOS.

• Клиент SMB (похожий с клиентом ftp), позволяющий получать доступ к ресурсам ПК(дискам и принтерам) из Unix, Netware и других операционных систем.

Статьи и публикации

[URL 44] The comp.object FAQ

www.cyberdyne-object-sys.com/oofaq2

Приличный, верно организованный перечень нередко задаваемых вопросов по группе новостей comp.object.

[URL Инструментальные средство UNIX, работающие в среде DOS 45] extreme Programming

www.Xprogramming.com

Цитата с интернет-сайта: "При разработке команды, способной стремительно сделать только надежное, действенное, верно структурированное программное обеспечение, в ХР употребляется очень легковесное сочетание методик. Многие из методик ХР создавались и опробовались в части проекта СЗ компании «Крайслер», представляющего из себя очень успешную систему расчета зарплаты, написанную на Инструментальные средство UNIX, работающие в среде DOS языке Smalltalk".

[URL 46] Alistair Cockburn's Home Page

www.members.aol.com/acockburn

Стоит поглядеть раздел "Structuring Use Cases with Goals" и так именуемые шаблоны сценариев использования.

[URL 47] Martin Fowler's Home Page

www.ourworld.compuseimcom/homepages/martinjowler

Мартин Фаулер является создателем книжки "Analysis Patterns" и соавтором книжек "UML Distilled" и "Refactoring: Improvingthe Design of Инструментальные средство UNIX, работающие в среде DOS Existing Code". На домашней страничке создателя дискуссируются его книжки и работа с UML.

[URL 48] Robert С. Martin's Home Page

www.objectmentor.com/home

Хорошее собрание статей ознакомительного плана по объектно-ориентированным способам, включая анализ зависимости и метрики.

[URL 49] Aspect-Oriented Programming

www.parc.xerox.com/csl/projects/aop/

Описывается Инструментальные средство UNIX, работающие в среде DOS методика придания функциональности программному коду с позиций ортогональности и описательности.

[URL 50] JavaSpaces Specifications

www.java.sun.com/products/javaspaces

Linda-подобная система для Java, поддерживающая распределенное сохранение состояния объекта и распределенные методы.

[URL 51] Netscape Source Code

www.мозилла.org

Начальный текст браузера Netscape.

[URL 52] The Jargon File

www.jargon.org

Eric S. Raymond

Определения денька многих общих Инструментальные средство UNIX, работающие в среде DOS (и не очень общих) определений, используемых в компьютерной промышленности, сдобренные неплохой дозой соответственного фольклора.

[URL 53] Eric S. Raymond's Papers

www.tuxedo.org/~esr

Статьи Эрика Раймона "The Cathedral and the Bazaar" и "HomesteadingNoosphere", в каких описаны психосоциальные базы и смысл движения Open Source.

[URL 54] The К Desktop Environment

www Инструментальные средство UNIX, работающие в среде DOS.kde.org

Цитата с web-страницы: "KDE представляет собой сильную графическую настольную среду для рабочих станций Unix. KDE является интернет-проектом, открытым в полном смысле этого слова".

[URL 55] The GNU Image Manipulation Program

www.gimp.org

Gimp является бесплатной программкой по созданию, композиции и ретушированию изображений.

[URL 56] The Demeter Project

www.ccs.neu.edu Инструментальные средство UNIX, работающие в среде DOS/research/demeter

Исследовательский проект, призванный упростить поддержку и развитие программного обеспечения при помощи адаптивного программирования.

Другие источники

[URL 57] The GNU Project

www.gnu.org

Фонд Free Software Foundation, Boston, MA

Фонд "Free Software Foundation" – это некоммерческая благотворительная организация, осуществляющая сбор средств на проект GNU. Целью проекта GNU является создание завершенной, бесплатной UNIX-подобной операционной системы Инструментальные средство UNIX, работающие в среде DOS. Многие из попутно разработанных инструментальных средств уже стали отраслевыми эталонами.

[URL 58] Web Server Information

www.netcraft.com/survey/servers.html

Ссылки на домашние странички, находящиеся более чем на 50 web-серверах. Часть из их является коммерческими продуктами, другие же распространяются безвозмездно.

Библиография

[Bak72] F.T. Baker. Chief programmer team management of production Инструментальные средство UNIX, работающие в среде DOS programming. IBM Systems Journal, 1 1(1 ):56—73, 1972.

[BBM96] V. Basili, L. Brand, and W.L. Melo. A validation of object-oriented design metrics as quality indicators. IEEE Transactions on Software Engineering, 22(10):751-761, October 1996.

[Ber96] Albert J. Bernstein. Dinosaur Brains: Dealing with All Those Impossible People at Work. Ballantine Books, New York, NY, 1996.

[Bra95] Marshall Brain Инструментальные средство UNIX, работающие в среде DOS. Win32 System Services. Prentice Hall, Englewood Cliffs, NJ, 1995.

[Bro95] Frederick P. Brooks, Jr.. The Mythical Man Month: Essays on Software Engineering. Addison -Wesley, Reading, MA, anniversary edition, 1995.

[CG90] N. Carriero and D. Gelenter. How to Write Parallel Programs: A First Course. MIT Press, Cambridge, MA, 1990.

[CN91] Brad J Инструментальные средство UNIX, работающие в среде DOS. Cox and Andrex J. Novobilski. Object-Oriented Programming, An Evolutionary Approach. Addison-Wesley, Reading, MA, 1991.

[Coc97a] Alistair Cockburn. Goals and use cases. Journal of Object Oriented Programming, 9(7):35-40, September 1997.

[Coc97b] Alistair Cockburn. Surviving Object-Oriented Projects: A Manager's Guide. Addison Wesley Longman, Reading, MA, 1997.

[Cop92] James O. Coplien Инструментальные средство UNIX, работающие в среде DOS. Advanced С++ Programming Styles and Idioms. Addison-Wesley, Reading, MA, 1992.

[DL99] Tom Demarco and Timothy Lister. Peopleware: Productive Projects and Teams, Dorset House, New York, NY, second edition, 1999.

[FBB+99] Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts. Refactoring: Improving the Design of Existing Code Инструментальные средство UNIX, работающие в среде DOS. Addison Wesley Longman, Reading, MA, 1999

[Fow96] Martin Fowler. Analysis Patterns: Reusable Object Models. Addison Wesley Longman, Reading, MA, 1996.

[FS97] Martin Fowler and Kendall Scott. UML Distilled: Applying the Standard Object Modeling Language. Addison Wesley Longman, Reading, MA, 1997.

[GHJV95] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Инструментальные средство UNIX, работающие в среде DOS Reusable Object-Oriented Software. Addison-Wesley, Reading, MA, 1995.

[Gla99a] Robert L. Glass. Inspections – Some surprising findings. Communications of the ACM, 42(4): 17–19, April 1999.

[Gla99b] Robert L. Glass. The realities of software technology payoffs. Communications of the ACM, 42(2):74–79, February 1999.

[Hol78] Michael Holt. Math Puzzles and Games, Dorset Инструментальные средство UNIX, работающие в среде DOS Press, New York, NY, 1978.

[Jac94] Ivar Jacobson. Object-Oriented Software Engineering: A Use-Case Driven Approach. Addison-Wesley, Reading, MA, 1994.

[KLM+97] Gregor Kiczales, John Lamping, AnuragMendhekar, Chris Maeda, Cris-tina Videira Lopes, Jean-Marc Loingtier, and John Irwin. Aspect-oriented programming. In European Conference on Object-Oriented Programming (ECOOP Инструментальные средство UNIX, работающие в среде DOS), volume LNCS 1241. Springer-Verlag, June 1997.

[Knu97a] Donald Ervin Knuth. The Art of Computer Programming: Fundamental Algorithms, volume 1. Addison Wesley Longman, Reading, MA, third edition, 1997.

[Knu97b] Donald Ervin Knuth. The Art of Computer Programming: Seminumeri-cal Algorithms, volume 2. Addison Wesley Longman, Reading, MA, third edition, 1997.

[Knu98] Donald Ervin Knuth Инструментальные средство UNIX, работающие в среде DOS. The Art of Computer Programming: Sorting and Searching, volume 3. Addison Wesley Longman, Reading, MA, second edition 1998.

[KP99] Brian W. Kernighan and Rob Pike. The Practice of Programming. Addison Wesley Longman, Reading, MA, 1999.

[Kru98] Philippe Kruchten. The Rational Unified Process: An Introduction. Addison Wesley Longman, Reading, MA, 1998.

[Lak96] John Lakos Инструментальные средство UNIX, работающие в среде DOS. Large-Scale С++Software Design. Addison Wesley Longman, Reading, MA, 1996.

[LH89] Karl J. Lieberherr and Ian Holland. Assuring good style for object-oriented programs. IEEE Software, pages 38–48, September 1989.

[Lis88] Barbara Liskov. Data abstraction and hierarchy. SIGPLAN Notices, 23(5), May 1988.

[LMB92] John R. Levine, Tony Mason, and Doug Brown. Lex Инструментальные средство UNIX, работающие в среде DOS and Yacc. O'Reilly & Associates, Inc., Sebastopol, CA, second edition, 1992.

[McC95] Jim McCarthy. Dynamics of Software Development. Microsoft Press, Redmond, WA, 1995.

[Mey96] Scott Meyers. More Effective С++: 35 New Ways to Improve Your Programs and Designs. Addison-Wesley, Reading, MA, 1996.

[Mey97a] Scott Meyers. Effective С++: 50 Specific Ways to Improve Your Инструментальные средство UNIX, работающие в среде DOS Programs and Designs. Addison Wesley Longman, Reading, MA, 1997.

[Mey97b] Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall, Englewood Cliffs, NJ, second edition, 1997.

[Pet 98] Charles Petzold. Programming Windows, The Definitive Guide to the Win32 API. Microsoft Press, Redmond, WA, fifth edition, 1998.

[Sch95] Bruce Schneier. Applied Cryptography: Protocols, Algorithms, and Инструментальные средство UNIX, работающие в среде DOS Source Code in C. John Wiley & Sons, New York, NY, 1995.

[Sed83] Robert Sedgewick. Algorithms. Addison-Wesley, Reading, MA, 1983.

[Sed 92] Robert Sedgewick. Algorithms in С++. Addison-Wesley, Reading, MA, 1992.

[SF96] Robert Sedgewick and Phillipc Flajolet. An Introduction to the Analysis of Algorithms. Addison-Wesley, Reading, MA, 1996.

[Ste92] W. Richard Stevens. Advanced Programming Инструментальные средство UNIX, работающие в среде DOS in the Unix Environment. Addison-Wesley, Reading, MA, 1992.

[Ste98] W. Richard Stevens. Unix Network Programming, Volume I: Networking APIs: Sockets andXti. Prentice Hall, Englewood Cliffs, NJ, 1998.

[Ste99] W. Richard Stevens. Unix Network Programming, Volume 2: Interprocess Communications. Prentice Hall, Englewood Cliffs, NJ, second edition, 1999.

[Str35] James Ridley Stroop Инструментальные средство UNIX, работающие в среде DOS. Studies of interference in serial verbal reactions. Journal of Experimental Psychology, 18:643–662, 1935.

[WK82] James Q. Wilson and George Kelling. The police and neighborhood safety. The Atlantic Monthly, 249(3):29–38, March 1982.

[YC86] Edward Yourdon and Larry L. Constantine. Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. Prentice Hall, Englewood Cliffs Инструментальные средство UNIX, работающие в среде DOS, NJ, second edition, 1986.

[You95] Edward Yourdon. Managing projects to produce good-enough software. IEEE Software, March 1995.

Приложение В

Ответы к упражнениям

Упражнение 1 из раздела "Ортогональность"

Ответ: По нашему разумению, более ортогональным является класс Split2. Он сосредоточен на своей задачке – расщеплении строк и игнорирует подробности, связанные с источником обрабатываемых им строк. Это не Инструментальные средство UNIX, работающие в среде DOS только лишь упрощает разработку программки, да и присваивает ей огромную упругость. Класс Split2 может расщеплять строчки, считываемые из файла, сгенерированные другой программкой либо передаваемые через операционную среду.

Упражнение 2 из раздела "Ортогональность"

Ответ: Если все изготовлено корректно, то, по всей вероятности, немодальное. Система, которая употребляет немодальные диалоговые окна, испытывает наименьшее Инструментальные средство UNIX, работающие в среде DOS беспокойство о том, что происходит в хоть какой определенный момент времени. Вероятнее всего, она будет владеть наилучшей инфрастуктурой взаимодействия меж модулями по сопоставлению с модальной системой, которая может содержать интегрированные догадки о состоянии системы – догадки, которые могут привести к большему связыванию и уменьшению ортогональности.

Упражнение 3 из раздела "Ортогональность Инструментальные средство UNIX, работающие в среде DOS"

Ответ: Тут есть элемент лукавства. Объектная разработка может обеспечить наличие более ортогональной системы, но так как она имеет больше средств, которые могут эксплуатироваться с нарушением режима, в действительности легче сделать неортогональную систему, используя объекты, чем создавать ее с помощью процедурного языка. Ее особенности – множественное наследование, исключительные ситуации, перегрузка операторов и Инструментальные средство UNIX, работающие в среде DOS переопределение родительского способа (через механизм подклассов) – предоставляют достаточные способности для роста связанности не настолько явными методами.

Применяя объектную технологию и приложив маленькое дополнительное усилие, вы сможете достигнуть наличия более ортогональной системы. И хотя вы всегда сможете написать неструктурированную программку на процедурном языке, объектно-ориентированные языки, применяемые в малых дозах Инструментальные средство UNIX, работающие в среде DOS, в состоянии сделать ее более насыщенной.

Упражнение 4 из раздела "Макеты и памятные записки"

Ответ: Для спасения ситуации прибегнем к устаревшим технологиям! Нарисуйте на лекционной доске несколько картинок – автомобиль, телефон и дом – при помощи фломастера. Для этого не надо быть величавым художником, полностью довольно условных изображений. Расположите на доску памятные Инструментальные средство UNIX, работающие в среде DOS записки, описывающие содержимое мотивированных страничек в активных областях экрана. В процессе встречи вы сможете улучшать картинки и поменять размещение памятных записок.

Упражнение 5 из раздела "Языки, отражающие специфику предметной области"

Ответ: Так как мы желаем, чтоб язык был расширяемым, создадим таблицу синтаксического анализатора управляемой. Каждый элемент таблицы Инструментальные средство UNIX, работающие в среде DOS содержит знак команды, флаг, говорящий о необходимости аргумента, и имя подпрограммы, вызываемой для обработки этой определенной команды.

typedef struct {

char cmd; /* the command letter */

int hasArg; /* does it take an argument */

void (*func)(int, int); /* routine to call */

} Command;

static Command cmds[] = {

{'P', ARG, doSelectPen},

('V', NO_ARG, doPenUp},

{'D', NO Инструментальные средство UNIX, работающие в среде DOS_ARG, doPenDown},

{'N,' ARG, doPenDir},

{'E', ARG, doPenDir},

{'S', ARG, doPenDir},

{'W', ARG, doPenDir}

};

Основная программка достаточно ординарна: считать строчку, найти команду, по мере надобности принять аргумент, потом вызвать функцию обработчика.

while (fgetsfbuff, sizeof(buff), stdin)) {

Command *cmd = findCommand(*buff);

if (cmd) {

int arg = 0;

if (cmd->hasAr&& !getArg(buff+1, &arg Инструментальные средство UNIX, работающие в среде DOS)) {

fprintf(stderr,"'%с' needs an argument\n", *buff);

continue;

}

cmd->func(*buff, arg);

}

}

Функция, которая отыскивает команду, исполняет поочередный перебор таблицы, возвращая или совпадающий элемент, или NULL.

Command *findCommand(int cmd) {

int i;

for (i = 0; i

if (cmds[i].cmd==cmd)

return cmds + i;

}

fprintf Инструментальные средство UNIX, работающие в среде DOS(stderr, "Unknown command %c'\n", cmd);

return 0;

}

И в конце концов, считывание числового аргумента достаточно легко, если использовать подпрограмму sscanf.

int getArg(const char *buff, int 'result) {

return sscanf(buff, "%d", result) == 1;

}

Упражнение 6 из раздела "Языки, отражающие специфику предметной области"

Ответ 6: При использовании BNF спецификация времени могла Инструментальные средство UNIX, работающие в среде DOS бы смотреться последующим образом:

::= |

: |

:

::= am|pm

::= |

::=

::=

::= 0|1|2|3|4|5|6|7|8|9

Упражнение 7 из раздела "Языки, отражающие специфику предметной области"

Ответ: В нашем примере мы составили программку, используя генератор bison, который представляет собой GNU-версию генератора уасс. Для ясности тут показано только тело программки синтаксического анализатора. Полная версия есть на веб-сайте www.pragmaticprogrammmer.com.

time Инструментальные средство UNIX, работающие в среде DOS: spec EOF

{ if ($1>= 24*60) yyerror("Time is too large");

printf("%d minutes past midnight\n", $1);

exit(0);

}

;

spec: hour ':' minute

{ $$ = $1 + $3;

}

| hour ':' minute ampm

{ if ($1>11*60) yyerrorf "Hour out of range");

$$ = $1 + $3 + $4;

}

| hour ampm

{if ($1>11*60) yyerror("Hour out of range");

$$ = $1 + $2;

}

;

hour: hour_num

{if ($1>23) yyerror("Hour out of range");

$$ = $1 * 60;

};

minute: DIGIT DIGIT

{$$ = $1*10 + $2;

if ($$> 59) yyerrorf "minute out of range") ,

};

ampm: AM {$$ = AM_MINS;}

| PM Инструментальные средство UNIX, работающие в среде DOS {$$ = PM_MINS;)

;

hour num: DIGIT {$$ = $1;)

| DIGIT DIGIT {$$ = $1*10 + $2;}

;

Упражнение 8 из раздела "Языки, отражающие специфику предметной области"

Ответ:

$_ = shift;

/"(\d\d?)(am|pm)$/ && doTime($1, 0, $2, 12);

/"(\d\d?):(\d\d)(am|pm)$/ && doTime($1, $2, $3, 12);

/"(\d\d?):(\d\d)$/ && doTime($1, $2, 0, 24);

die "Invalid time $_\n";

#

# doTime(hour, min, ampm, maxHour)

#

sub doTime($$$$) {

my ($hour, $min, $offset Инструментальные средство UNIX, работающие в среде DOS, $maxHour) = @_;

die "Invalid hour: $hour" if ($hour>= $maxHour);

$hour += 12 if ($offset eq "pm")

print $hour*60 + $min, " minutes past midnight\n";

exit(0);

}

Упражнение 9: из раздела "Оценка"

Ответ: Ответ должен быть изложен, исходя из нескольких допущений:

• Лента содержит информацию, которую нужно передать.

• Известна скорость ходьбы человека.

• Понятно расстояние меж компьютерами.

• Временем Инструментальные средство UNIX, работающие в среде DOS, нужным для переноса инфы на ленту и с ленты, можно пренебречь.

• Утраты данных при хранении на ленте приблизительно равны их потерям при передаче по каналу связи.

Упражнение 10 из раздела "Оценка"

Ответ: Беря во внимание допущения ответа 9: Объем инфы, содержащейся на стриммерной кассете (4 Гбайт), составляет 32 х 10^9 бит, так Инструментальные средство UNIX, работающие в среде DOS что передача эквивалентного объема по каналу со скоростью 1 Мбайт/с заняла бы около 32000 сек. (приблизительно 9 ч). Если человек движется с неизменной скоростью 3,5 мили в час, то, для того чтоб канал связи затмил курьера, два компьютера должны размещаться друг от друга на расстоянии более 31 мили. Если это расстояние меньше, то победа остается Инструментальные средство UNIX, работающие в среде DOS за человеком.

Упражнение 11 из раздела "Обработка текста"

Ответ: Ответ к данному упражнению составлен на языке Perl.

my @consts;

my $name = ;

die "Invalid format – missing name" unless defined($name);

chomp $name;

# Read in the rest of the file

while () {

chomp;

s/"\s*//; s/\s*$//;

die "Invalid line: $_" unless /"(\w Инструментальные средство UNIX, работающие в среде DOS+)$/;

push @consts, $_;

}

# Now generate the file

open(HDR, ">$name.h") or die "Can't open $name.h: $!";

open(SRC, ">$name.c") or die "Can't open $name.c: $!";

my $uc_name = uc($name);

print HDR "/* File generated automatically – do not edit */\n";

print HDR "extern const char *$ {ucjiame)_name[];";

print HDR "typedef Инструментальные средство UNIX, работающие в среде DOS enum {\n"; print HDR join",\n", @consts;

print HDR "\n) $uc_name;\n\n";

print SRC "* File generated automatically – do not edit */\n";

print SRC "const char *$ {uc name}_name[] = {\n \"";

print SRC join "\",\n \"", @consts;

print SRC "\"\n};\n";

close(SRC);

close(HDR);

Используя принцип DRY Инструментальные средство UNIX, работающие в среде DOS, мы не будет вырезать и вклеивать этот вновь написанный файл в нашу программку. Заместо этого мы «включим» его – данный тонкий файл является основным источником этих констант. Потому нам пригодится файл сборки для восстановления заголовка при изменении файла. Последующий кусок содержится в системе отладки в начальном дереве (имеется на web Инструментальные средство UNIX, работающие в среде DOS-сайте).

etest.c etest.h: etest.inc enumerated.pl

perl enumerated.pl etest.inc

Упражнение 12 из раздела "Обработка текста"

Ответ: Вот ответ, написанный на языке Perl.

my $dir = shift or die "Missing directory" ,

for my Sfile (glob(u$dir/*.pr)) {

open(IP, "$file") or die "Opening $file: $!";

undef $/; # Turn off input Инструментальные средство UNIX, работающие в среде DOS record separator -

my Scontent = ; # read whole file as one string.

close(IP);

if (Scontent Гrusestrict/m) {

rename Sfile, "$file.bak" or die "Renaming $file: $!"; open(OP, ">$file") or die "Creating $file: $!";

# Put 'use strict' on first line that

# doesn't start #

Scontent =" sr(V.#)/\nuse strict;\n\n/m',

print Инструментальные средство UNIX, работающие в среде DOS OP Scontent; close(OP);

print "Updated $file\n";

)

else {

print "Sfile already strict\n":

)

}

Упражнение 13 из раздела "Генераторы начальных текстов"

Ответ: Решение реализовано на языке Perl. В программке происходит динамическая загрузка модуля для генерации требуемого языка, так что добавление новых языков не представляет труда. Основная программка загружает внутреннюю часть (основанную на Инструментальные средство UNIX, работающие в среде DOS параметре командной строчки), потом считывает ее входные данные и вызывает подпрограммы генерации текста, основанные на содержимом каждой из строк. Мы в особенности не суетимся, если идет речь об обработке ошибок: если что-то не так, узнаем об этом достаточно стремительно.

my lang = shift or die "Missing language";

$lang .= "_cg Инструментальные средство UNIX, работающие в среде DOS.pm";

require or die "Couldn't load $lang";

# Read and parse the file

my $name;

while () {

chomp;

if (/^ \s*$/) {CG::blankLine();)

elsif ((/^ \#(.*)/) {CG::comment($1);}

elsif ((/^M\s*(.+)/) {CG::startMsg($1); $name = $1;}

elsif ((/^E/) {CG::endMsg($name);}

elsif (/^F\s*(\w+)\s+(\w+)$/) {CG::simpleType($1,$2);}

elsif (/^F\s*(\w+)\s+(\w Инструментальные средство UNIX, работающие в среде DOS+)\[(\d+)\]$/) {CG::arrayType $1,$2,$3);}

else {

die "Invalid line: $ ";

}

}

Написание языковой серверной части не составит труда: сделайте модуль, который реализует 6 точек входа. Вот генератор текста на языке С:

#!/usr/bin/perl – w

package CG;

use strict;

# Code generator for 'C' (see cg_base.pl)

sub blankLine() {print "\n"; }

sub comment() {print "/*$_[0] */\n Инструментальные средство UNIX, работающие в среде DOS"; }

sub startMsg() {print "typedef struct {\n"; }

sub endMsg() {print "} $_[0];\n\n"; }

sub arrayType() {

my ($name, $type, $size) = @_;

print " $type $name\[$size];\n":

}

sub simpleType{) {

my ($name, $type) = @_;

print " $type $пате;\п";

}

1;

А вот генератор текста на языке Pascal:

#!/usr/bin/perl – w

package CG;

use strict;

# Code generator for 'Pascal' (see Инструментальные средство UNIX, работающие в среде DOS cg_base.pl)

sub blankLine() {print "V;)

sub comment() {print "{$_[0] }\n";)

sub startMsg() {print "$_[0] = packed record\n"; }

sub endMsg() {print "end;\n\n"; }

sub arrayType() {

my ($name, $type, $size) = @_;

$size--;

print" $name: array[0…$size] of $type;\n";

)

sub simpleType() {

my ($name, $type) = @_;

print" $name: $type;\n Инструментальные средство UNIX, работающие в среде DOS7 ',

}

1;

Упражнение 14 из раздела "Проектирование по договору"

Ответ: Этот пример на языке Eiffel удачен. Мы требуем передачи непустых данных и гарантируем, что семантика повторяющегося двунаправленного перечня будет соблюдена. Это также содействует нахождению сохраненной строчки. Так как это некоторый отложенный класс, то действительный класс, его реализующий, допускает внедрение хоть какого основного механизма по собственному Инструментальные средство UNIX, работающие в среде DOS усмотрению. Он может использовать указатели либо массив, либо что-то еще; пока он соблюдает договор, мы не беспокоимся.

Упражнение 15 из раздела "Проектирование по договору"

Ответ: Это безуспешно. Математическое действие в индексном выражении (index-1) не будет работать с граничными критериями, схожими первой точке входа. Постусловие подразумевает определенную Инструментальные средство UNIX, работающие в среде DOS реализацию; договоры должны быть более абстрактными по сопоставлению с обозначенным выше.

Упражнение 16 из раздела "Проектирование по договору"

Ответ 16: Это успешный договор, но плохая реализация. Тут высовывает свою уродливую голову ошибка типа "Heisenbug" [URL52]. Возможно, программер допустил опечатку – набрал pop заместо top. Хотя это обычной и выдуманный пример, очень тяжело Инструментальные средство UNIX, работающие в среде DOS диагностировать побочные эффекты в утверждениях (либо в любом, самом внезапном месте в программке).

Упражнение 17 из раздела "Проектирование по договору"

Ответ: Мы продемонстрируем многофункциональные сигнатуры на языке Java, обозначая предусловия и постусловия в согласовании с iContract. Поначалу инвариант для класса:

/**

* @invariant getSpeed() >0

* implies isFull() // Не запускать пустое

* @invariant getSpeed()>=0 &&

* getSpeed() <10 // Проверка границ

*/

Потом Инструментальные средство UNIX, работающие в среде DOS предусловия и постусловия:

/**

* @pre Math.абс(getSpeed() – х) <= 1 // Единственный выбор

* @рге х>= 0 && х > 10 // Проверка границ

* @post getSpeed() == х // Проверка скорости

*/

public void setSpeed (final int x)

/**

* @pre !isFull() // Heзаполнять два раза

* @post isFull() // Удостоверьтесь, что было выполнено

*/

void fill()

/**

* @pre isFull() // He очищатьдважды

* @post !isFull() // Убедиться, что выполнено

*/

void empty()

Упражнение 18 из раздела "Проектирование по Инструментальные средство UNIX, работающие в среде DOS договору"

Ответ: В этом ряду содержится 21 число. Если вы ответили «20», то допустили так именуемую ошибку "поста охраны".

Упражнение 19 из раздела "Программирование утверждений"

Ответ:

1. В сентябре 1752 г. было всего только 19 дней. Это было изготовлено с целью синхронизации при переходе с юлианского на григорианский календарь.

2. Каталог мог быть удален другим процессом, у Инструментальные средство UNIX, работающие в среде DOS вас нет прав доступа на его чтение, выражение &sb может быть недопустимым – вы все выудили.

3. Мы показали малодушие, не указав типов а и b. Во время перегрузки операторов могло случиться так, что поведение символов +, =, либо != стало непредсказуемым. Не считая того, а и b могут быть именами одной и Инструментальные средство UNIX, работающие в среде DOS той же переменной, так что при втором присвоении произойдет перезапись значения, сохраненного во время первого.

4. В неевклидовой геометрии сумма углов треугольника не будет составлять 180°. Задумайтесь о треугольнике, отображаемом на поверхности сферы.

5. Минутки, приходящиеся на високосный год, могут состоять из 61 либо 62 секунд.

6. Переполнение может бросить итог операции а+1 отрицательным (это также может произойти Инструментальные средство UNIX, работающие в среде DOS в языках С и С++).

Упражнение 20 из раздела "Программирование утверждений"

Ответ: Мы решили воплотить очень обычной класс с единственным статическим способом TEST, который выводит на печать сообщение и след стека, если переданный параметр condition является неверным.

package com.pragprog.util;

import java.lang.System; //для exit()

import java Инструментальные средство UNIX, работающие в среде DOS.lang.Thread; //для dumpStack()

public class Assert {

/** Write a message, print a stack trace and exit if

* our parameter is false.

*/

public static void TEST(boolean condition) {

if (Icondition) {

System.out.println("==Assertion Failed==");

Thread.dumpStack();

System.exit(1);

}

}

// Testbed. If our argument is 'okay', try an assertion that

// succeeds Инструментальные средство UNIX, работающие в среде DOS, if 'fail' try one that fails

public static final void main(String args[]) {

if (args[0].compareTo("okay") == 0) {

TEST(1 == 1);

}

else if (args[0].compareTo("fail") == 0) {

TEST(1 == 2);

}

else {

throw new RuntimeException("Bad argument") ,

}

}

}

Упражнение 21 из раздела "Случаи, когда употребляются исключения"

Ответ: Нехватка памяти является исключительным состоянием, потому мы полагаем, что в случае (1) должно возбуждаться исключение.

Невозможность Инструментальные средство UNIX, работающие в среде DOS отыскания точки входа – полностью обычная ситуация. Приложение, которое вызывает наш класс-набор, может написать программку, которая инспектирует наличие точки входа, перед тем как добавить возможный дубликат. Мы полагаем, что в случае (2) необходимо просто выполнить возврат ошибки.

Случай (3) более проблематичен – если указатель null играет существенную роль в Инструментальные средство UNIX, работающие в среде DOS приложении, его добавление к контейнеру может быть оправдано. Но если для хранения пустых значений нет весомых оснований, то, по всей вероятности, нужно возбудить исключительную ситуацию.

Упражнение 22 из раздела "Балансировка ресурсов"

Ответ: В большинстве реализаций языков С и С++ отсутствуют методы проверки того, что указатель вправду показывает на допустимый блок памяти Инструментальные средство UNIX, работающие в среде DOS. Рядовая ошибка состоит в освобождении блока памяти и организации ссылки на этот блок дальше в тексте программки. К тому времени этот блок памяти уже может быть перераспределен для других целей. Обнуляя указатель, программеры уповают предотвращать эти посторонние ссылки – почти всегда разыменование указателя null генерирует ошибку в процессе выполнения программки Инструментальные средство UNIX, работающие в среде DOS.

Упражнение 23 из раздела "Балансировка ресурсов"

Ответ: Обнуляя ссылку, вы уменьшаете число указателей на упомянутый объект на единицу. Как этот счетчик становится равным нулю, объект получает право на сбор «мусора». Обнуление ссылок может играть существенную роль в длительных по времени программках, где программерам приходиться удостоверяться, что внедрение памяти с течением времени Инструментальные средство UNIX, работающие в среде DOS не увеличивается.

Упражнение 24 из раздела "Несвязанность и закон Деметера"

Ответ: Файл заголовка предназначен для определения интерфейса меж соответственной реализацией и наружным миром. Сам по для себя файл заголовка не должен владеть информацией о внутренней организации класса Date – от него только требуется сказать компилятору о том, что конструктор Инструментальные средство UNIX, работающие в среде DOS воспринимает класс Date в качестве параметра. Потому, если файл заголовка не употребляет Dates в подставляемых функциях, 2-ой кусок будет работать просто замечательно.

А что все-таки с первым куском? Если он употребляется в маленьком проекте, то все нормально, кроме того, что вы без особенной надобности заставляете все элементы программки, которые употребляют Инструментальные средство UNIX, работающие в среде DOS класс Person1, также включать файл заголовка для класса Date. Как схожее употребление становится обыкновенной практикой в некотором проекте, скоро обнаружите, что включение 1-го файла заголовка завершается включением большей части системы, что значительно наращивает время компиляции.

Упражнение 25 из раздела "Несвязанность и закон Деметера"

Ответ: Переменная acct передается в виде Инструментальные средство UNIX, работающие в среде DOS параметра, так что вызов getBalance является допустимым. Вызов amt.printFormat() таким не является. Мы не «владеем» amt, и он не был передан нам. Мы могли убрать связывание showBalance с Money с помощью вставки, схожей представленной ниже:

void showBalance(BankAccount b) {

b.printBalance();

}

Упражнение 26 из раздела "Несвязанность и закон Деметера"

Ответ: Так Инструментальные средство UNIX, работающие в среде DOS как класс Colada делает и обладает myBlender и myStuff, то воззвания к addlngredients и elements являются допустимыми.

Упражнение 27 из раздела "Несвязанность и закон Деметера"

Ответ: В данном случае processTransaction обладает amt – он создается на стеке. Происходит передача acct, потому допустимыми являются как setValue, так и setBalance. Но Инструментальные средство UNIX, работающие в среде DOS processTransaction не обладает who, потому вызов who->name() является нарушением. Закон Деметера предлагает поменять эту строчку на последующую:

markWorkflow(acct.name (), SET_BALANCE);

Программке в processTransaction не придется узнавать, какой дочерний объект в границах BankAccount носит это имя – эта информация о структуре не должна разглашаться через договор BankAccount Инструментальные средство UNIX, работающие в среде DOS. Заместо этого мы запрашиваем у BankAccount имя на счете. Он знает, где хранится имя (может быть, в объекте Person, в объекте Business, либо в полиморфном объекте Customer).

Упражнение 28 из раздела "Метапрограммирование"

Ответ: Тут не приводятся категорические ответы – вопросы предназначались в главном для того, чтоб дать вам еду для раздумий. И вот Инструментальные средство UNIX, работающие в среде DOS что мы думаем:

1. Предназначения коммуникационного порта. Ясно, что эта информация должна сохраняться в виде метаданных. Но на каком уровне детализации? Некие коммуникационные программки системы Windows позволяют выбирать только скорость в бодах и порт (скажем, СОМ1 – COM4). Но возможно вам придется указать размер слова, четность, стоповые биты, и настройку дуплексной связи Инструментальные средство UNIX, работающие в среде DOS. Пытайтесь допускать самый маленький уровень детализации, там где это уместно с практической точки зрения.

2. Поддержка выделения синтаксических конструкций разных языков в программке редактирования. Она должна быть реализована в виде метаданных. Вы же не желаете, чтоб вам пришлось переделывать программку только поэтому, что в последней версии языка Инструментальные средство UNIX, работающие в среде DOS Java было введено новое ключевое слово.

3. Поддержка редактора для разных графических устройств. Эту поддержку было бы тяжело воплотить только в виде метаданных. Вам не хотелось бы нагружать приложение многими драйверами устройств только для того, чтоб избрать какой-то из них во время выполнения программки. Но вы могли пользоваться метаданными для указания Инструментальные средство UNIX, работающие в среде DOS имени драйвера и динамической загрузки программки. Это очередной аргумент для сохранении метаданных в удобочитаемом формате; если вы используете программку для установки дисфункционального видеодрайвера, то вы не можете переустановить его, пользуясь этой программкой.

4. Конечный автомат для программки синтаксического анализа либо сканера.

Это находится в зависимости от того, анализируете вы либо просматриваете Инструментальные средство UNIX, работающие в среде DOS. Если анализируете некие данные, которые агрессивно определены в эталонах и вероятнее всего не будут изменены без одобрения конгресса США, то жесткое кодирование полностью годится. Но если вы сталкиваетесь с более изменчивой ситуацией, то может быть, более прибыльным является наружное определение таблиц состояний.

5. Типовые значения и результаты, применяемые Инструментальные средство UNIX, работающие в среде DOS в модульном тестировании.

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

Упражнение 29 из раздела "Всего только представление"

Ответ: В программку Flight мы добавим ряд дополнительных способов душ поддержания 2-ух списков Инструментальные средство UNIX, работающие в среде DOS «слушателей»: для извещения о листе ожидания и о полной загрузке рейса.

public interface Passenger {

public void waitListAvailable();

}

public interface Flight {

...

public void addWaitListListener(Passenger p);

public void removeWaitUstUstener(Passenger p);

public void addFullListener(FullListener b);

public void removeFullListener(FullListener b);

...

}

public interface BigReport extends FullListener {

public void FlightFullAlert Инструментальные средство UNIX, работающие в среде DOS(Flight f);

}

При неудачной попытке добавить Passenger, так как рейс вполне забронирован, мы можем (как вариант) поместить Passenger в лист ожидания. При открытии вакансии делается вызов способа waitListAvailable. Потом этот способ может выполнить выбор: или добавить Passenger автоматом, или дать указание сотруднику авиакомпании позвонить заказчику и узнать, заинтересован ли Инструментальные средство UNIX, работающие в среде DOS он еще в рейсе, и т. п. Сейчас мы обладаем достаточной гибкостью, чтоб выбрать линию поведения, исходя из пожеланий клиента.

Не считая того, мы желаем избежать ситуаций, при которых BigReport разбирает тонны записей, отыскивая на сто процентов забронированные рейсы. Зарегистрировав BigReport в качестве «слушателя» Flights, каждый личный Flight может докладывать, когда Инструментальные средство UNIX, работающие в среде DOS он на сто процентов (либо практически стопроцентно) забронирован. Сейчас юзеры могут одномоментно получить оперативные, с точностью до минутки, сообщения из BigReport, а не ждать часами окончания его работы, как это было ранее.

Упражнение 30 из раздела "Доски объявлений"

Ответ:

1. Обработка изображения. Для обычного рассредотачивания рабочей нагрузки меж параллельными процессами Инструментальные средство UNIX, работающие в среде DOS более чем адекватной возможно окажется общедоступная очередь работ. Вы сможете разглядеть систему "доска объявлений" при наличии оборотной связи, т. е. если результаты обработки 1-го куска изображения оказывают влияние на другие куски так, как это происходит в системах искусственного зрения либо сложных трехмерных преобразованиях изображений.

2. Календарное планирование для групп Инструментальные средство UNIX, работающие в среде DOS. Для этого "доска объявлений" даже очень понадобится. Вы сможете поместить назначенные собрания и готовность на "доску объявлений". Есть объекты, функционирующие автономно; в этом случае очень принципиальна оборотная связь, а участники могут приходить и уходить.

Можно разглядеть возможность разделения "доски объявлений" зависимо от того, кто производит поиск: младший персонал может хлопотать Инструментальные средство UNIX, работающие в среде DOS только о локальном кабинете, отдел кадров интересоваться только англо-говорящими кабинетами в мире, а исполнительный директор – всем сходу.

В форматах данных имеется некоторый элемент гибкости: мы можем проигнорировать форматы либо языки, которых не осознаем. Нам придется осознавать разные форматы только для тех кабинетов, которые встречаются вместе, и Инструментальные средство UNIX, работающие в среде DOS не придется подвергать всех участников полному транзитивному замыканию различных форматов. При всем этом связанность миниатюризируется там, где необходимо, и мы не имеем искусственных ограничений.

3. Средство мониторинга компьютерной сети. Это очень сходно с программкой обработки заявлений на ипотечный кредит/ссуду, описанной в примере приложения (с. 153). На доску помещаются сообщения о Инструментальные средство UNIX, работающие в среде DOS дефектах, присылаемые юзерами, и автоматические генерируемые статистические данные. Сотрудник (либо программный агент) может рассматривать "доску объявлений", чтоб производить диагностику дефектов в сети: две ошибки в полосы могут быть отнесены на счет галлактических лучей, но 20000 ошибок молвят о дилемме в аппаратном обеспечении. Подобно детективам, разгадывающим тайну убийства, вы сможете использовать Инструментальные средство UNIX, работающие в среде DOS множественные объекты, анализируя и внося свою лепту в решение заморочек, связанных с компьютерной сетью.

Упражнение 31 из раздела "Программирование в расчете на стечение событий"


instrukciya-viberite-odin-ili-neskolko-pravilnih-otvetov.html
instrukciya-vspomnite-pozhalujsta-kak-skladivayutsya-vashi-otnosheniya-s.html
instrukciya.html