Понятие о структурном программировании. Модульный принцип программирования. Подпрограммы. Принципы проектирования программ сверху-вниз и снизу-вверх. Основные положения объектно-ориентированного программирования. Интегрированные среды программирования. Этапы решения задач на компьютере. Эволюция и классификация языков программирования.
Основные понятия языков программирования. Структуры и типы данных языка программирования.
Понятие о структурном программировании. Модульный принцип программирования. Подпрограммы. Принципы проектирования программ сверху-вниз и снизу-вверх. Основные положения объектно-ориентированного программирования. Интегрированные среды программирования.
Этапы решения задач на компьютере.
XXIII. Основные технологии программирования
Самостоятельная работа: [3] стр. 198–209; [4] стр. 182–184
Модульное программирование — метод разработки программ, предполагающий разбиение программы на независимые модули. Разделение большой программы на модули облегчает ее разработку, отладку и сопровождение. Считается, что оптимальный по размерам модуль целиком помещается на экране дисплея.
Компас 3D: Проектирование сверху вниз — вращение контура эскиза
Заглушка
Заглушка в структурном программировании — процедура, представленная точной спецификацией заголовка и пустым телом. Заглушка позволяет компилировать и выполнять программу в отладочном режиме
Метод восходящего проектирования (Программирование «снизу вверх»)
Метод восходящего проектирования — подход, при котором в первую очередь определяются и разрабатываются вспомогательные модули, которые потребуются для проектируемой программы.
Нисходящее программирование (Программирование «сверху вниз»)
Нисходящее программирование — методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. При этом происходит пошаговое разбиение алгоритма на всё более мелкие части до тех пор, пока получатся такие фрагменты, для которых можно написать конкретные команды.
Структурное программирование — методология и технология разработки программных комплексов, основанная на принципах:
— программирования «сверху-вниз»;
— модульного программирования.
При этом логика алгоритма и программы должны использовать три основные структуры: последовательное выполнение, ветвление и повторение.
XXIV. Основные принципы структурного программирования
(программирование без GO TO)
Самостоятельная работа:
Алгоритм задачи представляется только как композиция трёх базовых типов алгоритмов: линейных, ветвлений и циклов. Эти конструкции могут быть соединены или вложены друг в друга произвольным образом, но никаких других способов управления последовательностью выполнения операций не используется.
В алгоритме задачи выделяются модули. Модуль – это либо логически законченный фрагмент общей задачи, либо часто повторяющийся блок расчётов.
Снизу-вверх или Сверху-вниз? Как учиться?
Каждый модуль оформляется по определённым правилам в виде подпрограммы, и в текст основного алгоритма вместо него вставляется короткая инструкция вызова подпрограммы. Когда выполнение программы доходит до этой инструкции, выполняется фрагмент, заложенный в подпрограмму, после чего управление передаётся на команду, следующую за инструкцией вызова подпрограммы.
Различают подпрограммы функции (используется как операнд в выражениях) и процедуры (используется как оператор). Общий вид подпрограммы:
В инструкции по вызову указывается имя подпрограммы и фактические параметры, то есть значения формальных параметров, с которыми следует выполнить тело подпрограммы в данном месте.
Пример. Дан массив целых чисел ,i=1, 2. 15. Программа вычисляет произведение сумм некоторых элементов массива А. Так как операции, которые следует выполнить для суммирования, не зависят от конкретных значений используемых чисел, алгоритм суммирования оформлен в виде подпрограммы. Поскольку каждая из сумм, которые входят в конечное произведение, не представляет интереса сама по себе, подпрограмма оформлена по типу подпрограммы-функции.
начало цикла для I=I1 до I2
писать(«введите значения массива А»)
начало цикла для j=1 до 15
писать («произведение равно»,Р:6)
В программу введены константы: G=1; W=12;T=8;L=15. Это – фактические параметры, которые надо использовать вместо формальных параметров I1 и I2 при вычислении значения Р. В результате переменная Р примет значение произведения сумм элементов с 1 по 12 и с 8 по 15 из массива А.
Разработка программы идёт пошагово, методом сверху-вниз. Сначала пишется текст основной программы, в которой вместо фрагментов, выделенных в подпрограммы, ставят «заглушки». Это подпрограммы, в которых вместо реально нужных операторов ставят сигнальные печати или ввод данных, которые должна была бы сосчитать эта подпрограмма.
Таким образом проверяют и отлаживают основной алгоритм. Затем подпрограммы-заглушки по очереди заменяют на нужные подпрограммы, отлаживают и тестируют их. Такая технология облегчает создание программы, уменьшает количество ошибок и облегчает нахождение допущенных ошибок.
Альтернативный способ – метод снизу-вверх: сначала пишут и отлаживают все подпрограммы, потом с их помощью строят, как из кубиков, основную программу.
Основные языки программирования, использующие структурную технологию:
– Ада, Си – языки общего назначения;
– Бейсик (до Visual Basic);
– КОБОЛ – для экономических задач (много операторов, облегчающих манипуляции с файлами);
– Фортран, Паскаль, ПЛ/1 – для вычислительных задач (удобные средства для записи формул).
XXV. Основные принципы объектно-ориентированного программирования
Самостоятельная работа: [4] стр. 157–181
Объектно-ориентированное программирование (ООП) применяют при программировании разных манипуляций над объектами (программы управления размерами и положением окон Windows, листами книги Excel, файлами и т. п.).
Основные принципы составления алгоритма решения таких задач:
– Моделируемая система состоит из объектов. Объекты могут быть вложены друг в друга (объект лист Excel – это часть объекта книга Excel).
– Объекты каким-то образом взаимодействуют между собой.
– Каждый объект характеризуется своим состоянием и поведением. Состояние объекта задаётся значением некоторых его свойств (объекты типа «книга Excel» имеют свойства имя, размер, открыта/закрыта и т. п.). Действия, которые можно выполнять над объектом или которые он сам может выполнять, называются методами (объект типа «книга Excel» можно открыть, закрыть, переименовать, перенести в другую папку и т. п.). После каждого действия изменяются какие-то свойства объекта.
Основные термины и понятия:
Класс объектов – шаблон, определяющий основные свойства, методы и события группы объектов, объединяемых в класс. По другому: Класс объектов – это множество объектов, имеющих общее поведение и общую структуру
События – ситуации, в которых надо программировать какой-то отклик объекта (что делать, когда над гиперссылкой или кнопкой расположен курсор, или щёлкает курсор, или происходит двойной щелчок).
Наследование – порождает иерархию объектов. В основном классе (родителе) можно выделять подклассы. Они состоят из объектов, входящих в класс родителя и обладают наряду со всеми его характеристиками дополнительной группой свойств, которых у других объектов класса-родителя нет. Пример: класс-родитель – окно Windows, подклассы – диалоговые окна, окна документов, окна папок. Подклассы окон документов – окна документов Word, окна документов Excel, окна документов Power Point и т. п.
Определение наследования в Интернет-тестах: свойство ООП, которое может быть смоделировано с помощью таксонометрической классификационной схемы (иерархии).
Инкапсуляция – сокрытие деталей программ, создающих и манипулирующих объектами. Создание объектов, манипулирование ими оформляется в виде подпрограмм. Программист указывает в своей программе только то, что и с каким объектом нужно сделать или какой результат нужно получить. То есть объекты рассматриваются как «чёрные ящики». Такой способ упрощает разработку программы и её модификацию.
Полиморфизм –.одно и то же имя может обозначать в разных подклассах одного класса разные методы для выполнения одного и того же типа действий (трансформация объекта: для подкласса овал – один метод (программа), для подкласса прямоугольник – другой.
По другому. Использование одного имени для задания общих для класса действий, что означает способность объектов выбирать внутренний метод, исходя из типа данных.
По другому. Возможность использования разных функций с одним и тем же именем в разных классах.
Основные языки ООП:
– С++ – для системного программирования;
– Java, JavaScript, PHP, Perl – для разработки сценариев в динамических Veb-страницах;
– Simula – первый язык, построенный по принципам ООП;
– Delphi (Object Pascal) – удобен для программирования баз данных.
XXVI. Этапы решения задач на компьютере
Самостоятельная работа: [3] стр. 198–209; [4] стр. 182–184
1. Постановка задачи:
– сбор информации о задаче;
– описание исходных данных и конечных целей;
– определение формы выдачи результатов.
2. Анализ и исследование модели задачи:
– анализ существующих аналогов;
– анализ технических и программных средств;
– разработка мат. модели;
– разработка структур данных.
3. Разработка алгоритма:
– выбор метода проектирования алгоритма;
– выбор формы записи алгоритма (блок-схема, псевдокод и т.п.);
– выбор тестов и метода тестирования;
4. Программирование:
– выбор языка программирования;
– уточнение способа организации данных;
– запись алгоритма на выбранном языке.
5. Отладка и тестирование:
– синтаксическая отладка: исправление ошибок в форме записи конструкций;
– отладка семантики и логической структуры (семантика – система правил истолкования отдельных конструкций языка): проверка правильности организации, например, циклов, ветвлений и т. п., соответствия типов переменных в выражениях, логическая структура – правильная последовательность обработки данных;
– тестовые расчёты и анализ результатов тестирования;
6. Деятельность, направленная на исправление ошибок в программной системе, называется отладкой.Тестирование – прогон отлаженной программы на эталонных вариантах исходных данных, для которых заранее известны результаты.
7. Анализ результатов тестирования и, если нужно, уточнение модели и повторение п.п. 2–5.
8. Сопровождение программы: составление документации по мат. модели, алгоритму, программе, набору тестов, использованию готовой программы и т. п.
? Интегрированная система программирования включает среди прочих компоненты:
:#5 текстовый редактор – для создания исходного текста программы;
#5 компилятор и #5интерпретатор – для перевода исходного текста программы в машинный код.
? Система программирования представляет программисту возможность:#5 автоматической сборки разработанных модулей в единый проект
? В состав средств программирования на языках высокого уровня входят:
? Интерпретатор: #5 воспринимает исходную программу на исходном языке и выполняет её построчно, не создавая исполняемого модуля.
Исполняемый файл создаётся из исходного текста программы компилятором и предполагает выполнение следующих процессов:
? Ошибка в форме записи программы приводит к сообщению о синтаксической ошибке:
? На этапе отладки программы:#5 проверяется корректность работы программы.
На этапе тестирования проверяется правильность составления алгоритма и выделения существенных закономерностей в моделируемой системе.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru
Разница между подходом сверху вниз и снизу вверх
Алгоритмы разработаны с использованием двух подходов: нисходящего и нисходящего. В нисходящем подходе сложный модуль делится на подмодули. С другой стороны, подход снизу вверх начинается с элементарных модулей, а затем объединяет их дальше. Первоочередной целью алгоритма является обработка данных, содержащихся в структуре данных. Другими словами, алгоритм используется для выполнения операций с данными внутри структур данных.
Сложный алгоритм разбивается на маленькие части, называемые модулями, а процесс расщепления известен как модуляризация . Модуляризация значительно уменьшает сложности при разработке алгоритма и упрощает его разработку и реализацию. Модульное программирование — это метод проектирования и написания программы в форме функций, в которых каждая функция отличается от другой и работает независимо. Содержание функций является взаимосвязанным, и между модулями существует слабая связь.
Подсознательное бл.
Please enable JavaScript
Сравнительная таблица
основной | Разбивает огромную проблему на более мелкие подзадачи. | Решает фундаментальную проблему низкого уровня и объединяет их в более крупную. |
Процесс | Подмодули анализируются единолично. | Изучите, какие данные должны быть инкапсулированы, и подразумевает ли концепция сокрытия информации. |
связь | Не требуется при подходе сверху вниз. | Требуется определенное количество общения. |
избыточность | Содержать избыточную информацию. | Избыточность может быть устранена. |
Языки программирования | Структурированные / процедурно-ориентированные языки программирования (т.е. C) следуют нисходящему подходу. | Объектно-ориентированные языки программирования (такие как C ++, Java и т. Д.) Следуют восходящему подходу. |
В основном используется в | Документация модуля, создание тестового набора, реализация кода и отладка. | тестирование |
Определение нисходящего подхода
Нисходящий подход в основном делит сложную задачу или алгоритм на несколько более мелких частей (модулей). Эти модули дополнительно разлагаются до тех пор, пока полученный модуль не станет фундаментальной программой, по существу, понятной и не подлежащей дальнейшей разложению. После достижения определенного уровня модульности, разложение модулей прекращается.
Нисходящий подход — это поэтапный процесс разбиения большого программного модуля на более простые и более мелкие модули для организации и эффективного программирования. Поток контроля в этом подходе всегда в направлении вниз. Нисходящий подход реализован на языке программирования «C» с использованием функций.
Таким образом, нисходящий метод начинается с абстрактного дизайна, а затем последовательно этот дизайн дорабатывается для создания более конкретных уровней, пока не требуется дополнительное уточнение.
Определение восходящего подхода
Подход « снизу вверх» работает прямо противоположно подходу «сверху вниз». Первоначально, это включает проектирование самых фундаментальных частей, которые затем объединяются, чтобы сделать модуль более высокого уровня. Эта интеграция подмодулей и модулей в модуль более высокого уровня выполняется многократно, пока не будет получен требуемый полный алгоритм.
Функции подхода снизу вверх со слоями абстракции. Основное применение подхода «снизу вверх» — это тестирование, поскольку каждый фундаментальный модуль сначала тестируется, а затем объединяется с более крупным. Тестирование выполняется с использованием определенных низкоуровневых функций.
Ключевые различия между нисходящим и восходящим подходом
- Подход «сверху вниз» разбивает большую задачу на более мелкие подзадачи, тогда как подход «снизу вверх» сначала выбирает непосредственное решение различных фундаментальных частей задачи, а затем объединяет эти части в одну программу.
- Каждый подмодуль обрабатывается отдельно в нисходящем порядке. В противоположность этому подход «снизу вверх» реализует концепцию сокрытия информации путем изучения данных, подлежащих инкапсуляции.
- Различные модули в нисходящем подходе не требуют большого общения. Напротив, подход снизу вверх требует взаимодействия между отдельными фундаментальными модулями, чтобы объединить их позже.
- Нисходящий подход может привести к избыточности, в то время как восходящий подход не включает избыточную информацию.
- Процедурные языки программирования, такие как Fortran, COBOL и C, следуют нисходящему подходу. Напротив, объектно-ориентированные языки программирования, такие как C ++, Java, C #, Perl, Python, придерживаются подхода «снизу вверх».
- Подход снизу вверх предварительно используется в тестировании. И наоборот, нисходящий подход используется в документации модуля, создании тестового примера, отладке и так далее.
Подход «сверху вниз» и «снизу вверх» — это методы разработки алгоритма, где «сверху вниз» — это традиционный подход, который разбивает систему от высокоуровневой спецификации к низкоуровневой спецификации. С другой стороны, подход «снизу вверх» более эффективен и работает наоборот, когда примитивные компоненты сначала разрабатываются, а затем переходят на более высокий уровень.
Нисходящий подход делает упор на изоляции подмодулей (означает низкую связь между модулями), игнорируя при этом идентификацию концепции связи и возможности повторного использования. В то время как в подходе «снизу вверх», скрытие информации и повторное использование являются важными факторами.
Источник: ru.gadget-info.com
Проектирование сверху вниз
Без сомнения, главнейшее условие успешного создания крупных программ заключается в применении надежных методов проектирования. Широкое распространение при написании программ получили следующие три метода: нисходящий (сверху вниз), восходящий (снизу вверх) и специальный (на данный конкретный случай). В случае нисходящего метода вы начинаете созидательный процесс с программы высокого уровня и спускаетесь до подпрограмм низкого уровня. Восходящий метод работает в обратном направлении: вы начинаете с отдельных специальных подпрограмм, постепенно строите на их основе более сложные конструкции и заканчиваете самым верхним уровнем программы. Специальный подход не имеет заранее установленного метода.
Поскольку С является структурированным языком программирования, то лучше всего он сочетается с нисходящим методом проектирования. Подход сверху вниз позволяет производить ясный, легко читаемый программный код, который в дальнейшем не вызовет трудностей и при сопровождении. К тому же данный подход помогает прояснить и сделать понятной всю структуру программы в целом до кодирования функций более низкого уровня. Такой подход позволяет уменьшить потери времени, обусловленные неудачными или ошибочными начинаниями.
Структурирование программы
- Ввести новый адрес
- Удалить новый адрес
- Печать списка
- Найти имя
- Сохранить список
- Загрузить список
- Завершить выполнение программы
После того как вы определили все функциональные возможности программы, можно в общих чертах описать подробные свойства каждого функционального модуля, начиная с основного цикла. Ниже приведен один из возможных вариантов такого представления, позволяющий реализовать основной цикл программы работы со списком рассылки:
main loop < do < вывести меню определить выбор пользователя выполнить выбранное действие >while выбор != quit >
Такая разновидность алгоритмического представления (иногда называемая псевдокодом ) может помочь внести ясность в общую структуру программы; ее необходимо выполнить до кодирования. С-подобный синтаксис был использован по той простой причине, что он вам уже знаком, но можно воспользоваться и любым другим подходящим синтаксисом.
Аналогичные определения необходимо дать каждому функциональному элементу. Например, вы можете описать функцию, которая осуществляет запись списка рассылки в файл на диске примерно следующим образом:
save to disk < open disk file while есть данные write < write данные на диск >close disk file >
На этом уровне абстракции функция «записать-на-диск» обращается к новым функциональным модулям более низкого уровня. Эти модули открывают файл на диске, записывают на него данные, а затем закрывают дисковый файл. В дальнейшем необходимо будет еще определить и каждый из этих модулей.
Если при их описании будут создаваться новые функциональные элементы, они также должны быть определены и т.д. Этот процесс закончится, когда при описании больше не будет создан ни один новый функциональный элемент. Тогда остается всего лишь сесть и написать реальный С-код, который реализует эти действия. Например, модуль, который закрывает дисковый файл, вероятно, будет транслирован в вызов функции fclose() .
Обратите внимание, что при подобном определении совсем ничего не упоминается о структуре данных и переменных. Это сделано умышленно, потому что до сих пор вы хотели определить только то, что должна делать ваша программа, но не то, каким образом она реально будет это осуществлять. Такой описательный процесс помогает выбрать эффективную структуру данных. (Естественно, структуру данных необходимо будет описать перед кодированием функциональных элементов.)
Выбор структуры данных
После определения общей структуры прикладной программы необходимо решить, какой будет структура данных. Выбор структуры данных и ее реализация имеют чрезвычайно важное значение, поскольку она помогает определить проектные ограничения вашей программы.
Список рассылки, как правило, содержит следующую информацию: имена, названия улиц, городов, штатов и почтовые индексы. При нисходящем подходе это немедленно предполагает применение определенной структуры для хранения этой информации. И тут же возникает вопрос: а как такие структуры будут храниться и обрабатываться?
Для программы, работающей со списком рассылки, можно было бы использовать массив структур фиксированного размера. Но массив фиксированного размера имеет один серьезный недостаток: размер массива жестко и безапелляционно ограничивает длину списка рассылки. Более удачное решение заключается в динамическом выделении памяти для каждого адреса. Тогда каждый адрес будет сохраняться в динамической структуре данных определенной формы (например, в связном списке), которая может при необходимости расти или уменьшаться. В таком случае список может быть огромным или очень маленьким в зависимости от конкретных обстоятельств.
Хотя на данном этапе мы отдали предпочтение динамическому распределению памяти, а не массиву фиксированного размера, все же точная модель представления данных все еще не определена. Существует несколько возможных вариантов. Можно использовать однонаправленный связный список, двунаправленный связный список, двоичное дерево и даже метод хэширования.
Каждый из этих методов имеет свои достоинства и недостатки. Ограничим круг обсуждения и предположим, что конкретно нашему приложению, обрабатывающему список рассылки, предъявляется требование достичь минимального времени поиска. Исходя из этого, мы выбираем двоичное дерево. Теперь можно определить структуру, которая содержит в списке каждое имя и адрес, как показано ниже:
struct addr < char name[30] ; char street[40]; char city[20]; char state[3]; char zip[ll]; struct addr *left; /* указатель на левое поддерево */ struct addr *right; /* указатель на правое поддерево */ >;
Теперь, после определения структуры данных, можно приступить к кодированию всей программы. Для этого надо всего лишь определить все подробности, описанные в общей структуре созданного ранее псевдокода. Если вы последуете нисходящему методу, программы будут не только легко читаться, но и потребуют меньше времени на разработку и сопровождение.
Источник: t-r-o-n.ru