Как проектировать программы
Перейти к содержимому

Как проектировать программы

  • автор:

Как проектировать программы (pdf)

Cover image

издание 2022 г. (следить)
Добавлена: 08.07.2022

Аннотация

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

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

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

Поиск книг

  • Расширенный поиск
  • Полнотекстовый поиск по книгам
  • Сравнение книг
  • Популярные книги

Вход в систему

Навигация

  • Книги
    • Последние поступления
    • Жанры
    • Авторы
    • Сериалы
    • ЧаВо по книгам
    • Рекомендации сообщества
    • Сравнение книг
    • Доступ через блок (FAQ)
    • Печать книг по требованию
    • Авторы на Флибусте
    • Синхронизация библиотек
    • Прочти эти стихи.
    • Старые советские учебники
    • Каталог книжных тем
    • Удаление двойников
    • Востребованные книги
    • Ищу книгу!
    • Мобильная версия
    • Файлы базы данных
    • Файлы обновлений
    • Скачать каталог
    • Скачать библиотеку целиком
    • Научная литература
    • Научные статьи
    • Иностранная литература
    • Z-Library
    • Киберленинка
    • Архив комиксов
    • Вся периодика мира
    • Ссылки на прочие ресурсы

    Последние комментарии

    • Re: тысяча обезьян
      16 минут 21 секунда назад
    • Re: ППШ-2, расширенный и углубленный.
      25 минут 21 секунда назад
    • Re: «Хотят ли русские войны?» (с)
      33 минуты 19 секунд назад
    • Re: тысяча обезьян
      39 минут 58 секунд назад
    • Re: Бодливая корова и Лысенко
      57 минут 34 секунды назад
    • Re: тысяча обезьян
      1 час 55 минут назад
    • Re: Не скачиввются книги
      3 часа 38 минут назад
    • Re: думают ли русские
      3 часа 46 минут назад
    • Re: тысяча обезьян
      3 часа 55 минут назад
    • Re: «Хотят ли русские войны?» (с)
      4 часа 27 минут назад

    Впечатления о книгах

    Fokusnik про Скабер: Восход. Солнцев. Книга I [СИ]
    ч. 2. Закат Лунов.
    ч. 3. Сияние Звездов.

    Fokusnik про Вайс: Несущий бурю. Том III
    Очень странное впечатление, что текст пишут школьница-отличница, технарь с фантазией и озабоченный гоблин с перверсиями.

    Gangnus про Романов: «Над всей Испанией безоблачное небо»
    Ужасное начало. Романов совершенно забыл русский язык. «он старше его на 18 лет» — Вот таких перлов там МНОГО. Множество предложений надо расшифровывать, а многие и не получится. А уж о качестве языка, в смысле повторов и неудачных выражений — и говорить не приходится — песец просто. Потом, после примерно 10%, концентрация ошибок понижается.
    ГГ — супер Марти Сью. Он не только получил знания о будущем, он получил абсолютные способности к убеждению людей. Он письмом, по телефону, или лично, говорит людям, что будет — и они верят. Политики, генералы — все.
    И, к «странам, которые стремятся захватить мировое господство», автор не относит СССР. Анархисты для него — пистольники и убийцы, а коммунисты — прекрасные граждане буржуазной республики с планами на конституционную монархию. Анархисты подло экспроприируют, а коммунисты — нет.
    Книга оборвана.

    piligrim66 про Осадчук: Пламя Севера
    По прежнему интересно но сильно напоминает «Песнь Льда и Пламени» Мартина.

    Mornariel про Измайлова: Больше жизни, сильнее смерти
    Отличная история с весьма необычными героями. Читала давно, даже странно, что тут оценку не оставила. Перечитала сейчас с не меньшим удовольствием.

    deva про Нарватова: Темная история в третьем роддоме
    Просто поржала с отзыва vasilisa-krasava:
    «Редкая галиматья с псевдофеминистическими поучениями, как ещё должна стать, сесть и подпрыгнуть женщина, чтобы му наконец-то начал выполнять свои прямые отцовские обязанности да и просто быть вменяемым»
    )))

    Gangnus про Моури: Ваше Сиятельство #1
    Бред решительно во всех отношениях.

    Eugene_Brad про Алхимова: Проклятие Каменного острова. Книга 1. Пророчество
    Стиль книги напоминает истории, которые детям рассказывают перед сном. Но детям такое тоже читать не надо — испортят вкус

    Xardas про Емельянов: Девять смертных грехов
    Вроде начало ничего, но к середине стало обычно для этих авторов, имбанутое превозмогание без малейшей логики, следования ими же самими установленным правилам и не крыс или кроликов, а сразу слонов. Закрыл. Для меня они нечитаемы.
    Даже странно, насколько мне в свое время понравились два первых тома Карика, настолько же все остальное их творчество вызывает устойчивый негатив.
    Не знаю насколько это перекликается, так как не осилил, со Слово и Чистота, Зайцева. вроде тоже магическое фехтование, но я и там еле справился с парочкой глав. Судить не буду.

    de-bill про Винтеркей: Ревизор: возвращение в СССР
    Живенько, но ни о чем. в начале более-менее, а затем скучно. Читать можно, но вот зачем?

    Как проектировать программы

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

    Оригинальный правообладатель: MITP
    Автор: Фелляйзен М., Финдлер Р. Б., Кришнамурти Ш., Флэтт М.
    Перевод: Киселев А.
    Дата выхода: июнь 2022 года
    Объем, стр: 724
    ISBN: 978-5-97060-926-2
    Формат: 165 * 235 мм
    Бумага: офсетная
    Обложка: Твердый переплет
    Вес: 1400

    Электронное издание

    Издание: Черно-белое
    Оригинальное название:
    Оригинальный правообладатель:

    Оригинальный правообладатель: MITP
    Автор: Фелляйзен М., Финдлер Р. Б., Кришнамурти Ш., Флэтт М.
    Перевод: Киселев А.
    Дата выхода: май 2022 года
    Объем, стр: 724
    ISBN: 978-5-97060-926-2

    Купить электронную книгу
    Купить на EUniverse Купить
    • Самовывоз м. Коломенская — завтра — Бесплатно
    • Доставка почтой по РФ — 7-28 дней — от 300 р.
      Доставка почтой за пределы РФ — 14-28 дней — от 1400 р.
    • Курьером по Москве — в течение 7 дней — 300 р.

    Аннотация

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

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

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

    Фелляйзен, Финдлер, Флэтт: Как проектировать программы

    Фелляйзен, Финдлер, Флэтт - Как проектировать программы обложка книги

    45 %

    Переводчик: Киселев А. Н.

    Издательство: ДМК-Пресс, 2022 г.

    Цена для всех

    Ваша цена (-45%)

    ID товара: 865701

    ISBN: 978-5-97060-926-2

    Страниц: 724 (Офсет)

    Оформление

    Масса: 1244 г

    Размеры: 242x171x42 мм

    Оценить (оценило: 0)

    Аннотация к книге «Как проектировать программы»

    Цель этой книги – познакомить читателей с системным подходом к проектированию и сформировать у них правильные навыки программирования, которые предполагают пошаговое планирование и понимание рабочих задач на каждом этапе создания программы.
    В фокусе книги – общие принципы проектирования программ, поэтому используется не стандартный промышленный язык, а специализированный язык обучения Racket, а также среда программирования DrRacket, которая обеспечивает увлекательное обучение. Возможности среды растут по мере того, как читатель осваивает материал, – вплоть до поддержки полноценного языка, пригодного для решения всего спектра задач программирования.
    Издание адресовано широкому кругу читателей, которые хотят научиться мыслить алгоритмически и создавать по-настоящему ценные программы.

    1 акция по этому товару сегодня Осталось: 0 1 день 1 7 часов 45 %

    До 23:59 01 ноября

    Рецензии на книгу «Как проектировать программы»

    • Покупатели

    Вы можете стать одним из первых, кто напишет рецензию на эту книгу, и получить бонус — до 15 рублей на баланс в Лабиринте! Или оставьте заявку, чтобы кто-то другой написал ее скорее.

    Как проектировать программы (HtDP)

    Учебник HtDP (How to Design Programs), посвящен программированию на языке Scheme в среде drRacket.
    drRacket можно скачать с сайта.
    Вводная часть учебника содержит описание функции empty-scene, предназначенной для работы с изображениями. Например, эта программа создает пустую сцену

    #lang racket (require 2htdp/image) ;библиотека для работы с изображениями (empty-scene 100 60) ;сцена (канвас) размером 100х60 

    А эта помещает на сцену зеленый круг.

    #lang racket (require 2htdp/image) (place-image (circle 5 "solid" "green") ;поместить изображение 50 80 ;координаты изображения (empty-scene 100 100)) ;пустая сцена (канвас) 

    Для создания анимации используется функция animate. Следующая программа создает анимацию (движение объекта).

    #lang racket (require 2htdp/image) ;библиотека для работы с изображением (require 2htdp/universe) ;библиотека для работы с анимацией (define (picture-of-circle height) (place-image (circle 5 "solid" "green") 50 height (empty-scene 100 60))) (animate picture-of-circle) 

    1. Функция animate запускает таймер и подсчитывает количество тактов.
    2. Таймер срабатывает 28 раз в секунду.
    3. Каждый раз, когда таймер «тикает», animane отправляет в picture-of-circle текущий такт; и
    4. сцена отображается на канвасе.

    Это означает, что круг сначала появляется в кооринате 0, затем 1, затем 2 и т. д. Поэтому круг опускается сверху вниз. Т.е. эта программа за 3,5 секунд создает около 100 изображений, что и позволяет создать эффект движения.

    В первой части учебника приводится описание функции big-bang, а все программы, использующие big-bang, называются в дальнейшем world-программами. Эта программа рисует красный квадрат 100х100 (Параграф 2.5).

    #lang racket (require 2htdp/image) (require 2htdp/universe) (define (number->square s) (square s "solid" "red")) (big-bang 100 [to-draw number->square]) 

    Если изменить значение параметра, функция нарисует квадрат другого размера.

    (big-bang 50 [to-draw number->square]) ; квадрат 50х50 (big-bang 100 [to-draw number->square]) ; квадрат 100х100 (big-bang 150 [to-draw number->square]) ; квадрат 150х150 

    Механизм передачи параметров, используемый функцией big-bang, можно рассмотреть
    на примере алгоритма реализации функций CONS,CAR,CDR из учебника SICP.

    (define (f-cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y) (else (error "Аргумент не 0 или 1 -- CONS" m)))) dispatch) (define (f-car z) (z 0)) (define (f-cdr z) (z 1)) 

    Проверим результат работы этих функций.

    (define a 1) (define b 2) (display (f-car (f-cons a b))) ; получаем 1 (display (f-cdr (f-cons a b))) ; получаем 2 

    Создадим функцию f-cr:

    (define (f-cr x y) (y x)) 

    Теперь функция f-cr может передавать любые значения.

    Изображение

    image

    По аналогии создадим функцию big-bang-1:

    (define (big-bang-1 x y) (y x)) 

    и функцию to-draw-1, инкапсулирующую render-1:

    (define (to-draw-1 x) (define (render-1 y) (place-image (x y) y y (empty-scene (* 2 y) (* 2 y))) ) render-1) 

    Реализуем алгоритм передачи параметров (значений):

    Изображение

    image

    Далее в учебнике рассматривается конструкция вида:

    (big-bang cw0 [on-tick tock] [on-key ke-h] [on-mouse me-h] [to-draw render] [stop-when end?] . ) 

    которая позволяет обрабатывать нажатие клавиш, таймер, координаты движения объекта. Далее (Figure 13) приведен листинг программы, использующей эту конструкцию.

    (define BACKGROUND (empty-scene 100 100)) (define DOT (circle 3 "solid" "red")) (define (main y) (big-bang y [on-tick sub1] [stop-when zero?] [to-draw place-dot-at] [on-key stop])) (define (place-dot-at y) (place-image DOT 50 y BACKGROUND)) (define (stop y ke) 0) 

    Запустить программу можно в режиме «Начинающий студент» (Верхнее меню → Язык → Выбрать язык… → Начинающий студент), добавив пакеты (Верхнее меню → Язык → Добавить учебный пакет. ) для работы с изображениями (image.rkt) и анимацией (universe.rkt).

    Параграф 3 называется «Как проектировать программы» (How to Design Programs). Здесь говорится о том, что программы представляют информацию в виде данных. Это означает, что числа могут представлять из себя как количество тактов, отсчитываемых таймером, так и координаты объекта, его цвет, размер и т.п. Программа должна производить запись этих чисел в память и осуществлять преобразование этих числел обратно в координаты объекта, его цвет, размер и т.д.

    На рис. 14 изображена диаграмма, иллюстрирующая эту идею.
    Параграф 3.5 (On Testing) посвящен разработке с помощью тестов.
    Параграф 3.6 посвящен проектированию world-программ. На рисунке 17 представлена упрощенная схема библиотеки 2htdp/universe.

    Далее описывается 3 основных этапа по созданию big-bang-программ (параграф 3.7):

    1. Для всех величин, которые остаются неизменными, надо создать константы.
    a. «Физические» константы привязаны к таким атрибутам объекта, как скорость, цвет,
    ширина, высота и т.д.
    (define WHEEL-RADIUS 5)
    b. «Графические» константы.
    (define WHEEL
    (circle WHEEL-RADIUS «solid» «black»))
    2. Те свойства, которые изменяются с течением времени в ответ на нажатие клавиш,
    таймер и т.д. надо представить в виде состояний объекта управления.
    3. При получении набора состояний всех объектов, надо вызвать big-bang для отображения этих объектов. Далее следуют упражнения, в которых необходимо использовать функцию big-bang.

    В параграфе 4.3 обсуждается вопрос обработки событий, генерируемых клавиатурой и мышкой. На рис. 20 представлена условная конструкция, обрабатывающая клавиши «left» и «right».

    (define (keh p k) (cond [(string=? "left" k) (- p 5)] [(string=? "right" k) (+ p 5)] [else p])) 

    Добавлю, что если также необходимо обрабатывать клавиши «up» и «down», то координаты объекта следует хранить в списке:

    (define coord-xy (list 50 50) ) ; x=50 ; y=50 

    и передавать этот список в big-bang:

    (big-bang coord-xy [to-draw place-dot-at] [on-key keh]) 

    функция place-dot-at «разбирает» список на части:

    (define (place-dot-at xy ) (place-image DOT (car xy) (cdr xy) MTS)) ; (car(cdr xy)) 

    а функция keh «разбирает» список, изменяет одну из координат, и собирает обратно:

    (list (-(car p)5) (cdr p) ) ; (car (cdr p)) 

    Далее предлагается разработать программу-светофор.

    (check-expect (traffic-light-next "red") "green") (define (traffic-light-next s) (cond [(string=? "red" s) "green"] [(string=? "green" s) "yellow"] [(string=? "yellow" s) "red"])) 

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

    [on-tick traffic-light-next rate-expr] 

    Теперь таймер будет срабатывать каждые rate-expr секунд (on-tick tick-expr rate-expr).

    Также в тексте дана ссылка на страницу с world-программами. Запустить программы можно в режиме «Начинающий студент», добавив необходимые пакеты.

    Параграф 5 (Adding Structure) содержит определение структур данных (Пример)

    #lang racket (define-struct posn (x y)) (define a (make-posn 10 34)) (posn-x a) (posn-y a) (posn? (posn 10 34)) 

    В параграфе 5.4 автор дает определение структуры: структура, фактически, определяет другие функции. В частности:

    1. Конструктор, который создает экземпляр структуры.
    2. Селектор, который имеет доступ к полям экземпляра структуры.
    3. Структурный предикат, который, подобно обычным предикатам, проверяет,
    является ли аргумент экземпляром структуры.

    make-posn — это конструктор
    posn-x и posn-y — селекторы
    posn? — предикат

    Подробнее об этом написано в Документации (Structures)

    Параграф 5.5. Программу из упражнения 71 предлагается запустить по-шагам (step-by-step) в отладчике. Запускать надо в режиме «Начинающий студент», добавив учебные пакеты.

    В параграфе 5.6 автор делает поэтапное описание программы для покадровой анимации (перемещение объекта вдоль одной из осей). Теперь в программе используются структуры для определения координат объекта.
    Вот эта программа

    (require 2htdp/image) (require 2htdp/universe) ; (define-struct posn (x y)) (define MTS (empty-scene 100 100)) (define DOT (circle 3 "solid" "red")) ; A Posn represents the state of the world. (define (x+ p) (make-posn (+ (posn-x p) 3) (posn-y p))) (define (scene+dot p) (place-image DOT (posn-x p) (posn-y p) MTS) ) (define (reset-dot p x y me) (cond [(mouse=? me "button-down") (make-posn x y)] [else p])) ; Posn -> Posn (define (main p0) (big-bang p0 [on-tick x+] [on-mouse reset-dot] [to-draw scene+dot])) (main (make-posn 1 20)) 

    В параграфе 5.11 приводится пример обработки изображения.
    В параграфе 6.1 делается поэтапное описание игры Space invanders.
    В параграфе 6.2 предлагается дополнить программу из параграфа 4.3 (светофор).

    P.S.
    ссылка на статью об этом учебнике
    в этой статье обсуждается вопрос объектного программирования на языке Scheme
    эта статья для тех, кто уже справился с Python и теперь планирует изучить Erlang или Haskell

    • Программирование
    • Lisp
    • Функциональное программирование

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *